001    /*
002     * $Id: GroebnerBaseSeqPairParTest.java 3387 2010-12-04 11:52:51Z kredel $
003     */
004    
005    package edu.jas.gb;
006    
007    //import edu.jas.poly.GroebnerBase;
008    
009    import java.util.List;
010    import java.util.ArrayList;
011    import java.io.IOException;
012    import java.io.Reader;
013    import java.io.StringReader;
014    
015    import junit.framework.Test;
016    import junit.framework.TestCase;
017    import junit.framework.TestSuite;
018    
019    import org.apache.log4j.BasicConfigurator;
020    //import org.apache.log4j.Logger;
021    
022    import edu.jas.arith.BigRational;
023    import edu.jas.gb.GroebnerBase;
024    import edu.jas.poly.GenPolynomial;
025    import edu.jas.poly.GenPolynomialRing;
026    import edu.jas.poly.GenPolynomialTokenizer;
027    import edu.jas.poly.PolynomialList;
028    
029    
030    /**
031     * Groebner base parallel, sequential pair list, tests with JUnit.
032     * @author Heinz Kredel.
033     */
034    
035    public class GroebnerBaseSeqPairParTest extends TestCase {
036    
037        //private static final Logger logger = Logger.getLogger(GroebnerBaseSeqPairParTest.class);
038    
039        /**
040         * main
041         */
042        public static void main (String[] args) {
043            BasicConfigurator.configure();
044            junit.textui.TestRunner.run( suite() );
045        }
046    
047        /**
048         * Constructs a <CODE>GroebnerBaseSeqPairParTest</CODE> object.
049         * @param name String.
050         */
051        public GroebnerBaseSeqPairParTest(String name) {
052            super(name);
053        }
054    
055        /**
056         * suite.
057         */ 
058        public static Test suite() {
059            TestSuite suite= new TestSuite(GroebnerBaseSeqPairParTest.class);
060            return suite;
061        }
062    
063        GenPolynomialRing<BigRational> fac;
064    
065        List<GenPolynomial<BigRational>> L;
066        PolynomialList<BigRational> F;
067        List<GenPolynomial<BigRational>> G;
068    
069        GroebnerBaseAbstract<BigRational> bbseq;
070        GroebnerBaseAbstract<BigRational> bbpar;
071        GroebnerBaseAbstract<BigRational> bbspar;
072    
073        GenPolynomial<BigRational> a;
074        GenPolynomial<BigRational> b;
075        GenPolynomial<BigRational> c;
076        GenPolynomial<BigRational> d;
077        GenPolynomial<BigRational> e;
078    
079        int rl = 3; //4; //3; 
080        int kl = 10;
081        int ll = 7;
082        int el = 3;
083        float q = 0.2f; //0.4f
084    
085        int threads = 2;
086    
087        protected void setUp() {
088            BigRational coeff = new BigRational(9);
089            fac = new GenPolynomialRing<BigRational>(coeff,rl);
090            a = b = c = d = e = null;
091            bbseq = new GroebnerBaseSeq<BigRational>();
092            bbpar = new GroebnerBaseParallel<BigRational>(threads);
093            bbspar = new GroebnerBaseSeqPairParallel<BigRational>(threads);
094        }
095    
096        protected void tearDown() {
097            a = b = c = d = e = null;
098            fac = null;
099            bbseq = null;
100            bbpar.terminate(); 
101            bbpar = null;
102            bbspar.terminate(); 
103            bbspar = null;
104        }
105    
106    
107        /**
108         * Test parallel GBase.
109         * 
110         */
111        public void testSeqPairParallelGBase() {
112    
113            L = new ArrayList<GenPolynomial<BigRational>>();
114    
115            a = fac.random(kl, ll, el, q );
116            b = fac.random(kl, ll, el, q );
117            c = fac.random(kl, ll, el, q );
118            d = fac.random(kl, ll, el, q );
119            e = d; //fac.random(kl, ll, el, q );
120    
121            if ( a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO() ) {
122                return;
123            }
124    
125            assertTrue("not isZERO( a )", !a.isZERO() );
126            L.add(a);
127    
128            L = bbspar.GB( L );
129            assertTrue("isGB( { a } )", bbspar.isGB(L) );
130    
131            assertTrue("not isZERO( b )", !b.isZERO() );
132            L.add(b);
133            //System.out.println("L = " + L.size() );
134    
135            L = bbspar.GB( L );
136            assertTrue("isGB( { a, b } )", bbspar.isGB(L) );
137    
138            assertTrue("not isZERO( c )", !c.isZERO() );
139            L.add(c);
140    
141            L = bbspar.GB( L );
142            assertTrue("isGB( { a, b, c } )", bbspar.isGB(L) );
143    
144            assertTrue("not isZERO( d )", !d.isZERO() );
145            L.add(d);
146    
147            L = bbspar.GB( L );
148            assertTrue("isGB( { a, b, c, d } )", bbspar.isGB(L) );
149    
150            assertTrue("not isZERO( e )", !e.isZERO() );
151            L.add(e);
152    
153            L = bbspar.GB( L );
154            assertTrue("isGB( { a, b, c, d, e } )", bbspar.isGB(L) );
155        }
156    
157    
158        /**
159         * Test compare sequential with parallel GBase.
160         * 
161         */
162        public void testSequentialSeqPairParallelGBase() {
163    
164            List<GenPolynomial<BigRational>> Gs, Gp;
165    
166            L = new ArrayList<GenPolynomial<BigRational>>();
167    
168            a = fac.random(kl, ll, el, q );
169            b = fac.random(kl, ll, el, q );
170            c = fac.random(kl, ll, el, q );
171            d = fac.random(kl, ll, el, q );
172            e = d; //fac.random(kl, ll, el, q );
173    
174            if ( a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO() ) {
175                return;
176            }
177    
178            L.add(a);
179            Gs = bbseq.GB( L );
180            Gp = bbspar.GB( L );
181    
182            assertTrue("Gs.containsAll(Gp)" + Gs + ", " + Gp, Gs.containsAll(Gp) );
183            assertTrue("Gp.containsAll(Gs)" + Gs + ", " + Gp, Gp.containsAll(Gs) );
184    
185            L = Gs;
186            L.add(b);
187            Gs = bbseq.GB( L );
188            Gp = bbspar.GB( L );
189    
190            assertTrue("Gs.containsAll(Gp)" + Gs + ", " + Gp, Gs.containsAll(Gp) );
191            assertTrue("Gp.containsAll(Gs)" + Gs + ", " + Gp, Gp.containsAll(Gs) );
192    
193            L = Gs;
194            L.add(c);
195            Gs = bbseq.GB( L );
196            Gp = bbspar.GB( L );
197    
198            assertTrue("Gs.containsAll(Gp)" + Gs + ", " + Gp, Gs.containsAll(Gp) );
199            assertTrue("Gp.containsAll(Gs)" + Gs + ", " + Gp, Gp.containsAll(Gs) );
200    
201            L = Gs;
202            L.add(d);
203            Gs = bbseq.GB( L );
204            Gp = bbspar.GB( L );
205    
206            assertTrue("Gs.containsAll(Gp)" + Gs + ", " + Gp, Gs.containsAll(Gp) );
207            assertTrue("Gp.containsAll(Gs)" + Gs + ", " + Gp, Gp.containsAll(Gs) );
208    
209            L = Gs;
210            L.add(e);
211            Gs = bbseq.GB( L );
212            Gp = bbspar.GB( L );
213    
214            assertTrue("Gs.containsAll(Gp)" + Gs + ", " + Gp, Gs.containsAll(Gp) );
215            assertTrue("Gp.containsAll(Gs)" + Gs + ", " + Gp, Gp.containsAll(Gs) );
216        }
217    
218    
219        /**
220         * Test compare parallel with sequential pair parallel GBase.
221         * 
222         */
223        public void testParallelSeqPairParallelGBase() {
224    
225            List<GenPolynomial<BigRational>> Gs, Gp;
226    
227            L = new ArrayList<GenPolynomial<BigRational>>();
228    
229            a = fac.random(kl, ll, el, q );
230            b = fac.random(kl, ll, el, q );
231            c = fac.random(kl, ll, el, q );
232            d = fac.random(kl, ll, el, q );
233            e = d; //fac.random(kl, ll, el, q );
234    
235            if ( a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO() ) {
236                return;
237            }
238    
239            L.add(a);
240            Gs = bbpar.GB( L );
241            Gp = bbspar.GB( L );
242    
243            assertTrue("Gs.containsAll(Gp) " + Gs + ", " + Gp, Gs.containsAll(Gp) );
244            assertTrue("Gp.containsAll(Gs) " + Gs + ", " + Gp, Gp.containsAll(Gs) );
245    
246            L = Gs;
247            L.add(b);
248            Gs = bbpar.GB( L );
249            Gp = bbspar.GB( L );
250    
251            assertTrue("Gs.containsAll(Gp) " + Gs + ", " + Gp, Gs.containsAll(Gp) );
252            assertTrue("Gp.containsAll(Gs) " + Gs + ", " + Gp, Gp.containsAll(Gs) );
253    
254            L = Gs;
255            L.add(c);
256            Gs = bbpar.GB( L );
257            Gp = bbspar.GB( L );
258    
259            assertTrue("Gs.containsAll(Gp) " + Gs + ", " + Gp, Gs.containsAll(Gp) );
260            assertTrue("Gp.containsAll(Gs) " + Gs + ", " + Gp, Gp.containsAll(Gs) );
261    
262            L = Gs;
263            L.add(d);
264            Gs = bbpar.GB( L );
265            Gp = bbspar.GB( L );
266    
267            assertTrue("Gs.containsAll(Gp) " + Gs + ", " + Gp, Gs.containsAll(Gp) );
268            assertTrue("Gp.containsAll(Gs) " + Gs + ", " + Gp, Gp.containsAll(Gs) );
269    
270            L = Gs;
271            L.add(e);
272            Gs = bbpar.GB( L );
273            Gp = bbspar.GB( L );
274    
275            assertTrue("Gs.containsAll(Gp) " + Gs + ", " + Gp, Gs.containsAll(Gp) );
276            assertTrue("Gp.containsAll(Gs) " + Gs + ", " + Gp, Gp.containsAll(Gs) );
277        }
278    
279    
280        /**
281         * Test Trinks7 GBase.
282         * 
283         */
284        public void testTrinks7GBase() {
285            String exam = "(B,S,T,Z,P,W) L "
286                + "( "  
287                + "( 45 P + 35 S - 165 B - 36 ), " 
288                + "( 35 P + 40 Z + 25 T - 27 S ), "
289                + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), "
290                + "( - 9 W + 15 T P + 20 S Z ), "
291                + "( P W + 2 T Z - 11 B**3 ), "
292                + "( 99 W - 11 B S + 3 B**2 ) "
293                + ", ( B**2 + 33/50 B + 2673/10000 ) "
294                + ") ";
295            Reader source = new StringReader( exam );
296            GenPolynomialTokenizer parser
297                = new GenPolynomialTokenizer( source );
298            try {
299                F = (PolynomialList<BigRational>) parser.nextPolynomialSet();
300            } catch(ClassCastException e) {
301                fail(""+e);
302            } catch(IOException e) {
303                fail(""+e);
304            }
305            //System.out.println("F = " + F);
306    
307            long t;
308            /*     
309                   t = System.currentTimeMillis();
310                   G = bbseq.GB( F.list );
311                   t = System.currentTimeMillis() - t;
312                   System.out.println("bbseq ms = " + t);     
313                   t = System.currentTimeMillis();
314                   G = bbpar.GB( F.list );
315                   t = System.currentTimeMillis() - t;
316                   System.out.println("bbpar ms = " + t);     
317            */
318            t = System.currentTimeMillis();
319            G = bbspar.GB( F.list );
320            t = System.currentTimeMillis() - t;
321            //System.out.println("bbspar ms = " + t);     
322    
323            assertTrue("isGB( GB(Trinks7) )", bbspar.isGB(G) );
324            assertEquals("#GB(Trinks7) == 6", 6, G.size() );
325            PolynomialList<BigRational> trinks 
326                = new PolynomialList<BigRational>(F.ring,G);
327            //System.out.println("G = " + trinks);
328        }
329    
330    }