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