001/*
002 * $Id: BigQuaternionTest.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 * BigQuaternion tests with JUnit. 
015 * @author Heinz Kredel.
016 */
017
018public 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 */
040public 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}