001/*
002 * $Id: GroebnerBaseSeqPairSeqTest.java 5866 2018-07-20 15:02:16Z kredel $
003 */
004
005package edu.jas.gb;
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
018
019import edu.jas.arith.BigRational;
020import edu.jas.poly.GenPolynomial;
021import edu.jas.poly.GenPolynomialRing;
022import edu.jas.poly.GenPolynomialTokenizer;
023import edu.jas.poly.PolynomialList;
024
025
026/**
027 * Groebner base sequential, sequential pair list, tests with JUnit.
028 * @author Heinz Kredel
029 */
030
031public class GroebnerBaseSeqPairSeqTest extends TestCase {
032
033
034
035    /**
036     * main
037     */
038    public static void main(String[] args) {
039        junit.textui.TestRunner.run(suite());
040    }
041
042
043    /**
044     * Constructs a <CODE>GroebnerBaseSeqPairSeqTest</CODE> object.
045     * @param name String.
046     */
047    public GroebnerBaseSeqPairSeqTest(String name) {
048        super(name);
049    }
050
051
052    /**
053     * suite.
054     */
055    public static Test suite() {
056        TestSuite suite = new TestSuite(GroebnerBaseSeqPairSeqTest.class);
057        return suite;
058    }
059
060
061    GenPolynomialRing<BigRational> fac;
062
063
064    List<GenPolynomial<BigRational>> L;
065
066
067    PolynomialList<BigRational> F;
068
069
070    List<GenPolynomial<BigRational>> G;
071
072
073    GroebnerBase<BigRational> bb; // do interface
074
075
076    GenPolynomial<BigRational> a;
077
078
079    GenPolynomial<BigRational> b;
080
081
082    GenPolynomial<BigRational> c;
083
084
085    GenPolynomial<BigRational> d;
086
087
088    GenPolynomial<BigRational> e;
089
090
091    int rl = 3; //4; //3; 
092
093
094    int kl = 2; // 10;
095
096
097    int ll = 5; //7;
098
099
100    int el = 3;
101
102
103    float q = 0.3f; //0.2f; //0.4f
104
105
106    @Override
107    protected void setUp() {
108        BigRational coeff = new BigRational(9);
109        fac = new GenPolynomialRing<BigRational>(coeff, rl);
110        a = b = c = d = e = null;
111        bb = new GroebnerBaseSeqPairSeq<BigRational>();
112    }
113
114
115    @Override
116    protected void tearDown() {
117        a = b = c = d = e = null;
118        fac = null;
119        bb = null;
120    }
121
122
123    /**
124     * Test sequential GBase.
125     * 
126     */
127    public void testSeqPairSequentialGBase() {
128
129        L = new ArrayList<GenPolynomial<BigRational>>();
130
131        a = fac.random(kl, ll, el, q);
132        b = fac.random(kl, ll, el, q);
133        c = fac.random(kl, ll, el, q);
134        d = fac.random(kl, ll, el, q);
135        e = d; //fac.random(kl, ll, el, q );
136
137        if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) {
138            return;
139        }
140
141        assertTrue("not isZERO( a )", !a.isZERO());
142        L.add(a);
143
144        L = bb.GB(L);
145        assertTrue("isGB( { a } )", bb.isGB(L));
146
147        assertTrue("not isZERO( b )", !b.isZERO());
148        L.add(b);
149        //System.out.println("L = " + L.size() );
150
151        L = bb.GB(L);
152        assertTrue("isGB( { a, b } )", bb.isGB(L));
153
154        assertTrue("not isZERO( c )", !c.isZERO());
155        L.add(c);
156
157        L = bb.GB(L);
158        assertTrue("isGB( { a, b, c } )", bb.isGB(L));
159
160        assertTrue("not isZERO( d )", !d.isZERO());
161        L.add(d);
162
163        L = bb.GB(L);
164        assertTrue("isGB( { a, b, c, d } )", bb.isGB(L));
165
166        assertTrue("not isZERO( e )", !e.isZERO());
167        L.add(e);
168
169        L = bb.GB(L);
170        assertTrue("isGB( { a, b, c, d, e } )", bb.isGB(L));
171    }
172
173
174    /**
175     * Test Trinks7 GBase.
176     * 
177     */
178    @SuppressWarnings("unchecked")
179    public void testTrinks7GBase() {
180        String exam = "(B,S,T,Z,P,W) L " + "( " + "( 45 P + 35 S - 165 B - 36 ), "
181                        + "( 35 P + 40 Z + 25 T - 27 S ), " + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), "
182                        + "( - 9 W + 15 T P + 20 S Z ), " + "( P W + 2 T Z - 11 B**3 ), "
183                        + "( 99 W - 11 B S + 3 B**2 ), " + "( B**2 + 33/50 B + 2673/10000 ) " + ") ";
184        Reader source = new StringReader(exam);
185        GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source);
186        try {
187            F = (PolynomialList<BigRational>) parser.nextPolynomialSet();
188        } catch (ClassCastException e) {
189            fail("" + e);
190        } catch (IOException e) {
191            fail("" + e);
192        }
193        //System.out.println("F = " + F);
194
195        G = bb.GB(F.list);
196        assertTrue("isGB( GB(Trinks7) )", bb.isGB(G));
197        assertEquals("#GB(Trinks7) == 6", 6, G.size());
198        //PolynomialList<BigRational> trinks = new PolynomialList<BigRational>(F.ring,G);
199        //System.out.println("G = " + trinks);
200
201    }
202
203
204    /**
205     * Test sequential extended GBase.
206     * 
207     */
208    public void testSeqPairSequentialExtendedGBase() {
209
210        L = new ArrayList<GenPolynomial<BigRational>>();
211
212        ExtendedGB<BigRational> exgb;
213
214        a = fac.random(kl, ll, el, q);
215        b = fac.random(kl, ll, el, q);
216        c = fac.random(kl, ll, el, q);
217        d = fac.random(kl, ll, el, q);
218        e = d; //fac.random(kl, ll, el, q );
219
220        if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) {
221            return;
222        }
223
224        assertTrue("not isZERO( a )", !a.isZERO());
225        L.add(a);
226        //System.out.println("L = " + L );
227
228        exgb = bb.extGB(L);
229        // System.out.println("exgb = " + exgb );
230        assertTrue("isGB( { a } )", bb.isGB(exgb.G));
231        assertTrue("isRmat( { a } )", bb.isReductionMatrix(exgb));
232
233        assertTrue("not isZERO( b )", !b.isZERO());
234        L.add(b);
235        //System.out.println("L = " + L );
236
237        exgb = bb.extGB(L);
238        //System.out.println("exgb = " + exgb );
239        assertTrue("isGB( { a, b } )", bb.isGB(exgb.G));
240        assertTrue("isRmat( { a, b } )", bb.isReductionMatrix(exgb));
241
242        assertTrue("not isZERO( c )", !c.isZERO());
243        L.add(c);
244
245        exgb = bb.extGB(L);
246        //System.out.println("exgb = " + exgb );
247        assertTrue("isGB( { a, b, c } )", bb.isGB(exgb.G));
248        assertTrue("isRmat( { a, b, c } )", bb.isReductionMatrix(exgb));
249
250        assertTrue("not isZERO( d )", !d.isZERO());
251        L.add(d);
252
253        exgb = bb.extGB(L);
254        //System.out.println("exgb = " + exgb );
255        assertTrue("isGB( { a, b, c, d } )", bb.isGB(exgb.G));
256        assertTrue("isRmat( { a, b, c, d } )", bb.isReductionMatrix(exgb));
257
258
259        assertTrue("not isZERO( e )", !e.isZERO());
260        L.add(e);
261
262        exgb = bb.extGB(L);
263        //System.out.println("exgb = " + exgb );
264        assertTrue("isGB( { a, b, c, d, e } )", bb.isGB(exgb.G));
265        assertTrue("isRmat( { a, b, c, d, e } )", bb.isReductionMatrix(exgb));
266    }
267
268
269    /**
270     * Test Trinks7 GBase.
271     * 
272     */
273    @SuppressWarnings("unchecked")
274    public void testTrinks7ExtendedGBase() {
275        String exam = "(B,S,T,Z,P,W) L " + "( " + "( 45 P + 35 S - 165 B - 36 ), "
276                        + "( 35 P + 40 Z + 25 T - 27 S ), " + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), "
277                        + "( - 9 W + 15 T P + 20 S Z ), " + "( P W + 2 T Z - 11 B**3 ), "
278                        + "( 99 W - 11 B S + 3 B**2 ), " + "( B**2 + 33/50 B + 2673/10000 ) " + ") ";
279        Reader source = new StringReader(exam);
280        GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source);
281        try {
282            F = (PolynomialList<BigRational>) parser.nextPolynomialSet();
283        } catch (ClassCastException e) {
284            fail("" + e);
285        } catch (IOException e) {
286            fail("" + e);
287        }
288        //System.out.println("F = " + F);
289
290
291        ExtendedGB<BigRational> exgb;
292
293        exgb = bb.extGB(F.list);
294        //System.out.println("exgb = " + exgb );
295        assertTrue("isGB( GB(Trinks7) )", bb.isGB(exgb.G));
296        //assertEquals("#GB(Trinks7) == 6", 6, exgb.G.size() );
297        assertTrue("isRmat( GB(Trinks7) )", bb.isReductionMatrix(exgb));
298        //PolynomialList<BigRational> trinks = new PolynomialList<BigRational>(F.ring,G);
299        //System.out.println("G = " + trinks);
300
301    }
302
303}