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