001    /*
002     * $Id: CGBSeqTest.java 3426 2010-12-24 13:17:58Z kredel $
003     */
004    
005    package edu.jas.application;
006    
007    
008    import java.util.List;
009    import java.util.ArrayList;
010    import java.io.IOException;
011    import java.io.Reader;
012    import java.io.StringReader;
013    
014    import junit.framework.Test;
015    import junit.framework.TestCase;
016    import junit.framework.TestSuite;
017    
018    import org.apache.log4j.BasicConfigurator;
019    //import org.apache.log4j.Logger;
020    
021    import edu.jas.kern.ComputerThreads;
022    
023    import edu.jas.arith.BigRational;
024    
025    import edu.jas.poly.GenPolynomial;
026    import edu.jas.poly.GenPolynomialRing;
027    import edu.jas.poly.GenPolynomialTokenizer;
028    import edu.jas.poly.PolynomialList;
029    
030    
031    /**
032     * Comprehenssive Groebner base sequential tests with JUnit.
033     * @author Heinz Kredel.
034     */
035    
036    public class CGBSeqTest extends TestCase {
037    
038        //private static final Logger logger = Logger.getLogger(CGBSeqTest.class);
039    
040        /**
041         * main
042         */
043        public static void main (String[] args) {
044            BasicConfigurator.configure();
045            junit.textui.TestRunner.run( suite() );
046            ComputerThreads.terminate();
047        }
048    
049        /**
050         * Constructs a <CODE>CGBSeqTest</CODE> object.
051         * @param name String.
052         */
053        public CGBSeqTest(String name) {
054            super(name);
055        }
056    
057        /**
058         * suite.
059         */ 
060        public static Test suite() {
061            TestSuite suite= new TestSuite(CGBSeqTest.class);
062            return suite;
063        }
064    
065        GenPolynomialRing<BigRational> cfac;
066        GenPolynomialRing<GenPolynomial<BigRational>> fac;
067    
068        List<GenPolynomial<GenPolynomial<BigRational>>> L;
069    
070        ComprehensiveGroebnerBaseSeq<BigRational> bb;
071    
072        GenPolynomial<GenPolynomial<BigRational>> a;
073        GenPolynomial<GenPolynomial<BigRational>> b;
074        GenPolynomial<GenPolynomial<BigRational>> c;
075        GenPolynomial<GenPolynomial<BigRational>> d;
076        GenPolynomial<GenPolynomial<BigRational>> e;
077    
078        int rl = 2; //4; //3; 
079        int kl = 2;
080        int ll = 3;
081        int el = 3;
082        float q = 0.2f; //0.4f
083    
084        protected void setUp() {
085            BigRational coeff = new BigRational(kl);
086            String[] cv = { "a" }; //, "b" }; 
087            cfac = new GenPolynomialRing<BigRational>(coeff,1,cv);
088            String[] v = { "x" }; //, "y" }; 
089            fac = new GenPolynomialRing<GenPolynomial<BigRational>>(cfac,1,v);
090            a = b = c = d = e = null;
091            bb = new ComprehensiveGroebnerBaseSeq<BigRational>(coeff);
092        }
093    
094        protected void tearDown() {
095            a = b = c = d = e = null;
096            fac = null;
097            cfac = null;
098            bb = null;
099        }
100    
101    
102        /*
103         * Dummy test method for jUnit.
104         * 
105        public void testDummy() {
106        }
107         */
108    
109    
110        /**
111         * Test sequential CGB.
112         * 
113         */
114        public void testSequentialCGB() {
115    
116            L = new ArrayList<GenPolynomial<GenPolynomial<BigRational>>>();
117    
118            a = fac.random(kl, ll, el, q );
119            b = fac.random(kl, ll, el, q );
120            c = a; //fac.random(kl, ll, el, q );
121            d = c; //fac.random(kl, ll, el, q );
122            e = d; //fac.random(kl, ll, el, q );
123    
124            if ( a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO() ) {
125                return;
126            }
127    
128            assertTrue("not isZERO( a )", !a.isZERO() );
129            L.add(a);
130    
131            L = bb.GB( L );
132            assertTrue("isGB( { a } )", bb.isGB(L) );
133    
134            assertTrue("not isZERO( b )", !b.isZERO() );
135            L.add(b);
136            //System.out.println("L = " + L.size() );
137    
138            L = bb.GB( L );
139            assertTrue("isGB( { a, b } )", bb.isGB(L) );
140    
141            assertTrue("not isZERO( c )", !c.isZERO() );
142            L.add(c);
143    
144            L = bb.GB( L );
145            assertTrue("isGB( { a, b, c } )", bb.isGB(L) );
146    
147            if ( true ) {
148                return;
149            }
150    
151            assertTrue("not isZERO( d )", !d.isZERO() );
152            L.add(d);
153    
154            L = bb.GB( L );
155            assertTrue("isGB( { a, b, c, d } )", bb.isGB(L) );
156    
157            assertTrue("not isZERO( e )", !e.isZERO() );
158            L.add(e);
159    
160            L = bb.GB( L );
161            assertTrue("isGB( { a, b, c, d, e } )", bb.isGB(L) );
162        }
163    
164    
165        /**
166         * Test Trinks CGB.
167         * 
168         */
169        @SuppressWarnings("unchecked") 
170        public void testTrinks7GBase() {
171            PolynomialList<GenPolynomial<BigRational>> F = null;
172            List<GenPolynomial<GenPolynomial<BigRational>>> G = null;
173            List<ColoredSystem<BigRational>> Gs = null;
174            String exam = "IntFunc(b) (S,T,Z,P,W) L "
175                + "( "  
176                + "( 45 P + 35 S - { 165 b + 36 } ), " 
177                + "( 35 P + 40 Z + 25 T - 27 S ), "
178                + "( 15 W + 25 S P + 30 Z - 18 T - { 165 b**2 } ), "
179                + "( - 9 W + 15 T P + 20 S Z ), "
180                + "( P W + 2 T Z - { 11 b**3 } ), "
181                + "( 99 W - { 11 b } S + { 3 b**2 } ), "
182                + "( { b**2 + 33/50 b + 2673/10000 } ) "
183                + ") ";
184            Reader source = new StringReader( exam );
185            GenPolynomialTokenizer parser
186                = new GenPolynomialTokenizer( source );
187            try {
188                F = (PolynomialList<GenPolynomial<BigRational>>) parser.nextPolynomialSet();
189            } catch(ClassCastException e) {
190                fail(""+e);
191            } catch(IOException e) {
192                fail(""+e);
193            }
194            //System.out.println("F = " + F);
195    
196            G = bb.GB(F.list);
197            assertTrue("isGB( GB(Trinks7) )", bb.isGB(G) );
198    
199            //PolynomialList<GenPolynomial<BigRational>> trinks 
200            //    = new PolynomialList<GenPolynomial<BigRational>>(F.ring,G);
201            //System.out.println("G = " + trinks);
202            //System.out.println("G = " + G);
203        }
204    
205    }