001 /*
002 * $Id: BigQuaternionTest.java 1244 2007-07-29 09:54:27Z kredel $
003 */
004
005 package edu.jas.arith;
006
007 //import edu.jas.arith.BigRational;
008
009 import junit.framework.Test;
010 import junit.framework.TestCase;
011 import junit.framework.TestSuite;
012
013 /**
014 * BigQuaternion tests with JUnit.
015 * @author Heinz Kredel.
016 */
017
018 public class BigQuaternionTest extends TestCase {
019
020 /**
021 * main.
022 */
023 public static void main (String[] args) {
024 junit.textui.TestRunner.run( suite() );
025 }
026
027 /**
028 * Constructs a <CODE>BigQuaternionTest</CODE> object.
029 * @param name String.
030 */
031 public BigQuaternionTest(String name) {
032 super(name);
033 }
034
035 /**
036 */
037 /**
038 * @return suite.
039 */
040 public static Test suite() {
041 TestSuite suite= new TestSuite(BigQuaternionTest.class);
042 return suite;
043 }
044
045 BigQuaternion a;
046 BigQuaternion b;
047 BigQuaternion c;
048 BigQuaternion d;
049 BigQuaternion e;
050 BigQuaternion fac;
051
052 protected void setUp() {
053 a = b = c = d = e = null;
054 fac = new BigQuaternion();
055 }
056
057 protected void tearDown() {
058 a = b = c = d = e = null;
059 fac = null;
060 }
061
062
063 /**
064 * Test static initialization and constants.
065 *
066 */
067 public void testConstants() {
068 a = BigQuaternion.ZERO;
069 b = BigQuaternion.ONE;
070 c = b.subtract(b);
071 assertEquals("1-1 = 0",c,a);
072 assertTrue("1-1 = 0",c.isZERO());
073 assertTrue("1 = 1", b.isONE() );
074
075 a = BigQuaternion.ZERO;
076 b = BigQuaternion.ONE;
077 c = b.subtract(b);
078 assertEquals("1-1 = 0",c,a);
079 }
080
081
082 /**
083 * Test constructor and toString.
084 *
085 */
086 public void testConstructor() {
087 a = new BigQuaternion( "6/8" );
088 b = new BigQuaternion( "3/4" );
089
090 assertEquals("6/8 = 3/4",a,b);
091
092 a = new BigQuaternion( "3/4 i 4/5 j 1/5 k 2/5" );
093 b = new BigQuaternion( "-3/4 i -4/5 j -1/5 k -2/5" );
094 assertEquals("3/4 + i 4/5 + j 1/5 + k 2/5",a,b.negate());
095
096 String s = "6/1111111111111111111111111111111111111111111";
097 a = new BigQuaternion( s );
098 String t = a.toString();
099
100 assertEquals("stringConstr = toString",s,t);
101
102 a = new BigQuaternion( 1 );
103 b = new BigQuaternion( -1 );
104 c = b.sum(a);
105
106 assertTrue("1 = 1", a.isONE() );
107 assertEquals("1+(-1) = 0",c,BigQuaternion.ZERO);
108 }
109
110
111 /**
112 * Test random rationals.
113 *
114 */
115 public void testRandom() {
116 a = fac.random( 500 );
117 b = new BigQuaternion( a.getRe(), a.getIm(), a.getJm(), a.getKm() );
118 c = b.subtract(a);
119
120 assertEquals("a-b = 0",BigQuaternion.ZERO,c);
121
122 d = new BigQuaternion( b.getRe(), b.getIm(), b.getJm(), b.getKm() );
123 assertEquals("sign(a-a) = 0", 0, b.compareTo(d) );
124 }
125
126
127 /**
128 * Test addition.
129 *
130 */
131 public void testAddition() {
132 a = fac.random( 100 );
133 b = a.sum( a );
134 c = b.subtract( a );
135 assertEquals("a+a-a = a",c,a);
136 assertEquals("a+a-a = a",0,c.compareTo(a));
137
138 d = a.sum( BigQuaternion.ZERO );
139 assertEquals("a+0 = a",d,a);
140 d = a.subtract( BigQuaternion.ZERO );
141 assertEquals("a-0 = a",d,a);
142 d = a.subtract( a );
143 assertEquals("a-a = 0",d,BigQuaternion.ZERO);
144
145 }
146
147
148 /**
149 * Test multiplication.
150 *
151 */
152 public void testMultiplication() {
153 a = fac.random( 100 );
154 b = a.multiply( a );
155 c = b.divide( a );
156 assertEquals("a*a/a = a",c,a);
157 assertEquals("a*a/a = a",0,c.compareTo(a));
158
159 d = a.multiply( BigQuaternion.ONE );
160 assertEquals("a*1 = a",d,a);
161 d = a.divide( BigQuaternion.ONE );
162 assertEquals("a/1 = a",d,a);
163
164 a = fac.random( 100 );
165 b = a.inverse();
166 c = a.multiply( b );
167 assertTrue("a*1/a = 1", c.isONE() );
168
169 b = a.abs();
170 c = b.inverse();
171 d = b.multiply( c );
172 assertTrue("abs(a)*1/abs(a) = 1", d.isONE() );
173
174 b = a.abs();
175 c = a.conjugate();
176 d = a.multiply( c );
177 assertEquals("abs(a)^2 = a a^", b, d );
178 }
179
180
181 /**
182 * Test multiplication axioms.
183 *
184 */
185 public void testMultiplicationAxioms() {
186 a = fac.random( 100 );
187 b = fac.random( 100 );
188
189 c = a.multiply( b );
190 d = b.multiply( a );
191 assertTrue("a*b != b*a",!c.equals(d));
192
193 c = fac.random( 100 );
194
195 d = a.multiply( b.multiply( c ) );
196 e = a.multiply( b ).multiply( c );
197 assertTrue("a(bc) = (ab)c",e.equals(d));
198 }
199
200
201 /**
202 * Test distributive law.
203 *
204 */
205 public void testDistributive() {
206 a = fac.random( 20 );
207 b = fac.random( 20 );
208 c = fac.random( 20 );
209
210 d = a.multiply( b.sum(c) );
211 e = a.multiply( b ).sum( a.multiply(c) );
212
213 assertEquals("a(b+c) = ab+ac",d,e);
214 }
215
216
217 }