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