001    /*
002     * $Id: ReductionTest.java 3426 2010-12-24 13:17:58Z kredel $
003     */
004    
005    package edu.jas.application;
006    
007    
008    import java.util.ArrayList;
009    import java.util.List;
010    import java.util.Map;
011    
012    import junit.framework.Test;
013    import junit.framework.TestCase;
014    import junit.framework.TestSuite;
015    
016    import org.apache.log4j.BasicConfigurator;
017    
018    import edu.jas.arith.BigRational;
019    import edu.jas.kern.ComputerThreads;
020    import edu.jas.poly.ExpVector;
021    import edu.jas.poly.GenPolynomial;
022    import edu.jas.poly.GenPolynomialRing;
023    import edu.jas.poly.PolynomialList;
024    import 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    
035    public 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    }