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