001/*
002 * $Id: WordIdealTest.java 5822 2018-05-10 19:57:28Z kredel $
003 */
004
005package edu.jas.application;
006
007
008import java.util.ArrayList;
009import java.util.List;
010
011import junit.framework.Test;
012import junit.framework.TestCase;
013import junit.framework.TestSuite;
014
015import org.apache.log4j.BasicConfigurator;
016
017import edu.jas.arith.BigRational;
018import edu.jas.gb.WordGroebnerBase;
019import edu.jas.gb.WordGroebnerBaseSeq;
020// import edu.jas.kern.ComputerThreads;
021import edu.jas.poly.GenWordPolynomial;
022import edu.jas.poly.GenWordPolynomialRing;
023import edu.jas.poly.PolynomialList;
024import edu.jas.poly.TermOrder;
025
026
027/**
028 * WordIdeal tests with JUnit.
029 * @author Heinz Kredel
030 */
031public class WordIdealTest extends TestCase {
032
033
034    //private static final Logger logger = Logger.getLogger(WordIdealTest.class);
035
036
037    /**
038     * main
039     */
040    public static void main(String[] args) {
041        BasicConfigurator.configure();
042        junit.textui.TestRunner.run(suite());
043    }
044
045
046    /**
047     * Constructs a <CODE>WordIdealTest</CODE> object.
048     * @param name String.
049     */
050    public WordIdealTest(String name) {
051        super(name);
052    }
053
054
055    /**
056     * suite.
057     */
058    public static Test suite() {
059        TestSuite suite = new TestSuite(WordIdealTest.class);
060        return suite;
061    }
062
063
064    TermOrder to;
065
066
067    GenWordPolynomialRing<BigRational> fac;
068
069
070    List<GenWordPolynomial<BigRational>> L, M;
071
072
073    PolynomialList<BigRational> F;
074
075
076    List<GenWordPolynomial<BigRational>> G;
077
078
079    WordGroebnerBase<BigRational> bb;
080
081
082    GenWordPolynomial<BigRational> a, b, c, d, e;
083
084
085    int kl = 3; //10
086
087
088    int ll = 5; //7
089
090
091    int el = 2;
092
093
094    @Override
095    protected void setUp() {
096        BigRational coeff = new BigRational(17, 1);
097        to = new TermOrder( /*TermOrder.INVLEX*/);
098        String[] vars = new String[] { "x", "y", "z" };
099        //WordFactory wf = new WordFactory(vars);
100        fac = new GenWordPolynomialRing<BigRational>(coeff, vars);
101        bb = new WordGroebnerBaseSeq<BigRational>();
102        //bb = GBFactory.getImplementation(coeff);
103        a = b = c = d = e = null;
104    }
105
106
107    @Override
108    protected void tearDown() {
109        a = b = c = d = e = null;
110        fac = null;
111        bb = null;
112        //ComputerThreads.terminate();
113    }
114
115
116    /**
117     * Test Ideal sum.
118     */
119    public void testIdealSum() {
120        WordIdeal<BigRational> I, J, K;
121        L = new ArrayList<GenWordPolynomial<BigRational>>();
122
123        a = fac.random(kl, ll, el);
124        b = fac.random(kl, ll, el);
125        c = fac.random(kl, ll, el);
126        d = fac.random(kl, ll, el);
127        e = d; //fac.random(kl, ll, el);
128
129        //System.out.println("a = " + a);
130        //System.out.println("b = " + b);
131        //System.out.println("c = " + c);
132        //System.out.println("d = " + d);
133
134        L.add(a);
135        //System.out.println("L = " + L.size() );
136
137        I = new WordIdeal<BigRational>(fac, L, true);
138        assertTrue("isGB( I )", I.isGB());
139
140        I = new WordIdeal<BigRational>(fac, L, false);
141        assertTrue("isGB( I )", I.isGB());
142
143        L = bb.GB(L);
144        assertTrue("isGB( { a } )", bb.isGB(L));
145
146        I = new WordIdeal<BigRational>(fac, L, true);
147        assertTrue("isGB( I )", I.isGB());
148
149        I = new WordIdeal<BigRational>(fac, L, false);
150        assertTrue("isGB( I )", I.isGB());
151
152        //assertTrue("not isZERO( b )", !b.isZERO());
153        L.add(b);
154        //System.out.println("L = " + L.size() );
155
156        I = new WordIdeal<BigRational>(fac, L, false);
157        assertTrue("not isZERO( I )", !I.isZERO());
158        //assertTrue("not isONE( I )", !I.isONE() );
159        //assertTrue("not isGB( I )", !I.isGB() );
160
161        L = bb.GB(L);
162        assertTrue("isGB( { a, b } )", bb.isGB(L));
163
164        I = new WordIdeal<BigRational>(fac, L, true);
165        assertTrue("not isZERO( I )", !I.isZERO());
166        // assertTrue("not isONE( I )", !I.isONE() );
167        assertTrue("isGB( I )", I.isGB());
168
169        J = I;
170        K = J.sum(I);
171        //assertTrue("not isZERO( K )", !K.isZERO());
172        assertTrue("isGB( K )", K.isGB());
173        assertTrue("equals( K, I )", K.equals(I));
174
175        L = new ArrayList<GenWordPolynomial<BigRational>>();
176
177        L.add(c);
178        assertTrue("isGB( { c } )", bb.isGB(L));
179
180        J = new WordIdeal<BigRational>(fac, L, true);
181        K = J.sum(I);
182        assertTrue("isGB( K )", K.isGB());
183        assertTrue("K contains(I)", K.contains(I));
184        assertTrue("K contains(J)", K.contains(J));
185
186        L = new ArrayList<GenWordPolynomial<BigRational>>();
187        L.add(d);
188
189        assertTrue("isGB( { d } )", bb.isGB(L));
190        J = new WordIdeal<BigRational>(fac, L, true);
191        I = K;
192        K = J.sum(I);
193        assertTrue("isGB( K )", K.isGB());
194        assertTrue("K contains(I)", K.contains(I));
195        assertTrue("K contains(J)", K.contains(J));
196
197        L = new ArrayList<GenWordPolynomial<BigRational>>();
198        L.add(e);
199
200        assertTrue("isGB( { e } )", bb.isGB(L));
201        J = new WordIdeal<BigRational>(fac, L, true);
202        I = K;
203        K = J.sum(I);
204        assertTrue("isGB( K )", K.isGB());
205        assertTrue("equals( K, I )", K.equals(I));
206        assertTrue("K contains(J)", K.contains(I));
207        assertTrue("I contains(K)", I.contains(K));
208    }
209
210
211    /**
212     * Test WordIdeal product. Sometimes non-terminating.
213     */
214    public void testWordIdealProduct() {
215        WordIdeal<BigRational> I, J, K, H, G;
216        a = fac.random(kl, ll, el);
217        b = fac.random(kl, ll, el);
218        c = fac.random(kl, ll, el);
219        d = c; //fac.random(kl, ll, el);
220        e = d; //fac.random(kl, ll, el);
221
222        //System.out.println("a = " + a);
223        //System.out.println("b = " + b);
224        //System.out.println("c = " + c);
225        //System.out.println("d = " + d);
226
227        L = new ArrayList<GenWordPolynomial<BigRational>>();
228        L.add(a);
229
230        I = new WordIdeal<BigRational>(fac, L, false);
231        assertTrue("not isONE( I )", !I.isONE() || a.isConstant());
232        assertTrue("isGB( I )", I.isGB());
233
234        L = new ArrayList<GenWordPolynomial<BigRational>>();
235        L.add(b);
236
237        J = new WordIdeal<BigRational>(fac, L, false);
238        assertTrue("not isONE( J )", !J.isONE() || a.isConstant() || b.isConstant());
239        assertTrue("isGB( J )", J.isGB());
240
241        K = I.product(J);
242        //System.out.println("I = " + I);
243        //System.out.println("J = " + J);
244        //System.out.println("K = " + K);
245        H = J.product(I);
246        //System.out.println("H = " + H);
247        G = K.sum(H);
248        //System.out.println("G = " + G);
249        assertTrue("isGB( K )", K.isGB());
250        assertTrue("isGB( H )", H.isGB());
251        assertTrue("isGB( G )", G.isGB());
252        //non-com 
253        assertTrue("I contains(K)", I.contains(K));
254        assertTrue("J contains(K)", J.contains(K));
255
256        L = new ArrayList<GenWordPolynomial<BigRational>>();
257        L.add(a);
258        //L.add(c);
259        L = bb.GB(L); // may be infinite
260
261        I = new WordIdeal<BigRational>(fac, L, true);
262        //System.out.println("I = " + I);
263        assertTrue("isGB( I )", I.isGB());
264
265        //System.out.println("J = " + J);
266        K = I.product(J);
267        //System.out.println("K = " + K);
268        assertTrue("isGB( K )", K.isGB());
269        assertTrue("I contains(K)", I.contains(K));
270        assertTrue("J contains(K)", J.contains(K));
271    }
272
273
274    /**
275     * Test WordIdeal common zeros.
276     */
277    @SuppressWarnings("cast")
278    public void testWordIdealCommonZeros() {
279        WordIdeal<BigRational> I, J;
280        L = new ArrayList<GenWordPolynomial<BigRational>>();
281
282        I = new WordIdeal<BigRational>(fac, L, true);
283        assertEquals("commonZeroTest( I )", I.commonZeroTest(), 1);
284
285        a = fac.getZERO();
286        L.add(a);
287        I = new WordIdeal<BigRational>(fac, L, true);
288        assertEquals("commonZeroTest( I )", I.commonZeroTest(), 1);
289
290        b = fac.getONE();
291        L.add(b);
292        I = new WordIdeal<BigRational>(fac, L, true);
293        assertEquals("commonZeroTest( I )", I.commonZeroTest(), -1);
294
295        L = new ArrayList<GenWordPolynomial<BigRational>>();
296        a = fac.random(kl, ll, el);
297        if (!a.isZERO() && !a.isConstant()) {
298            L.add(a);
299            I = new WordIdeal<BigRational>(fac, L, true);
300            assertEquals("commonZeroTest( I )", I.commonZeroTest(), 1);
301        }
302
303        L = (List<GenWordPolynomial<BigRational>>) fac.univariateList();
304        //System.out.println("L = " + L);
305        I = new WordIdeal<BigRational>(fac, L, true);
306        assertEquals("commonZeroTest( I )", I.commonZeroTest(), 0);
307
308        J = I.product(I);
309        //System.out.println("J = " + J);
310        assertEquals("commonZeroTest( J )", J.commonZeroTest(), 0);
311
312        L.remove(0);
313        I = new WordIdeal<BigRational>(fac, L, true);
314        assertEquals("commonZeroTest( I )", I.commonZeroTest(), 1);
315    }
316
317}