001/* 002 * $Id: GroebnerBaseSeqPairSeqTest.java 5048 2014-12-30 17:45:01Z kredel $ 003 */ 004 005package edu.jas.gb; 006 007 008import java.io.IOException; 009import java.io.Reader; 010import java.io.StringReader; 011import java.util.ArrayList; 012import java.util.List; 013 014import junit.framework.Test; 015import junit.framework.TestCase; 016import junit.framework.TestSuite; 017 018import org.apache.log4j.BasicConfigurator; 019// import org.apache.log4j.Logger; 020 021import edu.jas.arith.BigRational; 022import edu.jas.poly.GenPolynomial; 023import edu.jas.poly.GenPolynomialRing; 024import edu.jas.poly.GenPolynomialTokenizer; 025import edu.jas.poly.PolynomialList; 026 027 028/** 029 * Groebner base sequential, sequential pair list, tests with JUnit. 030 * @author Heinz Kredel. 031 */ 032 033public class GroebnerBaseSeqPairSeqTest extends TestCase { 034 035 036 //private static final Logger logger = Logger.getLogger(GroebnerBaseSeqPairSeqTest.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 /** 048 * Constructs a <CODE>GroebnerBaseSeqPairSeqTest</CODE> object. 049 * @param name String. 050 */ 051 public GroebnerBaseSeqPairSeqTest(String name) { 052 super(name); 053 } 054 055 056 /** 057 * suite. 058 */ 059 public static Test suite() { 060 TestSuite suite = new TestSuite(GroebnerBaseSeqPairSeqTest.class); 061 return suite; 062 } 063 064 065 GenPolynomialRing<BigRational> fac; 066 067 068 List<GenPolynomial<BigRational>> L; 069 070 071 PolynomialList<BigRational> F; 072 073 074 List<GenPolynomial<BigRational>> G; 075 076 077 GroebnerBase<BigRational> bb; // do interface 078 079 080 GenPolynomial<BigRational> a; 081 082 083 GenPolynomial<BigRational> b; 084 085 086 GenPolynomial<BigRational> c; 087 088 089 GenPolynomial<BigRational> d; 090 091 092 GenPolynomial<BigRational> e; 093 094 095 int rl = 3; //4; //3; 096 097 098 int kl = 2; // 10; 099 100 101 int ll = 5; //7; 102 103 104 int el = 3; 105 106 107 float q = 0.3f; //0.2f; //0.4f 108 109 110 @Override 111 protected void setUp() { 112 BigRational coeff = new BigRational(9); 113 fac = new GenPolynomialRing<BigRational>(coeff, rl); 114 a = b = c = d = e = null; 115 bb = new GroebnerBaseSeqPairSeq<BigRational>(); 116 } 117 118 119 @Override 120 protected void tearDown() { 121 a = b = c = d = e = null; 122 fac = null; 123 bb = null; 124 } 125 126 127 /** 128 * Test sequential GBase. 129 * 130 */ 131 public void testSeqPairSequentialGBase() { 132 133 L = new ArrayList<GenPolynomial<BigRational>>(); 134 135 a = fac.random(kl, ll, el, q); 136 b = fac.random(kl, ll, el, q); 137 c = fac.random(kl, ll, el, q); 138 d = fac.random(kl, ll, el, q); 139 e = d; //fac.random(kl, ll, el, q ); 140 141 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) { 142 return; 143 } 144 145 assertTrue("not isZERO( a )", !a.isZERO()); 146 L.add(a); 147 148 L = bb.GB(L); 149 assertTrue("isGB( { a } )", bb.isGB(L)); 150 151 assertTrue("not isZERO( b )", !b.isZERO()); 152 L.add(b); 153 //System.out.println("L = " + L.size() ); 154 155 L = bb.GB(L); 156 assertTrue("isGB( { a, b } )", bb.isGB(L)); 157 158 assertTrue("not isZERO( c )", !c.isZERO()); 159 L.add(c); 160 161 L = bb.GB(L); 162 assertTrue("isGB( { a, b, c } )", bb.isGB(L)); 163 164 assertTrue("not isZERO( d )", !d.isZERO()); 165 L.add(d); 166 167 L = bb.GB(L); 168 assertTrue("isGB( { a, b, c, d } )", bb.isGB(L)); 169 170 assertTrue("not isZERO( e )", !e.isZERO()); 171 L.add(e); 172 173 L = bb.GB(L); 174 assertTrue("isGB( { a, b, c, d, e } )", bb.isGB(L)); 175 } 176 177 178 /** 179 * Test Trinks7 GBase. 180 * 181 */ 182 @SuppressWarnings("cast") 183 public void testTrinks7GBase() { 184 String exam = "(B,S,T,Z,P,W) L " + "( " + "( 45 P + 35 S - 165 B - 36 ), " 185 + "( 35 P + 40 Z + 25 T - 27 S ), " + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), " 186 + "( - 9 W + 15 T P + 20 S Z ), " + "( P W + 2 T Z - 11 B**3 ), " 187 + "( 99 W - 11 B S + 3 B**2 ), " + "( B**2 + 33/50 B + 2673/10000 ) " + ") "; 188 Reader source = new StringReader(exam); 189 GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source); 190 try { 191 F = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 192 } catch (ClassCastException e) { 193 fail("" + e); 194 } catch (IOException e) { 195 fail("" + e); 196 } 197 //System.out.println("F = " + F); 198 199 G = bb.GB(F.list); 200 assertTrue("isGB( GB(Trinks7) )", bb.isGB(G)); 201 assertEquals("#GB(Trinks7) == 6", 6, G.size()); 202 //PolynomialList<BigRational> trinks = new PolynomialList<BigRational>(F.ring,G); 203 //System.out.println("G = " + trinks); 204 205 } 206 207 208 /** 209 * Test sequential extended GBase. 210 * 211 */ 212 public void testSeqPairSequentialExtendedGBase() { 213 214 L = new ArrayList<GenPolynomial<BigRational>>(); 215 216 ExtendedGB<BigRational> exgb; 217 218 a = fac.random(kl, ll, el, q); 219 b = fac.random(kl, ll, el, q); 220 c = fac.random(kl, ll, el, q); 221 d = fac.random(kl, ll, el, q); 222 e = d; //fac.random(kl, ll, el, q ); 223 224 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) { 225 return; 226 } 227 228 assertTrue("not isZERO( a )", !a.isZERO()); 229 L.add(a); 230 //System.out.println("L = " + L ); 231 232 exgb = bb.extGB(L); 233 // System.out.println("exgb = " + exgb ); 234 assertTrue("isGB( { a } )", bb.isGB(exgb.G)); 235 assertTrue("isRmat( { a } )", bb.isReductionMatrix(exgb)); 236 237 assertTrue("not isZERO( b )", !b.isZERO()); 238 L.add(b); 239 //System.out.println("L = " + L ); 240 241 exgb = bb.extGB(L); 242 //System.out.println("exgb = " + exgb ); 243 assertTrue("isGB( { a, b } )", bb.isGB(exgb.G)); 244 assertTrue("isRmat( { a, b } )", bb.isReductionMatrix(exgb)); 245 246 assertTrue("not isZERO( c )", !c.isZERO()); 247 L.add(c); 248 249 exgb = bb.extGB(L); 250 //System.out.println("exgb = " + exgb ); 251 assertTrue("isGB( { a, b, c } )", bb.isGB(exgb.G)); 252 assertTrue("isRmat( { a, b, c } )", bb.isReductionMatrix(exgb)); 253 254 assertTrue("not isZERO( d )", !d.isZERO()); 255 L.add(d); 256 257 exgb = bb.extGB(L); 258 //System.out.println("exgb = " + exgb ); 259 assertTrue("isGB( { a, b, c, d } )", bb.isGB(exgb.G)); 260 assertTrue("isRmat( { a, b, c, d } )", bb.isReductionMatrix(exgb)); 261 262 263 assertTrue("not isZERO( e )", !e.isZERO()); 264 L.add(e); 265 266 exgb = bb.extGB(L); 267 //System.out.println("exgb = " + exgb ); 268 assertTrue("isGB( { a, b, c, d, e } )", bb.isGB(exgb.G)); 269 assertTrue("isRmat( { a, b, c, d, e } )", bb.isReductionMatrix(exgb)); 270 } 271 272 273 /** 274 * Test Trinks7 GBase. 275 * 276 */ 277 @SuppressWarnings("cast") 278 public void testTrinks7ExtendedGBase() { 279 String exam = "(B,S,T,Z,P,W) L " + "( " + "( 45 P + 35 S - 165 B - 36 ), " 280 + "( 35 P + 40 Z + 25 T - 27 S ), " + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), " 281 + "( - 9 W + 15 T P + 20 S Z ), " + "( P W + 2 T Z - 11 B**3 ), " 282 + "( 99 W - 11 B S + 3 B**2 ), " + "( B**2 + 33/50 B + 2673/10000 ) " + ") "; 283 Reader source = new StringReader(exam); 284 GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source); 285 try { 286 F = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 287 } catch (ClassCastException e) { 288 fail("" + e); 289 } catch (IOException e) { 290 fail("" + e); 291 } 292 //System.out.println("F = " + F); 293 294 295 ExtendedGB<BigRational> exgb; 296 297 exgb = bb.extGB(F.list); 298 //System.out.println("exgb = " + exgb ); 299 assertTrue("isGB( GB(Trinks7) )", bb.isGB(exgb.G)); 300 //assertEquals("#GB(Trinks7) == 6", 6, exgb.G.size() ); 301 assertTrue("isRmat( GB(Trinks7) )", bb.isReductionMatrix(exgb)); 302 //PolynomialList<BigRational> trinks = new PolynomialList<BigRational>(F.ring,G); 303 //System.out.println("G = " + trinks); 304 305 } 306 307}