001 /*
002 * $Id: ReductionTest.java 3426 2010-12-24 13:17:58Z kredel $
003 */
004
005 package edu.jas.application;
006
007
008 import java.util.ArrayList;
009 import java.util.List;
010 import java.util.Map;
011
012 import junit.framework.Test;
013 import junit.framework.TestCase;
014 import junit.framework.TestSuite;
015
016 import org.apache.log4j.BasicConfigurator;
017
018 import edu.jas.arith.BigRational;
019 import edu.jas.kern.ComputerThreads;
020 import edu.jas.poly.ExpVector;
021 import edu.jas.poly.GenPolynomial;
022 import edu.jas.poly.GenPolynomialRing;
023 import edu.jas.poly.PolynomialList;
024 import edu.jas.structure.RingFactory;
025
026
027 // import edu.jas.application.Ideal;
028
029
030 /**
031 * Reduction tests with JUnit.
032 * @author Heinz Kredel.
033 */
034
035 public class ReductionTest extends TestCase {
036
037
038 /**
039 * main
040 */
041 public static void main(String[] args) {
042 BasicConfigurator.configure();
043 junit.textui.TestRunner.run(suite());
044 ComputerThreads.terminate();
045 }
046
047
048 /**
049 * Constructs a <CODE>ReductionTest</CODE> object.
050 * @param name String
051 */
052 public ReductionTest(String name) {
053 super(name);
054 }
055
056
057 /**
058 * suite.
059 * @return a test suite.
060 */
061 public static Test suite() {
062 TestSuite suite = new TestSuite(ReductionTest.class);
063 return suite;
064 }
065
066
067 //private final static int bitlen = 100;
068
069 GenPolynomialRing<BigRational> fac;
070
071
072 GenPolynomial<BigRational> a;
073
074
075 GenPolynomial<BigRational> b;
076
077
078 GenPolynomial<BigRational> c;
079
080
081 GenPolynomial<BigRational> d;
082
083
084 GenPolynomial<BigRational> e;
085
086
087 List<GenPolynomial<BigRational>> L;
088
089
090 PolynomialList<BigRational> F;
091
092
093 PolynomialList<BigRational> G;
094
095
096 //ReductionSeq<BigRational> red;
097 //Reduction<BigRational> redpar;
098
099 int rl = 2;
100
101
102 int kl = 2;
103
104
105 int ll = 3;
106
107
108 int el = 3;
109
110
111 float q = 0.4f;
112
113
114 @Override
115 protected void setUp() {
116 a = b = c = d = e = null;
117 fac = new GenPolynomialRing<BigRational>(new BigRational(0), rl);
118 //red = new ReductionSeq<BigRational>();
119 //redpar = new ReductionPar<BigRational>();
120 }
121
122
123 @Override
124 protected void tearDown() {
125 a = b = c = d = e = null;
126 fac = null;
127 //red = null;
128 //redpar = null;
129 }
130
131
132 /*
133 * Test dummy.
134 *
135 public void testDummy() {
136 }
137 */
138
139
140 /**
141 * Test rational coefficient polynomial parametric reduction,
142 * caseDistinction and determination.
143 *
144 */
145 public void testRatPolReduction() {
146
147 RingFactory<BigRational> bi = new BigRational(0);
148 GenPolynomialRing<BigRational> pr = new GenPolynomialRing<BigRational>(bi, 2,
149 new String[] { "a", "b" });
150 GenPolynomialRing<GenPolynomial<BigRational>> fac = new GenPolynomialRing<GenPolynomial<BigRational>>(
151 pr, rl);
152
153 CReductionSeq<BigRational> cred = new CReductionSeq<BigRational>(bi);
154
155 GenPolynomial<GenPolynomial<BigRational>> a = fac.random(kl, ll, el, q);
156 while (a.isZERO()) {
157 a = fac.random(kl, ll, el, q).sum(fac.getONE());
158 }
159 GenPolynomial<GenPolynomial<BigRational>> b = fac.random(kl, ll, el, q);
160 while (b.isZERO()) {
161 b = fac.random(kl, ll, el, q).subtract(fac.getONE());
162 }
163 GenPolynomial<GenPolynomial<BigRational>> g = fac.getZERO();
164
165 Map.Entry<ExpVector, GenPolynomial<BigRational>> m = a.leadingMonomial();
166 ExpVector e = m.getKey();
167 GenPolynomial<BigRational> c = m.getValue();
168
169 GenPolynomial<GenPolynomial<BigRational>> r = fac.getZERO();
170 r = r.sum(c, e);
171 if (r.isZERO()) {
172 r = fac.getONE();
173 }
174
175 GenPolynomial<GenPolynomial<BigRational>> w = a.reductum();
176
177 ColorPolynomial<BigRational> p = new ColorPolynomial<BigRational>(g, r, w);
178 //System.out.println("p = " + p);
179 assertTrue("check(p) ", p.checkInvariant());
180 assertTrue("deter(p) ", p.isDetermined());
181 //System.out.println("cond != 0: " + p.getConditionNonZero());
182 //System.out.println("cond == 0: " + p.getConditionZero());
183
184 p = new ColorPolynomial<BigRational>(r, g, w);
185 //System.out.println("p = " + p);
186 assertTrue("check(p) ", p.checkInvariant());
187 if (!w.isZERO()) {
188 assertFalse("deter(p) ", p.isDetermined());
189 }
190 //System.out.println("cond != 0: " + p.getConditionNonZero());
191 //System.out.println("cond == 0: " + p.getConditionZero());
192
193 p = new ColorPolynomial<BigRational>(r, w, g);
194 //System.out.println("p = " + p);
195 assertTrue("check(p) ", p.checkInvariant());
196 assertTrue("deter(p) ", p.isDetermined());
197 //System.out.println("cond != 0: " + p.getConditionNonZero());
198 //System.out.println("cond == 0: " + p.getConditionZero());
199
200 // wrong test: p = new ColorPolynomial<BigRational>(w,r,g); //(w,g,r);
201 //System.out.println("p = " + p);
202 //if ( !w.isZERO() ) {
203 // assertFalse("check(p) ", p.checkInvariant());
204 //}
205 //assertFalse("deter(p) ", p.isDetermined());
206 //assertFalse("p == 0 ", p.isZERO());
207 //System.out.println("cond != 0: " + p.getConditionNonZero());
208 //System.out.println("cond == 0: " + p.getConditionZero());
209
210 p = new ColorPolynomial<BigRational>(w, g, g);
211 //System.out.println("p = " + p);
212 assertTrue("check(p) ", p.checkInvariant());
213 assertTrue("deter(p) ", p.isDetermined());
214 assertTrue("p == 0 ", p.isZERO());
215 //System.out.println("cond != 0: " + p.getConditionNonZero());
216 //System.out.println("cond == 0: " + p.getConditionZero());
217
218 List<GenPolynomial<BigRational>> i = new ArrayList<GenPolynomial<BigRational>>();
219 Ideal<BigRational> id = new Ideal<BigRational>(pr, i);
220 List<ColorPolynomial<BigRational>> cp = new ArrayList<ColorPolynomial<BigRational>>();
221
222 Condition<BigRational> cond = new Condition<BigRational>(id);
223 ColoredSystem<BigRational> s = new ColoredSystem<BigRational>(cond, cp);
224 //System.out.println("s = " + s);
225
226 assertTrue("isDetermined ", s.isDetermined());
227 assertTrue("checkInvariant ", s.checkInvariant());
228
229 List<ColoredSystem<BigRational>> CS = new ArrayList<ColoredSystem<BigRational>>();
230 CS.add(s);
231 //System.out.println("CS = " + CS);
232 List<ColoredSystem<BigRational>> CSp = CS;
233
234 //System.out.println("\na = " + a);
235 //System.out.println("b = " + b + "\n");
236
237 //CS = cred.determine(p);
238 //System.out.println("CS = " + CS);
239 for (ColoredSystem<BigRational> x : CS) {
240 assertTrue("isDetermined ", x.isDetermined());
241 assertTrue("checkInvariant ", x.checkInvariant());
242 }
243
244 List<GenPolynomial<GenPolynomial<BigRational>>> L;
245 L = new ArrayList<GenPolynomial<GenPolynomial<BigRational>>>();
246 L.add(a);
247 L.add(b);
248
249 //System.out.println("\na = " + a);
250 //System.out.println("b = " + b + "\n");
251 //System.out.println("L = " + L);
252
253 List<Condition<BigRational>> Ccond;
254 Ccond = cred.caseDistinction(L);
255 //for ( Condition<BigRational> cnd : Ccond ) {
256 // System.out.println("" + cnd);
257 //}
258 //+System.out.println("Ccond = " + Ccond);
259
260 // check if polynomials are determined
261 CSp = cred.determine(L);
262 //+System.out.println("CSp = " + CSp);
263 for (ColoredSystem<BigRational> x : CSp) {
264 assertTrue("isDetermined ", x.isDetermined());
265 assertTrue("checkInvariant ", x.checkInvariant());
266 }
267
268 // check if reduced polynomials are in normalform
269 ColorPolynomial<BigRational> q, h;
270 List<ColoredSystem<BigRational>> NCS;
271 for (ColoredSystem<BigRational> x : CSp) {
272 int k = x.list.size();
273 for (int j = 0; j < k; j++) {
274 p = x.list.get(j);
275 for (int l = j + 1; l < k; l++) {
276 q = x.list.get(l);
277 h = cred.SPolynomial(p, q);
278 //System.out.println("spol(a,b) = " + h);
279 boolean t = true; //cred.isNormalform( x.list, h );
280 //System.out.println("isNF(spol(a,b)) = " + t);
281 h = cred.normalform(x.condition, x.list, h);
282 //System.out.println("NF(spol(a,b)) = " + h);
283 t = cred.isNormalform(x.list, h);
284 //System.out.println("isNF(NF(spol(a,b))) = " + t);
285 assertTrue("isNF(NF(spol(a,b))) ", t);
286 //h = x.condition.reDetermine( h );
287 }
288 }
289 }
290 }
291
292 }