001/*
002 * $Id: QuatGenPolynomialTest.java 3789 2011-10-01 18:54:43Z kredel $
003 */
004
005package edu.jas.poly;
006
007import junit.framework.Test;
008import junit.framework.TestCase;
009import junit.framework.TestSuite;
010import edu.jas.arith.BigQuaternion;
011
012
013/**
014 * BigQuaternion coefficients GenPolynomial tests with JUnit.
015 * @author Heinz Kredel.
016 */
017
018public class QuatGenPolynomialTest 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>QuatGenPolynomialTest</CODE> object.
029 * @param name String.
030 */
031   public QuatGenPolynomialTest(String name) {
032          super(name);
033   }
034
035/**
036 */ 
037 public static Test suite() {
038     TestSuite suite= new TestSuite(QuatGenPolynomialTest.class);
039     return suite;
040   }
041
042   //private final static int bitlen = 100;
043
044   GenPolynomialRing<BigQuaternion> fac;
045
046   GenPolynomial<BigQuaternion> a;
047   GenPolynomial<BigQuaternion> b;
048   GenPolynomial<BigQuaternion> c;
049   GenPolynomial<BigQuaternion> d;
050   GenPolynomial<BigQuaternion> e;
051
052   int rl = 7; 
053   int kl = 10;
054   int ll = 10;
055   int el = 5;
056   float q = 0.5f;
057
058   protected void setUp() {
059       a = b = c = d = e = null;
060       fac = new GenPolynomialRing<BigQuaternion>(new BigQuaternion(1),rl);
061   }
062
063   protected void tearDown() {
064       a = b = c = d = e = null;
065       fac = null;
066   }
067
068
069/**
070 * Test constructor and toString.
071 * 
072 */
073 public void testConstruction() {
074     c = fac.getONE();
075     assertTrue("length( c ) = 1", c.length() == 1);
076     assertTrue("isZERO( c )", !c.isZERO() );
077     assertTrue("isONE( c )", c.isONE() );
078
079     d = fac.getZERO();
080     assertTrue("length( d ) = 0", d.length() == 0);
081     assertTrue("isZERO( d )", d.isZERO() );
082     assertTrue("isONE( d )", !d.isONE() );
083 }
084
085
086/**
087 * Test random polynomial.
088 * 
089 */
090 public void testRandom() {
091     for (int i = 0; i < 7; i++) {
092         a = fac.random(ll);
093             // fac.random(rl+i, kl*(i+1), ll+2*i, el+i, q );
094         assertTrue("length( a"+i+" ) <> 0", a.length() >= 0);
095         assertTrue(" not isZERO( a"+i+" )", !a.isZERO() );
096         assertTrue(" not isONE( a"+i+" )", !a.isONE() );
097     }
098 }
099
100
101/**
102 * Test addition.
103 * 
104 */
105 public void testAddition() {
106
107     a = fac.random(ll);
108     b = fac.random(ll);
109
110     c = a.sum(b);
111     d = c.subtract(b);
112     assertEquals("a+b-b = a",a,d);
113
114     c = fac.random(ll);
115
116     ExpVector u = ExpVector.EVRAND(rl,el,q);
117     BigQuaternion x = BigQuaternion.QRAND(kl);
118
119     b = new GenPolynomial<BigQuaternion>(fac,x, u);
120     c = a.sum(b);
121     d = a.sum(x,u);
122     assertEquals("a+p(x,u) = a+(x,u)",c,d);
123
124     c = a.subtract(b);
125     d = a.subtract(x,u);
126     assertEquals("a-p(x,u) = a-(x,u)",c,d);
127
128     a = new GenPolynomial<BigQuaternion>(fac);
129     b = new GenPolynomial<BigQuaternion>(fac,x, u);
130     c = b.sum(a);
131     d = a.sum(x,u);
132     assertEquals("a+p(x,u) = a+(x,u)",c,d);
133
134     c = a.subtract(b);
135     d = a.subtract(x,u);
136     assertEquals("a-p(x,u) = a-(x,u)",c,d);
137 }
138
139
140/**
141 * Test object multiplication.
142 * 
143 */
144
145 public void testMultiplication() {
146
147     a = fac.random(ll);
148     assertTrue("not isZERO( a )", !a.isZERO() );
149
150     b = fac.random(ll);
151     assertTrue("not isZERO( b )", !b.isZERO() );
152
153     c = b.multiply(a);
154     d = a.multiply(b);
155     assertTrue("not isZERO( c )", !c.isZERO() );
156     assertTrue("not isZERO( d )", !d.isZERO() );
157
158     //System.out.println("a = " + a);
159     //System.out.println("b = " + b);
160     e = d.subtract(c);
161     assertTrue("!isZERO( a*b-b*a ) " + e, !e.isZERO() );
162
163     assertTrue("a*b = b*a", !c.equals(d) );
164     //assertEquals("a*b = b*a",c,d);
165
166     c = fac.random(ll);
167     //System.out.println("c = " + c);
168     d = a.multiply( b.multiply(c) );
169     e = (a.multiply(b)).multiply(c);
170
171     //System.out.println("d = " + d);
172     //System.out.println("e = " + e);
173
174     //System.out.println("d-e = " + d.subtract(c) );
175
176     assertEquals("a(bc) = (ab)c",d,e);
177     assertTrue("a(bc) = (ab)c", d.equals(e) );
178
179     BigQuaternion x = a.leadingBaseCoefficient().inverse();
180     c = a.monic();
181     d = a.multiply(x);
182     assertEquals("a.monic() = a(1/ldcf(a))",c,d);
183
184     BigQuaternion y = b.leadingBaseCoefficient().inverse();
185     c = b.monic();
186     d = b.multiply(y);
187     assertEquals("b.monic() = b(1/ldcf(b))",c,d);
188
189     e = new GenPolynomial<BigQuaternion>(fac,y);
190     d = b.multiply(e);
191     assertEquals("b.monic() = b(1/ldcf(b))",c,d);
192
193     //d = e.multiply(b);
194     //assertEquals("b.monic() = (1/ldcf(b) (0))*b",c,d);
195 }
196
197}