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 }