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