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