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