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