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 }