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 }