001    /*
002     * $Id: GBProxyTest.java 3378 2010-11-28 17:02:21Z kredel $
003     */
004    
005    package edu.jas.gb;
006    
007    
008    import java.io.IOException;
009    import java.io.Reader;
010    import java.io.StringReader;
011    import java.util.ArrayList;
012    import java.util.List;
013    
014    import junit.framework.Test;
015    import junit.framework.TestCase;
016    import junit.framework.TestSuite;
017    
018    import org.apache.log4j.BasicConfigurator;
019    
020    import edu.jas.arith.BigRational;
021    import edu.jas.kern.ComputerThreads;
022    import edu.jas.poly.GenPolynomial;
023    import edu.jas.poly.GenPolynomialRing;
024    import edu.jas.poly.GenPolynomialTokenizer;
025    import edu.jas.poly.PolynomialList;
026    
027    
028    /**
029     * Groebner base sequential tests with JUnit.
030     * @author Heinz Kredel.
031     */
032    
033    public class GBProxyTest extends TestCase {
034    
035    
036        //private static final Logger logger = Logger.getLogger(GBProxyTest.class);
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>GBProxyTest</CODE> object.
050         * @param name String.
051         */
052        public GBProxyTest(String name) {
053            super(name);
054        }
055    
056    
057        /**
058         * suite.
059         */
060        public static Test suite() {
061            TestSuite suite = new TestSuite(GBProxyTest.class);
062            return suite;
063        }
064    
065    
066        GenPolynomialRing<BigRational> fac;
067    
068    
069        List<GenPolynomial<BigRational>> L;
070    
071    
072        PolynomialList<BigRational> F;
073    
074    
075        List<GenPolynomial<BigRational>> G;
076    
077    
078        GroebnerBaseAbstract<BigRational> bb;
079    
080    
081        GenPolynomial<BigRational> a;
082    
083    
084        GenPolynomial<BigRational> b;
085    
086    
087        GenPolynomial<BigRational> c;
088    
089    
090        GenPolynomial<BigRational> d;
091    
092    
093        GenPolynomial<BigRational> e;
094    
095    
096        int rl = 3; //4; //3; 
097    
098    
099        int kl = 10;
100    
101    
102        int ll = 7;
103    
104    
105        int el = 3;
106    
107    
108        float q = 0.2f; //0.4f
109    
110    
111        @Override
112        protected void setUp() {
113            BigRational coeff = new BigRational(9);
114            fac = new GenPolynomialRing<BigRational>(coeff, rl);
115            a = b = c = d = e = null;
116            GroebnerBaseAbstract<BigRational> bbs = new GroebnerBaseSeq<BigRational>();
117            //GroebnerBaseAbstract<BigRational> bbs = new GroebnerBaseSeqPairSeq<BigRational>();
118            int nt = ComputerThreads.N_CPUS;
119            //System.out.println("nt = " + nt);
120            //GroebnerBaseAbstract<BigRational> bbp = new GroebnerBaseParallel<BigRational>(nt);
121            GroebnerBaseAbstract<BigRational> bbp = new GroebnerBaseSeqPairParallel<BigRational>(nt);
122            bb = new GBProxy<BigRational>(bbs, bbp);
123        }
124    
125    
126        @Override
127        protected void tearDown() {
128            int s = bb.cancel();
129            ComputerThreads.terminate();
130            a = b = c = d = e = null;
131            fac = null;
132            bb = null;
133        }
134    
135    
136        /**
137         * Test GBase.
138         * 
139         */
140        public void testGBase() {
141    
142            L = new ArrayList<GenPolynomial<BigRational>>();
143    
144            a = fac.random(kl, ll, el, q);
145            b = fac.random(kl, ll, el, q);
146            c = fac.random(kl, ll, el, q);
147            d = fac.random(kl, ll, el, q);
148            e = d; //fac.random(kl, ll, el, q );
149    
150            if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) {
151                return;
152            }
153    
154            assertTrue("not isZERO( a )", !a.isZERO());
155            L.add(a);
156    
157            L = bb.GB(L);
158            assertTrue("isGB( { a } )", bb.isGB(L));
159    
160            assertTrue("not isZERO( b )", !b.isZERO());
161            L.add(b);
162            //System.out.println("L = " + L.size() );
163    
164            L = bb.GB(L);
165            assertTrue("isGB( { a, b } )", bb.isGB(L));
166    
167            assertTrue("not isZERO( c )", !c.isZERO());
168            L.add(c);
169    
170            L = bb.GB(L);
171            assertTrue("isGB( { a, b, c } )", bb.isGB(L));
172    
173            assertTrue("not isZERO( d )", !d.isZERO());
174            L.add(d);
175    
176            L = bb.GB(L);
177            assertTrue("isGB( { a, b, c, d } )", bb.isGB(L));
178    
179            assertTrue("not isZERO( e )", !e.isZERO());
180            L.add(e);
181    
182            L = bb.GB(L);
183            assertTrue("isGB( { a, b, c, d, e } )", bb.isGB(L));
184        }
185    
186    
187        /**
188         * Test Trinks7 GBase.
189         * 
190         */
191        @SuppressWarnings("unchecked")
192        // not jet working
193        public void testTrinks7GBase() {
194            String exam = "(B,S,T,Z,P,W) L " + "( " + "( 45 P + 35 S - 165 B - 36 ), "
195                    + "( 35 P + 40 Z + 25 T - 27 S ), " + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), "
196                    + "( - 9 W + 15 T P + 20 S Z ), " + "( P W + 2 T Z - 11 B**3 ), "
197                    + "( 99 W - 11 B S + 3 B**2 ), " + "( B**2 + 33/50 B + 2673/10000 ) " + ") ";
198            Reader source = new StringReader(exam);
199            GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source);
200            try {
201                F = (PolynomialList<BigRational>) parser.nextPolynomialSet();
202            } catch (ClassCastException e) {
203                fail("" + e);
204            } catch (IOException e) {
205                fail("" + e);
206            }
207            //System.out.println("F = " + F);
208    
209            G = bb.GB(F.list);
210            assertEquals("#GB(Trinks7) == 6", 6, G.size());
211            assertTrue("isGB( GB(Trinks7) ) " + G, bb.isGB(G));
212            PolynomialList<BigRational> trinks = new PolynomialList<BigRational>(F.ring, G);
213            //System.out.println("G = " + trinks);
214        }
215    
216    }