001    /*
002     * $Id: GroebnerBaseParTest.java 3265 2010-08-15 10:20:39Z kredel $
003     */
004    
005    package edu.jas.gb;
006    
007    //import edu.jas.poly.GroebnerBase;
008    
009    import java.io.IOException;
010    import java.io.Reader;
011    import java.io.StringReader;
012    import java.util.ArrayList;
013    import java.util.List;
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    
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     * GroebnerBase parallel tests with JUnit.
031     * @author Heinz Kredel.
032     */
033    
034    public class GroebnerBaseParTest extends TestCase {
035    
036        //private static final Logger logger = Logger.getLogger(GroebnerBaseParTest.class);
037    
038    /**
039     * main
040     */
041       public static void main (String[] args) {
042              BasicConfigurator.configure();
043              junit.textui.TestRunner.run( suite() );
044       }
045    
046    /**
047     * Constructs a <CODE>GroebnerBaseParTest</CODE> object.
048     * @param name String.
049     */
050       public GroebnerBaseParTest(String name) {
051              super(name);
052       }
053    
054    /**
055     * suite.
056     */ 
057     public static Test suite() {
058         TestSuite suite= new TestSuite(GroebnerBaseParTest.class);
059         return suite;
060       }
061    
062       GenPolynomialRing<BigRational> fac;
063    
064       List<GenPolynomial<BigRational>> L;
065       PolynomialList<BigRational> F;
066       List<GenPolynomial<BigRational>> G;
067    
068       GroebnerBase<BigRational> bbseq;
069       GroebnerBase<BigRational> bbpar;
070    
071       GenPolynomial<BigRational> a;
072       GenPolynomial<BigRational> b;
073       GenPolynomial<BigRational> c;
074       GenPolynomial<BigRational> d;
075       GenPolynomial<BigRational> e;
076    
077       int rl = 3; //4; //3; 
078       int kl = 10;
079       int ll = 7;
080       int el = 3;
081       float q = 0.2f; //0.4f
082    
083       int threads = 2;
084    
085       protected void setUp() {
086           BigRational coeff = new BigRational(9);
087           fac = new GenPolynomialRing<BigRational>(coeff,rl);
088           a = b = c = d = e = null;
089           bbseq = new GroebnerBaseSeq<BigRational>();
090           bbpar = new GroebnerBaseParallel<BigRational>(threads);
091       }
092    
093       protected void tearDown() {
094           a = b = c = d = e = null;
095           fac = null;
096           bbseq = null;
097           ((GroebnerBaseParallel<BigRational>)bbpar).terminate(); 
098           bbpar = null;
099       }
100    
101    
102    /**
103     * Test parallel GBase.
104     * 
105     */
106     public void testParallelGBase() {
107    
108         L = new ArrayList<GenPolynomial<BigRational>>();
109    
110         a = fac.random(kl, ll, el, q );
111         b = fac.random(kl, ll, el, q );
112         c = fac.random(kl, ll, el, q );
113         d = fac.random(kl, ll, el, q );
114         e = d; //fac.random(kl, ll, el, q );
115    
116         if ( a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO() ) {
117            return;
118         }
119    
120         assertTrue("not isZERO( a )", !a.isZERO() );
121         L.add(a);
122    
123         L = bbpar.GB( L );
124         assertTrue("isGB( { a } )", bbpar.isGB(L) );
125    
126         assertTrue("not isZERO( b )", !b.isZERO() );
127         L.add(b);
128         //System.out.println("L = " + L.size() );
129    
130         L = bbpar.GB( L );
131         assertTrue("isGB( { a, b } )", bbpar.isGB(L) );
132    
133         assertTrue("not isZERO( c )", !c.isZERO() );
134         L.add(c);
135    
136         L = bbpar.GB( L );
137         assertTrue("isGB( { a, b, c } )", bbpar.isGB(L) );
138    
139         assertTrue("not isZERO( d )", !d.isZERO() );
140         L.add(d);
141    
142         L = bbpar.GB( L );
143         assertTrue("isGB( { a, b, c, d } )", bbpar.isGB(L) );
144    
145         assertTrue("not isZERO( e )", !e.isZERO() );
146         L.add(e);
147    
148         L = bbpar.GB( L );
149         assertTrue("isGB( { a, b, c, d, e } )", bbpar.isGB(L) );
150     }
151    
152    
153    /**
154     * Test compare sequential with parallel GBase.
155     * 
156     */
157     public void testSequentialParallelGBase() {
158    
159         List<GenPolynomial<BigRational>> Gs, Gp;
160    
161         L = new ArrayList<GenPolynomial<BigRational>>();
162    
163         a = fac.random(kl, ll, el, q );
164         b = fac.random(kl, ll, el, q );
165         c = fac.random(kl, ll, el, q );
166         d = fac.random(kl, ll, el, q );
167         e = d; //fac.random(kl, ll, el, q );
168    
169         if ( a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO() ) {
170            return;
171         }
172    
173         L.add(a);
174         Gs = bbseq.GB( L );
175         Gp = bbpar.GB( L );
176    
177         assertTrue("Gs.containsAll(Gp)" + Gs + ", " + Gp, Gs.containsAll(Gp) );
178         assertTrue("Gp.containsAll(Gs)" + Gs + ", " + Gp, Gp.containsAll(Gs) );
179    
180         L = Gs;
181         L.add(b);
182         Gs = bbseq.GB( L );
183         Gp = bbpar.GB( L );
184    
185         assertTrue("Gs.containsAll(Gp)" + Gs + ", " + Gp, Gs.containsAll(Gp) );
186         assertTrue("Gp.containsAll(Gs)" + Gs + ", " + Gp, Gp.containsAll(Gs) );
187    
188         L = Gs;
189         L.add(c);
190         Gs = bbseq.GB( L );
191         Gp = bbpar.GB( L );
192    
193         assertTrue("Gs.containsAll(Gp)" + Gs + ", " + Gp, Gs.containsAll(Gp) );
194         assertTrue("Gp.containsAll(Gs)" + Gs + ", " + Gp, Gp.containsAll(Gs) );
195    
196         L = Gs;
197         L.add(d);
198         Gs = bbseq.GB( L );
199         Gp = bbpar.GB( L );
200    
201         assertTrue("Gs.containsAll(Gp)" + Gs + ", " + Gp, Gs.containsAll(Gp) );
202         assertTrue("Gp.containsAll(Gs)" + Gs + ", " + Gp, Gp.containsAll(Gs) );
203    
204         L = Gs;
205         L.add(e);
206         Gs = bbseq.GB( L );
207         Gp = bbpar.GB( L );
208    
209         assertTrue("Gs.containsAll(Gp)" + Gs + ", " + Gp, Gs.containsAll(Gp) );
210         assertTrue("Gp.containsAll(Gs)" + Gs + ", " + Gp, Gp.containsAll(Gs) );
211     }
212    
213    
214    /**
215     * Test Trinks7 GBase.
216     * 
217     */
218     public void testTrinks7GBase() {
219         String exam = "(B,S,T,Z,P,W) L "
220                     + "( "  
221                     + "( 45 P + 35 S - 165 B - 36 ), " 
222                     + "( 35 P + 40 Z + 25 T - 27 S ), "
223                     + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), "
224                     + "( - 9 W + 15 T P + 20 S Z ), "
225                     + "( P W + 2 T Z - 11 B**3 ), "
226                     + "( 99 W - 11 B S + 3 B**2 ), "
227                     + "( B**2 + 33/50 B + 2673/10000 ) "
228                     + ") ";
229         Reader source = new StringReader( exam );
230         GenPolynomialTokenizer parser
231                      = new GenPolynomialTokenizer( source );
232         try {
233             F = (PolynomialList<BigRational>) parser.nextPolynomialSet();
234         } catch(ClassCastException e) {
235             fail(""+e);
236         } catch(IOException e) {
237             fail(""+e);
238         }
239         //System.out.println("F = " + F);
240    
241         G = bbpar.GB( F.list );
242         assertTrue("isGB( GB(Trinks7) )", bbpar.isGB(G) );
243         assertEquals("#GB(Trinks7) == 6", 6, G.size() );
244         PolynomialList<BigRational> trinks 
245               = new PolynomialList<BigRational>(F.ring,G);
246         //System.out.println("G = " + trinks);
247    
248     }
249    }