001/* 002 * $Id: GCDPrimitiveTest.java 5688 2017-01-03 08:45:09Z kredel $ 003 */ 004 005package edu.jas.fd; 006 007 008import java.util.List; 009 010import org.apache.log4j.BasicConfigurator; 011 012import edu.jas.arith.BigRational; 013import edu.jas.kern.ComputerThreads; 014import edu.jas.poly.GenPolynomial; 015import edu.jas.poly.GenSolvablePolynomial; 016import edu.jas.poly.GenSolvablePolynomialRing; 017import edu.jas.poly.PolyUtil; 018import edu.jas.poly.PolynomialList; 019import edu.jas.poly.RecSolvablePolynomial; 020import edu.jas.poly.RecSolvablePolynomialRing; 021import edu.jas.poly.RelationGenerator; 022import edu.jas.poly.TermOrder; 023import edu.jas.poly.WeylRelationsIterated; 024 025import junit.framework.Test; 026import junit.framework.TestCase; 027import junit.framework.TestSuite; 028 029 030/** 031 * GCD Primitive PRS algorithm tests with JUnit. <b>Note:</b> not in sync with 032 * implementation. 033 * @author Heinz Kredel 034 */ 035 036public class GCDPrimitiveTest extends TestCase { 037 038 039 /** 040 * main. 041 */ 042 public static void main(String[] args) { 043 BasicConfigurator.configure(); 044 junit.textui.TestRunner.run(suite()); 045 ComputerThreads.terminate(); 046 } 047 048 049 /** 050 * Constructs a <CODE>GCDPrimitiveTest</CODE> object. 051 * @param name String. 052 */ 053 public GCDPrimitiveTest(String name) { 054 super(name); 055 } 056 057 058 /** 059 */ 060 public static Test suite() { 061 TestSuite suite = new TestSuite(GCDPrimitiveTest.class); 062 return suite; 063 } 064 065 066 GreatestCommonDivisorAbstract<BigRational> fd, fds; 067 068 069 TermOrder to = new TermOrder(TermOrder.INVLEX); 070 071 072 GenSolvablePolynomialRing<BigRational> dfac; 073 074 075 //GenSolvablePolynomialRing<GenPolynomial<BigRational>> rfac; 076 RecSolvablePolynomialRing<BigRational> rfac; 077 078 079 GenSolvablePolynomial<BigRational> a, b, a0, b0, c, d, e, a1, b1; 080 081 082 GenSolvablePolynomial<GenPolynomial<BigRational>> ar, br, ar0, br0, cr, dr, er, sr; 083 084 085 int rl = 4; 086 087 088 int kl = 2; 089 090 091 int ll = 2; 092 093 094 int el = 3; 095 096 097 float q = 0.25f; 098 099 100 @Override 101 protected void setUp() { 102 a = b = c = d = e = null; 103 ar = br = cr = dr = er = null; 104 String[] vars = new String[] { "a", "b", "c", "d" }; 105 BigRational cf = new BigRational(1); 106 fd = new GreatestCommonDivisorPrimitive<BigRational>(cf); 107 fds = new GreatestCommonDivisorSimple<BigRational>(cf); 108 dfac = new GenSolvablePolynomialRing<BigRational>(cf, rl, to, vars); 109 RelationGenerator<BigRational> wl = new WeylRelationsIterated<BigRational>(); 110 dfac.addRelations(wl); 111 rfac = (RecSolvablePolynomialRing<BigRational>) dfac.recursive(1); 112 } 113 114 115 @Override 116 protected void tearDown() { 117 a = b = c = d = e = null; 118 ar = br = cr = dr = er = null; 119 fd = null; 120 dfac = null; 121 rfac = null; 122 } 123 124 125 /** 126 * Test base gcd primitive. 127 */ 128 public void testBaseGcdPrimitive() { 129 String[] uvars = new String[] { "x" }; 130 dfac = new GenSolvablePolynomialRing<BigRational>(new BigRational(1), 1, to, uvars); 131 132 for (int i = 0; i < 5; i++) { 133 a = dfac.random(kl * (i + 2), ll + 2 * i, el + 2, q); 134 b = dfac.random(kl * (i + 2), ll + 2 * i, el + 2, q); 135 c = dfac.random(kl * (i + 2), ll + 2, el + 2, q); 136 c = c.multiply(dfac.univariate(0)); 137 if (c.isZERO()) { 138 // skip for this turn 139 continue; 140 } 141 //a = fd.basePrimitivePart(a); 142 //b = fd.basePrimitivePart(b); 143 c = (GenSolvablePolynomial<BigRational>) fd.leftBasePrimitivePart(c).abs(); 144 145 //System.out.println("a = " + a); 146 //System.out.println("b = " + b); 147 //System.out.println("c = " + c); 148 //assertTrue("length( c" + i + " ) <> 0", c.length() > 0); 149 150 a = a.multiply(c); 151 b = b.multiply(c); 152 153 d = fd.leftBaseGcd(a, b); 154 e = (GenSolvablePolynomial<BigRational>) PolyUtil.<BigRational> basePseudoRemainder(d, c); 155 //System.out.println("d = " + d); 156 //System.out.println("c = " + c); 157 assertTrue("c | gcd(ac,bc): " + e, e.isZERO()); 158 159 e = (GenSolvablePolynomial<BigRational>) PolyUtil.<BigRational> basePseudoRemainder(a, d); 160 //System.out.println("e = " + e); 161 assertTrue("gcd(a,b) | a: " + e, e.isZERO()); 162 163 e = (GenSolvablePolynomial<BigRational>) PolyUtil.<BigRational> basePseudoRemainder(b, d); 164 //System.out.println("e = " + e); 165 assertTrue("gcd(a,b) | b " + e, e.isZERO()); 166 } 167 } 168 169 170 /** 171 * Test univariate recursive left gcd primitive. 172 */ 173 @SuppressWarnings("cast") 174 public void testRecursiveLeftGCDPrimitive() { 175 //String[] vars = new String[] { "a", "b", "c", "d" }; 176 String[] vars = new String[] { "a", "b" }; 177 dfac = new GenSolvablePolynomialRing<BigRational>(new BigRational(1), to, vars); 178 RelationGenerator<BigRational> wl = new WeylRelationsIterated<BigRational>(); 179 dfac.addRelations(wl); 180 //System.out.println("dfac = " + dfac.toScript()); 181 rfac = (RecSolvablePolynomialRing<BigRational>) dfac.recursive(1); 182 //System.out.println("rfac = " + rfac.toScript()); 183 184 RecSolvablePolynomialRing<BigRational> rrfacTemp = rfac; 185 GenSolvablePolynomialRing<GenPolynomial<BigRational>> rrfac = rfac; 186 187 GenSolvablePolynomialRing<BigRational> rcfac = (GenSolvablePolynomialRing<BigRational>) rfac.coFac; 188 SolvableQuotientRing<BigRational> qfac = new SolvableQuotientRing<BigRational>(rcfac); 189 QuotSolvablePolynomialRing<BigRational> rqfac = new QuotSolvablePolynomialRing<BigRational>(qfac, 190 rrfac); 191 List<GenSolvablePolynomial<GenPolynomial<BigRational>>> rl = rrfacTemp.coeffTable.relationList(); 192 List<GenPolynomial<GenPolynomial<BigRational>>> rlc = PolynomialList 193 .<GenPolynomial<BigRational>> castToList(rl); 194 rqfac.polCoeff.coeffTable.addRelations(rlc); 195 //System.out.println("rrfac = " + rrfac.toScript()); 196 //System.out.println("rcfac = " + rcfac.toScript()); 197 //System.out.println("qfac = " + qfac.toScript()); 198 //System.out.println("rqfac = " + rqfac.toScript()); 199 200 //kl = 3; ll = 4; // 201 el = 2; 202 203 ar = rfac.random(kl, ll, el + 1, q); 204 br = rfac.random(kl, ll, el, q); 205 cr = rfac.random(kl, ll, el, q); 206 //cr = (RecSolvablePolynomial<BigRational>) cr.abs(); 207 cr = (RecSolvablePolynomial<BigRational>) PolyUtil.<BigRational> monic(cr); 208 //cr = (RecSolvablePolynomial<BigRational>) fd.recursivePrimitivePart(cr).abs(); 209 //cr = rfac.getONE(); 210 //cr = rfac.parse("a+b+c+d"); 211 212 //ar = rfac.parse("1/3 b^3 - 1/6"); 213 //ar = rfac.parse("1/3 b^2 - 1/6"); 214 //br = rfac.parse("( -1/2 ) b + 3 a"); 215 //nok: cr = rfac.parse("b * a - 5 b"); 216 //cr = rfac.parse("a - 5"); 217 218 //System.out.println("ar = " + ar); 219 //System.out.println("br = " + br); 220 //System.out.println("cr = " + cr); 221 222 if (br.isZERO() || cr.isZERO()) { 223 br = rfac.parse("( -1/2 ) b + 3 a"); 224 cr = rfac.parse("a * b - 5 b"); 225 } 226 227 //ar = cr.multiply(ar); 228 //br = cr.multiply(br); 229 ar = ar.multiply(cr); 230 br = br.multiply(cr); 231 //System.out.println("ar = " + ar); 232 //System.out.println("br = " + br); 233 //if (true) return; 234 235 long ts = System.currentTimeMillis(); 236 //sr = rfac.getONE(); 237 sr = fds.leftRecursiveUnivariateGcd(ar, br); 238 ts = System.currentTimeMillis() - ts; 239 //System.out.println("cr = " + cr); 240 241 long tp = System.currentTimeMillis(); 242 dr = fd.leftRecursiveUnivariateGcd(ar, br); 243 tp = System.currentTimeMillis() - tp; 244 //System.out.println("cr = " + cr); 245 //System.out.println("dr = " + dr); 246 //System.out.println("sr = " + sr); 247 //System.out.println("time: ts = " + ts + ", tp = " + tp); 248 assertTrue("time: ts = " + ts + ", tp = " + tp, ts + tp > 0); 249 250 er = (RecSolvablePolynomial<BigRational>) FDUtil.<BigRational> recursiveSparsePseudoRemainder(dr, cr); 251 //System.out.println("er = " + er); 252 assertTrue("c | gcd(ac,bc): " + er, er.isZERO()); 253 254 er = (RecSolvablePolynomial<BigRational>) FDUtil.<BigRational> recursiveSparsePseudoRemainder(ar, dr); 255 //System.out.println("er = " + er); 256 assertTrue("gcd(ac,bc) | ac: " + er, er.isZERO()); 257 258 er = (RecSolvablePolynomial<BigRational>) FDUtil.<BigRational> recursiveSparsePseudoRemainder(br, dr); 259 //System.out.println("er = " + er); 260 assertTrue("gcd(ac,bc) | bc: " + er, er.isZERO()); 261 262 GenSolvablePolynomial<SolvableQuotient<BigRational>> ap, bp, dp, gp, ep; // cp, apm, bpm, cpm, dpm, gpm; 263 ap = FDUtil.<BigRational> quotientFromIntegralCoefficients(rqfac, ar); 264 bp = FDUtil.<BigRational> quotientFromIntegralCoefficients(rqfac, br); 265 //cp = FDUtil.<BigRational> quotientFromIntegralCoefficients(rqfac, cr); 266 dp = FDUtil.<BigRational> quotientFromIntegralCoefficients(rqfac, dr); 267 //apm = ap.monic(); 268 //bpm = bp.monic(); 269 //cpm = cp.monic(); 270 //dpm = dp.monic(); 271 //System.out.println("ap = " + ap); 272 //System.out.println("apm = " + apm); 273 //System.out.println("bp = " + bp); 274 //System.out.println("bpm = " + bpm); 275 //System.out.println("cp = " + cp); 276 //System.out.println("cpm = " + cpm); 277 //System.out.println("dp = " + dp); 278 //System.out.println("dpm = " + dpm); 279 280 GreatestCommonDivisorAbstract<SolvableQuotient<BigRational>> fdq = new GreatestCommonDivisorPrimitive<SolvableQuotient<BigRational>>( 281 qfac); 282 gp = fdq.leftBaseGcd(ap, bp); 283 //gpm = gp.monic(); 284 //System.out.println("gp = " + gp); 285 //System.out.println("gpm = " + gpm); 286 287 ep = FDUtil.<SolvableQuotient<BigRational>> leftBaseSparsePseudoRemainder(gp, dp); 288 //System.out.println("ep = " + ep); 289 assertTrue("c | gcd(ac,bc): " + ep, ep.isZERO()); 290 291 ep = FDUtil.<SolvableQuotient<BigRational>> leftBaseSparsePseudoRemainder(ap, gp); 292 //System.out.println("ep = " + ep); 293 assertTrue("gcd(ac,bc)| ac): " + ep, ep.isZERO()); 294 295 ep = FDUtil.<SolvableQuotient<BigRational>> leftBaseSparsePseudoRemainder(bp, gp); 296 //System.out.println("ep = " + ep); 297 assertTrue("gcd(ac,bc)| bc): " + ep, ep.isZERO()); 298 } 299 300 301 /** 302 * Test univariate recursive right gcd primitive. 303 */ 304 @SuppressWarnings("cast") 305 public void testRecursiveRightGCDPrimitive() { 306 //String[] vars = new String[] { "a", "b", "c", "d" }; 307 String[] vars = new String[] { "a", "b" }; 308 dfac = new GenSolvablePolynomialRing<BigRational>(new BigRational(1), to, vars); 309 RelationGenerator<BigRational> wl = new WeylRelationsIterated<BigRational>(); 310 dfac.addRelations(wl); 311 //System.out.println("dfac = " + dfac.toScript()); 312 rfac = (RecSolvablePolynomialRing<BigRational>) dfac.recursive(1); 313 //System.out.println("rfac = " + rfac.toScript()); 314 315 RecSolvablePolynomialRing<BigRational> rrfacTemp = rfac; 316 GenSolvablePolynomialRing<GenPolynomial<BigRational>> rrfac = rfac; 317 318 GenSolvablePolynomialRing<BigRational> rcfac = (GenSolvablePolynomialRing<BigRational>) rfac.coFac; 319 SolvableQuotientRing<BigRational> qfac = new SolvableQuotientRing<BigRational>(rcfac); 320 QuotSolvablePolynomialRing<BigRational> rqfac = new QuotSolvablePolynomialRing<BigRational>(qfac, 321 rrfac); 322 List<GenSolvablePolynomial<GenPolynomial<BigRational>>> rl = rrfacTemp.coeffTable.relationList(); 323 List<GenPolynomial<GenPolynomial<BigRational>>> rlc = PolynomialList 324 .<GenPolynomial<BigRational>> castToList(rl); 325 rqfac.polCoeff.coeffTable.addRelations(rlc); 326 //System.out.println("rrfac = " + rrfac.toScript()); 327 //System.out.println("rcfac = " + rcfac.toScript()); 328 //System.out.println("qfac = " + qfac.toScript()); 329 //System.out.println("rqfac = " + rqfac.toScript()); 330 331 //kl = 3; ll = 4; // 332 el = 3; 333 334 ar = rfac.random(kl, ll, el + 1, q); 335 br = rfac.random(kl, ll, el, q); 336 cr = rfac.random(kl, ll, el, q); 337 //cr = (RecSolvablePolynomial<BigRational>) cr.abs(); 338 cr = (RecSolvablePolynomial<BigRational>) PolyUtil.<BigRational> monic(cr); 339 //cr = (RecSolvablePolynomial<BigRational>) fd.recursivePrimitivePart(cr).abs(); 340 //cr = rfac.getONE(); 341 //cr = rfac.parse("a+b+c+d"); 342 343 //ar = rfac.parse("1/3 b^3 - 1/6"); 344 //ar = rfac.parse("1/3 b^2 - 1/6"); 345 //br = rfac.parse("( -1/2 ) b + 3 a"); 346 //nok: cr = rfac.parse("b * a - 5 b"); 347 //cr = rfac.parse("a - 5"); 348 349 //ar = rfac.parse("359/95 a b^2 + 275/124 a"); 350 //br = rfac.parse("814/189 b + 135/44 a"); 351 //cr = rfac.parse("b - 612/25"); 352 353 //System.out.println("ar = " + ar); 354 //System.out.println("br = " + br); 355 //System.out.println("cr = " + cr); 356 357 if (br.isZERO() || cr.isZERO()) { 358 br = rfac.parse("( -1/2 ) b + 3 a"); 359 cr = rfac.parse("a * b - 5 b"); 360 } 361 362 ar = cr.multiply(ar); 363 br = cr.multiply(br); 364 //System.out.println("ar = " + ar); 365 //System.out.println("br = " + br); 366 367 long ts = System.currentTimeMillis(); 368 //sr = rfac.getONE(); 369 sr = fds.rightRecursiveUnivariateGcd(ar, br); 370 ts = System.currentTimeMillis() - ts; 371 //System.out.println("cr = " + cr); 372 373 long tp = System.currentTimeMillis(); 374 dr = fd.rightRecursiveUnivariateGcd(ar, br); 375 tp = System.currentTimeMillis() - tp; 376 //System.out.println("cr = " + cr); 377 //System.out.println("dr = " + dr); 378 //System.out.println("sr = " + sr); 379 //System.out.println("time: ts = " + ts + ", tp = " + tp); 380 assertTrue("time: ts = " + ts + ", tp = " + tp, ts + tp > 0); 381 382 er = (RecSolvablePolynomial<BigRational>) FDUtil.<BigRational> recursiveRightSparsePseudoRemainder(dr, 383 cr); 384 //System.out.println("er = " + er); 385 assertTrue("c | gcd(ca,cb): " + er, er.isZERO()); 386 387 er = (RecSolvablePolynomial<BigRational>) FDUtil.<BigRational> recursiveRightSparsePseudoRemainder(ar, 388 dr); 389 //System.out.println("er = " + er); 390 assertTrue("gcd(ca,cb) | ca: " + er, er.isZERO()); 391 392 er = (RecSolvablePolynomial<BigRational>) FDUtil.<BigRational> recursiveRightSparsePseudoRemainder(br, 393 dr); 394 //System.out.println("er = " + er); 395 assertTrue("gcd(ca,cb) | cb: " + er, er.isZERO()); 396 } 397 398 399 /** 400 * Test arbitrary recursive gcd primitive. 401 */ 402 @SuppressWarnings("cast") 403 public void testArbitraryRecursiveGCDPrimitive() { 404 String[] cvars = new String[] { "a", "b" }; 405 String[] vars = new String[] { "c" }; 406 dfac = new GenSolvablePolynomialRing<BigRational>(new BigRational(1), to, cvars); 407 RelationGenerator<BigRational> wl = new WeylRelationsIterated<BigRational>(); 408 dfac.addRelations(wl); 409 //System.out.println("dfac = " + dfac.toScript()); 410 rfac = new RecSolvablePolynomialRing<BigRational>(dfac, to, vars); 411 //rfac = (RecSolvablePolynomialRing<BigRational>) dfac.recursive(1); 412 //System.out.println("rfac = " + rfac.toScript()); 413 414 //kl = 3; ll = 2; 415 el = 2; 416 417 ar0 = rfac.random(kl, ll, el + 1, q); 418 br0 = rfac.random(kl, ll, el, q); 419 cr = rfac.random(kl, ll, el, q); 420 421 //ar0 = rfac.parse("a + b c^2 "); 422 //br0 = rfac.parse("( a^2 - 1/3 ) c - 1/4"); 423 //cr = rfac.parse("(b - 1/2 a^2) c"); 424 425 //cr = (RecSolvablePolynomial<BigRational>) fd.recursivePrimitivePart(cr).abs(); 426 cr = (RecSolvablePolynomial<BigRational>) cr.monic(); 427 if (cr.isZERO()) { 428 cr = rfac.getONE(); 429 } 430 431 //System.out.println("ar = " + ar); 432 //System.out.println("br = " + br); 433 //System.out.println("cr = " + cr); 434 435 // left gcd 436 ar = ar0.multiply(cr); 437 br = br0.multiply(cr); 438 //System.out.println("ar = " + ar); 439 //System.out.println("br = " + br); 440 441 dr = fd.leftRecursiveGcd(ar, br); 442 //System.out.println("cr = " + cr); 443 //System.out.println("dr = " + dr); 444 445 er = (RecSolvablePolynomial<BigRational>) FDUtil.<BigRational> recursiveSparsePseudoRemainder(dr, cr); 446 //System.out.println("er = " + er); 447 assertTrue("c | gcd(ac,bc): " + er, er.isZERO()); 448 449 er = (RecSolvablePolynomial<BigRational>) FDUtil.<BigRational> recursiveSparsePseudoRemainder(ar, dr); 450 //System.out.println("er = " + er); 451 assertTrue("gcd(a,b) | a: " + er, er.isZERO()); 452 453 er = (RecSolvablePolynomial<BigRational>) FDUtil.<BigRational> recursiveSparsePseudoRemainder(br, dr); 454 //System.out.println("er = " + er); 455 assertTrue("gcd(a,b) | b: " + er, er.isZERO()); 456 457 // right gcd 458 ar = cr.multiply(ar0); 459 br = cr.multiply(br0); 460 //System.out.println("ar = " + ar); 461 //System.out.println("br = " + br); 462 463 dr = fd.rightRecursiveGcd(ar, br); 464 //System.out.println("cr = " + cr); 465 //System.out.println("dr = " + dr); 466 467 er = (RecSolvablePolynomial<BigRational>) FDUtil.<BigRational> recursiveRightSparsePseudoRemainder(dr, 468 cr); 469 //System.out.println("er = " + er); 470 assertTrue("c | gcd(ca,cb) " + er, er.isZERO()); 471 472 er = (RecSolvablePolynomial<BigRational>) FDUtil.<BigRational> recursiveRightSparsePseudoRemainder(ar, 473 dr); 474 //System.out.println("er = " + er); 475 assertTrue("gcd(ca,cb) | ca " + er, er.isZERO()); 476 477 er = (RecSolvablePolynomial<BigRational>) FDUtil.<BigRational> recursiveRightSparsePseudoRemainder(br, 478 dr); 479 //System.out.println("er = " + er); 480 assertTrue("gcd(ca,cb) | cb " + er, er.isZERO()); 481 } 482 483 484 /** 485 * Test full gcd primitive. 486 */ 487 public void testGCDPrimitive() { 488 String[] vars = new String[] { "a", "b", "c", "d" }; 489 //String[] vars = new String[] { "a", "b" }; 490 dfac = new GenSolvablePolynomialRing<BigRational>(new BigRational(1), to, vars); 491 RelationGenerator<BigRational> wl = new WeylRelationsIterated<BigRational>(); 492 dfac.addRelations(wl); 493 //System.out.println("dfac = " + dfac.toScript()); 494 495 //kl = 3; 496 ll = 4; 497 el = 4; 498 499 //a = dfac.random(kl, ll, el, q); 500 //b = dfac.random(kl, ll, el, q); 501 //c = dfac.random(kl, ll, el, q); 502 //c = c.multiply(dfac.univariate(0)); 503 504 a = dfac.parse("1/3 b^3 - 1/6 + d"); 505 b = dfac.parse("( -1/2 ) b + 3 a^2 + d"); 506 ////b = dfac.parse("( -1/2 ) b + 3 a^2 + c"); 507 ////c = dfac.parse("(a - 5 b) + c + d"); 508 ////ok: c = dfac.parse("(a - b) c"); 509 ////c = dfac.parse("c (a - b)"); 510 //c = dfac.parse("(a - b) + c + d "); 511 c = dfac.parse("(a - b) + c"); 512 //c = dfac.parse("(a - b) + b^3"); 513 //c = dfac.parse("(a - b) + d"); 514 515 //a = dfac.parse("2 b^3 * d^2 + 2/3 a + 3/2"); 516 //b = dfac.parse("2/3 d + 1/2 a^3 + 3/4"); 517 //c = dfac.parse("c^2 * d - 1/2 a^3 * d + 5/4 d"); 518 519 //c = (GenSolvablePolynomial<BigRational>) fd.primitivePart(c).abs(); 520 c = c.monic(); 521 if (c.isZERO()) { 522 c = dfac.getONE(); 523 } 524 //System.out.println("a = " + a); 525 //System.out.println("b = " + b); 526 //System.out.println("c = " + c); 527 528 // left 529 a0 = a; 530 b0 = b; 531 a = a0.multiply(c); 532 b = b0.multiply(c); 533 //System.out.println("a = " + a); 534 //System.out.println("b = " + b); 535 //System.out.println("c = " + c); 536 537 d = fd.leftGcd(a, b); 538 //System.out.println("c = " + c); 539 //System.out.println("d = " + d); 540 541 e = FDUtil.<BigRational> leftBaseSparsePseudoRemainder(d, c); 542 //System.out.println("e = " + e); 543 assertTrue("c | gcd(ac,bc) " + e, e.isZERO()); 544 545 e = FDUtil.<BigRational> leftBaseSparsePseudoRemainder(a, c); 546 //System.out.println("e = " + e); 547 assertTrue("c | ac " + e, e.isZERO()); 548 e = FDUtil.<BigRational> leftBaseSparsePseudoRemainder(a, d); 549 //System.out.println("e = " + e); 550 assertTrue("gcd(a,b) | a " + e, e.isZERO()); 551 552 e = FDUtil.<BigRational> leftBaseSparsePseudoRemainder(b, c); 553 //System.out.println("e = " + e); 554 assertTrue("c | bc " + e, e.isZERO()); 555 e = FDUtil.<BigRational> leftBaseSparsePseudoRemainder(b, d); 556 //System.out.println("e = " + e); 557 assertTrue("gcd(a,b) | b " + e, e.isZERO()); 558 559 560 // right 561 a = c.multiply(a0); 562 b = c.multiply(b0); 563 //System.out.println("a = " + a); 564 //System.out.println("b = " + b); 565 //System.out.println("c = " + c); 566 567 d = fd.rightGcd(a, b); 568 //System.out.println("c = " + c); 569 //System.out.println("d = " + d); 570 571 e = FDUtil.<BigRational> rightBaseSparsePseudoRemainder(d, c); 572 //System.out.println("e = " + e); 573 assertTrue("c | gcd(ac,bc): " + e, e.isZERO()); 574 575 e = FDUtil.<BigRational> rightBaseSparsePseudoRemainder(a, c); 576 //System.out.println("e = " + e); 577 assertTrue("c | ac: " + e, e.isZERO()); 578 e = FDUtil.<BigRational> rightBaseSparsePseudoRemainder(b, c); 579 //System.out.println("e = " + e); 580 assertTrue("c | bc: " + e, e.isZERO()); 581 582 e = FDUtil.<BigRational> rightBaseSparsePseudoRemainder(a, d); 583 //System.out.println("e = " + e); 584 //e = FDUtil.<BigRational> divideRightPolynomial(a,d); 585 //System.out.println("e = " + e); 586 assertTrue("gcd(a,b) | a: " + e, e.isZERO()); 587 588 e = FDUtil.<BigRational> rightBaseSparsePseudoRemainder(b, d); 589 //System.out.println("e = " + e); 590 //e = FDUtil.<BigRational> divideRightPolynomial(b,d); 591 //System.out.println("e = " + e); 592 assertTrue("gcd(a,b) | b: " + e, e.isZERO()); 593 } 594 595}