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