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