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