001 /*
002 * $Id: GroebnerBaseParSyzPairTest.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, syzygy pair list, tests with JUnit.
032 * @author Heinz Kredel.
033 */
034
035 public class GroebnerBaseParSyzPairTest extends TestCase {
036
037 //private static final Logger logger = Logger.getLogger(GroebnerBaseParSyzPairTest.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>GroebnerBaseParSyzPairTest</CODE> object.
049 * @param name String.
050 */
051 public GroebnerBaseParSyzPairTest(String name) {
052 super(name);
053 }
054
055 /**
056 * suite.
057 */
058 public static Test suite() {
059 TestSuite suite= new TestSuite(GroebnerBaseParSyzPairTest.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 GroebnerBaseParallel<BigRational>(threads, new ReductionPar<BigRational>(),
094 new OrderedSyzPairlist<BigRational>());
095 }
096
097 protected void tearDown() {
098 a = b = c = d = e = null;
099 fac = null;
100 bbseq = null;
101 bbpar.terminate();
102 bbpar = null;
103 bbspar.terminate();
104 bbspar = null;
105 }
106
107
108 /**
109 * Test syzygy pair parallel GBase.
110 *
111 */
112 public void testSyzPairParallelGBase() {
113
114 L = new ArrayList<GenPolynomial<BigRational>>();
115
116 a = fac.random(kl, ll, el, q );
117 b = fac.random(kl, ll, el, q );
118 c = fac.random(kl, ll, el, q );
119 d = fac.random(kl, ll, el, q );
120 e = d; //fac.random(kl, ll, el, q );
121
122 if ( a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO() ) {
123 return;
124 }
125
126 assertTrue("not isZERO( a )", !a.isZERO() );
127 L.add(a);
128
129 L = bbspar.GB( L );
130 assertTrue("isGB( { a } )", bbspar.isGB(L) );
131
132 assertTrue("not isZERO( b )", !b.isZERO() );
133 L.add(b);
134 //System.out.println("L = " + L.size() );
135
136 L = bbspar.GB( L );
137 assertTrue("isGB( { a, b } )", bbspar.isGB(L) );
138
139 assertTrue("not isZERO( c )", !c.isZERO() );
140 L.add(c);
141
142 L = bbspar.GB( L );
143 assertTrue("isGB( { a, b, c } )", bbspar.isGB(L) );
144
145 assertTrue("not isZERO( d )", !d.isZERO() );
146 L.add(d);
147
148 L = bbspar.GB( L );
149 assertTrue("isGB( { a, b, c, d } )", bbspar.isGB(L) );
150
151 assertTrue("not isZERO( e )", !e.isZERO() );
152 L.add(e);
153
154 L = bbspar.GB( L );
155 assertTrue("isGB( { a, b, c, d, e } )", bbspar.isGB(L) );
156 }
157
158
159 /**
160 * Test compare sequential with syzygy pair parallel GBase.
161 *
162 */
163 public void testSequentialSyzPairParallelGBase() {
164
165 List<GenPolynomial<BigRational>> Gs, Gp;
166
167 L = new ArrayList<GenPolynomial<BigRational>>();
168
169 a = fac.random(kl, ll, el, q );
170 b = fac.random(kl, ll, el, q );
171 c = fac.random(kl, ll, el, q );
172 d = fac.random(kl, ll, el, q );
173 e = d; //fac.random(kl, ll, el, q );
174
175 if ( a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO() ) {
176 return;
177 }
178
179 L.add(a);
180 Gs = bbseq.GB( L );
181 Gp = bbspar.GB( L );
182
183 assertTrue("Gs.containsAll(Gp)" + Gs + ", " + Gp, Gs.containsAll(Gp) );
184 assertTrue("Gp.containsAll(Gs)" + Gs + ", " + Gp, Gp.containsAll(Gs) );
185
186 L = Gs;
187 L.add(b);
188 Gs = bbseq.GB( L );
189 Gp = bbspar.GB( L );
190
191 assertTrue("Gs.containsAll(Gp)" + Gs + ", " + Gp, Gs.containsAll(Gp) );
192 assertTrue("Gp.containsAll(Gs)" + Gs + ", " + Gp, Gp.containsAll(Gs) );
193
194 L = Gs;
195 L.add(c);
196 Gs = bbseq.GB( L );
197 Gp = bbspar.GB( L );
198
199 assertTrue("Gs.containsAll(Gp)" + Gs + ", " + Gp, Gs.containsAll(Gp) );
200 assertTrue("Gp.containsAll(Gs)" + Gs + ", " + Gp, Gp.containsAll(Gs) );
201
202 L = Gs;
203 L.add(d);
204 Gs = bbseq.GB( L );
205 Gp = bbspar.GB( L );
206
207 assertTrue("Gs.containsAll(Gp)" + Gs + ", " + Gp, Gs.containsAll(Gp) );
208 assertTrue("Gp.containsAll(Gs)" + Gs + ", " + Gp, Gp.containsAll(Gs) );
209
210 L = Gs;
211 L.add(e);
212 Gs = bbseq.GB( L );
213 Gp = bbspar.GB( L );
214
215 assertTrue("Gs.containsAll(Gp)" + Gs + ", " + Gp, Gs.containsAll(Gp) );
216 assertTrue("Gp.containsAll(Gs)" + Gs + ", " + Gp, Gp.containsAll(Gs) );
217 }
218
219
220 /**
221 * Test compare parallel with syzygy pair parallel GBase.
222 *
223 */
224 public void testParallelSyzPairParallelGBase() {
225
226 List<GenPolynomial<BigRational>> Gs, Gp;
227
228 L = new ArrayList<GenPolynomial<BigRational>>();
229
230 a = fac.random(kl, ll, el, q );
231 b = fac.random(kl, ll, el, q );
232 c = fac.random(kl, ll, el, q );
233 d = fac.random(kl, ll, el, q );
234 e = d; //fac.random(kl, ll, el, q );
235
236 if ( a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO() ) {
237 return;
238 }
239
240 L.add(a);
241 Gs = bbpar.GB( L );
242 Gp = bbspar.GB( L );
243
244 assertTrue("Gs.containsAll(Gp) " + Gs + ", " + Gp, Gs.containsAll(Gp) );
245 assertTrue("Gp.containsAll(Gs) " + Gs + ", " + Gp, Gp.containsAll(Gs) );
246
247 L = Gs;
248 L.add(b);
249 Gs = bbpar.GB( L );
250 Gp = bbspar.GB( L );
251
252 assertTrue("Gs.containsAll(Gp) " + Gs + ", " + Gp, Gs.containsAll(Gp) );
253 assertTrue("Gp.containsAll(Gs) " + Gs + ", " + Gp, Gp.containsAll(Gs) );
254
255 L = Gs;
256 L.add(c);
257 Gs = bbpar.GB( L );
258 Gp = bbspar.GB( L );
259
260 assertTrue("Gs.containsAll(Gp) " + Gs + ", " + Gp, Gs.containsAll(Gp) );
261 assertTrue("Gp.containsAll(Gs) " + Gs + ", " + Gp, Gp.containsAll(Gs) );
262
263 L = Gs;
264 L.add(d);
265 Gs = bbpar.GB( L );
266 Gp = bbspar.GB( L );
267
268 assertTrue("Gs.containsAll(Gp) " + Gs + ", " + Gp, Gs.containsAll(Gp) );
269 assertTrue("Gp.containsAll(Gs) " + Gs + ", " + Gp, Gp.containsAll(Gs) );
270
271 L = Gs;
272 L.add(e);
273 Gs = bbpar.GB( L );
274 Gp = bbspar.GB( L );
275
276 assertTrue("Gs.containsAll(Gp) " + Gs + ", " + Gp, Gs.containsAll(Gp) );
277 assertTrue("Gp.containsAll(Gs) " + Gs + ", " + Gp, Gp.containsAll(Gs) );
278 }
279
280
281 /**
282 * Test Trinks7 GBase.
283 *
284 */
285 public void testTrinks7GBase() {
286 String exam = "(B,S,T,Z,P,W) L "
287 + "( "
288 + "( 45 P + 35 S - 165 B - 36 ), "
289 + "( 35 P + 40 Z + 25 T - 27 S ), "
290 + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), "
291 + "( - 9 W + 15 T P + 20 S Z ), "
292 + "( P W + 2 T Z - 11 B**3 ), "
293 + "( 99 W - 11 B S + 3 B**2 ) "
294 + ", ( B**2 + 33/50 B + 2673/10000 ) "
295 + ") ";
296 Reader source = new StringReader( exam );
297 GenPolynomialTokenizer parser
298 = new GenPolynomialTokenizer( source );
299 try {
300 F = (PolynomialList<BigRational>) parser.nextPolynomialSet();
301 } catch(ClassCastException e) {
302 fail(""+e);
303 } catch(IOException e) {
304 fail(""+e);
305 }
306 //System.out.println("F = " + F);
307
308 long t;
309 /*
310 t = System.currentTimeMillis();
311 G = bbseq.GB( F.list );
312 t = System.currentTimeMillis() - t;
313 System.out.println("bbseq ms = " + t);
314 t = System.currentTimeMillis();
315 G = bbpar.GB( F.list );
316 t = System.currentTimeMillis() - t;
317 System.out.println("bbpar ms = " + t);
318 */
319 t = System.currentTimeMillis();
320 G = bbspar.GB( F.list );
321 t = System.currentTimeMillis() - t;
322 //System.out.println("bbspar ms = " + t);
323
324 assertTrue("isGB( GB(Trinks7) )", bbspar.isGB(G) );
325 assertEquals("#GB(Trinks7) == 6", 6, G.size() );
326 PolynomialList<BigRational> trinks
327 = new PolynomialList<BigRational>(F.ring,G);
328 //System.out.println("G = " + trinks);
329 }
330
331 }