001/* 002 * $Id: QuotSolvablePolynomialTest.java 5267 2015-07-27 17:57:50Z kredel $ 003 */ 004 005package edu.jas.gbufd; 006 007 008import java.util.List; 009 010import junit.framework.Test; 011import junit.framework.TestCase; 012import junit.framework.TestSuite; 013 014import org.apache.log4j.BasicConfigurator; 015 016import edu.jas.arith.BigRational; 017import edu.jas.gbufd.QuotSolvablePolynomial; 018import edu.jas.gbufd.QuotSolvablePolynomialRing; 019import edu.jas.gbufd.SolvableQuotient; 020import edu.jas.gbufd.SolvableQuotientRing; 021import edu.jas.poly.ExpVector; 022import edu.jas.poly.GenPolynomial; 023import edu.jas.poly.GenSolvablePolynomial; 024import edu.jas.poly.GenSolvablePolynomialRing; 025import edu.jas.poly.RecSolvablePolynomial; 026import edu.jas.poly.RelationTable; 027import edu.jas.poly.TermOrder; 028import edu.jas.poly.WeylRelations; 029import edu.jas.poly.RelationGenerator; 030 031 032/** 033 * BigRational coefficients QuotSolvablePolynomial tests with JUnit. 034 * @author Heinz Kredel. 035 */ 036 037public class QuotSolvablePolynomialTest extends TestCase { 038 039 040 /** 041 * main. 042 */ 043 public static void main(String[] args) { 044 BasicConfigurator.configure(); 045 junit.textui.TestRunner.run(suite()); 046 } 047 048 049 /** 050 * Constructs a <CODE>QuotSolvablePolynomialTest</CODE> object. 051 * @param name String. 052 */ 053 public QuotSolvablePolynomialTest(String name) { 054 super(name); 055 } 056 057 058 /** 059 */ 060 public static Test suite() { 061 TestSuite suite = new TestSuite(QuotSolvablePolynomialTest.class); 062 return suite; 063 } 064 065 066 QuotSolvablePolynomial<BigRational> a, b, c, d, e, f, x1, x2; 067 068 069 int rl = 4; 070 071 072 int kl = 1; 073 074 075 int ll = 4; 076 077 078 int el = 3; 079 080 081 float q = 0.2f; 082 083 084 String[] cvars = new String[] { "a", "b" }; 085 086 087 String[] vars = new String[] { "w", "x", "y", "z" }; 088 089 090 QuotSolvablePolynomialRing<BigRational> ring; 091 092 093 BigRational cfac; 094 095 096 GenSolvablePolynomialRing<SolvableQuotient<BigRational>> sring; 097 098 099 GenSolvablePolynomialRing<BigRational> cring; 100 101 102 SolvableQuotientRing<BigRational> qcring; 103 104 105 TermOrder tord = new TermOrder(TermOrder.INVLEX); 106 107 108 @Override 109 protected void setUp() { 110 cfac = new BigRational(1); 111 cring = new GenSolvablePolynomialRing<BigRational>(cfac, tord, cvars); 112 qcring = new SolvableQuotientRing<BigRational>(cring); 113 ring = new QuotSolvablePolynomialRing<BigRational>(qcring, tord, vars); 114 RelationGenerator<SolvableQuotient<BigRational>> wl = new WeylRelations<SolvableQuotient<BigRational>>(); 115 ring.addRelations(wl); //wl.generate(ring); 116 a = b = c = d = e = null; 117 } 118 119 120 @Override 121 protected void tearDown() { 122 ring = null; 123 a = b = c = d = e = null; 124 } 125 126 127 /** 128 * Test constructor, generators and properties. 129 */ 130 public void testConstructor() { 131 assertFalse("not commutative", ring.isCommutative()); 132 assertTrue("associative", ring.isAssociative()); 133 134 a = new QuotSolvablePolynomial<BigRational>(ring); 135 assertTrue("length( a ) = 0", a.length() == 0); 136 assertTrue("isZERO( a )", a.isZERO()); 137 assertTrue("isONE( a )", !a.isONE()); 138 139 c = ring.getONE(); 140 assertTrue("length( c ) = 1", c.length() == 1); 141 assertTrue("isZERO( c )", !c.isZERO()); 142 assertTrue("isONE( c )", c.isONE()); 143 144 d = ring.getZERO(); 145 assertTrue("length( d ) = 0", d.length() == 0); 146 assertTrue("isZERO( d )", d.isZERO()); 147 assertTrue("isONE( d )", !d.isONE()); 148 //System.out.println("d = " + d); 149 150 //System.out.println(""); 151 for (GenPolynomial<SolvableQuotient<BigRational>> g : ring.generators()) { 152 //System.out.print("g = " + g + ", "); 153 assertFalse("not isZERO( g )", g.isZERO()); 154 } 155 //System.out.println(""); 156 assertTrue("isAssociative: ", ring.isAssociative()); 157 } 158 159 160 /** 161 * Test random polynomial. 162 */ 163 public void testRandom() { 164 for (int i = 0; i < 3; i++) { 165 // a = ring.random(ll+2*i); 166 a = ring.random(kl * (i + 1), ll + 2 * i, el + i, q); 167 //System.out.println("a = " + a); 168 assertTrue("length( a" + i + " ) <> 0", a.length() >= 0); 169 assertTrue(" not isZERO( a" + i + " )", !a.isZERO()); 170 assertTrue(" not isONE( a" + i + " )", !a.isONE()); 171 } 172 } 173 174 175 /** 176 * Test addition. 177 */ 178 public void testAddition() { 179 a = ring.random(kl, ll, el, q); 180 c = (QuotSolvablePolynomial<BigRational>) a.subtract(a); 181 assertTrue("a-a = 0", c.isZERO()); 182 183 b = (QuotSolvablePolynomial<BigRational>) a.sum(a); 184 c = (QuotSolvablePolynomial<BigRational>) b.subtract(a); 185 assertEquals("a+a-a = a", c, a); 186 187 b = ring.random(kl, ll, el, q); 188 c = (QuotSolvablePolynomial<BigRational>) b.sum(a); 189 d = (QuotSolvablePolynomial<BigRational>) a.sum(b); 190 assertEquals("a+b = b+a", c, d); 191 192 c = ring.random(kl, ll, el, q); 193 d = (QuotSolvablePolynomial<BigRational>) a.sum(b.sum(c)); 194 e = (QuotSolvablePolynomial<BigRational>) a.sum(b).sum(c); 195 assertEquals("a+(b+c) = (a+b)+c", d, e); 196 //System.out.println("a = " + a); 197 //System.out.println("b = " + b); 198 //System.out.println("c = " + c); 199 //System.out.println("d = " + d); 200 //System.out.println("e = " + e); 201 202 ExpVector u = ExpVector.EVRAND(rl, el, q); 203 SolvableQuotient<BigRational> x = qcring.random(kl); 204 //System.out.println("x = " + x); 205 //System.out.println("u = " + u); 206 207 b = ring.getONE().multiply(x, u); 208 c = (QuotSolvablePolynomial<BigRational>) a.sum(b); 209 d = (QuotSolvablePolynomial<BigRational>) a.sum(x, u); 210 //System.out.println("a = " + a); 211 //System.out.println("b = " + b); 212 //System.out.println("c = " + c); 213 //System.out.println("d = " + d); 214 assertEquals("a+p(x,u) = a+(x,u)", c, d); 215 216 c = (QuotSolvablePolynomial<BigRational>) a.subtract(b); 217 d = (QuotSolvablePolynomial<BigRational>) a.subtract(x, u); 218 assertEquals("a-p(x,u) = a-(x,u)", c, d); 219 220 a = ring.getZERO(); 221 b = ring.getONE().multiply(x, u); 222 c = (QuotSolvablePolynomial<BigRational>) b.sum(a); 223 d = (QuotSolvablePolynomial<BigRational>) a.sum(x, u); 224 assertEquals("a+p(x,u) = a+(x,u)", c, d); 225 226 c = (QuotSolvablePolynomial<BigRational>) a.subtract(b); 227 d = (QuotSolvablePolynomial<BigRational>) a.subtract(x, u); 228 assertEquals("a-p(x,u) = a-(x,u)", c, d); 229 } 230 231 232 /** 233 * Test multiplication. 234 */ 235 public void testMultiplication() { 236 //System.out.println("ring = " + ring); 237 a = ring.random(kl, ll - 1, el - 1, q); 238 //a = ring.parse(" b y z + a w z "); 239 b = ring.random(kl, ll - 1, el - 1, q); 240 //b = ring.parse(" w x - b x "); 241 242 c = b.multiply(a); 243 d = a.multiply(b); 244 //System.out.println("a = " + a); 245 //System.out.println("b = " + b); 246 //System.out.println("c = " + c); 247 //System.out.println("d = " + d); 248 assertTrue("a*b != b*a", c.equals(d) || c.leadingExpVector().equals(d.leadingExpVector())); 249 250 c = ring.random(kl, ll - 1, el - 1, q); 251 d = a.multiply(b.multiply(c)); 252 e = a.multiply(b).multiply(c); 253 assertEquals("a(bc) = (ab)c", d, e); 254 //System.out.println("a = " + a); 255 //System.out.println("b = " + b); 256 //System.out.println("c = " + c); 257 //System.out.println("d = " + d); 258 //System.out.println("e = " + e); 259 260 SolvableQuotient<BigRational> xp = a.leadingBaseCoefficient().inverse(); 261 d = a.multiply(xp); 262 assertTrue("monic(a) = a*(1/ldcf(ldcf(a)))", d.leadingBaseCoefficient().isONE()); 263 264 d = (QuotSolvablePolynomial<BigRational>) a.monic(); 265 assertTrue("a.monic(): ", d.leadingBaseCoefficient().isONE()); 266 } 267 268 269 /** 270 * Test commutative ring. 271 */ 272 public void testCommutative() { 273 //System.out.println("table = " + table.toString(vars)); 274 //System.out.println("table = " + table.toScript()); 275 //System.out.println("ring = " + ring); 276 //System.out.println("ring.table = " + ring.table.toScript()); 277 //assertEquals("table == ring.table: ", table, ring.table); // ? 278 assertTrue("# relations == 2", ring.table.size() == 2); 279 280 ring = new QuotSolvablePolynomialRing<BigRational>(qcring, ring); 281 //System.out.println("ring = " + ring); 282 283 assertTrue("isCommutative()", ring.isCommutative()); 284 assertTrue("isAssociative()", ring.isAssociative()); 285 286 a = ring.random(kl, ll, el, q); 287 //a = ring.parse(" b x y z + a w z "); 288 //System.out.println("a = " + a); 289 b = ring.random(kl, ll, el, q); 290 //b = ring.parse(" w y z - b x "); 291 //System.out.println("b = " + b); 292 293 // commutative 294 c = b.multiply(a); 295 //System.out.println("c = " + c); 296 d = a.multiply(b); 297 //d = ring.getONE(); 298 //System.out.println("d = " + d); 299 assertEquals("b*a == a*b: ", c, d); 300 } 301 302 303 /** 304 * Test distributive law. 305 */ 306 public void testDistributive() { 307 a = ring.random(kl, ll, el, q); 308 b = ring.random(kl, ll, el, q); 309 c = ring.random(kl, ll, el, q); 310 311 d = a.multiply((QuotSolvablePolynomial<BigRational>) b.sum(c)); 312 e = (QuotSolvablePolynomial<BigRational>) a.multiply(b).sum(a.multiply(c)); 313 assertEquals("a*(b+c) = a*b+a*c", d, e); 314 } 315 316 317 /** 318 * Test solvable coefficient ring. 319 */ 320 public void testSolvableCoeffs() { 321 GenSolvablePolynomialRing<BigRational> csring = new GenSolvablePolynomialRing<BigRational>(cfac, 322 tord, cvars); 323 //RelationGenerator<BigRational> wlc = new WeylRelations<BigRational>(csring); 324 //no: wlc.generate(csring); 325 //assertTrue("# relations == 1", csring.table.size() == 1); 326 assertTrue("isCommutative()", csring.isCommutative()); 327 assertTrue("isAssociative()", csring.isAssociative()); 328 329 SolvableQuotientRing<BigRational> qcsring = new SolvableQuotientRing<BigRational>(csring); 330 //assertFalse("isCommutative()", qcsring.isCommutative()); 331 assertTrue("isAssociative()", qcsring.isAssociative()); 332 333 ring = new QuotSolvablePolynomialRing<BigRational>(qcsring, ring); 334 RelationGenerator<SolvableQuotient<BigRational>> wl = new WeylRelations<SolvableQuotient<BigRational>>(); 335 wl.generate(ring); 336 assertTrue("# relations == 2", ring.table.size() == 2); 337 assertFalse("isCommutative()", ring.isCommutative()); 338 assertTrue("isAssociative()", ring.isAssociative()); 339 //System.out.println("ring = " + ring); 340 341 RecSolvablePolynomial<BigRational> r1 = ring.polCoeff.parse("x"); 342 GenSolvablePolynomial<BigRational> r2 = csring.parse("b"); 343 RecSolvablePolynomial<BigRational> rp = ring.polCoeff.parse("b x + a"); // + a 344 //System.out.println("r1 = " + r1); 345 //System.out.println("r2 = " + r2); 346 //System.out.println("rp = " + rp); 347 ring.polCoeff.coeffTable.update(r1.leadingExpVector(), r2.leadingExpVector(), rp); 348 //System.out.println("ring.polCoeff = " + ring.polCoeff); 349 350 assertFalse("isCommutative()", ring.isCommutative()); 351 assertTrue("isAssociative()", ring.isAssociative()); 352 353 List<GenPolynomial<SolvableQuotient<BigRational>>> gens = ring.generators(); 354 //gens = new ArrayList<GenPolynomial<SolvableQuotient<BigRational>>>(); 355 356 for (GenPolynomial<SolvableQuotient<BigRational>> x : gens) { 357 GenSolvablePolynomial<SolvableQuotient<BigRational>> xx = (GenSolvablePolynomial<SolvableQuotient<BigRational>>) x; 358 a = new QuotSolvablePolynomial<BigRational>(ring, xx); 359 //System.out.println("a = " + a); 360 for (GenPolynomial<SolvableQuotient<BigRational>> y : gens) { 361 GenSolvablePolynomial<SolvableQuotient<BigRational>> yy = (GenSolvablePolynomial<SolvableQuotient<BigRational>>) y; 362 b = new QuotSolvablePolynomial<BigRational>(ring, yy); 363 //System.out.println("b = " + b); 364 c = a.multiply(b); 365 //System.out.println("gens: " + a + " * " + b + " = " + c); 366 ExpVector ev = a.leadingExpVector().sum(b.leadingExpVector()); 367 assertTrue("LT(a)*LT(b) == LT(c)", c.leadingExpVector().equals(ev)); 368 } 369 } 370 371 //a = ring.random(kl, ll, el, q); 372 //a = ring.getONE(); 373 a = ring.parse("x^2 + a b"); 374 //System.out.println("a = " + a.toScript()); 375 //b = ring.random(kl, ll, el, q); 376 //b = ring.getONE(); 377 b = ring.parse("a b^2 + a"); // + a 378 b = (QuotSolvablePolynomial<BigRational>) b.inverse(); 379 //System.out.println("b = " + b.toScript()); 380 381 // non-commutative 382 c = b.multiply(a); 383 d = a.multiply(b); 384 //System.out.println("a = " + a.toScript()); 385 //System.out.println("b = " + b.toScript()); 386 //System.out.println("c = " + c.toScript()); 387 //System.out.println("d = " + d.toScript()); 388 assertTrue("a*b != b*a", c.equals(d) || c.leadingExpVector().equals(d.leadingExpVector())); 389 390 e = (QuotSolvablePolynomial<BigRational>) b.inverse(); 391 //System.out.println("e = " + e.toScript()); 392 assertTrue("b*b^-1 == 1", e.multiply(b).isONE()); 393 394 c = e.multiply(c); 395 d = d.multiply(e); 396 //System.out.println("a = " + a.toScript()); 397 //System.out.println("b = " + b.toScript()); 398 //System.out.println("c = " + c.toScript()); 399 //System.out.println("d = " + d.toScript()); 400 assertTrue("a == b * 1/b * a", a.equals(c)); 401 assertTrue("a == a * 1/b * b", a.equals(d)); 402 } 403 404 405 /* 406 * Test extension and contraction for Weyl relations. public void 407 * testExtendContractWeyl() { GenSolvablePolynomialRing<BigRational> csring 408 * = new GenSolvablePolynomialRing<BigRational>(cfac, tord, cvars); 409 * RelationGenerator<BigRational> wlc = new WeylRelations<BigRational>(); 410 * wlc.generate(csring); assertFalse("isCommutative()", csring.isCommutative()); 411 * assertTrue("isAssociative()", csring.isAssociative()); 412 * 413 * QuotSolvablePolynomial<BigRational> r1 = ring.parse("x"); 414 * GenSolvablePolynomial<BigRational> r2 = csring.parse("b"); 415 * QuotSolvablePolynomial<BigRational> rp = ring.parse("b x + a"); 416 * ring.polCoeff.coeffTable.update(r1.leadingExpVector(), r2.leadingExpVector(), rp); 417 * 418 * int k = rl; QuotSolvablePolynomialRing<BigRational> pfe = ring.extend(k); 419 * //System.out.println("pfe = " + pfe); 420 * QuotSolvablePolynomialRing<BigRational> pfec = pfe.contract(k); 421 * //System.out.println("pfec = " + pfec); assertEquals("ring == pfec", 422 * ring, pfec); 423 * 424 * QuotSolvablePolynomial<BigRational> a = ring.random(kl, ll, el, q); 425 * //System.out.println("a = " + a); 426 * 427 * QuotSolvablePolynomial<BigRational> ae = 428 * (QuotSolvablePolynomial<BigRational>) a.extend(pfe, 0, 0); 429 * //System.out.println("ae = " + ae); 430 * 431 * Map<ExpVector, GenPolynomial<GenPolynomial<BigRational>>> m = 432 * ae.contract(pfec); List<GenPolynomial<GenPolynomial<BigRational>>> ml = 433 * new ArrayList<GenPolynomial<GenPolynomial<BigRational>>>( m.values()); 434 * GenPolynomial<GenPolynomial<BigRational>> aec = ml.get(0); 435 * //System.out.println("ae = " + ae); //System.out.println("aec = " + 436 * aec); assertEquals("a == aec", a, aec); } 437 */ 438 439 440 /* 441 * Test reversion for Weyl relations. public void testReverseWeyl() { 442 * GenSolvablePolynomialRing<BigRational> csring = new 443 * GenSolvablePolynomialRing<BigRational>(cfac, tord, cvars); 444 * RelationGenerator<BigRational> wlc = new WeylRelations<BigRational>(); 445 * wlc.generate(csring); assertFalse("isCommutative()", csring.isCommutative()); 446 * assertTrue("isAssociative()", csring.isAssociative()); 447 * 448 * QuotSolvablePolynomial<BigRational> r1 = ring.parse("x"); 449 * GenSolvablePolynomial<BigRational> r2 = csring.parse("b"); 450 * QuotSolvablePolynomial<BigRational> rp = ring.parse("b x + a"); 451 * ring.polCoeff.coeffTable.update(r1.leadingExpVector(), r2.leadingExpVector(), rp); 452 * 453 * QuotSolvablePolynomialRing<BigRational> pfr = ring.reverse(); 454 * QuotSolvablePolynomialRing<BigRational> pfrr = pfr.reverse(); 455 * assertEquals("pf == pfrr", ring, pfrr); //System.out.println("ring = " + 456 * ring); //System.out.println("pfr = " + pfr); 457 * 458 * QuotSolvablePolynomial<BigRational> a = ring.random(kl, ll, el, q); 459 * //System.out.println("a = " + a); 460 * 461 * QuotSolvablePolynomial<BigRational> ar = 462 * (QuotSolvablePolynomial<BigRational>) a.reverse(pfr); 463 * QuotSolvablePolynomial<BigRational> arr = 464 * (QuotSolvablePolynomial<BigRational>) ar.reverse(pfrr); 465 * assertEquals("a == arr", a, arr); //System.out.println("ar = " + ar); 466 * //System.out.println("arr = " + arr); } 467 */ 468 469 470 /* 471 * Test recursive for Weyl relations. public void testRecursiveWeyl() { 472 * String[] svars = new String[] { "w", "x", "y", "z" }; 473 * GenSolvablePolynomialRing<BigRational> sring = new 474 * GenSolvablePolynomialRing<BigRational>(cfac, tord, svars); 475 * RelationGenerator<BigRational> wlc = new WeylRelations<BigRational>(); 476 * wlc.generate(sring); assertFalse("isCommutative()", sring.isCommutative()); 477 * assertTrue("isAssociative()", sring.isAssociative()); 478 * //System.out.println("sring = " + sring.toScript()); 479 * 480 * GenSolvablePolynomialRing<GenPolynomial<BigRational>> rsring = 481 * sring.recursive(2); // 1,2,3 //System.out.println("rsring = " + rsring); 482 * //.toScript()); System.out.println("rsring = " + rsring.toScript()); 483 * 484 * GenSolvablePolynomial<BigRational> ad, bd, cd, dd; 485 * QuotSolvablePolynomial<BigRational> ar, br, cr, dr; ad = sring.random(kl, 486 * ll, el, q); bd = sring.random(kl, ll, el, q); //ad = 487 * sring.parse("7/2 y^2 * z"); // - 15/2 w^2 + 262/225"); //bd = 488 * sring.parse("-10/13 x "); //+ 413/150"); //ad = 489 * (GenSolvablePolynomial<BigRational>) ad.monic(); //bd = 490 * (GenSolvablePolynomial<BigRational>) bd.monic(); 491 * 492 * //System.out.println("ad = " + ad); //System.out.println("bd = " + bd); 493 * 494 * cd = ad.multiply(bd); //System.out.println("cd = " + cd); 495 * 496 * ar = (QuotSolvablePolynomial<BigRational>) PolyUtil.<BigRational> 497 * recursive(rsring, ad); br = (QuotSolvablePolynomial<BigRational>) 498 * PolyUtil.<BigRational> recursive(rsring, bd); 499 * //System.out.println("ar = " + ar); //System.out.println("br = " + br); 500 * 501 * cr = ar.multiply(br); //System.out.println("cr = " + cr); 502 * //System.out.println("cr.ring = " + cr.ring.toScript()); 503 * 504 * dr = (QuotSolvablePolynomial<BigRational>) PolyUtil.<BigRational> 505 * recursive(rsring, cd); //System.out.println("dr = " + dr); 506 * 507 * assertEquals("dr.ring == cr.ring", dr.ring, cr.ring); 508 * assertEquals("dr == cr", dr, cr); 509 * 510 * dd = (GenSolvablePolynomial<BigRational>) PolyUtil.<BigRational> 511 * distribute(sring, cr); //System.out.println("dd = " + dd); 512 * assertEquals("dd == cd", dd, cd); } 513 */ 514 515 516 /* 517 * Test recursive for iterated Weyl relations. public void 518 * testRecursiveIteratedWeyl() { String[] svars = new String[] { "w", "x", 519 * "y", "z" }; GenSolvablePolynomialRing<BigRational> sring = new 520 * GenSolvablePolynomialRing<BigRational>(cfac, tord, svars); 521 * RelationGenerator<BigRational> wlc = new WeylRelationsIterated<BigRational>(); 522 * wlc.generate(sring); assertFalse("isCommutative()", 523 * sring.isCommutative()); assertTrue("isAssociative()", 524 * sring.isAssociative()); //System.out.println("sring = " + 525 * sring.toScript()); 526 * 527 * GenSolvablePolynomialRing<GenPolynomial<BigRational>> rsring = 528 * sring.recursive(2); // 1,2,3 //System.out.println("rsring = " + rsring); 529 * //.toScript()); System.out.println("rsring = " + rsring.toScript()); 530 * 531 * GenSolvablePolynomial<BigRational> ad, bd, cd, dd; 532 * QuotSolvablePolynomial<BigRational> ar, br, cr, dr; ad = sring.random(kl, 533 * ll, el, q); bd = sring.random(kl, ll, el, q); //ad = 534 * (GenSolvablePolynomial<BigRational>) ad.monic(); //bd = 535 * (GenSolvablePolynomial<BigRational>) bd.monic(); 536 * 537 * //System.out.println("ad = " + ad); //System.out.println("bd = " + bd); 538 * 539 * cd = ad.multiply(bd); //System.out.println("cd = " + cd); 540 * 541 * ar = (QuotSolvablePolynomial<BigRational>) PolyUtil.<BigRational> 542 * recursive(rsring, ad); br = (QuotSolvablePolynomial<BigRational>) 543 * PolyUtil.<BigRational> recursive(rsring, bd); 544 * //System.out.println("ar = " + ar); //System.out.println("br = " + br); 545 * 546 * cr = ar.multiply(br); //System.out.println("cr = " + cr); 547 * 548 * dr = (QuotSolvablePolynomial<BigRational>) PolyUtil.<BigRational> 549 * recursive(rsring, cd); //System.out.println("dr = " + dr); 550 * 551 * assertEquals("dr.ring == cr.ring", dr.ring, cr.ring); 552 * assertEquals("dr == cr", dr, cr); 553 * 554 * dd = (GenSolvablePolynomial<BigRational>) PolyUtil.<BigRational> 555 * distribute(sring, cr); //System.out.println("dd = " + dd); 556 * assertEquals("dd == cd", dd, cd); } 557 */ 558 559}