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