001/* 002 * $Id: GenPolynomialTokenizerTest.java 5863 2018-07-20 11:13:34Z 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 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.structure.RingFactory; 025 026import junit.framework.Test; 027import junit.framework.TestCase; 028import junit.framework.TestSuite; 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 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 BigQuaternionRing fac = new BigQuaternionRing(); 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 List<GenSolvablePolynomial<BigRational>> rel = new ArrayList<GenSolvablePolynomial<BigRational>>(3); 406 rel.add(spfac.parse("z")); 407 rel.add(spfac.parse("y")); 408 rel.add(spfac.parse("y z - 1")); 409 spfac.addSolvRelations(rel); 410 assertEquals("spfac == f.ring", spfac, f.ring); 411 //System.out.println("spfac = " + spfac); 412 //System.out.println("spfac.table = " + spfac.table); 413 414 415 GenSolvablePolynomial<BigRational> a = f.castToSolvableList().get(0); 416 //System.out.println("a = " + a); 417 assertTrue("isZERO( f.get(0) )", a.isONE()); 418 419 GenSolvablePolynomial<BigRational> b = f.castToSolvableList().get(1); 420 //System.out.println("b = " + b); 421 assertTrue("isZERO( f.get(1) )", b.isZERO()); 422 423 GenSolvablePolynomial<BigRational> c = f.castToSolvableList().get(2); 424 //System.out.println("c = " + c); 425 assertTrue("isONE( f.get(2) )", c.isZERO()); 426 427 GenSolvablePolynomial<BigRational> d = f.castToSolvableList().get(3); 428 //System.out.println("d = " + d); 429 assertEquals("f.get(3).length() == 2", 2, d.length()); 430 } 431 432 433 /** 434 * Test mod integer solvable polynomial. 435 */ 436 @SuppressWarnings("unchecked") 437 public void testSolvableModInteger() { 438 String exam = "Mod 19 (x,y,z) L " + "RelationTable " + "( " + " ( z ), ( y ), ( y z - 1 ) " + ") " 439 + "( " + "( 1 ), " + "( 0 ), " + "( 3 2 - 6 + 19 ), " + "( 1 x + x^3 + 3 y z - x^3 ) " 440 + " )"; 441 source = new StringReader(exam); 442 parser = new GenPolynomialTokenizer(source); 443 PolynomialList<ModInteger> f = null; 444 try { 445 f = (PolynomialList<ModInteger>) parser.nextSolvablePolynomialSet(); 446 } catch (IOException e) { 447 fail("" + e); 448 } catch (ClassCastException e) { 449 fail("" + e); 450 } 451 //System.out.println("f = " + f); 452 //System.out.println("f.ring.table = " + ((GenSolvablePolynomialRing)f.ring).table); 453 assertTrue("f != null", f.list != null); 454 assertTrue("length( f ) = 4", f.list.size() == 4); 455 456 ModLongRing fac = new ModLongRing(19); 457 TermOrder tord = new TermOrder(TermOrder.INVLEX); 458 String[] vars = new String[] { "x", "y", "z" }; 459 int nvar = vars.length; 460 spfac = new GenSolvablePolynomialRing<ModLong>(fac, nvar, tord, vars); 461 List<GenSolvablePolynomial<ModLong>> rel = new ArrayList<GenSolvablePolynomial<ModLong>>(3); 462 rel.add(spfac.parse("z")); 463 rel.add(spfac.parse("y")); 464 rel.add(spfac.parse("y z - 1")); 465 spfac.addSolvRelations(rel); 466 assertEquals("spfac == f.ring", spfac, f.ring); 467 //System.out.println("spfac = " + spfac); 468 //System.out.println("spfac.table = " + spfac.table); 469 470 471 GenSolvablePolynomial<ModInteger> a = f.castToSolvableList().get(0); 472 //System.out.println("a = " + a); 473 assertTrue("isZERO( f.get(0) )", a.isONE()); 474 475 GenSolvablePolynomial<ModInteger> b = f.castToSolvableList().get(1); 476 //System.out.println("b = " + b); 477 assertTrue("isZERO( f.get(1) )", b.isZERO()); 478 479 GenSolvablePolynomial<ModInteger> c = f.castToSolvableList().get(2); 480 //System.out.println("c = " + c); 481 assertTrue("isONE( f.get(2) )", c.isZERO()); 482 483 GenSolvablePolynomial<ModInteger> d = f.castToSolvableList().get(3); 484 //System.out.println("d = " + d); 485 assertEquals("f.get(3).length() == 2", 2, d.length()); 486 } 487 488 489 /** 490 * Test integer polynomial module. 491 */ 492 @SuppressWarnings("unchecked") 493 public void testBigIntegerModule() { 494 String exam = "Int(x,y,z) L " + "( " + " ( " + " ( 1 ), " + " ( 0 ), " + " ( 3 2 - 6 ), " 495 + " ( 1 x + x^3 + 3 y z - x^3 ) " + " ), " + " ( ( 1 ), ( 0 ) ) " + ")"; 496 source = new StringReader(exam); 497 parser = new GenPolynomialTokenizer(source); 498 ModuleList<BigInteger> m = null; 499 try { 500 m = (ModuleList<BigInteger>) parser.nextSubModuleSet(); 501 } catch (IOException e) { 502 fail("" + e); 503 } catch (ClassCastException e) { 504 fail("" + e); 505 } 506 //System.out.println("m = " + m); 507 assertTrue("m != null", m.list != null); 508 assertTrue("length( m ) = 2", m.list.size() == 2); 509 assertTrue("length( m[0] ) = 4", ((List) m.list.get(0)).size() == 4); 510 511 512 BigInteger fac = new BigInteger(0); 513 TermOrder tord = new TermOrder(TermOrder.INVLEX); 514 String[] vars = new String[] { "x", "y", "z" }; 515 int nvar = vars.length; 516 pfac = new GenPolynomialRing<BigInteger>(fac, nvar, tord, vars); 517 assertEquals("pfac == m.ring", pfac, m.ring); 518 519 List<List<GenPolynomial<BigInteger>>> rows = m.list; 520 List<GenPolynomial<BigInteger>> f; 521 522 f = rows.get(0); 523 GenPolynomial<BigInteger> a = f.get(0); 524 //System.out.println("a = " + a); 525 assertTrue("isONE( f.get(0) )", a.isONE()); 526 527 GenPolynomial<BigInteger> b = f.get(1); 528 //System.out.println("b = " + b); 529 assertTrue("isZERO( f.get(1) )", b.isZERO()); 530 531 GenPolynomial<BigInteger> c = f.get(2); 532 //System.out.println("c = " + c); 533 assertTrue("isZERO( f.get(2) )", c.isZERO()); 534 535 GenPolynomial<BigInteger> d = f.get(3); 536 //System.out.println("d = " + d); 537 assertEquals("f.get(3).length() == 2", 2, d.length()); 538 539 f = rows.get(1); 540 assertTrue("length( f ) = 4", f.size() == 4); 541 542 a = f.get(0); 543 //System.out.println("a = " + a); 544 assertTrue("isONE( f.get(0) )", a.isONE()); 545 546 b = f.get(1); 547 //System.out.println("b = " + b); 548 assertTrue("isZERO( f.get(1) )", b.isZERO()); 549 550 c = f.get(2); 551 //System.out.println("c = " + c); 552 assertTrue("isZERO( f.get(2) )", c.isZERO()); 553 554 d = f.get(3); 555 //System.out.println("c = " + d); 556 assertTrue("isZERO( f.get(3) )", d.isZERO()); 557 } 558 559 560 /** 561 * Test rational solvable polynomial module. 562 */ 563 @SuppressWarnings("unchecked") 564 public void testBigRationalSolvableModule() { 565 String exam = "Rat(x,y,z) L " + "RelationTable " + "( " + " ( z ), ( y ), ( y z - 1 ) " + ") " + "( " 566 + " ( " + " ( 1 ), " + " ( 0 ), " + " ( 3/4 - 6/8 ), " 567 + " ( 1 x + x^3 + 1/3 y z - x^3 ) " + " ), " + " ( ( x ), ( 1 ), ( 0 ) ) " + " )"; 568 source = new StringReader(exam); 569 parser = new GenPolynomialTokenizer(source); 570 ModuleList<BigRational> m = null; 571 try { 572 m = (ModuleList<BigRational>) parser.nextSolvableSubModuleSet(); 573 } catch (IOException e) { 574 fail("" + e); 575 } catch (ClassCastException e) { 576 fail("" + e); 577 } 578 //System.out.println("m = " + m); 579 //System.out.println("m.ring = " + m.ring); 580 assertTrue("m != null", m.list != null); 581 assertTrue("length( m ) = 2", m.list.size() == 2); 582 assertTrue("length( m[0] ) = 4", ((List) m.list.get(0)).size() == 4); 583 584 BigRational fac = new BigRational(0); 585 TermOrder tord = new TermOrder(TermOrder.INVLEX); 586 String[] vars = new String[] { "x", "y", "z" }; 587 int nvar = vars.length; 588 spfac = new GenSolvablePolynomialRing<BigRational>(fac, nvar, tord, vars); 589 List<GenSolvablePolynomial<ModLong>> rel = new ArrayList<GenSolvablePolynomial<ModLong>>(3); 590 rel.add(spfac.parse("z")); 591 rel.add(spfac.parse("y")); 592 rel.add(spfac.parse("y z - 1")); 593 spfac.addSolvRelations(rel); 594 assertEquals("spfac == m.ring", spfac, m.ring); 595 596 List<List<GenSolvablePolynomial<BigRational>>> rows = m.castToSolvableList(); 597 List<GenSolvablePolynomial<BigRational>> f; 598 599 f = rows.get(0); 600 GenSolvablePolynomial<BigRational> a = f.get(0); 601 //System.out.println("a = " + a); 602 assertTrue("isONE( f.get(0) )", a.isONE()); 603 604 GenSolvablePolynomial<BigRational> b = f.get(1); 605 //System.out.println("b = " + b); 606 assertTrue("isZERO( f.get(1) )", b.isZERO()); 607 608 GenSolvablePolynomial<BigRational> c = f.get(2); 609 //System.out.println("c = " + c); 610 assertTrue("isZERO( f.get(2) )", c.isZERO()); 611 612 GenSolvablePolynomial<BigRational> d = f.get(3); 613 //System.out.println("d = " + d); 614 assertEquals("f.get(3).length() == 2", 2, d.length()); 615 616 f = rows.get(1); 617 assertTrue("length( f ) = 4", f.size() == 4); 618 619 a = f.get(0); 620 //System.out.println("a = " + a); 621 assertTrue("!isONE( f.get(0) )", !a.isONE()); 622 623 b = f.get(1); 624 //System.out.println("b = " + b); 625 assertTrue("isONE( f.get(1) )", b.isONE()); 626 627 c = f.get(2); 628 //System.out.println("c = " + c); 629 assertTrue("isZERO( f.get(2) )", c.isZERO()); 630 631 d = f.get(3); 632 //System.out.println("d = " + d); 633 assertTrue("isZERO( f.get(3) )", d.isZERO()); 634 635 } 636 637 638 /** 639 * Test algebraic number polynomial. <b>Note: </b> Syntax no more supported. 640 */ 641 @SuppressWarnings("unchecked") 642 public void removedTestAlgebraicNumber() { 643 String exam = "AN[ (i) ( i^2 + 1 ) ] (x,y,z) L " + "( " + "( 1 ), " + "( _i_ ), " + "( 0 ), " 644 + "( _i^2_ + 1 ), " + "( 1 x + x^3 + _3 i_ y z - x^3 ) " + " )"; 645 source = new StringReader(exam); 646 parser = new GenPolynomialTokenizer(source); 647 PolynomialList<AlgebraicNumber<BigRational>> f = null; 648 AlgebraicNumberRing<BigRational> fac = null; 649 try { 650 f = (PolynomialList<AlgebraicNumber<BigRational>>) parser.nextPolynomialSet(); 651 fac = (AlgebraicNumberRing<BigRational>) f.ring.coFac; 652 } catch (IOException e) { 653 fail("" + e); 654 } catch (ClassCastException e) { 655 fail("" + e); 656 } 657 //System.out.println("f = " + f); 658 assertTrue("f != null", f.list != null); 659 assertTrue("length( f ) = 5", f.list.size() == 5); 660 661 TermOrder tord = new TermOrder(TermOrder.INVLEX); 662 String[] vars = new String[] { "x", "y", "z" }; 663 int nvar = vars.length; 664 pfac = new GenPolynomialRing<AlgebraicNumber<BigRational>>(fac, nvar, tord, vars); 665 assertEquals("pfac == f.ring", pfac, f.ring); 666 667 GenPolynomial<AlgebraicNumber<BigRational>> a = f.list.get(0); 668 //System.out.println("a = " + a); 669 assertTrue("isONE( f.get(0) )", a.isONE()); 670 671 GenPolynomial<AlgebraicNumber<BigRational>> b = f.list.get(1); 672 //System.out.println("b = " + b); 673 assertTrue("isUnit( f.get(1) )", b.isUnit()); 674 675 b = b.monic(); 676 //System.out.println("b = " + b); 677 assertTrue("isUnit( f.get(1) )", b.isONE()); 678 679 GenPolynomial<AlgebraicNumber<BigRational>> c = f.list.get(2); 680 //System.out.println("c = " + c); 681 assertTrue("isZERO( f.get(1) )", c.isZERO()); 682 683 GenPolynomial<AlgebraicNumber<BigRational>> d = f.list.get(3); 684 //System.out.println("d = " + d); 685 assertTrue("isZERO( f.get(2) )", d.isZERO()); 686 687 GenPolynomial<AlgebraicNumber<BigRational>> e = f.list.get(4); 688 //System.out.println("e = " + e); 689 assertEquals("f.get(3).length() == 2", 2, e.length()); 690 } 691 692 693 /** 694 * Test Galois field coefficient polynomial. <b>Note: </b> Syntax no more 695 * supported. 696 */ 697 @SuppressWarnings("unchecked") 698 public void removedTestGaloisField() { 699 String exam = "AN[ 19 (i) ( i^2 + 1 ) ] (x,y,z) L " + "( " + "( 20 ), " + "( _i_ ), " + "( 0 ), " 700 + "( _i^2_ + 20 ), " + "( 1 x + x^3 + _3 i_ y z - x^3 ) " + " )"; 701 source = new StringReader(exam); 702 parser = new GenPolynomialTokenizer(source); 703 PolynomialList<AlgebraicNumber<ModInteger>> f = null; 704 AlgebraicNumberRing<ModInteger> fac = null; 705 try { 706 f = (PolynomialList<AlgebraicNumber<ModInteger>>) parser.nextPolynomialSet(); 707 fac = (AlgebraicNumberRing<ModInteger>) f.ring.coFac; 708 } catch (IOException e) { 709 fail("" + e); 710 } catch (ClassCastException e) { 711 fail("" + e); 712 } 713 //System.out.println("f = " + f); 714 assertTrue("f != null", f.list != null); 715 assertTrue("length( f ) = 5", f.list.size() == 5); 716 717 TermOrder tord = new TermOrder(TermOrder.INVLEX); 718 String[] vars = new String[] { "x", "y", "z" }; 719 int nvar = vars.length; 720 pfac = new GenPolynomialRing<AlgebraicNumber<ModInteger>>(fac, nvar, tord, vars); 721 assertEquals("pfac == f.ring", pfac, f.ring); 722 723 GenPolynomial<AlgebraicNumber<ModInteger>> a = f.list.get(0); 724 //System.out.println("a = " + a); 725 assertTrue("isONE( f.get(0) )", a.isONE()); 726 727 GenPolynomial<AlgebraicNumber<ModInteger>> b = f.list.get(1); 728 //System.out.println("b = " + b); 729 assertTrue("isUnit( f.get(1) )", b.isUnit()); 730 731 b = b.monic(); 732 //System.out.println("b = " + b); 733 assertTrue("isUnit( f.get(1) )", b.isONE()); 734 735 GenPolynomial<AlgebraicNumber<ModInteger>> c = f.list.get(2); 736 //System.out.println("c = " + c); 737 assertTrue("isZERO( f.get(1) )", c.isZERO()); 738 739 GenPolynomial<AlgebraicNumber<ModInteger>> d = f.list.get(3); 740 //System.out.println("d = " + d); 741 assertTrue("isZERO( f.get(2) )", d.isZERO()); 742 743 GenPolynomial<AlgebraicNumber<ModInteger>> e = f.list.get(4); 744 //System.out.println("e = " + e); 745 assertEquals("f.get(3).length() == 2", 2, e.length()); 746 } 747 748 749 /** 750 * Test algebraic number polynomial with braces. 751 */ 752 @SuppressWarnings("unchecked") 753 public void testAlgebraicNumberBrace() { 754 String exam = "AN[ (i) ( i^2 + 1 ) ] (x,y,z) L " + "( " + "( 1 ), " + "( { i } ), " + "( 0 ), " 755 + "( { i^2 } + 1 ), " + "( 1 x + x^3 + { 3 i }^2 y z - x^3 ) " + " )"; 756 source = new StringReader(exam); 757 parser = new GenPolynomialTokenizer(source); 758 PolynomialList<AlgebraicNumber<BigRational>> f = null; 759 AlgebraicNumberRing<BigRational> fac = null; 760 try { 761 f = (PolynomialList<AlgebraicNumber<BigRational>>) parser.nextPolynomialSet(); 762 fac = (AlgebraicNumberRing<BigRational>) f.ring.coFac; 763 } catch (IOException e) { 764 fail("" + e); 765 } catch (ClassCastException e) { 766 fail("" + e); 767 } 768 //System.out.println("f = " + f); 769 assertTrue("f != null", f.list != null); 770 assertTrue("length( f ) = 5", f.list.size() == 5); 771 772 TermOrder tord = new TermOrder(TermOrder.INVLEX); 773 String[] vars = new String[] { "x", "y", "z" }; 774 int nvar = vars.length; 775 pfac = new GenPolynomialRing<AlgebraicNumber<BigRational>>(fac, nvar, tord, vars); 776 assertEquals("pfac == f.ring", pfac, f.ring); 777 778 GenPolynomial<AlgebraicNumber<BigRational>> a = f.list.get(0); 779 //System.out.println("a = " + a); 780 assertTrue("isONE( f.get(0) )", a.isONE()); 781 782 GenPolynomial<AlgebraicNumber<BigRational>> b = f.list.get(1); 783 //System.out.println("b = " + b); 784 assertTrue("isUnit( f.get(1) )", b.isUnit()); 785 786 b = b.monic(); 787 //System.out.println("b = " + b); 788 assertTrue("isUnit( f.get(1) )", b.isONE()); 789 790 GenPolynomial<AlgebraicNumber<BigRational>> c = f.list.get(2); 791 //System.out.println("c = " + c); 792 assertTrue("isZERO( f.get(1) )", c.isZERO()); 793 794 GenPolynomial<AlgebraicNumber<BigRational>> d = f.list.get(3); 795 //System.out.println("d = " + d); 796 assertTrue("isZERO( f.get(2) )", d.isZERO()); 797 798 GenPolynomial<AlgebraicNumber<BigRational>> e = f.list.get(4); 799 //System.out.println("e = " + e); 800 assertEquals("f.get(3).length() == 2", 2, e.length()); 801 } 802 803 804 /** 805 * Test Galois field coefficient polynomial with braces. 806 */ 807 @SuppressWarnings("unchecked") 808 public void testGaloisFieldBrace() { 809 String exam = "AN[ 19 (i) ( i^2 + 1 ) ] (x,y,z) L " + "( " + "( 20 ), " + "( { i } ), " + "( 0 ), " 810 + "( { i^2 } + 20 ), " + "( 1 x + x^3 + { 3 i }^3 y z + { -1 }^3 x^3 ) " + " )"; 811 source = new StringReader(exam); 812 parser = new GenPolynomialTokenizer(source); 813 PolynomialList<AlgebraicNumber<ModInteger>> f = null; 814 AlgebraicNumberRing<ModInteger> fac = null; 815 try { 816 f = (PolynomialList<AlgebraicNumber<ModInteger>>) parser.nextPolynomialSet(); 817 fac = (AlgebraicNumberRing<ModInteger>) f.ring.coFac; 818 } catch (IOException e) { 819 fail("" + e); 820 } catch (ClassCastException e) { 821 fail("" + e); 822 } 823 //System.out.println("f = " + f); 824 assertTrue("f != null", f.list != null); 825 assertTrue("length( f ) = 5", f.list.size() == 5); 826 827 TermOrder tord = new TermOrder(TermOrder.INVLEX); 828 String[] vars = new String[] { "x", "y", "z" }; 829 int nvar = vars.length; 830 pfac = new GenPolynomialRing<AlgebraicNumber<ModInteger>>(fac, nvar, tord, vars); 831 assertEquals("pfac == f.ring", pfac, f.ring); 832 833 GenPolynomial<AlgebraicNumber<ModInteger>> a = f.list.get(0); 834 //System.out.println("a = " + a); 835 assertTrue("isONE( f.get(0) )", a.isONE()); 836 837 GenPolynomial<AlgebraicNumber<ModInteger>> b = f.list.get(1); 838 //System.out.println("b = " + b); 839 assertTrue("isUnit( f.get(1) )", b.isUnit()); 840 841 b = b.monic(); 842 //System.out.println("b = " + b); 843 assertTrue("isUnit( f.get(1) )", b.isONE()); 844 845 GenPolynomial<AlgebraicNumber<ModInteger>> c = f.list.get(2); 846 //System.out.println("c = " + c); 847 assertTrue("isZERO( f.get(1) )", c.isZERO()); 848 849 GenPolynomial<AlgebraicNumber<ModInteger>> d = f.list.get(3); 850 //System.out.println("d = " + d); 851 assertTrue("isZERO( f.get(2) )", d.isZERO()); 852 853 GenPolynomial<AlgebraicNumber<ModInteger>> e = f.list.get(4); 854 //System.out.println("e = " + e); 855 assertEquals("f.get(3).length() == 2", 2, e.length()); 856 } 857 858 859 /** 860 * Test Galois field coefficient polynomial without braces. 861 */ 862 @SuppressWarnings("unchecked") 863 public void testGaloisFieldWoBrace() { 864 String exam = "AN[ 19 (i) ( i^2 + 1 ) ] (x,y,z) L " + "( " + "( 20 ), " + "( i ), " + "( 0 ), " 865 + "( i^2 + 20 ), " + "( 1 x + x^3 + 3^3 i^3 y z - (x)^3 ) " + " )"; 866 source = new StringReader(exam); 867 parser = new GenPolynomialTokenizer(source); 868 PolynomialList<AlgebraicNumber<ModInteger>> f = null; 869 AlgebraicNumberRing<ModInteger> fac = null; 870 try { 871 f = (PolynomialList<AlgebraicNumber<ModInteger>>) parser.nextPolynomialSet(); 872 fac = (AlgebraicNumberRing<ModInteger>) f.ring.coFac; 873 } catch (IOException e) { 874 fail("" + e); 875 } catch (ClassCastException e) { 876 fail("" + e); 877 } 878 //System.out.println("f = " + f); 879 assertTrue("f != null", f.list != null); 880 assertTrue("length( f ) = 5", f.list.size() == 5); 881 882 TermOrder tord = new TermOrder(TermOrder.INVLEX); 883 String[] vars = new String[] { "x", "y", "z" }; 884 int nvar = vars.length; 885 pfac = new GenPolynomialRing<AlgebraicNumber<ModInteger>>(fac, nvar, tord, vars); 886 assertEquals("pfac == f.ring", pfac, f.ring); 887 888 GenPolynomial<AlgebraicNumber<ModInteger>> a = f.list.get(0); 889 //System.out.println("a = " + a); 890 assertTrue("isONE( f.get(0) )", a.isONE()); 891 892 GenPolynomial<AlgebraicNumber<ModInteger>> b = f.list.get(1); 893 //System.out.println("b = " + b); 894 assertTrue("isUnit( f.get(1) )", b.isUnit()); 895 896 b = b.monic(); 897 //System.out.println("b = " + b); 898 assertTrue("isUnit( f.get(1) )", b.isONE()); 899 900 GenPolynomial<AlgebraicNumber<ModInteger>> c = f.list.get(2); 901 //System.out.println("c = " + c); 902 assertTrue("isZERO( f.get(1) )", c.isZERO()); 903 904 GenPolynomial<AlgebraicNumber<ModInteger>> d = f.list.get(3); 905 //System.out.println("d = " + d); 906 assertTrue("isZERO( f.get(2) )", d.isZERO()); 907 908 GenPolynomial<AlgebraicNumber<ModInteger>> e = f.list.get(4); 909 //System.out.println("e = " + e); 910 assertEquals("f.get(3).length() == 2", 2, e.length()); 911 } 912 913 914 /** 915 * Test rational polynomial with generic coefficients. 916 */ 917 @SuppressWarnings("unchecked") 918 public void testBigRationalGeneric() { 919 String exam = "Rat(x,y,z) L " + "( " + "( 1^3 ), " + "( 0^3 ), " + "( { 3/4 }^2 - 6/8^2 ), " 920 + "( { 1 }^2 x + x^3 + 1/3 y z - x^3 ), " 921 + "( 1.0001 - 0.0001 + { 0.25 }**2 - 1/4^2 ) " + " )"; 922 source = new StringReader(exam); 923 parser = new GenPolynomialTokenizer(source); 924 PolynomialList<BigRational> f = null; 925 try { 926 f = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 927 } catch (IOException e) { 928 fail("" + e); 929 } catch (ClassCastException e) { 930 fail("" + e); 931 } 932 //System.out.println("f = " + f); 933 assertTrue("f != null", f.list != null); 934 assertTrue("length( f ) = 5", f.list.size() == 5); 935 936 BigRational fac = new BigRational(0); 937 TermOrder tord = new TermOrder(TermOrder.INVLEX); 938 String[] vars = new String[] { "x", "y", "z" }; 939 int nvar = vars.length; 940 pfac = new GenPolynomialRing<BigRational>(fac, nvar, tord, vars); 941 assertEquals("pfac == f.ring", pfac, f.ring); 942 943 944 GenPolynomial<BigRational> a = f.list.get(0); 945 //System.out.println("a = " + a); 946 assertTrue("isONE( f.get(0) )", a.isONE()); 947 948 GenPolynomial<BigRational> b = f.list.get(1); 949 //System.out.println("b = " + b); 950 assertTrue("isZERO( f.get(1) )", b.isZERO()); 951 952 GenPolynomial<BigRational> c = f.list.get(2); 953 //System.out.println("c = " + c); 954 assertTrue("isZERO( f.get(2) )", c.isZERO()); 955 956 GenPolynomial<BigRational> d = f.list.get(3); 957 //System.out.println("d = " + d); 958 assertEquals("f.get(3).length() == 2", 2, d.length()); 959 960 GenPolynomial<BigRational> e = f.list.get(4); 961 //System.out.println("e = " + e); 962 assertTrue("isONE( f.get(4) )", e.isONE()); 963 } 964 965 966 /** 967 * Test rational polynomial with errors. 968 */ 969 @SuppressWarnings("unchecked") 970 public void testBigRationalErorr() { 971 // brace mismatch 972 String exam = "Rat(x,y,z) L " + "( " + "( { 3 ), " + " )"; 973 source = new StringReader(exam); 974 parser = new GenPolynomialTokenizer(source); 975 PolynomialList<BigRational> 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 // brace mismatch 987 exam = "Rat(x,y,z) L " + "( " + "( 3 } ), " + " )"; 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 // invalid nesting 1002 exam = "Rat(x,y,z) L " + "( " + "( { x } ), " + " )"; 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 1016 // unknown variable 1017 exam = "Rat(x,y,z) L " + "( " + "( w ), " + " )"; 1018 source = new StringReader(exam); 1019 parser = new GenPolynomialTokenizer(source); 1020 f = null; 1021 try { 1022 f = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 1023 } catch (IOException e) { 1024 fail("" + e); 1025 } catch (ClassCastException e) { 1026 fail("" + e); 1027 } catch (InvalidExpressionException e) { 1028 // pass 1029 } 1030 assertTrue("f != null", f == null); 1031 } 1032 1033 1034 /** 1035 * Test variables. 1036 */ 1037 public void testVariables() { 1038 String vars = "a,b,c,d,e"; 1039 String[] variables = GenPolynomialTokenizer.variableList(vars); 1040 assertTrue("len == 5: ", variables.length == 5); 1041 1042 String expr = "a,b,c,d,e"; 1043 variables = GenPolynomialTokenizer.expressionVariables(expr); 1044 //System.out.println("variables = " + Arrays.toString(variables) + ", len = " + variables.length); 1045 assertTrue("len == 5: ", variables.length == 5); 1046 1047 expr = "b,c,d,e*a,b,c,d"; 1048 variables = GenPolynomialTokenizer.expressionVariables(expr); 1049 //System.out.println("variables = " + Arrays.toString(variables) + ", len = " + variables.length); 1050 assertTrue("len == 5: ", variables.length == 5); 1051 1052 expr = "b + c^3 - d + e*a - b/c +d"; 1053 variables = GenPolynomialTokenizer.expressionVariables(expr); 1054 //System.out.println("variables = " + Arrays.toString(variables) + ", len = " + variables.length); 1055 assertTrue("len == 5: ", variables.length == 5); 1056 1057 expr = "(b + c)^3 - { d + e*a } / [ b/c + d ] + (b + 3f + f*3 + f3)"; 1058 variables = GenPolynomialTokenizer.expressionVariables(expr); 1059 //System.out.println("variables = " + Arrays.toString(variables) + ", len = " + variables.length); 1060 assertTrue("len == 7: ", variables.length == 7); 1061 } 1062 1063}