001/* 002 * $Id$ 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, G; 065 066 067 PolynomialList<BigRational> F; 068 069 070 GroebnerBaseAbstract<BigRational> bb; // not interface 071 072 073 GenPolynomial<BigRational> a, b, c, d, e; 074 075 076 int rl = 3; //4; //3; 077 078 079 int kl = 2; // 10; 080 081 082 int ll = 5; //7; 083 084 085 int el = 3; 086 087 088 float q = 0.3f; //0.2f; //0.4f 089 090 091 @Override 092 protected void setUp() { 093 BigRational coeff = new BigRational(9); 094 fac = new GenPolynomialRing<BigRational>(coeff, rl); 095 a = b = c = d = e = null; 096 bb = new GroebnerBaseSeqPairSeq<BigRational>(); 097 } 098 099 100 @Override 101 protected void tearDown() { 102 a = b = c = d = e = null; 103 fac = null; 104 bb = null; 105 } 106 107 108 /** 109 * Test sequential GBase. 110 */ 111 public void testSeqPairSequentialGBase() { 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 = bb.GB(L); 129 assertTrue("isGB( { a } )", bb.isGB(L)); 130 131 assertTrue("not isZERO( b )", !b.isZERO()); 132 L.add(b); 133 //System.out.println("L = " + L.size() ); 134 135 L = bb.GB(L); 136 assertTrue("isGB( { a, b } )", bb.isGB(L)); 137 138 assertTrue("not isZERO( c )", !c.isZERO()); 139 L.add(c); 140 141 L = bb.GB(L); 142 assertTrue("isGB( { a, b, c } )", bb.isGB(L)); 143 144 assertTrue("not isZERO( d )", !d.isZERO()); 145 L.add(d); 146 147 L = bb.GB(L); 148 assertTrue("isGB( { a, b, c, d } )", bb.isGB(L)); 149 150 assertTrue("not isZERO( e )", !e.isZERO()); 151 L.add(e); 152 153 L = bb.GB(L); 154 assertTrue("isGB( { a, b, c, d, e } )", bb.isGB(L)); 155 } 156 157 158 /** 159 * Test Trinks7 GBase. 160 */ 161 @SuppressWarnings("unchecked") 162 public void testTrinks7GBase() { 163 String exam = "(B,S,T,Z,P,W) L " + "( " + "( 45 P + 35 S - 165 B - 36 ), " 164 + "( 35 P + 40 Z + 25 T - 27 S ), " + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), " 165 + "( - 9 W + 15 T P + 20 S Z ), " + "( P W + 2 T Z - 11 B**3 ), " 166 + "( 99 W - 11 B S + 3 B**2 ), " + "( B**2 + 33/50 B + 2673/10000 ) " + ") "; 167 Reader source = new StringReader(exam); 168 GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source); 169 try { 170 F = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 171 } catch (ClassCastException e) { 172 fail("" + e); 173 } catch (IOException e) { 174 fail("" + e); 175 } 176 //System.out.println("F = " + F); 177 178 G = bb.GB(F.list); 179 assertTrue("isGB( GB(Trinks7) )", bb.isGB(G)); 180 assertEquals("#GB(Trinks7) == 6", 6, G.size()); 181 //PolynomialList<BigRational> trinks = new PolynomialList<BigRational>(F.ring,G); 182 //System.out.println("G = " + trinks); 183 184 } 185 186 187 /** 188 * Test sequential extended GBase. 189 */ 190 public void testSeqPairSequentialExtendedGBase() { 191 192 L = new ArrayList<GenPolynomial<BigRational>>(); 193 194 ExtendedGB<BigRational> exgb; 195 196 a = fac.random(kl, ll, el, q); 197 b = fac.random(kl, ll, el, q); 198 c = fac.random(kl, ll, el, q); 199 d = fac.random(kl, ll, el, q); 200 e = d; //fac.random(kl, ll, el, q ); 201 202 if (a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO()) { 203 return; 204 } 205 206 assertTrue("not isZERO( a )", !a.isZERO()); 207 L.add(a); 208 //System.out.println("L = " + L ); 209 210 exgb = bb.extGB(L); 211 // System.out.println("exgb = " + exgb ); 212 assertTrue("isGB( { a } )", bb.isGB(exgb.G)); 213 assertTrue("isRmat( { a } )", bb.isMinReductionMatrix(exgb)); 214 215 assertTrue("not isZERO( b )", !b.isZERO()); 216 L.add(b); 217 //System.out.println("L = " + L ); 218 219 exgb = bb.extGB(L); 220 //System.out.println("exgb = " + exgb ); 221 assertTrue("isGB( { a, b } )", bb.isGB(exgb.G)); 222 assertTrue("isRmat( { a, b } )", bb.isMinReductionMatrix(exgb)); 223 224 assertTrue("not isZERO( c )", !c.isZERO()); 225 L.add(c); 226 227 exgb = bb.extGB(L); 228 //System.out.println("exgb = " + exgb ); 229 assertTrue("isGB( { a, b, c } )", bb.isGB(exgb.G)); 230 assertTrue("isRmat( { a, b, c } )", bb.isMinReductionMatrix(exgb)); 231 232 assertTrue("not isZERO( d )", !d.isZERO()); 233 L.add(d); 234 235 exgb = bb.extGB(L); 236 //System.out.println("exgb = " + exgb ); 237 assertTrue("isGB( { a, b, c, d } )", bb.isGB(exgb.G)); 238 assertTrue("isRmat( { a, b, c, d } )", bb.isMinReductionMatrix(exgb)); 239 240 241 assertTrue("not isZERO( e )", !e.isZERO()); 242 L.add(e); 243 244 exgb = bb.extGB(L); 245 //System.out.println("exgb = " + exgb ); 246 assertTrue("isGB( { a, b, c, d, e } )", bb.isGB(exgb.G)); 247 assertTrue("isRmat( { a, b, c, d, e } )", bb.isMinReductionMatrix(exgb)); 248 } 249 250 251 /** 252 * Test Trinks7 extended GBase. 253 */ 254 @SuppressWarnings("unchecked") 255 public void testTrinks7ExtendedGBase() { 256 String exam = "(B,S,T,Z,P,W) L " + "( " + "( 45 P + 35 S - 165 B - 36 ), " 257 + "( 35 P + 40 Z + 25 T - 27 S ), " + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), " 258 + "( - 9 W + 15 T P + 20 S Z ), " + "( P W + 2 T Z - 11 B**3 ), " 259 + "( 99 W - 11 B S + 3 B**2 ), " + "( B**2 + 33/50 B + 2673/10000 ) " + ") "; 260 Reader source = new StringReader(exam); 261 GenPolynomialTokenizer parser = new GenPolynomialTokenizer(source); 262 try { 263 F = (PolynomialList<BigRational>) parser.nextPolynomialSet(); 264 } catch (ClassCastException e) { 265 fail("" + e); 266 } catch (IOException e) { 267 fail("" + e); 268 } 269 //System.out.println("F = " + F); 270 271 272 ExtendedGB<BigRational> exgb; 273 274 exgb = bb.extGB(F.list); 275 //System.out.println("exgb = " + exgb ); 276 assertTrue("isGB( GB(Trinks7) )", bb.isGB(exgb.G)); 277 //assertEquals("#GB(Trinks7) == 6", 6, exgb.G.size() ); 278 assertTrue("isRmat( GB(Trinks7) )", bb.isMinReductionMatrix(exgb)); 279 //PolynomialList<BigRational> trinks = new PolynomialList<BigRational>(F.ring,G); 280 //System.out.println("G = " + trinks); 281 282 } 283 284}