001/*
002 * $Id$
003 */
004
005package edu.jas.application;
006
007
008import java.util.ArrayList;
009import java.util.List;
010import java.util.Map;
011
012import edu.jas.arith.BigRational;
013import edu.jas.kern.ComputerThreads;
014import edu.jas.poly.ExpVector;
015import edu.jas.poly.GenPolynomial;
016import edu.jas.poly.GenPolynomialRing;
017import edu.jas.poly.PolynomialList;
018import edu.jas.structure.RingFactory;
019
020import junit.framework.Test;
021import junit.framework.TestCase;
022import junit.framework.TestSuite;
023
024
025/**
026 * Reduction tests with JUnit.
027 * @author Heinz Kredel
028 */
029
030public class ReductionTest extends TestCase {
031
032
033    /**
034     * main
035     */
036    public static void main(String[] args) {
037
038        junit.textui.TestRunner.run(suite());
039        ComputerThreads.terminate();
040    }
041
042
043    /**
044     * Constructs a <CODE>ReductionTest</CODE> object.
045     * @param name String
046     */
047    public ReductionTest(String name) {
048        super(name);
049    }
050
051
052    /**
053     * suite.
054     * @return a test suite.
055     */
056    public static Test suite() {
057        TestSuite suite = new TestSuite(ReductionTest.class);
058        return suite;
059    }
060
061
062    GenPolynomialRing<BigRational> fac;
063
064
065    GenPolynomial<BigRational> a, b, c, d, e;
066
067
068    List<GenPolynomial<BigRational>> L;
069
070
071    PolynomialList<BigRational> F, G;
072
073
074    int rl = 2;
075
076
077    int kl = 2;
078
079
080    int ll = 3;
081
082
083    int el = 3;
084
085
086    float q = 0.4f;
087
088
089    @Override
090    protected void setUp() {
091        a = b = c = d = e = null;
092        fac = new GenPolynomialRing<BigRational>(new BigRational(0), rl);
093    }
094
095
096    @Override
097    protected void tearDown() {
098        a = b = c = d = e = null;
099        fac = null;
100    }
101
102
103    /*
104     * Test dummy.
105     * 
106     public void testDummy() {
107     }
108     */
109
110
111    /**
112     * Test rational coefficient polynomial parametric reduction,
113     * caseDistinction and determination.
114     */
115    public void testRatPolReduction() {
116        RingFactory<BigRational> bi = new BigRational(0);
117        GenPolynomialRing<BigRational> pr = new GenPolynomialRing<BigRational>(bi, 2,
118                        new String[] { "a", "b" });
119        GenPolynomialRing<GenPolynomial<BigRational>> fac = new GenPolynomialRing<GenPolynomial<BigRational>>(
120                        pr, rl);
121
122        CReductionSeq<BigRational> cred = new CReductionSeq<BigRational>(bi);
123
124        GenPolynomial<GenPolynomial<BigRational>> a = fac.random(kl, ll, el, q);
125        while (a.isZERO()) {
126            a = fac.random(kl, ll, el, q).sum(fac.getONE());
127        }
128        GenPolynomial<GenPolynomial<BigRational>> b = fac.random(kl, ll, el, q);
129        while (b.isZERO()) {
130            b = fac.random(kl, ll, el, q).subtract(fac.getONE());
131        }
132        GenPolynomial<GenPolynomial<BigRational>> g = fac.getZERO();
133
134        Map.Entry<ExpVector, GenPolynomial<BigRational>> m = a.leadingMonomial();
135        ExpVector e = m.getKey();
136        GenPolynomial<BigRational> c = m.getValue();
137
138        GenPolynomial<GenPolynomial<BigRational>> r = fac.getZERO();
139        r = r.sum(c, e);
140        if (r.isZERO()) {
141            r = fac.getONE();
142        }
143
144        GenPolynomial<GenPolynomial<BigRational>> w = a.reductum();
145
146        ColorPolynomial<BigRational> p = new ColorPolynomial<BigRational>(g, r, w);
147        //System.out.println("p = " + p);
148        assertTrue("check(p) ", p.checkInvariant());
149        assertTrue("deter(p) ", p.isDetermined());
150        //System.out.println("cond != 0: " + p.getConditionNonZero());
151        //System.out.println("cond == 0: " + p.getConditionZero());
152
153        p = new ColorPolynomial<BigRational>(r, g, w);
154        //System.out.println("p = " + p);
155        assertTrue("check(p) ", p.checkInvariant());
156        if (!w.isZERO()) {
157            assertFalse("deter(p) ", p.isDetermined());
158        }
159        //System.out.println("cond != 0: " + p.getConditionNonZero());
160        //System.out.println("cond == 0: " + p.getConditionZero());
161
162        p = new ColorPolynomial<BigRational>(r, w, g);
163        //System.out.println("p = " + p);
164        assertTrue("check(p) ", p.checkInvariant());
165        assertTrue("deter(p) ", p.isDetermined());
166        //System.out.println("cond != 0: " + p.getConditionNonZero());
167        //System.out.println("cond == 0: " + p.getConditionZero());
168
169        // wrong test: p = new ColorPolynomial<BigRational>(w,r,g); //(w,g,r); 
170        //System.out.println("p = " + p);
171        //if ( !w.isZERO() ) {
172        //   assertFalse("check(p) ", p.checkInvariant());
173        //}
174        //assertFalse("deter(p) ", p.isDetermined());
175        //assertFalse("p == 0 ", p.isZERO());
176        //System.out.println("cond != 0: " + p.getConditionNonZero());
177        //System.out.println("cond == 0: " + p.getConditionZero());
178
179        p = new ColorPolynomial<BigRational>(w, g, g);
180        //System.out.println("p = " + p);
181        assertTrue("check(p) ", p.checkInvariant());
182        assertTrue("deter(p) ", p.isDetermined());
183        assertTrue("p == 0 ", p.isZERO());
184        //System.out.println("cond != 0: " + p.getConditionNonZero());
185        //System.out.println("cond == 0: " + p.getConditionZero());
186
187        List<GenPolynomial<BigRational>> i = new ArrayList<GenPolynomial<BigRational>>();
188        Ideal<BigRational> id = new Ideal<BigRational>(pr, i);
189        List<ColorPolynomial<BigRational>> cp = new ArrayList<ColorPolynomial<BigRational>>();
190
191        Condition<BigRational> cond = new Condition<BigRational>(id);
192        ColoredSystem<BigRational> s = new ColoredSystem<BigRational>(cond, cp);
193        //System.out.println("s = " + s);
194
195        String z = s.toString() + ", " + s.toScript();
196        //System.out.println("z = " + z + ", " + z.length());
197        assertTrue("length( string(s) ) >= 0", z.length() >= 0);
198
199        assertTrue("isDetermined ", s.isDetermined());
200        assertTrue("checkInvariant ", s.checkInvariant());
201
202        List<ColoredSystem<BigRational>> CS = new ArrayList<ColoredSystem<BigRational>>();
203        CS.add(s);
204        //System.out.println("CS = " + CS);
205        List<ColoredSystem<BigRational>> CSp = CS;
206
207        //System.out.println("\na = " + a);
208        //System.out.println("b = " + b + "\n");
209
210        //CS = cred.determine(p);
211        //System.out.println("CS = " + CS);
212        for (ColoredSystem<BigRational> x : CS) {
213            assertTrue("isDetermined ", x.isDetermined());
214            assertTrue("checkInvariant ", x.checkInvariant());
215        }
216
217        List<GenPolynomial<GenPolynomial<BigRational>>> L;
218        L = new ArrayList<GenPolynomial<GenPolynomial<BigRational>>>();
219        L.add(a);
220        L.add(b);
221
222        //System.out.println("\na = " + a);
223        //System.out.println("b = " + b + "\n");
224        //System.out.println("L = " + L);
225
226        //List<Condition<BigRational>> Ccond;
227        //Ccond = cred.caseDistinction(L);
228        //for ( Condition<BigRational> cnd : Ccond ) {
229        //    System.out.println("" + cnd);
230        //}
231        //+System.out.println("Ccond = " + Ccond);
232
233        // check if polynomials are determined
234        CSp = cred.determine(L);
235        //+System.out.println("CSp = " + CSp);
236        for (ColoredSystem<BigRational> x : CSp) {
237            assertTrue("isDetermined ", x.isDetermined());
238            assertTrue("checkInvariant ", x.checkInvariant());
239        }
240
241        // check if reduced polynomials are in normalform
242        ColorPolynomial<BigRational> q, h;
243        //List<ColoredSystem<BigRational>> NCS;
244        for (ColoredSystem<BigRational> x : CSp) {
245            int k = x.list.size();
246            for (int j = 0; j < k; j++) {
247                p = x.list.get(j);
248                for (int l = j + 1; l < k; l++) {
249                    q = x.list.get(l);
250                    h = cred.SPolynomial(p, q);
251                    //System.out.println("spol(a,b) = " + h);
252                    boolean t = true; //cred.isNormalform( x.list, h );
253                    //System.out.println("isNF(spol(a,b)) = " + t);
254                    h = cred.normalform(x.condition, x.list, h);
255                    //System.out.println("NF(spol(a,b)) = " + h);
256                    t = cred.isNormalform(x.list, h);
257                    //System.out.println("isNF(NF(spol(a,b))) = " + t);
258                    assertTrue("isNF(NF(spol(a,b))) ", t);
259                    //h = x.condition.reDetermine( h );
260                }
261            }
262        }
263    }
264
265}