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