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