001 /*
002 * $Id: MultiplicativeSetTest.java 3456 2010-12-27 22:21:57Z kredel $
003 */
004
005 package edu.jas.gbufd;
006
007
008 import java.util.List;
009
010 import junit.framework.Test;
011 import junit.framework.TestCase;
012 import junit.framework.TestSuite;
013
014 import org.apache.log4j.BasicConfigurator;
015
016 import edu.jas.arith.BigRational;
017 import edu.jas.kern.ComputerThreads;
018 import edu.jas.poly.GenPolynomial;
019 import edu.jas.poly.GenPolynomialRing;
020 import edu.jas.poly.PolynomialList;
021 import edu.jas.poly.TermOrder;
022
023
024 /**
025 * MultiplicativeSet tests with JUnit.
026 * @author Heinz Kredel.
027 */
028 public class MultiplicativeSetTest extends TestCase {
029
030
031 //private static final Logger logger = Logger.getLogger(MultiplicativeSetTest.class);
032
033 /**
034 * main
035 */
036 public static void main(String[] args) {
037 BasicConfigurator.configure();
038 junit.textui.TestRunner.run(suite());
039 }
040
041
042 /**
043 * Constructs a <CODE>MultiplicativeSetTest</CODE> object.
044 * @param name String.
045 */
046 public MultiplicativeSetTest(String name) {
047 super(name);
048 }
049
050
051 /**
052 * suite.
053 */
054 public static Test suite() {
055 TestSuite suite = new TestSuite(MultiplicativeSetTest.class);
056 return suite;
057 }
058
059
060 TermOrder to;
061
062
063 GenPolynomialRing<BigRational> fac;
064
065
066 List<GenPolynomial<BigRational>> L;
067
068
069 PolynomialList<BigRational> F;
070
071
072 List<GenPolynomial<BigRational>> G;
073
074
075 List<? extends GenPolynomial<BigRational>> M;
076
077
078 GenPolynomial<BigRational> a;
079
080
081 GenPolynomial<BigRational> b;
082
083
084 GenPolynomial<BigRational> c;
085
086
087 GenPolynomial<BigRational> d;
088
089
090 GenPolynomial<BigRational> e;
091
092
093 int rl = 3; //4; //3;
094
095
096 int kl = 4; //10
097
098
099 int ll = 5; //7
100
101
102 int el = 3;
103
104
105 float q = 0.2f; //0.4f
106
107
108 @Override
109 protected void setUp() {
110 BigRational coeff = new BigRational(17, 1);
111 to = new TermOrder( /*TermOrder.INVLEX*/);
112 fac = new GenPolynomialRing<BigRational>(coeff, rl, to);
113 a = b = c = d = e = null;
114 }
115
116
117 @Override
118 protected void tearDown() {
119 a = b = c = d = e = null;
120 fac = null;
121 ComputerThreads.terminate();
122 }
123
124
125 /**
126 * Test multiplicative set contained.
127 *
128 */
129 public void testContaines() {
130
131 a = fac.random(kl, ll, el, q);
132 b = fac.random(kl, ll, el, q);
133 c = fac.random(kl, ll, el, q);
134 d = fac.random(kl, ll, el, q);
135 e = d; //fac.random(kl, ll, el, q );
136
137 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) {
138 return;
139 }
140
141 MultiplicativeSet<BigRational> ms = new MultiplicativeSet<BigRational>(fac);
142 //System.out.println("ms = " + ms);
143 //System.out.println("a = " + a);
144 //System.out.println("b = " + b);
145 //System.out.println("c = " + c);
146
147 assertTrue("isEmpty ", ms.isEmpty());
148
149 if (!a.isConstant()) {
150 assertFalse("not contained ", ms.contains(a));
151 }
152
153 MultiplicativeSet<BigRational> ms2 = ms.add(a);
154 //System.out.println("ms2 = " + ms2);
155
156 if (!a.isConstant()) {
157 assertFalse("not isEmpty ", ms2.isEmpty());
158 assertTrue("contained ", ms2.contains(a));
159 }
160
161 if (!a.equals(b) && !b.isConstant()) {
162 assertFalse("not contained ", ms2.contains(b));
163 }
164
165 MultiplicativeSet<BigRational> ms3 = ms2.add(b);
166 //System.out.println("ms3 = " + ms3);
167
168 if (!b.isConstant()) {
169 assertFalse("not isEmpty ", ms3.isEmpty());
170 }
171 assertTrue("contained ", ms3.contains(a));
172 assertTrue("contained ", ms3.contains(b));
173
174 if (!a.equals(c) && !b.equals(c) && !c.isConstant()) {
175 assertFalse("not contained ", ms3.contains(c));
176 }
177
178 e = a.multiply(b);
179 //System.out.println("e = " + e);
180 if (!e.isConstant()) {
181 assertTrue("contained ", ms3.contains(e));
182 }
183
184 MultiplicativeSet<BigRational> ms4 = ms3.add(e);
185 //System.out.println("ms4 = " + ms4);
186
187 assertTrue("m3 == m4 ", ms3.equals(ms4));
188
189 }
190
191
192 /**
193 * Test multiplicative set removeFactors.
194 *
195 */
196 public void testRemoveFactors() {
197
198 a = fac.random(kl, ll, el, q);
199 b = fac.random(kl, ll, el, q);
200 c = fac.random(kl, ll, el, q);
201 d = fac.random(kl, ll, el, q);
202 e = d; //fac.random(kl, ll, el, q );
203
204 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) {
205 return;
206 }
207
208 MultiplicativeSet<BigRational> ms = new MultiplicativeSet<BigRational>(fac);
209 //System.out.println("ms = " + ms);
210 //System.out.println("a = " + a);
211 //System.out.println("b = " + b);
212 //System.out.println("c = " + c);
213
214 assertTrue("isEmpty ", ms.isEmpty());
215
216 e = ms.removeFactors(a);
217 //System.out.println("e = " + e);
218 assertEquals("a == remove(a) ", a, e);
219
220 MultiplicativeSet<BigRational> ms2 = ms.add(a);
221 //System.out.println("ms2 = " + ms2);
222
223 if (!a.isConstant()) {
224 assertFalse("not isEmpty ", ms2.isEmpty());
225 assertTrue("contained ", ms2.contains(a));
226
227 e = ms2.removeFactors(a);
228 //System.out.println("e = " + e);
229 assertTrue("1 == remove(a) ", e.isConstant());
230
231 if (!b.isConstant()) {
232 e = ms2.removeFactors(b);
233 //System.out.println("e = " + e);
234 assertEquals("b == remove(b) ", e, b);
235 }
236 }
237
238 d = a.multiply(b);
239 MultiplicativeSet<BigRational> ms3 = ms2.add(d);
240 //System.out.println("ms3 = " + ms3);
241
242 if (!d.isConstant()) {
243 assertFalse("not isEmpty ", ms3.isEmpty());
244
245 e = ms3.removeFactors(a);
246 //System.out.println("e = " + e);
247 assertTrue("1 == remove(a) ", e.isConstant());
248
249 e = ms3.removeFactors(b);
250 //System.out.println("e = " + e);
251 assertTrue("1 == remove(b) ", e.isConstant());
252
253 e = ms3.removeFactors(d);
254 //System.out.println("e = " + e);
255 assertTrue("1 == remove(a*b) ", e.isConstant());
256
257 if (!c.isConstant()) {
258 e = ms3.removeFactors(c);
259 //System.out.println("e = " + e);
260 assertEquals("c == remove(c) ", e, c);
261 }
262 }
263 }
264
265
266 /**
267 * Test co-prime multiplicative set contained.
268 *
269 */
270 public void testCoPrimeContaines() {
271
272 a = fac.random(kl, ll, el, q);
273 b = fac.random(kl, ll, el, q);
274 c = fac.random(kl, ll, el, q);
275 d = fac.random(kl, ll, el, q);
276 e = d; //fac.random(kl, ll, el, q );
277
278 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) {
279 return;
280 }
281
282 MultiplicativeSet<BigRational> ms = new MultiplicativeSetCoPrime<BigRational>(fac);
283 //System.out.println("ms = " + ms);
284 //System.out.println("a = " + a);
285 //System.out.println("b = " + b);
286 //System.out.println("c = " + c);
287
288 assertTrue("isEmpty ", ms.isEmpty());
289
290 if (!a.isConstant()) {
291 assertFalse("not contained ", ms.contains(a));
292 }
293
294 MultiplicativeSet<BigRational> ms2 = ms.add(a);
295 //System.out.println("ms2 = " + ms2);
296
297 if (!a.isConstant()) {
298 assertFalse("not isEmpty ", ms2.isEmpty());
299 assertTrue("contained ", ms2.contains(a));
300 }
301
302 if (!a.equals(b) && !b.isConstant()) {
303 assertFalse("not contained " + ms2, ms2.contains(b));
304 }
305
306 MultiplicativeSet<BigRational> ms3 = ms2.add(b);
307 //System.out.println("ms3 = " + ms3);
308
309 if (!b.isConstant()) {
310 assertFalse("not isEmpty ", ms3.isEmpty());
311 }
312 assertTrue("contained ", ms3.contains(a));
313 assertTrue("contained ", ms3.contains(b));
314
315 if (!a.equals(c) && !b.equals(c) && !c.isConstant()) {
316 assertFalse("not contained " + ms3, ms3.contains(c));
317 }
318
319 e = a.multiply(b);
320 //System.out.println("e = " + e);
321 if (!e.isConstant()) {
322 assertTrue("contained ", ms3.contains(e));
323 }
324
325 MultiplicativeSet<BigRational> ms4 = ms3.add(e);
326 //System.out.println("ms4 = " + ms4);
327
328 assertTrue("m3 == m4 ", ms3.equals(ms4));
329 }
330
331
332 /**
333 * Test co-prime multiplicative set removeFactors.
334 *
335 */
336 public void testCoPrimeRemoveFactors() {
337
338 a = fac.random(kl, ll, el, q);
339 b = fac.random(kl, ll, el, q);
340 c = fac.random(kl, ll, el, q);
341 d = fac.random(kl, ll, el, q);
342 e = d; //fac.random(kl, ll, el, q );
343
344 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) {
345 return;
346 }
347
348 MultiplicativeSet<BigRational> ms = new MultiplicativeSetCoPrime<BigRational>(fac);
349 //System.out.println("ms = " + ms);
350 //System.out.println("a = " + a);
351 //System.out.println("b = " + b);
352 //System.out.println("c = " + c);
353
354 assertTrue("isEmpty ", ms.isEmpty());
355
356 e = ms.removeFactors(a);
357 //System.out.println("e = " + e);
358 assertEquals("a == remove(a) ", a, e);
359
360 MultiplicativeSet<BigRational> ms2 = ms.add(a);
361 //System.out.println("ms2 = " + ms2);
362
363 if (!a.isConstant()) {
364 assertFalse("not isEmpty ", ms2.isEmpty());
365 assertTrue("contained ", ms2.contains(a));
366
367 e = ms2.removeFactors(a);
368 //System.out.println("e = " + e);
369 assertTrue("1 == remove(a) ", e.isConstant());
370
371 if (!b.isConstant()) {
372 e = ms2.removeFactors(b);
373 //System.out.println("e = " + e);
374 assertEquals("b == remove(b) ", e, b);
375 }
376 }
377
378 d = a.multiply(b);
379 MultiplicativeSet<BigRational> ms3 = ms2.add(d);
380 //System.out.println("ms3 = " + ms3);
381
382 if (!d.isConstant()) {
383 assertFalse("not isEmpty ", ms3.isEmpty());
384
385 e = ms3.removeFactors(a);
386 //System.out.println("e = " + e);
387 assertTrue("1 == remove(a) ", e.isConstant());
388
389 e = ms3.removeFactors(b);
390 //System.out.println("e = " + e);
391 assertTrue("1 == remove(b) ", e.isConstant());
392
393 e = ms3.removeFactors(d);
394 //System.out.println("e = " + e);
395 assertTrue("1 == remove(a*b) ", e.isConstant());
396
397 if (!c.isConstant()) {
398 e = ms3.removeFactors(c);
399 //System.out.println("e = " + e);
400 assertEquals("c == remove(c) ", e, c);
401 }
402 }
403 }
404
405
406 /**
407 * Test squarefree multiplicative set contained.
408 *
409 */
410 public void testSquarefreeContaines() {
411
412 a = fac.random(kl, ll, el, q);
413 b = fac.random(kl, ll, el, q);
414 c = fac.random(kl, ll, el, q);
415 d = fac.random(kl, ll, el, q);
416 e = d; //fac.random(kl, ll, el, q );
417
418 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) {
419 return;
420 }
421
422 MultiplicativeSet<BigRational> ms = new MultiplicativeSetSquarefree<BigRational>(fac);
423 //System.out.println("ms = " + ms);
424 //System.out.println("a = " + a);
425 //System.out.println("b = " + b);
426 //System.out.println("c = " + c);
427
428 assertTrue("isEmpty ", ms.isEmpty());
429
430 if (!a.isConstant()) {
431 assertFalse("not contained ", ms.contains(a));
432 }
433
434 MultiplicativeSet<BigRational> ms2 = ms.add(a);
435 //System.out.println("ms2 = " + ms2);
436
437 if (!a.isConstant()) {
438 assertFalse("not isEmpty ", ms2.isEmpty());
439 assertTrue("contained ", ms2.contains(a));
440 }
441
442 if (!a.equals(b) && !b.isConstant()) {
443 assertFalse("not contained " + ms2, ms2.contains(b));
444 }
445
446 MultiplicativeSet<BigRational> ms3 = ms2.add(b);
447 //System.out.println("ms3 = " + ms3);
448
449 if (!b.isConstant()) {
450 assertFalse("not isEmpty ", ms3.isEmpty());
451 }
452 assertTrue("contained ", ms3.contains(a));
453 assertTrue("contained ", ms3.contains(b));
454
455 if (!a.equals(c) && !b.equals(c) && !c.isConstant()) {
456 assertFalse("not contained " + ms3, ms3.contains(c));
457 }
458
459 e = a.multiply(b);
460 //System.out.println("e = " + e);
461 if (!e.isConstant()) {
462 assertTrue("contained ", ms3.contains(e));
463 }
464
465 MultiplicativeSet<BigRational> ms4 = ms3.add(e);
466 //System.out.println("ms4 = " + ms4);
467
468 assertTrue("m3 == m4 ", ms3.equals(ms4));
469 }
470
471
472 /**
473 * Test squarefree multiplicative set removeFactors.
474 *
475 */
476 public void testSquarefreeRemoveFactors() {
477
478 a = fac.random(kl, ll, el, q);
479 b = fac.random(kl, ll, el, q);
480 c = fac.random(kl, ll, el, q);
481 d = fac.random(kl, ll, el, q);
482 e = d; //fac.random(kl, ll, el, q );
483
484 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) {
485 return;
486 }
487
488 MultiplicativeSet<BigRational> ms = new MultiplicativeSetSquarefree<BigRational>(fac);
489 //System.out.println("ms = " + ms);
490 //System.out.println("a = " + a);
491 //System.out.println("b = " + b);
492 //System.out.println("c = " + c);
493
494 assertTrue("isEmpty ", ms.isEmpty());
495
496 e = ms.removeFactors(a);
497 //System.out.println("e = " + e);
498 assertEquals("a == remove(a) ", a, e);
499
500 MultiplicativeSet<BigRational> ms2 = ms.add(a);
501 //System.out.println("ms2 = " + ms2);
502
503 if (!a.isConstant()) {
504 assertFalse("not isEmpty ", ms2.isEmpty());
505 assertTrue("contained ", ms2.contains(a));
506
507 e = ms2.removeFactors(a);
508 //System.out.println("e = " + e);
509 assertTrue("1 == remove(a) ", e.isConstant());
510
511 if (!b.isConstant()) {
512 e = ms2.removeFactors(b);
513 //System.out.println("e = " + e);
514 assertEquals("b == remove(b) ", e, b);
515 }
516 }
517
518 d = a.multiply(b);
519 MultiplicativeSet<BigRational> ms3 = ms2.add(d);
520 //System.out.println("ms3 = " + ms3);
521
522 if (!d.isConstant()) {
523 assertFalse("not isEmpty ", ms3.isEmpty());
524
525 e = ms3.removeFactors(a);
526 //System.out.println("e = " + e);
527 assertTrue("1 == remove(a) ", e.isConstant());
528
529 e = ms3.removeFactors(b);
530 //System.out.println("e = " + e);
531 assertTrue("1 == remove(b) ", e.isConstant());
532
533 e = ms3.removeFactors(d);
534 //System.out.println("e = " + e);
535 assertTrue("1 == remove(a*b) ", e.isConstant());
536
537 if (!c.isConstant()) {
538 e = ms3.removeFactors(c);
539 //System.out.println("e = " + e);
540 assertEquals("c == remove(c) ", e, c);
541 }
542 }
543 }
544
545
546 /**
547 * Test irreducible multiplicative set contained.
548 *
549 */
550 public void testFactorsContaines() {
551
552 a = fac.random(kl - 2, ll - 2, el, q);
553 b = fac.random(kl - 2, ll - 2, el, q);
554 c = fac.random(kl - 2, ll - 2, el, q).monic();
555 d = fac.random(kl, ll, el, q);
556 e = d; //fac.random(kl, ll, el, q );
557
558 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) {
559 return;
560 }
561
562 MultiplicativeSet<BigRational> ms = new MultiplicativeSetFactors<BigRational>(fac);
563 //System.out.println("ms = " + ms);
564 //System.out.println("a = " + a);
565 //System.out.println("b = " + b);
566 //System.out.println("c = " + c);
567
568 assertTrue("isEmpty ", ms.isEmpty());
569
570 if (!a.isConstant()) {
571 assertFalse("not contained ", ms.contains(a));
572 }
573
574 MultiplicativeSet<BigRational> ms2 = ms.add(a);
575 //System.out.println("ms2 = " + ms2);
576
577 if (!a.isConstant()) {
578 assertFalse("not isEmpty ", ms2.isEmpty());
579 assertTrue("contained ", ms2.contains(a));
580
581 if (!a.equals(b) && !b.isConstant()) {
582 assertFalse("not contained " + ms2 + ", " + b, ms2.contains(b));
583 }
584 }
585
586 MultiplicativeSet<BigRational> ms3 = ms2.add(b);
587 //System.out.println("ms3 = " + ms3);
588
589 assertTrue("contained ", ms3.contains(a));
590 assertTrue("contained ", ms3.contains(b));
591
592 if (!b.isConstant()) {
593 assertFalse("not isEmpty ", ms3.isEmpty());
594
595 if (!a.monic().equals(c) && !b.monic().equals(c) && !c.isConstant() && !ms3.mset.contains(c)) {
596 assertFalse("not contained " + ms3 + ", " + c, ms3.contains(c));
597 }
598 }
599
600 e = a.multiply(b);
601 //System.out.println("e = " + e);
602 if (!e.isConstant()) {
603 assertTrue("contained ", ms3.contains(e));
604 }
605
606 MultiplicativeSet<BigRational> ms4 = ms3.add(e);
607 //System.out.println("ms4 = " + ms4);
608
609 assertTrue("m3 == m4 ", ms3.equals(ms4));
610 }
611
612
613 /**
614 * Test irreducible multiplicative set removeFactors.
615 *
616 */
617 public void testFactorsRemoveFactors() {
618
619 a = fac.random(kl - 2, ll - 2, el, q);
620 b = fac.random(kl - 2, ll - 2, el, q);
621 c = fac.random(kl - 2, ll - 2, el, q);
622 d = fac.random(kl - 2, ll - 2, el, q);
623 e = d; //fac.random(kl, ll, el, q );
624
625 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) {
626 return;
627 }
628
629 MultiplicativeSet<BigRational> ms = new MultiplicativeSetFactors<BigRational>(fac);
630 //System.out.println("ms = " + ms);
631 //System.out.println("a = " + a);
632 //System.out.println("b = " + b);
633 //System.out.println("c = " + c);
634
635 assertTrue("isEmpty ", ms.isEmpty());
636
637 e = ms.removeFactors(a);
638 //System.out.println("e = " + e);
639 assertEquals("a == remove(a) ", a, e);
640
641 MultiplicativeSet<BigRational> ms2 = ms.add(a);
642 //System.out.println("ms2 = " + ms2);
643
644 if (!a.isConstant()) {
645 assertFalse("not isEmpty ", ms2.isEmpty());
646 assertTrue("contained ", ms2.contains(a));
647
648 e = ms2.removeFactors(a);
649 //System.out.println("e = " + e);
650 assertTrue("1 == remove(a) ", e.isConstant());
651
652 if (!b.isConstant()) {
653 e = ms2.removeFactors(b);
654 //System.out.println("e = " + e);
655 assertTrue("remove(b) | b ", b.remainder(e).isZERO());
656 }
657 }
658
659 d = a.multiply(b);
660 MultiplicativeSet<BigRational> ms3 = ms2.add(d);
661 //System.out.println("ms3 = " + ms3);
662
663 if (!d.isConstant()) {
664 assertFalse("not isEmpty ", ms3.isEmpty());
665
666 e = ms3.removeFactors(a);
667 //System.out.println("e = " + e);
668 assertTrue("1 == remove(a) ", e.isConstant());
669
670 e = ms3.removeFactors(b);
671 //System.out.println("e = " + e);
672 assertTrue("1 == remove(b) ", e.isConstant());
673
674 e = ms3.removeFactors(d);
675 //System.out.println("e = " + e);
676 assertTrue("1 == remove(a*b) ", e.isConstant());
677
678 if (!c.isConstant()) {
679 e = ms3.removeFactors(c);
680 //System.out.println("e = " + e);
681 assertTrue("remove(c) | c ", c.remainder(e).isZERO());
682 }
683 }
684 }
685
686 }