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    }