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