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