001/* 002 * $Id: RecSolvablePolynomialTest.java 5315 2015-10-30 18:33:42Z 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 = 5; 062 063 064 int ll = 4; 065 066 067 int el = 3; 068 069 070 float q = 0.3f; 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 GenPolynomialRing<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 GenPolynomialRing<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 public void testDistRecWeyl() { 442 GenSolvablePolynomialRing<BigRational> csring = new GenSolvablePolynomialRing<BigRational>(cfac, 443 tord, cvars); 444 RelationGenerator<BigRational> wlc = new WeylRelations<BigRational>(); 445 csring.addRelations(wlc); 446 assertFalse("isCommutative()", csring.isCommutative()); 447 assertTrue("isAssociative()", csring.isAssociative()); 448 449 ring = new RecSolvablePolynomialRing<BigRational>(csring, tord, vars); 450 RelationGenerator<GenPolynomial<BigRational>> wl = new WeylRelations<GenPolynomial<BigRational>>(); 451 ring.addRelations(wl); 452 453 // first distribute solvable polynomial only 454 GenSolvablePolynomialRing<BigRational> fring = (GenSolvablePolynomialRing) ring; 455 GenSolvablePolynomialRing<BigRational> pfd = fring.distribute(); 456 //System.out.println("pfd = " + pfd.toScript()); 457 RecSolvablePolynomialRing<BigRational> pfdr = (RecSolvablePolynomialRing<BigRational>) pfd 458 .recursive(ring.nvar); 459 //System.out.println("pfdr = " + pfdr.toScript()); 460 //System.out.println("ring = " + ring.toScript()); 461 assertEquals("ring == pfdr", ring, pfdr); 462 463 RecSolvablePolynomial<BigRational> a = ring.random(kl, 2 * ll, el, 2.0f * q); 464 //System.out.println("a = " + a); 465 466 GenSolvablePolynomial<BigRational> ad = (GenSolvablePolynomial<BigRational>) PolyUtil 467 .<BigRational> distribute(pfd, a); 468 //System.out.println("ad = " + ad); 469 470 GenSolvablePolynomial<GenPolynomial<BigRational>> adr = (GenSolvablePolynomial<GenPolynomial<BigRational>>) PolyUtil 471 .<BigRational> recursive(pfdr, ad); 472 //System.out.println("adr = " + adr); 473 assertEquals("a == adr", a, adr); 474 475 // now recursive solvable polynials with coefficient relations: 476 RecSolvablePolynomial<BigRational> r1 = ring.parse("x"); 477 GenSolvablePolynomial<BigRational> r2 = csring.parse("b"); 478 RecSolvablePolynomial<BigRational> rp = ring.parse("b x + a"); 479 ring.coeffTable.update(r1.leadingExpVector(), r2.leadingExpVector(), rp); 480 //System.out.println("ring = " + ring.toScript()); 481 482 GenSolvablePolynomialRing<BigRational> pfrd = RecSolvablePolynomialRing 483 .<BigRational> distribute(ring); 484 //System.out.println("pfrd = " + pfrd.toScript()); 485 RecSolvablePolynomialRing<BigRational> pfrdr = (RecSolvablePolynomialRing<BigRational>) pfrd 486 .recursive(ring.nvar); 487 //System.out.println("pfrdr = " + pfrdr.toScript()); 488 //System.out.println("ring = " + ring.toScript()); 489 assertEquals("ring == pfrdr", ring, pfrdr); 490 491 //System.out.println("a = " + a); 492 ad = (GenSolvablePolynomial<BigRational>) PolyUtil.<BigRational> distribute(pfrd, a); 493 //System.out.println("ad = " + ad); 494 adr = (GenSolvablePolynomial<GenPolynomial<BigRational>>) PolyUtil.<BigRational> recursive(pfrdr, ad); 495 //System.out.println("adr = " + adr); 496 assertEquals("a == adr", a, adr); 497 } 498 499 500 /** 501 * Test reversion for Weyl relations. 502 */ 503 public void testReverseWeyl() { 504 GenSolvablePolynomialRing<BigRational> csring = new GenSolvablePolynomialRing<BigRational>(cfac, 505 tord, cvars); 506 RelationGenerator<BigRational> wlc = new WeylRelations<BigRational>(); 507 //wlc.generate(csring); 508 csring.addRelations(wlc); 509 assertFalse("isCommutative()", csring.isCommutative()); 510 assertTrue("isAssociative()", csring.isAssociative()); 511 512 RecSolvablePolynomial<BigRational> r1 = ring.parse("x"); 513 GenSolvablePolynomial<BigRational> r2 = csring.parse("b"); 514 RecSolvablePolynomial<BigRational> rp = ring.parse("b x + a"); 515 ring.coeffTable.update(r1.leadingExpVector(), r2.leadingExpVector(), rp); 516 517 RecSolvablePolynomialRing<BigRational> pfr = ring.reverse(); 518 RecSolvablePolynomialRing<BigRational> pfrr = pfr.reverse(); 519 assertEquals("pf == pfrr", ring, pfrr); 520 //System.out.println("ring = " + ring); 521 //System.out.println("pfr = " + pfr); 522 523 RecSolvablePolynomial<BigRational> a = ring.random(kl, ll, el, q); 524 //System.out.println("a = " + a); 525 526 RecSolvablePolynomial<BigRational> ar = (RecSolvablePolynomial<BigRational>) a.reverse(pfr); 527 RecSolvablePolynomial<BigRational> arr = (RecSolvablePolynomial<BigRational>) ar.reverse(pfrr); 528 assertEquals("a == arr", a, arr); 529 //System.out.println("ar = " + ar); 530 //System.out.println("arr = " + arr); 531 } 532 533 534 /** 535 * Test recursive for Weyl relations. 536 */ 537 public void testRecursiveWeyl() { 538 String[] svars = new String[] { "w", "x", "y", "z" }; 539 GenSolvablePolynomialRing<BigRational> sring = new GenSolvablePolynomialRing<BigRational>(cfac, tord, 540 svars); 541 RelationGenerator<BigRational> wlc = new WeylRelations<BigRational>(sring); 542 //wlc.generate(sring); 543 sring.addRelations(wlc); 544 assertFalse("isCommutative()", sring.isCommutative()); 545 assertTrue("isAssociative()", sring.isAssociative()); 546 //System.out.println("sring = " + sring.toScript()); 547 548 GenSolvablePolynomialRing<GenPolynomial<BigRational>> rsring = sring.recursive(2); // 1,2,3 549 //System.out.println("rsring = " + rsring.toScript()); 550 551 GenSolvablePolynomial<BigRational> ad, bd, cd, dd; 552 RecSolvablePolynomial<BigRational> ar, br, cr, dr; 553 ad = sring.random(kl, ll, el, q); 554 bd = sring.random(kl, ll, el, q); 555 //ad = sring.parse("7/2 y^2 * z"); // - 15/2 w^2 + 262/225"); 556 //bd = sring.parse("-10/13 x "); //+ 413/150"); 557 //ad = (GenSolvablePolynomial<BigRational>) ad.monic(); 558 //bd = (GenSolvablePolynomial<BigRational>) bd.monic(); 559 560 //System.out.println("ad = " + ad); 561 //System.out.println("bd = " + bd); 562 563 cd = ad.multiply(bd); 564 //System.out.println("cd = " + cd); 565 566 ar = (RecSolvablePolynomial<BigRational>) PolyUtil.<BigRational> recursive(rsring, ad); 567 br = (RecSolvablePolynomial<BigRational>) PolyUtil.<BigRational> recursive(rsring, bd); 568 //System.out.println("ar = " + ar); 569 //System.out.println("br = " + br); 570 571 cr = ar.multiply(br); 572 //System.out.println("cr = " + cr); 573 //System.out.println("cr.ring = " + cr.ring.toScript()); 574 575 dr = (RecSolvablePolynomial<BigRational>) PolyUtil.<BigRational> recursive(rsring, cd); 576 //System.out.println("dr = " + dr); 577 578 assertEquals("dr.ring == cr.ring", dr.ring, cr.ring); 579 assertEquals("dr == cr", dr, cr); 580 581 dd = (GenSolvablePolynomial<BigRational>) PolyUtil.<BigRational> distribute(sring, cr); 582 //System.out.println("dd = " + dd); 583 assertEquals("dd == cd", dd, cd); 584 } 585 586 587 /** 588 * Test recursive for iterated Weyl relations. 589 */ 590 public void testRecursiveIteratedWeyl() { 591 String[] svars = new String[] { "w", "x", "y", "z" }; 592 GenSolvablePolynomialRing<BigRational> sring = new GenSolvablePolynomialRing<BigRational>(cfac, tord, 593 svars); 594 RelationGenerator<BigRational> wlc = new WeylRelationsIterated<BigRational>(); 595 //wlc.generate(sring); 596 sring.addRelations(wlc); 597 assertFalse("isCommutative()", sring.isCommutative()); 598 assertTrue("isAssociative()", sring.isAssociative()); 599 //System.out.println("sring = " + sring.toScript()); 600 601 GenSolvablePolynomialRing<GenPolynomial<BigRational>> rsring = sring.recursive(2); // 1,2,3 602 //System.out.println("rsring = " + rsring); //.toScript()); 603 //System.out.println("rsring = " + rsring.toScript()); 604 605 GenSolvablePolynomial<BigRational> ad, bd, cd, dd; 606 RecSolvablePolynomial<BigRational> ar, br, cr, dr; 607 ad = sring.random(kl, ll, el, q); 608 bd = sring.random(kl, ll, el, q); 609 //ad = (GenSolvablePolynomial<BigRational>) ad.monic(); 610 //bd = (GenSolvablePolynomial<BigRational>) bd.monic(); 611 612 //System.out.println("ad = " + ad); 613 //System.out.println("bd = " + bd); 614 615 cd = ad.multiply(bd); 616 //System.out.println("cd = " + cd); 617 618 ar = (RecSolvablePolynomial<BigRational>) PolyUtil.<BigRational> recursive(rsring, ad); 619 br = (RecSolvablePolynomial<BigRational>) PolyUtil.<BigRational> recursive(rsring, bd); 620 //System.out.println("ar = " + ar); 621 //System.out.println("br = " + br); 622 623 cr = ar.multiply(br); 624 //System.out.println("cr = " + cr); 625 626 dr = (RecSolvablePolynomial<BigRational>) PolyUtil.<BigRational> recursive(rsring, cd); 627 //System.out.println("dr = " + dr); 628 629 assertEquals("dr.ring == cr.ring", dr.ring, cr.ring); 630 assertEquals("dr == cr", dr, cr); 631 632 dd = (GenSolvablePolynomial<BigRational>) PolyUtil.<BigRational> distribute(sring, cr); 633 //System.out.println("dd = " + dd); 634 assertEquals("dd == cd", dd, cd); 635 } 636 637}