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 }