001    /*
002     * $Id: BigOctonionTest.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     * BigOctonion tests with JUnit. 
015     * @author Heinz Kredel.
016     */
017    
018    public class BigOctonionTest 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>BigOctonionTest</CODE> object.
029     * @param name String.
030     */
031       public BigOctonionTest(String name) {
032              super(name);
033       }
034    
035    /**
036     */ 
037     /**
038     * @return suite.
039     */
040    public static Test suite() {
041         TestSuite suite= new TestSuite(BigOctonionTest.class);
042         return suite;
043       }
044    
045       BigOctonion a;
046       BigOctonion b;
047       BigOctonion c;
048       BigOctonion d;
049       BigOctonion e;
050       BigOctonion fac;
051    
052       protected void setUp() {
053           a = b = c = d = e = null;
054           fac = new BigOctonion();
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 = BigOctonion.ZERO;
069         b = BigOctonion.ONE;
070         c = b.subtract(b);
071    
072         assertEquals("1-1 = 0",c,a);
073         assertTrue("1-1 = 0",c.isZERO());
074         assertTrue("1 = 1", b.isONE() );
075    
076         a = BigOctonion.ZERO;
077         b = BigOctonion.ONE;
078         c = b.subtract(b);
079         assertEquals("1-1 = 0",c,a);
080       }
081    
082    
083    /**
084     * Test constructor and toString.
085     * 
086     */
087     public void testConstructor() {
088         a = new BigOctonion( "6/8" );
089         b = new BigOctonion( "3/4" );
090         assertEquals("6/8 = 3/4",a,b);
091    
092         a = new BigOctonion( "3/4 i 4/5 j 1/5 k 2/5" );
093         b = new BigOctonion( "-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 BigOctonion( s );
098         String t = a.toString();
099         assertEquals("stringConstr = toString",s,t);
100    
101         String sr = "3/4 i 4/5 j 1/5 k 2/5";
102         String si = "-3/4 i -4/5 j -1/5 k -2/5";
103         s = sr + " o " + si;
104         a = new BigOctonion( s );
105         BigQuaternion qr = new BigQuaternion( sr );
106         BigQuaternion qi = new BigQuaternion( si );
107         b = new BigOctonion( qr, qi );
108         assertEquals("s = "+s,a,b);
109    
110         a = new BigOctonion( 1 );
111         b = new BigOctonion( -1 );
112         c = b.sum(a);
113         assertTrue("1 = 1", a.isONE() );
114         assertEquals("1+(-1) = 0",c,BigOctonion.ZERO);
115       }
116    
117    
118    /**
119     * Test random rationals.
120     * 
121     */
122     public void testRandom() {
123         a = fac.random( 100 );
124    
125         b = new BigOctonion( a.getR(), a.getI() );
126         c = b.subtract(a);
127         assertEquals("a-b = 0",BigOctonion.ZERO,c);
128    
129         d = new BigOctonion( b.getR(), b.getI() );
130         assertEquals("sign(a-a) = 0", 0, b.compareTo(d) );
131     }
132    
133    
134    /**
135     * Test addition.
136     * 
137     */
138     public void testAddition() {
139         a = fac.random( 50 );
140         b = a.sum( a );
141         c = b.subtract( a );
142    
143         assertEquals("a+a-a = a",c,a);
144         assertEquals("a+a-a = a",0,c.compareTo(a));
145    
146         d = a.sum( BigOctonion.ZERO );
147         assertEquals("a+0 = a",d,a);
148         d = a.subtract( BigOctonion.ZERO );
149         assertEquals("a-0 = a",d,a);
150         d = a.subtract( a );
151         assertEquals("a-a = 0",d,BigOctonion.ZERO);
152     }
153    
154    
155    /**
156     * Test multiplication.
157     * 
158     */
159     public void testMultiplication() {
160         a = fac.random( 30 );
161         //System.out.println("a = " + a);
162    
163         b = a.multiply( a );
164         c = b.divide( a );
165         assertEquals("a*a/a = a",c,a);
166         assertEquals("a*a/a = a",0,c.compareTo(a));
167    
168         d = a.multiply( BigOctonion.ONE );
169         assertEquals("a*1 = a",d,a);
170         d = a.divide( BigOctonion.ONE );
171         assertEquals("a/1 = a",d,a);
172    
173         a = fac.random( 30 );
174         b = a.inverse();
175         c = a.multiply( b );
176         assertTrue("a*1/a = 1", c.isONE() );
177    
178         b = a.abs();
179         c = b.inverse();
180         d = b.multiply( c );
181         assertTrue("abs(a)*1/abs(a) = 1", d.isONE() );
182    
183         a = fac.random( 3 );
184         b = a.abs();
185         c = a.conjugate();
186         d = a.multiply( c );
187         assertEquals("abs(a)^2 = a a^", b, d );
188     }
189    
190    
191    /**
192     * Test multiplication axioms.
193     * 
194     */
195     public void testMultiplicationAxioms() {
196         a = fac.random( 20 );
197         b = fac.random( 20 );
198    
199         c = a.multiply( b );
200         d = b.multiply( a );
201    
202         assertTrue("a*b != b*a",!c.equals(d));
203    
204         c = fac.random( 20 );
205    
206         d = a.multiply( b.multiply( c ) );
207         e = a.multiply( b ).multiply( c );
208         assertTrue("a(bc) != (ab)c",!e.equals(d));
209     }
210    
211    
212    /**
213     * Test distributive law.
214     * 
215     */
216     public void testDistributive() {
217         a = fac.random( 20 );
218         b = fac.random( 20 );
219         c = fac.random( 20 );
220    
221         d = a.multiply( b.sum(c) );
222         e = a.multiply( b ).sum( a.multiply(c) );
223    
224         assertEquals("a(b+c) = ab+ac",d,e);
225     }
226    
227    }