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