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 }