001/*
002 * $Id: BigOctonionTest.java 3789 2011-10-01 18:54:43Z kredel $
003 */
004
005package edu.jas.arith;
006
007//import edu.jas.arith.BigRational;
008
009import junit.framework.Test;
010import junit.framework.TestCase;
011import junit.framework.TestSuite;
012
013/**
014 * BigOctonion tests with JUnit. 
015 * @author Heinz Kredel.
016 */
017
018public 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 */
040public 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}