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