001
002 /*
003 * $Id: QuotientTest.java 3365 2010-10-24 12:59:34Z kredel $
004 */
005
006 package edu.jas.poly;
007
008
009 import junit.framework.Test;
010 import junit.framework.TestCase;
011 import junit.framework.TestSuite;
012
013 import org.apache.log4j.BasicConfigurator;
014 //import org.apache.log4j.Logger;
015
016 //import edu.jas.arith.BigRational;
017 import edu.jas.arith.BigInteger;
018
019 //import edu.jas.structure.RingElem;
020
021
022
023 /**
024 * Quotient tests with JUnit.
025 * @author Heinz Kredel.
026 */
027
028 public class QuotientTest extends TestCase {
029
030 /**
031 * main.
032 */
033 public static void main (String[] args) {
034 BasicConfigurator.configure();
035 junit.textui.TestRunner.run( suite() );
036 }
037
038 /**
039 * Constructs a <CODE>QuotientTest</CODE> object.
040 * @param name String.
041 */
042 public QuotientTest(String name) {
043 super(name);
044 }
045
046 /**
047 * suite.
048 */
049 public static Test suite() {
050 TestSuite suite= new TestSuite(QuotientTest.class);
051 return suite;
052 }
053
054
055 QuotientRing<BigInteger> fac;
056 GenPolynomialRing<BigInteger> pfac;
057 QuotientRing< GenPolynomial<BigInteger> > mfac;
058
059 Quotient< BigInteger > a;
060 Quotient< BigInteger > b;
061 Quotient< BigInteger > c;
062 Quotient< BigInteger > d;
063 Quotient< BigInteger > e;
064
065 Quotient< GenPolynomial<BigInteger> > ap;
066 Quotient< GenPolynomial<BigInteger> > bp;
067 Quotient< GenPolynomial<BigInteger> > cp;
068 Quotient< GenPolynomial<BigInteger> > dp;
069 Quotient< GenPolynomial<BigInteger> > ep;
070
071 int rl = 2;
072 int kl = 17;
073 int ll = 3; //6;
074 int el = 2;
075 float q = 0.4f;
076
077 protected void setUp() {
078 a = b = c = d = e = null;
079 ap = bp = cp = dp = ep = null;
080 fac = new QuotientRing<BigInteger>( new BigInteger(1) );
081 pfac = new GenPolynomialRing<BigInteger>( new BigInteger(1), 1 );
082 mfac = new QuotientRing<GenPolynomial<BigInteger>>( pfac );
083 }
084
085 protected void tearDown() {
086 a = b = c = d = e = null;
087 ap = bp = cp = dp = ep = null;
088 fac = null;
089 pfac = null;
090 mfac = null;
091 }
092
093
094 /**
095 * Test constructor for integer.
096 *
097 */
098 public void testIntConstruction() {
099 c = fac.getONE();
100 //System.out.println("c = " + c);
101 assertTrue("isZERO( c )", !c.isZERO() );
102 assertTrue("isONE( c )", c.isONE() );
103
104 d = fac.getZERO();
105 //System.out.println("d = " + d);
106 assertTrue("isZERO( d )", d.isZERO() );
107 assertTrue("isONE( d )", !d.isONE() );
108 }
109
110
111 /**
112 * Test constructor for polynomial.
113 *
114 */
115 public void testPolyConstruction() {
116 cp = mfac.getONE();
117 assertTrue("isZERO( cp )", !cp.isZERO() );
118 assertTrue("isONE( cp )", cp.isONE() );
119
120 dp = mfac.getZERO();
121 assertTrue("isZERO( dp )", dp.isZERO() );
122 assertTrue("isONE( dp )", !dp.isONE() );
123 }
124
125
126 /**
127 * Test random integer.
128 *
129 */
130 public void testIntRandom() {
131 for (int i = 0; i < 7; i++) {
132 a = fac.random(kl*(i+1));
133 //a = fac.random(kl*(i+1), ll+2+2*i, el, q );
134 //System.out.println("a = " + a);
135 assertTrue(" not isZERO( a"+i+" )", !a.isZERO() );
136 assertTrue(" not isONE( a"+i+" )", !a.isONE() );
137 }
138 }
139
140
141 /**
142 * Test random polynomial.
143 *
144 */
145 public void testPolyRandom() {
146 for (int i = 0; i < 7; i++) {
147 ap = mfac.random(kl+i);
148 assertTrue(" not isZERO( ap"+i+" )", !ap.isZERO() );
149 assertTrue(" not isONE( ap"+i+" )", !ap.isONE() );
150 }
151 }
152
153
154 /**
155 * Test integer addition.
156 *
157 */
158 public void testIntAddition() {
159
160 a = fac.random(kl);
161 b = fac.random(kl);
162 //System.out.println("a = " + a);
163 //System.out.println("b = " + b);
164
165 c = a.sum(b);
166 d = c.subtract(b);
167 assertEquals("a+b-b = a",a,d);
168
169 c = a.sum(b);
170 d = b.sum(a);
171 //System.out.println("c = " + c);
172 //System.out.println("d = " + d);
173
174 assertEquals("a+b = b+a",c,d);
175
176 c = fac.random(kl);
177 d = c.sum( a.sum(b) );
178 e = c.sum( a ).sum(b);
179 assertEquals("c+(a+b) = (c+a)+b",d,e);
180
181
182 c = a.sum( fac.getZERO() );
183 d = a.subtract( fac.getZERO() );
184 assertEquals("a+0 = a-0",c,d);
185
186 c = fac.getZERO().sum( a );
187 d = fac.getZERO().subtract( a.negate() );
188 assertEquals("0+a = 0+(-a)",c,d);
189 }
190
191
192 /**
193 * Test polynomial addition.
194 *
195 */
196 public void testPolyAddition() {
197
198 ap = mfac.random(kl);
199 bp = mfac.random(kl);
200 //System.out.println("a = " + a);
201 //System.out.println("b = " + b);
202
203 cp = ap.sum(bp);
204 dp = cp.subtract(bp);
205 assertEquals("a+b-b = a",ap,dp);
206
207 cp = ap.sum(bp);
208 dp = bp.sum(ap);
209 //System.out.println("c = " + c);
210 //System.out.println("d = " + d);
211
212 assertEquals("a+b = b+a",cp,dp);
213
214 cp = mfac.random(kl);
215 dp = cp.sum( ap.sum(bp) );
216 ep = cp.sum( ap ).sum(bp);
217 assertEquals("c+(a+b) = (c+a)+b",dp,ep);
218
219
220 cp = ap.sum( mfac.getZERO() );
221 dp = ap.subtract( mfac.getZERO() );
222 assertEquals("a+0 = a-0",cp,dp);
223
224 cp = mfac.getZERO().sum( ap );
225 dp = mfac.getZERO().subtract( ap.negate() );
226 assertEquals("0+a = 0+(-a)",cp,dp);
227 }
228
229
230 /**
231 * Test integer multiplication.
232 *
233 */
234 public void testIntMultiplication() {
235
236 a = fac.random(kl);
237 assertTrue("not isZERO( a )", !a.isZERO() );
238
239 b = fac.random(kl);
240 assertTrue("not isZERO( b )", !b.isZERO() );
241
242 c = b.multiply(a);
243 d = a.multiply(b);
244 assertTrue("not isZERO( c )", !c.isZERO() );
245 assertTrue("not isZERO( d )", !d.isZERO() );
246
247 //System.out.println("a = " + a);
248 //System.out.println("b = " + b);
249 e = d.subtract(c);
250 assertTrue("isZERO( a*b-b*a ) " + e, e.isZERO() );
251
252 assertTrue("a*b = b*a", c.equals(d) );
253 assertEquals("a*b = b*a",c,d);
254
255 c = fac.random(kl);
256 //System.out.println("c = " + c);
257 d = a.multiply( b.multiply(c) );
258 e = (a.multiply(b)).multiply(c);
259
260 //System.out.println("d = " + d);
261 //System.out.println("e = " + e);
262
263 //System.out.println("d-e = " + d.subtract(c) );
264
265 assertEquals("a(bc) = (ab)c",d,e);
266 assertTrue("a(bc) = (ab)c", d.equals(e) );
267
268 c = a.multiply( fac.getONE() );
269 d = fac.getONE().multiply( a );
270 assertEquals("a*1 = 1*a",c,d);
271
272 if ( a.isUnit() ) {
273 c = a.inverse();
274 d = c.multiply(a);
275 //System.out.println("a = " + a);
276 //System.out.println("c = " + c);
277 //System.out.println("d = " + d);
278 assertTrue("a*1/a = 1",d.isONE());
279 }
280 }
281
282
283 /**
284 * Test polynomial multiplication.
285 *
286 */
287 public void testPolyMultiplication() {
288
289 ap = mfac.random(kl);
290 assertTrue("not isZERO( a )", !ap.isZERO() );
291
292 bp = mfac.random(kl);
293 assertTrue("not isZERO( b )", !bp.isZERO() );
294
295 cp = bp.multiply(ap);
296 dp = ap.multiply(bp);
297 assertTrue("not isZERO( c )", !cp.isZERO() );
298 assertTrue("not isZERO( d )", !dp.isZERO() );
299
300 //System.out.println("a = " + a);
301 //System.out.println("b = " + b);
302 ep = dp.subtract(cp);
303 assertTrue("isZERO( a*b-b*a ) " + ep, ep.isZERO() );
304
305 assertTrue("a*b = b*a", cp.equals(dp) );
306 assertEquals("a*b = b*a",cp,dp);
307
308 cp = mfac.random(kl);
309 //System.out.println("c = " + c);
310 dp = ap.multiply( bp.multiply(cp) );
311 ep = (ap.multiply(bp)).multiply(cp);
312
313 //System.out.println("d = " + d);
314 //System.out.println("e = " + e);
315
316 //System.out.println("d-e = " + d.subtract(c) );
317
318 assertEquals("a(bc) = (ab)c",dp,ep);
319 assertTrue("a(bc) = (ab)c", dp.equals(ep) );
320
321 cp = ap.multiply( mfac.getONE() );
322 dp = mfac.getONE().multiply( ap );
323 assertEquals("a*1 = 1*a",cp,dp);
324
325 if ( ap.isUnit() ) {
326 cp = ap.inverse();
327 dp = cp.multiply(ap);
328 //System.out.println("a = " + a);
329 //System.out.println("c = " + c);
330 //System.out.println("d = " + d);
331 assertTrue("a*1/a = 1",dp.isONE());
332 }
333 }
334
335 }