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 }