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