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