001 /*
002 * $Id: QuatGenPolynomialTest.java 1888 2008-07-12 13:37:34Z kredel $
003 */
004
005 package edu.jas.poly;
006
007 import junit.framework.Test;
008 import junit.framework.TestCase;
009 import junit.framework.TestSuite;
010 import edu.jas.arith.BigQuaternion;
011
012
013 /**
014 * BigQuaternion coefficients GenPolynomial tests with JUnit.
015 * @author Heinz Kredel.
016 */
017
018 public 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 }