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