001/* 002 * $Id$ 003 */ 004 005package edu.jas.poly; 006 007 008import java.io.IOException; 009import java.io.Reader; 010import java.io.StringReader; 011import java.util.ArrayList; 012import java.util.List; 013 014 015import edu.jas.arith.BigComplex; 016import edu.jas.arith.BigDecimal; 017import edu.jas.arith.BigInteger; 018import edu.jas.arith.BigQuaternion; 019import edu.jas.arith.BigQuaternionRing; 020import edu.jas.arith.BigRational; 021import edu.jas.arith.ModInteger; 022import edu.jas.arith.ModLong; 023import edu.jas.arith.ModLongRing; 024import edu.jas.arith.ModInt; 025import edu.jas.arith.ModIntRing; 026import edu.jas.structure.RingFactory; 027 028import junit.framework.Test; 029import junit.framework.TestCase; 030import junit.framework.TestSuite; 031 032 033/** 034 * GenPolynomialTokenizer tests with JUnit. 035 * @author Heinz Kredel 036 */ 037 038public class GenPolynomialTokenizerTest extends TestCase { 039 040 041 /** 042 * main. 043 */ 044 public static void main(String[] args) { 045 junit.textui.TestRunner.run(suite()); 046 } 047 048 049 /** 050 * Constructs a <CODE>GenPolynomialTokenizerTest</CODE> object. 051 * @param name String. 052 */ 053 public GenPolynomialTokenizerTest(String name) { 054 super(name); 055 } 056 057 058 /** 059 * suite. 060 */ 061 public static Test suite() { 062 TestSuite suite = new TestSuite(GenPolynomialTokenizerTest.class); 063 return suite; 064 } 065 066 067 RingFactory fac; // unused 068 069 070 GenPolynomialRing pfac; 071 072 073 GenSolvablePolynomialRing spfac; 074 075 076 GenPolynomialTokenizer parser; 077 078 079 Reader source; 080 081 082 @Override 083 protected void setUp() { 084 fac = null; 085 pfac = null; 086 parser = null; 087 source = null; 088 } 089 090 091 @Override 092 protected void tearDown() { 093 fac = null; 094 pfac = null; 095 parser = null; 096 source = null; 097 } 098 099 100 /** 101 * Test rational polynomial. 102 */ 103 @SuppressWarnings("unchecked") 104 public void testBigRational() { 105 String exam = "Rat(x,y,z) L " + "( " + "( 1 ), " + "( 0 ), " + "( 3/4 - 6/8 ), " 106 + "( 1 x + x^3 + 1/3 y z - x^3 ) " + " )"; 107 source = new StringReader(exam); 108 parser = new GenPolynomialTokenizer(source); 109 PolynomialList<BigRational> f = null; 110 try { 111 f = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 112 } catch (IOException e) { 113 fail("" + e); 114 } catch (ClassCastException e) { 115 fail("" + e); 116 } 117 //System.out.println("f = " + f); 118 assertTrue("f != null", f.list != null); 119 assertTrue("length( f ) = 4", f.list.size() == 4); 120 121 BigRational fac = new BigRational(0); 122 TermOrder tord = new TermOrder(TermOrder.INVLEX); 123 String[] vars = new String[] { "x", "y", "z" }; 124 int nvar = vars.length; 125 pfac = new GenPolynomialRing<BigRational>(fac, nvar, tord, vars); 126 assertEquals("pfac == f.ring", pfac, f.ring); 127 128 GenPolynomial<BigRational> a = f.list.get(0); 129 //System.out.println("a = " + a); 130 assertTrue("isONE( f.get(0) )", a.isONE()); 131 132 GenPolynomial<BigRational> b = f.list.get(1); 133 //System.out.println("b = " + b); 134 assertTrue("isZERO( f.get(1) )", b.isZERO()); 135 136 GenPolynomial<BigRational> c = f.list.get(2); 137 //System.out.println("c = " + c); 138 assertTrue("isZERO( f.get(2) )", c.isZERO()); 139 140 GenPolynomial<BigRational> d = f.list.get(3); 141 //System.out.println("d = " + d); 142 assertEquals("f.get(3).length() == 2", 2, d.length()); 143 } 144 145 146 /** 147 * Test integer polynomial. 148 */ 149 @SuppressWarnings("unchecked") 150 public void testBigInteger() { 151 String exam = "Int(x,y,z) L " + "( " + "( 1 ), " + "( 0 ), " + "( 3 2 - 6 ), " 152 + "( 1 x + x^3 + 3 y z - x^3 ) " + " )"; 153 source = new StringReader(exam); 154 parser = new GenPolynomialTokenizer(source); 155 PolynomialList<BigInteger> f = null; 156 try { 157 f = (PolynomialList<BigInteger>) parser.nextPolynomialSet(); 158 } catch (IOException e) { 159 fail("" + e); 160 } catch (ClassCastException e) { 161 fail("" + e); 162 } 163 //System.out.println("f = " + f); 164 assertTrue("f != null", f.list != null); 165 assertTrue("length( f ) = 4", f.list.size() == 4); 166 167 BigInteger fac = new BigInteger(0); 168 TermOrder tord = new TermOrder(TermOrder.INVLEX); 169 String[] vars = new String[] { "x", "y", "z" }; 170 int nvar = vars.length; 171 pfac = new GenPolynomialRing<BigInteger>(fac, nvar, tord, vars); 172 assertEquals("pfac == f.ring", pfac, f.ring); 173 174 175 GenPolynomial<BigInteger> a = f.list.get(0); 176 //System.out.println("a = " + a); 177 assertTrue("isONE( f.get(0) )", a.isONE()); 178 179 GenPolynomial<BigInteger> b = f.list.get(1); 180 //System.out.println("b = " + b); 181 assertTrue("isZERO( f.get(1) )", b.isZERO()); 182 183 GenPolynomial<BigInteger> c = f.list.get(2); 184 //System.out.println("c = " + c); 185 assertTrue("isZERO( f.get(2) )", c.isZERO()); 186 187 GenPolynomial<BigInteger> d = f.list.get(3); 188 //System.out.println("d = " + d); 189 assertEquals("f.get(3).length() == 2", 2, d.length()); 190 } 191 192 193 /** 194 * Test modular integer polynomial. 195 */ 196 @SuppressWarnings("unchecked") 197 public void testModInteger() { 198 String exam = "Mod 19 (x,y,z) L " + "( " + "( 1 ), " + "( 0 ), " + "( 3 2 - 6 + 19 ), " 199 + "( 1 x + x^3 + 3 y z - x^3 ) " + " )"; 200 source = new StringReader(exam); 201 parser = new GenPolynomialTokenizer(source); 202 PolynomialList<ModInteger> f = null; 203 try { 204 f = (PolynomialList<ModInteger>) parser.nextPolynomialSet(); 205 } catch (IOException e) { 206 fail("" + e); 207 } catch (ClassCastException e) { 208 fail("" + e); 209 } 210 //System.out.println("f = " + f); 211 assertTrue("f != null", f.list != null); 212 assertTrue("length( f ) = 4", f.list.size() == 4); 213 214 ModIntRing fac = new ModIntRing(19); 215 TermOrder tord = new TermOrder(TermOrder.INVLEX); 216 String[] vars = new String[] { "x", "y", "z" }; 217 int nvar = vars.length; 218 pfac = new GenPolynomialRing<ModInt>(fac, nvar, tord, vars); 219 //System.out.println("pfac = " + pfac); 220 //System.out.println("f.ring = " + f.ring); 221 assertEquals("pfac == f.ring", pfac, f.ring); 222 223 ModLongRing lfac = new ModLongRing(19); 224 assertFalse("fac != lfac", fac.equals(lfac)); 225 assertFalse("lfac != f.ring.coFac", lfac.equals(f.ring.coFac)); 226 227 GenPolynomial<ModInteger> a = f.list.get(0); 228 //System.out.println("a = " + a); 229 assertTrue("isONE( f.get(0) )", a.isONE()); 230 231 GenPolynomial<ModInteger> b = f.list.get(1); 232 //System.out.println("b = " + b); 233 assertTrue("isZERO( f.get(1) )", b.isZERO()); 234 235 GenPolynomial<ModInteger> c = f.list.get(2); 236 //System.out.println("c = " + c); 237 assertTrue("isZERO( f.get(2) )", c.isZERO()); 238 239 GenPolynomial<ModInteger> d = f.list.get(3); 240 //System.out.println("d = " + d); 241 assertEquals("f.get(3).length() == 2", 2, d.length()); 242 } 243 244 245 /** 246 * Test complex polynomial. 247 */ 248 @SuppressWarnings("unchecked") 249 public void testBigComplex() { 250 String exam = "Complex(x,y,z) L " + "( " + "( 1i0 ), " + "( 0i0 ), " + "( 3/4i2 - 6/8i2 ), " 251 + "( 1i0 x + x^3 + 1i3 y z - x^3 ) " + " )"; 252 source = new StringReader(exam); 253 parser = new GenPolynomialTokenizer(source); 254 PolynomialList<BigComplex> f = null; 255 try { 256 f = (PolynomialList<BigComplex>) parser.nextPolynomialSet(); 257 } catch (IOException e) { 258 fail("" + e); 259 } catch (ClassCastException e) { 260 fail("" + e); 261 } 262 //System.out.println("f = " + f); 263 assertTrue("f != null", f.list != null); 264 assertTrue("length( f ) = 4", f.list.size() == 4); 265 266 BigComplex fac = new BigComplex(0); 267 TermOrder tord = new TermOrder(TermOrder.INVLEX); 268 String[] vars = new String[] { "x", "y", "z" }; 269 int nvar = vars.length; 270 pfac = new GenPolynomialRing<BigComplex>(fac, nvar, tord, vars); 271 assertEquals("pfac == f.ring", pfac, f.ring); 272 273 274 GenPolynomial<BigComplex> a = f.list.get(0); 275 //System.out.println("a = " + a); 276 assertTrue("isONE( f.get(0) )", a.isONE()); 277 278 GenPolynomial<BigComplex> b = f.list.get(1); 279 //System.out.println("b = " + b); 280 assertTrue("isZERO( f.get(1) )", b.isZERO()); 281 282 GenPolynomial<BigComplex> c = f.list.get(2); 283 //System.out.println("c = " + c); 284 assertTrue("isZERO( f.get(2) )", c.isZERO()); 285 286 GenPolynomial<BigComplex> d = f.list.get(3); 287 //System.out.println("d = " + d); 288 assertEquals("f.get(3).length() == 2", 2, d.length()); 289 } 290 291 292 /** 293 * Test decimal polynomial. 294 */ 295 @SuppressWarnings("unchecked") 296 public void testBigDecimal() { 297 String exam = "D(x,y,z) L " + "( " + "( 1 ), " + "( 0 ), " + "( 0.25 * 0.25 - 0.25^2 ), " 298 + "( 1 x + x^3 + 0.3333333333333333333333 y z - x^3 ) " + " )"; 299 source = new StringReader(exam); 300 parser = new GenPolynomialTokenizer(source); 301 PolynomialList<BigDecimal> f = null; 302 try { 303 f = (PolynomialList<BigDecimal>) parser.nextPolynomialSet(); 304 } catch (IOException e) { 305 fail("" + e); 306 } catch (ClassCastException e) { 307 fail("" + e); 308 } 309 //System.out.println("f = " + f); 310 assertTrue("f != null", f.list != null); 311 assertTrue("length( f ) = 4", f.list.size() == 4); 312 313 BigDecimal fac = new BigDecimal(0); 314 TermOrder tord = new TermOrder(TermOrder.INVLEX); 315 String[] vars = new String[] { "x", "y", "z" }; 316 int nvar = vars.length; 317 pfac = new GenPolynomialRing<BigDecimal>(fac, nvar, tord, vars); 318 assertEquals("pfac == f.ring", pfac, f.ring); 319 320 GenPolynomial<BigDecimal> a = f.list.get(0); 321 //System.out.println("a = " + a); 322 assertTrue("isONE( f.get(0) )", a.isONE()); 323 324 GenPolynomial<BigDecimal> b = f.list.get(1); 325 //System.out.println("b = " + b); 326 assertTrue("isZERO( f.get(1) )", b.isZERO()); 327 328 GenPolynomial<BigDecimal> c = f.list.get(2); 329 //System.out.println("c = " + c); 330 assertTrue("isZERO( f.get(2) )", c.isZERO()); 331 332 GenPolynomial<BigDecimal> d = f.list.get(3); 333 //System.out.println("d = " + d); 334 assertEquals("f.get(3).length() == 2", 2, d.length()); 335 } 336 337 338 /** 339 * Test quaternion polynomial. 340 */ 341 @SuppressWarnings("unchecked") 342 public void testBigQuaternion() { 343 String exam = "Quat(x,y,z) L " + "( " + "( 1i0j0k0 ), " + "( 0i0j0k0 ), " 344 + "( 3/4i2j1k3 - 6/8i2j1k3 ), " + "( 1 x + x^3 + 1i2j3k4 y z - x^3 ) " + " )"; 345 source = new StringReader(exam); 346 parser = new GenPolynomialTokenizer(source); 347 PolynomialList<BigQuaternion> f = null; 348 try { 349 f = (PolynomialList<BigQuaternion>) parser.nextPolynomialSet(); 350 } catch (IOException e) { 351 fail("" + e); 352 } catch (ClassCastException e) { 353 fail("" + e); 354 } 355 //System.out.println("f = " + f); 356 assertTrue("f != null", f.list != null); 357 assertTrue("length( f ) = 4", f.list.size() == 4); 358 359 BigQuaternionRing fac = new BigQuaternionRing(); 360 TermOrder tord = new TermOrder(TermOrder.INVLEX); 361 String[] vars = new String[] { "x", "y", "z" }; 362 int nvar = vars.length; 363 pfac = new GenPolynomialRing<BigQuaternion>(fac, nvar, tord, vars); 364 assertEquals("pfac == f.ring", pfac, f.ring); 365 366 367 GenPolynomial<BigQuaternion> a = f.list.get(0); 368 //System.out.println("a = " + a); 369 assertTrue("isONE( f.get(0) )", a.isONE()); 370 371 GenPolynomial<BigQuaternion> b = f.list.get(1); 372 //System.out.println("b = " + b); 373 assertTrue("isZERO( f.get(1) )", b.isZERO()); 374 375 GenPolynomial<BigQuaternion> c = f.list.get(2); 376 //System.out.println("c = " + c); 377 assertTrue("isZERO( f.get(2) )", c.isZERO()); 378 379 GenPolynomial<BigQuaternion> d = f.list.get(3); 380 //System.out.println("d = " + d); 381 assertEquals("f.get(3).length() == 2", 2, d.length()); 382 } 383 384 385 /** 386 * Test rational solvable polynomial. 387 */ 388 @SuppressWarnings("unchecked") 389 public void testSolvableBigRational() { 390 String exam = "Rat(x,y,z) L " + "RelationTable " + "( " + " ( z ), ( y ), ( y z - 1 ) " + ") " + "( " 391 + " ( 1 ), " + " ( 0 ), " + " ( 3/4 - 6/8 ), " + " ( 1 x + x^3 + 1/3 y z - x^3 ) " 392 + " )"; 393 source = new StringReader(exam); 394 parser = new GenPolynomialTokenizer(source); 395 PolynomialList<BigRational> f = null; 396 try { 397 f = (PolynomialList<BigRational>) parser.nextSolvablePolynomialSet(); 398 } catch (IOException e) { 399 fail("" + e); 400 } catch (ClassCastException e) { 401 fail("" + e); 402 } 403 //System.out.println("f = " + f); 404 //System.out.println("f.ring.table = " + ((GenSolvablePolynomialRing)f.ring).table); 405 assertTrue("f != null", f.list != null); 406 assertTrue("length( f ) = 4", f.list.size() == 4); 407 408 BigRational fac = new BigRational(0); 409 TermOrder tord = new TermOrder(TermOrder.INVLEX); 410 String[] vars = new String[] { "x", "y", "z" }; 411 int nvar = vars.length; 412 spfac = new GenSolvablePolynomialRing<BigRational>(fac, nvar, tord, vars); 413 List<GenSolvablePolynomial<BigRational>> rel = new ArrayList<GenSolvablePolynomial<BigRational>>(3); 414 rel.add(spfac.parse("z")); 415 rel.add(spfac.parse("y")); 416 rel.add(spfac.parse("y z - 1")); 417 spfac.addSolvRelations(rel); 418 assertEquals("spfac == f.ring", spfac, f.ring); 419 //System.out.println("spfac = " + spfac); 420 //System.out.println("spfac.table = " + spfac.table); 421 422 423 GenSolvablePolynomial<BigRational> a = f.castToSolvableList().get(0); 424 //System.out.println("a = " + a); 425 assertTrue("isZERO( f.get(0) )", a.isONE()); 426 427 GenSolvablePolynomial<BigRational> b = f.castToSolvableList().get(1); 428 //System.out.println("b = " + b); 429 assertTrue("isZERO( f.get(1) )", b.isZERO()); 430 431 GenSolvablePolynomial<BigRational> c = f.castToSolvableList().get(2); 432 //System.out.println("c = " + c); 433 assertTrue("isONE( f.get(2) )", c.isZERO()); 434 435 GenSolvablePolynomial<BigRational> d = f.castToSolvableList().get(3); 436 //System.out.println("d = " + d); 437 assertEquals("f.get(3).length() == 2", 2, d.length()); 438 } 439 440 441 /** 442 * Test mod integer solvable polynomial. 443 */ 444 @SuppressWarnings("unchecked") 445 public void testSolvableModInteger() { 446 String exam = "Mod 19 (x,y,z) L " + "RelationTable " + "( " + " ( z ), ( y ), ( y z - 1 ) " + ") " 447 + "( " + "( 1 ), " + "( 0 ), " + "( 3 2 - 6 + 19 ), " + "( 1 x + x^3 + 3 y z - x^3 ) " 448 + " )"; 449 source = new StringReader(exam); 450 parser = new GenPolynomialTokenizer(source); 451 PolynomialList<ModInteger> f = null; 452 try { 453 f = (PolynomialList<ModInteger>) parser.nextSolvablePolynomialSet(); 454 } catch (IOException e) { 455 fail("" + e); 456 } catch (ClassCastException e) { 457 fail("" + e); 458 } 459 //System.out.println("f = " + f); 460 //System.out.println("f.ring.table = " + ((GenSolvablePolynomialRing)f.ring).table); 461 assertTrue("f != null", f.list != null); 462 assertTrue("length( f ) = 4", f.list.size() == 4); 463 464 ModIntRing fac = new ModIntRing(19); 465 TermOrder tord = new TermOrder(TermOrder.INVLEX); 466 String[] vars = new String[] { "x", "y", "z" }; 467 int nvar = vars.length; 468 spfac = new GenSolvablePolynomialRing<ModInt>(fac, nvar, tord, vars); 469 List<GenSolvablePolynomial<ModLong>> rel = new ArrayList<GenSolvablePolynomial<ModLong>>(3); 470 rel.add(spfac.parse("z")); 471 rel.add(spfac.parse("y")); 472 rel.add(spfac.parse("y z - 1")); 473 spfac.addSolvRelations(rel); 474 assertEquals("spfac == f.ring", spfac, f.ring); 475 //System.out.println("spfac = " + spfac); 476 //System.out.println("spfac.table = " + spfac.table); 477 478 479 GenSolvablePolynomial<ModInteger> a = f.castToSolvableList().get(0); 480 //System.out.println("a = " + a); 481 assertTrue("isZERO( f.get(0) )", a.isONE()); 482 483 GenSolvablePolynomial<ModInteger> b = f.castToSolvableList().get(1); 484 //System.out.println("b = " + b); 485 assertTrue("isZERO( f.get(1) )", b.isZERO()); 486 487 GenSolvablePolynomial<ModInteger> c = f.castToSolvableList().get(2); 488 //System.out.println("c = " + c); 489 assertTrue("isONE( f.get(2) )", c.isZERO()); 490 491 GenSolvablePolynomial<ModInteger> d = f.castToSolvableList().get(3); 492 //System.out.println("d = " + d); 493 assertEquals("f.get(3).length() == 2", 2, d.length()); 494 } 495 496 497 /** 498 * Test integer polynomial module. 499 */ 500 @SuppressWarnings("unchecked") 501 public void testBigIntegerModule() { 502 String exam = "Int(x,y,z) L " + "( " + " ( " + " ( 1 ), " + " ( 0 ), " + " ( 3 2 - 6 ), " 503 + " ( 1 x + x^3 + 3 y z - x^3 ) " + " ), " + " ( ( 1 ), ( 0 ) ) " + ")"; 504 source = new StringReader(exam); 505 parser = new GenPolynomialTokenizer(source); 506 ModuleList<BigInteger> m = null; 507 try { 508 m = (ModuleList<BigInteger>) parser.nextSubModuleSet(); 509 } catch (IOException e) { 510 fail("" + e); 511 } catch (ClassCastException e) { 512 fail("" + e); 513 } 514 //System.out.println("m = " + m); 515 assertTrue("m != null", m.list != null); 516 assertTrue("length( m ) = 2", m.list.size() == 2); 517 assertTrue("length( m[0] ) = 4", ((List) m.list.get(0)).size() == 4); 518 519 520 BigInteger fac = new BigInteger(0); 521 TermOrder tord = new TermOrder(TermOrder.INVLEX); 522 String[] vars = new String[] { "x", "y", "z" }; 523 int nvar = vars.length; 524 pfac = new GenPolynomialRing<BigInteger>(fac, nvar, tord, vars); 525 assertEquals("pfac == m.ring", pfac, m.ring); 526 527 List<List<GenPolynomial<BigInteger>>> rows = m.list; 528 List<GenPolynomial<BigInteger>> f; 529 530 f = rows.get(0); 531 GenPolynomial<BigInteger> a = f.get(0); 532 //System.out.println("a = " + a); 533 assertTrue("isONE( f.get(0) )", a.isONE()); 534 535 GenPolynomial<BigInteger> b = f.get(1); 536 //System.out.println("b = " + b); 537 assertTrue("isZERO( f.get(1) )", b.isZERO()); 538 539 GenPolynomial<BigInteger> c = f.get(2); 540 //System.out.println("c = " + c); 541 assertTrue("isZERO( f.get(2) )", c.isZERO()); 542 543 GenPolynomial<BigInteger> d = f.get(3); 544 //System.out.println("d = " + d); 545 assertEquals("f.get(3).length() == 2", 2, d.length()); 546 547 f = rows.get(1); 548 assertTrue("length( f ) = 4", f.size() == 4); 549 550 a = f.get(0); 551 //System.out.println("a = " + a); 552 assertTrue("isONE( f.get(0) )", a.isONE()); 553 554 b = f.get(1); 555 //System.out.println("b = " + b); 556 assertTrue("isZERO( f.get(1) )", b.isZERO()); 557 558 c = f.get(2); 559 //System.out.println("c = " + c); 560 assertTrue("isZERO( f.get(2) )", c.isZERO()); 561 562 d = f.get(3); 563 //System.out.println("c = " + d); 564 assertTrue("isZERO( f.get(3) )", d.isZERO()); 565 } 566 567 568 /** 569 * Test rational solvable polynomial module. 570 */ 571 @SuppressWarnings("unchecked") 572 public void testBigRationalSolvableModule() { 573 String exam = "Rat(x,y,z) L " + "RelationTable " + "( " + " ( z ), ( y ), ( y z - 1 ) " + ") " + "( " 574 + " ( " + " ( 1 ), " + " ( 0 ), " + " ( 3/4 - 6/8 ), " 575 + " ( 1 x + x^3 + 1/3 y z - x^3 ) " + " ), " + " ( ( x ), ( 1 ), ( 0 ) ) " + " )"; 576 source = new StringReader(exam); 577 parser = new GenPolynomialTokenizer(source); 578 ModuleList<BigRational> m = null; 579 try { 580 m = (ModuleList<BigRational>) parser.nextSolvableSubModuleSet(); 581 } catch (IOException e) { 582 fail("" + e); 583 } catch (ClassCastException e) { 584 fail("" + e); 585 } 586 //System.out.println("m = " + m); 587 //System.out.println("m.ring = " + m.ring); 588 assertTrue("m != null", m.list != null); 589 assertTrue("length( m ) = 2", m.list.size() == 2); 590 assertTrue("length( m[0] ) = 4", ((List) m.list.get(0)).size() == 4); 591 592 BigRational fac = new BigRational(0); 593 TermOrder tord = new TermOrder(TermOrder.INVLEX); 594 String[] vars = new String[] { "x", "y", "z" }; 595 int nvar = vars.length; 596 spfac = new GenSolvablePolynomialRing<BigRational>(fac, nvar, tord, vars); 597 List<GenSolvablePolynomial<ModLong>> rel = new ArrayList<GenSolvablePolynomial<ModLong>>(3); 598 rel.add(spfac.parse("z")); 599 rel.add(spfac.parse("y")); 600 rel.add(spfac.parse("y z - 1")); 601 spfac.addSolvRelations(rel); 602 assertEquals("spfac == m.ring", spfac, m.ring); 603 604 List<List<GenSolvablePolynomial<BigRational>>> rows = m.castToSolvableList(); 605 List<GenSolvablePolynomial<BigRational>> f; 606 607 f = rows.get(0); 608 GenSolvablePolynomial<BigRational> a = f.get(0); 609 //System.out.println("a = " + a); 610 assertTrue("isONE( f.get(0) )", a.isONE()); 611 612 GenSolvablePolynomial<BigRational> b = f.get(1); 613 //System.out.println("b = " + b); 614 assertTrue("isZERO( f.get(1) )", b.isZERO()); 615 616 GenSolvablePolynomial<BigRational> c = f.get(2); 617 //System.out.println("c = " + c); 618 assertTrue("isZERO( f.get(2) )", c.isZERO()); 619 620 GenSolvablePolynomial<BigRational> d = f.get(3); 621 //System.out.println("d = " + d); 622 assertEquals("f.get(3).length() == 2", 2, d.length()); 623 624 f = rows.get(1); 625 assertTrue("length( f ) = 4", f.size() == 4); 626 627 a = f.get(0); 628 //System.out.println("a = " + a); 629 assertTrue("!isONE( f.get(0) )", !a.isONE()); 630 631 b = f.get(1); 632 //System.out.println("b = " + b); 633 assertTrue("isONE( f.get(1) )", b.isONE()); 634 635 c = f.get(2); 636 //System.out.println("c = " + c); 637 assertTrue("isZERO( f.get(2) )", c.isZERO()); 638 639 d = f.get(3); 640 //System.out.println("d = " + d); 641 assertTrue("isZERO( f.get(3) )", d.isZERO()); 642 643 } 644 645 646 /** 647 * Test algebraic number polynomial. <b>Note: </b> Syntax no more supported. 648 */ 649 @SuppressWarnings("unchecked") 650 public void removedTestAlgebraicNumber() { 651 String exam = "AN[ (i) ( i^2 + 1 ) ] (x,y,z) L " + "( " + "( 1 ), " + "( _i_ ), " + "( 0 ), " 652 + "( _i^2_ + 1 ), " + "( 1 x + x^3 + _3 i_ y z - x^3 ) " + " )"; 653 source = new StringReader(exam); 654 parser = new GenPolynomialTokenizer(source); 655 PolynomialList<AlgebraicNumber<BigRational>> f = null; 656 AlgebraicNumberRing<BigRational> fac = null; 657 try { 658 f = (PolynomialList<AlgebraicNumber<BigRational>>) parser.nextPolynomialSet(); 659 fac = (AlgebraicNumberRing<BigRational>) f.ring.coFac; 660 } catch (IOException e) { 661 fail("" + e); 662 } catch (ClassCastException e) { 663 fail("" + e); 664 } 665 //System.out.println("f = " + f); 666 assertTrue("f != null", f.list != null); 667 assertTrue("length( f ) = 5", f.list.size() == 5); 668 669 TermOrder tord = new TermOrder(TermOrder.INVLEX); 670 String[] vars = new String[] { "x", "y", "z" }; 671 int nvar = vars.length; 672 pfac = new GenPolynomialRing<AlgebraicNumber<BigRational>>(fac, nvar, tord, vars); 673 assertEquals("pfac == f.ring", pfac, f.ring); 674 675 GenPolynomial<AlgebraicNumber<BigRational>> a = f.list.get(0); 676 //System.out.println("a = " + a); 677 assertTrue("isONE( f.get(0) )", a.isONE()); 678 679 GenPolynomial<AlgebraicNumber<BigRational>> b = f.list.get(1); 680 //System.out.println("b = " + b); 681 assertTrue("isUnit( f.get(1) )", b.isUnit()); 682 683 b = b.monic(); 684 //System.out.println("b = " + b); 685 assertTrue("isUnit( f.get(1) )", b.isONE()); 686 687 GenPolynomial<AlgebraicNumber<BigRational>> c = f.list.get(2); 688 //System.out.println("c = " + c); 689 assertTrue("isZERO( f.get(1) )", c.isZERO()); 690 691 GenPolynomial<AlgebraicNumber<BigRational>> d = f.list.get(3); 692 //System.out.println("d = " + d); 693 assertTrue("isZERO( f.get(2) )", d.isZERO()); 694 695 GenPolynomial<AlgebraicNumber<BigRational>> e = f.list.get(4); 696 //System.out.println("e = " + e); 697 assertEquals("f.get(3).length() == 2", 2, e.length()); 698 } 699 700 701 /** 702 * Test Galois field coefficient polynomial. <b>Note: </b> Syntax no more 703 * supported. 704 */ 705 @SuppressWarnings("unchecked") 706 public void removedTestGaloisField() { 707 String exam = "AN[ 19 (i) ( i^2 + 1 ) ] (x,y,z) L " + "( " + "( 20 ), " + "( _i_ ), " + "( 0 ), " 708 + "( _i^2_ + 20 ), " + "( 1 x + x^3 + _3 i_ y z - x^3 ) " + " )"; 709 source = new StringReader(exam); 710 parser = new GenPolynomialTokenizer(source); 711 PolynomialList<AlgebraicNumber<ModInteger>> f = null; 712 AlgebraicNumberRing<ModInteger> fac = null; 713 try { 714 f = (PolynomialList<AlgebraicNumber<ModInteger>>) parser.nextPolynomialSet(); 715 fac = (AlgebraicNumberRing<ModInteger>) f.ring.coFac; 716 } catch (IOException e) { 717 fail("" + e); 718 } catch (ClassCastException e) { 719 fail("" + e); 720 } 721 //System.out.println("f = " + f); 722 assertTrue("f != null", f.list != null); 723 assertTrue("length( f ) = 5", f.list.size() == 5); 724 725 TermOrder tord = new TermOrder(TermOrder.INVLEX); 726 String[] vars = new String[] { "x", "y", "z" }; 727 int nvar = vars.length; 728 pfac = new GenPolynomialRing<AlgebraicNumber<ModInteger>>(fac, nvar, tord, vars); 729 assertEquals("pfac == f.ring", pfac, f.ring); 730 731 GenPolynomial<AlgebraicNumber<ModInteger>> a = f.list.get(0); 732 //System.out.println("a = " + a); 733 assertTrue("isONE( f.get(0) )", a.isONE()); 734 735 GenPolynomial<AlgebraicNumber<ModInteger>> b = f.list.get(1); 736 //System.out.println("b = " + b); 737 assertTrue("isUnit( f.get(1) )", b.isUnit()); 738 739 b = b.monic(); 740 //System.out.println("b = " + b); 741 assertTrue("isUnit( f.get(1) )", b.isONE()); 742 743 GenPolynomial<AlgebraicNumber<ModInteger>> c = f.list.get(2); 744 //System.out.println("c = " + c); 745 assertTrue("isZERO( f.get(1) )", c.isZERO()); 746 747 GenPolynomial<AlgebraicNumber<ModInteger>> d = f.list.get(3); 748 //System.out.println("d = " + d); 749 assertTrue("isZERO( f.get(2) )", d.isZERO()); 750 751 GenPolynomial<AlgebraicNumber<ModInteger>> e = f.list.get(4); 752 //System.out.println("e = " + e); 753 assertEquals("f.get(3).length() == 2", 2, e.length()); 754 } 755 756 757 /** 758 * Test algebraic number polynomial with braces. 759 */ 760 @SuppressWarnings("unchecked") 761 public void testAlgebraicNumberBrace() { 762 String exam = "AN[ (i) ( i^2 + 1 ) ] (x,y,z) L " + "( " + "( 1 ), " + "( { i } ), " + "( 0 ), " 763 + "( { i^2 } + 1 ), " + "( 1 x + x^3 + { 3 i }^2 y z - x^3 ) " + " )"; 764 source = new StringReader(exam); 765 parser = new GenPolynomialTokenizer(source); 766 PolynomialList<AlgebraicNumber<BigRational>> f = null; 767 AlgebraicNumberRing<BigRational> fac = null; 768 try { 769 f = (PolynomialList<AlgebraicNumber<BigRational>>) parser.nextPolynomialSet(); 770 fac = (AlgebraicNumberRing<BigRational>) f.ring.coFac; 771 } catch (IOException e) { 772 fail("" + e); 773 } catch (ClassCastException e) { 774 fail("" + e); 775 } 776 //System.out.println("f = " + f); 777 assertTrue("f != null", f.list != null); 778 assertTrue("length( f ) = 5", f.list.size() == 5); 779 780 TermOrder tord = new TermOrder(TermOrder.INVLEX); 781 String[] vars = new String[] { "x", "y", "z" }; 782 int nvar = vars.length; 783 pfac = new GenPolynomialRing<AlgebraicNumber<BigRational>>(fac, nvar, tord, vars); 784 assertEquals("pfac == f.ring", pfac, f.ring); 785 786 GenPolynomial<AlgebraicNumber<BigRational>> a = f.list.get(0); 787 //System.out.println("a = " + a); 788 assertTrue("isONE( f.get(0) )", a.isONE()); 789 790 GenPolynomial<AlgebraicNumber<BigRational>> b = f.list.get(1); 791 //System.out.println("b = " + b); 792 assertTrue("isUnit( f.get(1) )", b.isUnit()); 793 794 b = b.monic(); 795 //System.out.println("b = " + b); 796 assertTrue("isUnit( f.get(1) )", b.isONE()); 797 798 GenPolynomial<AlgebraicNumber<BigRational>> c = f.list.get(2); 799 //System.out.println("c = " + c); 800 assertTrue("isZERO( f.get(1) )", c.isZERO()); 801 802 GenPolynomial<AlgebraicNumber<BigRational>> d = f.list.get(3); 803 //System.out.println("d = " + d); 804 assertTrue("isZERO( f.get(2) )", d.isZERO()); 805 806 GenPolynomial<AlgebraicNumber<BigRational>> e = f.list.get(4); 807 //System.out.println("e = " + e); 808 assertEquals("f.get(3).length() == 2", 2, e.length()); 809 } 810 811 812 /** 813 * Test Galois field coefficient polynomial with braces. 814 */ 815 @SuppressWarnings("unchecked") 816 public void testGaloisFieldBrace() { 817 String exam = "AN[ 19 (i) ( i^2 + 1 ) ] (x,y,z) L " + "( " + "( 20 ), " + "( { i } ), " + "( 0 ), " 818 + "( { i^2 } + 20 ), " + "( 1 x + x^3 + { 3 i }^3 y z + { -1 }^3 x^3 ) " + " )"; 819 source = new StringReader(exam); 820 parser = new GenPolynomialTokenizer(source); 821 PolynomialList<AlgebraicNumber<ModInteger>> f = null; 822 AlgebraicNumberRing<ModInteger> fac = null; 823 try { 824 f = (PolynomialList<AlgebraicNumber<ModInteger>>) parser.nextPolynomialSet(); 825 fac = (AlgebraicNumberRing<ModInteger>) f.ring.coFac; 826 } catch (IOException e) { 827 fail("" + e); 828 } catch (ClassCastException e) { 829 fail("" + e); 830 } 831 //System.out.println("f = " + f); 832 assertTrue("f != null", f.list != null); 833 assertTrue("length( f ) = 5", f.list.size() == 5); 834 835 TermOrder tord = new TermOrder(TermOrder.INVLEX); 836 String[] vars = new String[] { "x", "y", "z" }; 837 int nvar = vars.length; 838 pfac = new GenPolynomialRing<AlgebraicNumber<ModInteger>>(fac, nvar, tord, vars); 839 assertEquals("pfac == f.ring", pfac, f.ring); 840 841 GenPolynomial<AlgebraicNumber<ModInteger>> a = f.list.get(0); 842 //System.out.println("a = " + a); 843 assertTrue("isONE( f.get(0) )", a.isONE()); 844 845 GenPolynomial<AlgebraicNumber<ModInteger>> b = f.list.get(1); 846 //System.out.println("b = " + b); 847 assertTrue("isUnit( f.get(1) )", b.isUnit()); 848 849 b = b.monic(); 850 //System.out.println("b = " + b); 851 assertTrue("isUnit( f.get(1) )", b.isONE()); 852 853 GenPolynomial<AlgebraicNumber<ModInteger>> c = f.list.get(2); 854 //System.out.println("c = " + c); 855 assertTrue("isZERO( f.get(1) )", c.isZERO()); 856 857 GenPolynomial<AlgebraicNumber<ModInteger>> d = f.list.get(3); 858 //System.out.println("d = " + d); 859 assertTrue("isZERO( f.get(2) )", d.isZERO()); 860 861 GenPolynomial<AlgebraicNumber<ModInteger>> e = f.list.get(4); 862 //System.out.println("e = " + e); 863 assertEquals("f.get(3).length() == 2", 2, e.length()); 864 } 865 866 867 /** 868 * Test Galois field coefficient polynomial without braces. 869 */ 870 @SuppressWarnings("unchecked") 871 public void testGaloisFieldWoBrace() { 872 String exam = "AN[ 19 (i) ( i^2 + 1 ) ] (x,y,z) L " + "( " + "( 20 ), " + "( i ), " + "( 0 ), " 873 + "( i^2 + 20 ), " + "( 1 x + x^3 + 3^3 i^3 y z - (x)^3 ) " + " )"; 874 source = new StringReader(exam); 875 parser = new GenPolynomialTokenizer(source); 876 PolynomialList<AlgebraicNumber<ModInteger>> f = null; 877 AlgebraicNumberRing<ModInteger> fac = null; 878 try { 879 f = (PolynomialList<AlgebraicNumber<ModInteger>>) parser.nextPolynomialSet(); 880 fac = (AlgebraicNumberRing<ModInteger>) f.ring.coFac; 881 } catch (IOException e) { 882 fail("" + e); 883 } catch (ClassCastException e) { 884 fail("" + e); 885 } 886 //System.out.println("f = " + f); 887 assertTrue("f != null", f.list != null); 888 assertTrue("length( f ) = 5", f.list.size() == 5); 889 890 TermOrder tord = new TermOrder(TermOrder.INVLEX); 891 String[] vars = new String[] { "x", "y", "z" }; 892 int nvar = vars.length; 893 pfac = new GenPolynomialRing<AlgebraicNumber<ModInteger>>(fac, nvar, tord, vars); 894 assertEquals("pfac == f.ring", pfac, f.ring); 895 896 GenPolynomial<AlgebraicNumber<ModInteger>> a = f.list.get(0); 897 //System.out.println("a = " + a); 898 assertTrue("isONE( f.get(0) )", a.isONE()); 899 900 GenPolynomial<AlgebraicNumber<ModInteger>> b = f.list.get(1); 901 //System.out.println("b = " + b); 902 assertTrue("isUnit( f.get(1) )", b.isUnit()); 903 904 b = b.monic(); 905 //System.out.println("b = " + b); 906 assertTrue("isUnit( f.get(1) )", b.isONE()); 907 908 GenPolynomial<AlgebraicNumber<ModInteger>> c = f.list.get(2); 909 //System.out.println("c = " + c); 910 assertTrue("isZERO( f.get(1) )", c.isZERO()); 911 912 GenPolynomial<AlgebraicNumber<ModInteger>> d = f.list.get(3); 913 //System.out.println("d = " + d); 914 assertTrue("isZERO( f.get(2) )", d.isZERO()); 915 916 GenPolynomial<AlgebraicNumber<ModInteger>> e = f.list.get(4); 917 //System.out.println("e = " + e); 918 assertEquals("f.get(3).length() == 2", 2, e.length()); 919 } 920 921 922 /** 923 * Test rational polynomial with generic coefficients. 924 */ 925 @SuppressWarnings("unchecked") 926 public void testBigRationalGeneric() { 927 String exam = "Rat(x,y,z) L " + "( " + "( 1^3 ), " + "( 0^3 ), " + "( { 3/4 }^2 - 6/8^2 ), " 928 + "( { 1 }^2 x + x^3 + 1/3 y z - x^3 ), " 929 + "( 1.0001 - 0.0001 + { 0.25 }**2 - 1/4^2 ) " + " )"; 930 source = new StringReader(exam); 931 parser = new GenPolynomialTokenizer(source); 932 PolynomialList<BigRational> f = null; 933 try { 934 f = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 935 } catch (IOException e) { 936 fail("" + e); 937 } catch (ClassCastException e) { 938 fail("" + e); 939 } 940 //System.out.println("f = " + f); 941 assertTrue("f != null", f.list != null); 942 assertTrue("length( f ) = 5", f.list.size() == 5); 943 944 BigRational fac = new BigRational(0); 945 TermOrder tord = new TermOrder(TermOrder.INVLEX); 946 String[] vars = new String[] { "x", "y", "z" }; 947 int nvar = vars.length; 948 pfac = new GenPolynomialRing<BigRational>(fac, nvar, tord, vars); 949 assertEquals("pfac == f.ring", pfac, f.ring); 950 951 952 GenPolynomial<BigRational> a = f.list.get(0); 953 //System.out.println("a = " + a); 954 assertTrue("isONE( f.get(0) )", a.isONE()); 955 956 GenPolynomial<BigRational> b = f.list.get(1); 957 //System.out.println("b = " + b); 958 assertTrue("isZERO( f.get(1) )", b.isZERO()); 959 960 GenPolynomial<BigRational> c = f.list.get(2); 961 //System.out.println("c = " + c); 962 assertTrue("isZERO( f.get(2) )", c.isZERO()); 963 964 GenPolynomial<BigRational> d = f.list.get(3); 965 //System.out.println("d = " + d); 966 assertEquals("f.get(3).length() == 2", 2, d.length()); 967 968 GenPolynomial<BigRational> e = f.list.get(4); 969 //System.out.println("e = " + e); 970 assertTrue("isONE( f.get(4) )", e.isONE()); 971 } 972 973 974 /** 975 * Test rational polynomial with errors. 976 */ 977 @SuppressWarnings("unchecked") 978 public void testBigRationalErorr() { 979 // brace mismatch 980 String exam = "Rat(x,y,z) L " + "( " + "( { 3 ), " + " )"; 981 source = new StringReader(exam); 982 parser = new GenPolynomialTokenizer(source); 983 PolynomialList<BigRational> f = null; 984 try { 985 f = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 986 } catch (IOException e) { 987 fail("" + e); 988 } catch (ClassCastException e) { 989 fail("" + e); 990 } catch (InvalidExpressionException e) { 991 // pass 992 } 993 994 // brace mismatch 995 exam = "Rat(x,y,z) L " + "( " + "( 3 } ), " + " )"; 996 source = new StringReader(exam); 997 parser = new GenPolynomialTokenizer(source); 998 f = null; 999 try { 1000 f = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 1001 } catch (IOException e) { 1002 fail("" + e); 1003 } catch (ClassCastException e) { 1004 fail("" + e); 1005 } catch (InvalidExpressionException e) { 1006 // pass 1007 } 1008 1009 // invalid nesting 1010 exam = "Rat(x,y,z) L " + "( " + "( { x } ), " + " )"; 1011 source = new StringReader(exam); 1012 parser = new GenPolynomialTokenizer(source); 1013 f = null; 1014 try { 1015 f = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 1016 } catch (IOException e) { 1017 fail("" + e); 1018 } catch (ClassCastException e) { 1019 fail("" + e); 1020 } catch (InvalidExpressionException e) { 1021 // pass 1022 } 1023 1024 // unknown variable 1025 exam = "Rat(x,y,z) L " + "( " + "( w ), " + " )"; 1026 source = new StringReader(exam); 1027 parser = new GenPolynomialTokenizer(source); 1028 f = null; 1029 try { 1030 f = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 1031 } catch (IOException e) { 1032 fail("" + e); 1033 } catch (ClassCastException e) { 1034 fail("" + e); 1035 } catch (InvalidExpressionException e) { 1036 // pass 1037 } 1038 assertTrue("f != null", f == null); 1039 } 1040 1041 1042 /** 1043 * Test variables. 1044 */ 1045 public void testVariables() { 1046 String vars = "a,b,c,d,e"; 1047 String[] variables = GenPolynomialTokenizer.variableList(vars); 1048 assertTrue("len == 5: ", variables.length == 5); 1049 1050 String expr = "a,b,c,d,e"; 1051 variables = GenPolynomialTokenizer.expressionVariables(expr); 1052 //System.out.println("variables = " + Arrays.toString(variables) + ", len = " + variables.length); 1053 assertTrue("len == 5: ", variables.length == 5); 1054 1055 expr = "b,c,d,e*a,b,c,d"; 1056 variables = GenPolynomialTokenizer.expressionVariables(expr); 1057 //System.out.println("variables = " + Arrays.toString(variables) + ", len = " + variables.length); 1058 assertTrue("len == 5: ", variables.length == 5); 1059 1060 expr = "b + c^3 - d + e*a - b/c +d"; 1061 variables = GenPolynomialTokenizer.expressionVariables(expr); 1062 //System.out.println("variables = " + Arrays.toString(variables) + ", len = " + variables.length); 1063 assertTrue("len == 5: ", variables.length == 5); 1064 1065 expr = "(b + c)^3 - { d + e*a } / [ b/c + d ] + (b + 3f + f*3 + f3)"; 1066 variables = GenPolynomialTokenizer.expressionVariables(expr); 1067 //System.out.println("variables = " + Arrays.toString(variables) + ", len = " + variables.length); 1068 assertTrue("len == 7: ", variables.length == 7); 1069 } 1070 1071}