001 /*
002 * $Id: SolvableReductionTest.java 2412 2009-02-07 12:17:54Z kredel $
003 */
004
005 package edu.jas.gb;
006
007 import java.util.ArrayList;
008 import java.util.List;
009
010 import junit.framework.Test;
011 import junit.framework.TestCase;
012 import junit.framework.TestSuite;
013
014 import org.apache.log4j.BasicConfigurator;
015
016 import edu.jas.arith.BigRational;
017 import edu.jas.poly.GenSolvablePolynomial;
018 import edu.jas.poly.GenSolvablePolynomialRing;
019 import edu.jas.poly.PolynomialList;
020 import edu.jas.poly.RelationTable;
021 import edu.jas.poly.WeylRelations;
022
023
024 /**
025 * Solvable Reduction tests with JUnit.
026 * @author Heinz Kredel.
027 */
028
029 public class SolvableReductionTest extends TestCase {
030
031 /**
032 * main
033 */
034 public static void main (String[] args) {
035 BasicConfigurator.configure();
036 junit.textui.TestRunner.run( suite() );
037 }
038
039 /**
040 * Constructs a <CODE>ReductionSolvableTest</CODE> object.
041 * @param name String.
042 */
043 public SolvableReductionTest(String name) {
044 super(name);
045 }
046
047 /**
048 * suite.
049 */
050 public static Test suite() {
051 TestSuite suite= new TestSuite(SolvableReductionTest.class);
052 return suite;
053 }
054
055 //private final static int bitlen = 100;
056
057 GenSolvablePolynomialRing<BigRational> fac;
058
059 RelationTable table;
060
061 GenSolvablePolynomial<BigRational> a;
062 GenSolvablePolynomial<BigRational> b;
063 GenSolvablePolynomial<BigRational> c;
064 GenSolvablePolynomial<BigRational> d;
065 GenSolvablePolynomial<BigRational> e;
066
067 List<GenSolvablePolynomial<BigRational>> L;
068 PolynomialList<BigRational> F;
069 PolynomialList<BigRational> G;
070
071 SolvableReduction<BigRational> sred;
072 SolvableReduction<BigRational> sredpar;
073
074 int rl = 4;
075 int kl = 10;
076 int ll = 5;
077 int el = 3;
078 float q = 0.4f;
079
080 protected void setUp() {
081 a = b = c = d = e = null;
082 fac = new GenSolvablePolynomialRing<BigRational>( new BigRational(0), rl );
083 sred = new SolvableReductionSeq<BigRational>();
084 sredpar = new SolvableReductionPar<BigRational>();
085 }
086
087 protected void tearDown() {
088 a = b = c = d = e = null;
089 fac = null;
090 sred = null;
091 sredpar = null;
092 }
093
094
095 /**
096 * Test constants and empty list reduction.
097 *
098 */
099 public void testRatReduction0() {
100 L = new ArrayList<GenSolvablePolynomial<BigRational>>();
101
102 a = fac.random(kl, ll, el, q );
103 c = fac.getONE();
104 d = fac.getZERO();
105
106 e = sred.leftNormalform( L, c );
107 assertTrue("isONE( e )", e.isONE() );
108
109 e = sred.leftNormalform( L, d );
110 assertTrue("isZERO( e )", e.isZERO() );
111
112
113 L.add( c );
114 e = sred.leftNormalform( L, c );
115 assertTrue("isZERO( e )", e.isZERO() );
116
117 // e = Reduction.leftNormalform( L, a );
118 // assertTrue("isZERO( e )", e.isZERO() );
119
120 e = sred.leftNormalform( L, d );
121 assertTrue("isZERO( e )", e.isZERO() );
122
123
124 L = new ArrayList<GenSolvablePolynomial<BigRational>>();
125 L.add( d );
126 e = sred.leftNormalform( L, c );
127 assertTrue("isONE( e )", e.isONE() );
128
129 e = sred.leftNormalform( L, d );
130 assertTrue("isZERO( e )", e.isZERO() );
131 }
132
133
134 /**
135 * Test constants and empty list reduction.
136 *
137 */
138 public void testWeylRatReduction0() {
139 L = new ArrayList<GenSolvablePolynomial<BigRational>>();
140
141 WeylRelations<BigRational> wl = new WeylRelations<BigRational>(fac);
142 wl.generate();
143
144 a = fac.random(kl, ll, el, q );
145 c = fac.getONE();
146 d = fac.getZERO();
147
148 e = sred.leftNormalform( L, c );
149 assertTrue("isONE( e )", e.isONE() );
150
151 e = sred.leftNormalform( L, d );
152 assertTrue("isZERO( e )", e.isZERO() );
153
154
155 L.add( c );
156 e = sred.leftNormalform( L, c );
157 assertTrue("isZERO( e )", e.isZERO() );
158
159 e = sred.leftNormalform( L, a );
160 assertTrue("isZERO( e )", e.isZERO() );
161
162 e = sred.leftNormalform( L, d );
163 assertTrue("isZERO( e )", e.isZERO() );
164
165
166 L = new ArrayList<GenSolvablePolynomial<BigRational>>();
167 L.add( d );
168 e = sred.leftNormalform( L, c );
169 assertTrue("isONE( e )", e.isONE() );
170
171 e = sred.leftNormalform( L, d );
172 assertTrue("isZERO( e )", e.isZERO() );
173 }
174
175
176 /**
177 * Test Rat reduction.
178 *
179 */
180 public void testRatReduction() {
181
182 a = fac.random(kl, ll, el, q );
183 b = fac.random(kl, ll, el, q );
184
185 assertTrue("not isZERO( a )", !a.isZERO() );
186
187 L = new ArrayList<GenSolvablePolynomial<BigRational>>();
188 L.add(a);
189
190 e = sred.leftNormalform( L, a );
191 assertTrue("isZERO( e )", e.isZERO() );
192
193 assertTrue("not isZERO( b )", !b.isZERO() );
194
195 L.add(b);
196 e = sred.leftNormalform( L, a );
197 assertTrue("isZERO( e ) some times", e.isZERO() );
198 }
199
200
201 /**
202 * Test Rat reduction parallel.
203 *
204 */
205 public void testRatReductionPar() {
206
207 a = fac.random(kl, ll, el, q );
208 b = fac.random(kl, ll, el, q );
209
210 assertTrue("not isZERO( a )", !a.isZERO() );
211
212 L = new ArrayList<GenSolvablePolynomial<BigRational>>();
213 L.add(a);
214
215 e = sredpar.leftNormalform( L, a );
216 assertTrue("isZERO( e )", e.isZERO() );
217
218 assertTrue("not isZERO( b )", !b.isZERO() );
219
220 L.add(b);
221 e = sredpar.leftNormalform( L, a );
222 assertTrue("isZERO( e ) some times", e.isZERO() );
223 }
224
225
226 /**
227 * Test Weyl Rational reduction.
228 *
229 */
230 public void testWeylRatReduction() {
231 L = new ArrayList<GenSolvablePolynomial<BigRational>>();
232
233 WeylRelations<BigRational> wl = new WeylRelations<BigRational>(fac);
234 wl.generate();
235
236 a = fac.random(kl, ll, el, q );
237 b = fac.random(kl, ll, el, q );
238
239 assertTrue("not isZERO( a )", !a.isZERO() );
240
241 L.add(a);
242
243 e = sred.leftNormalform( L, a );
244 assertTrue("isZERO( e )", e.isZERO() );
245
246 assertTrue("not isZERO( b )", !b.isZERO() );
247
248 L.add(b);
249 e = sred.leftNormalform( L, a );
250 assertTrue("isZERO( e ) some times", e.isZERO() );
251 }
252
253
254 /**
255 * Test Weyl Rational reduction parallel.
256 *
257 */
258 public void testWeylRatReductionPar() {
259 L = new ArrayList<GenSolvablePolynomial<BigRational>>();
260
261 WeylRelations<BigRational> wl = new WeylRelations<BigRational>(fac);
262 wl.generate();
263
264 a = fac.random(kl, ll, el, q );
265 b = fac.random(kl, ll, el, q );
266
267 assertTrue("not isZERO( a )", !a.isZERO() );
268
269 L.add(a);
270
271 e = sredpar.leftNormalform( L, a );
272 assertTrue("isZERO( e )", e.isZERO() );
273
274 assertTrue("not isZERO( b )", !b.isZERO() );
275
276 L.add(b);
277 e = sredpar.leftNormalform( L, a );
278 assertTrue("isZERO( e ) some times", e.isZERO() );
279 }
280
281
282 /**
283 * Test Rat reduction recording.
284 *
285 */
286 public void testRatReductionRecording() {
287
288 List<GenSolvablePolynomial<BigRational>> row = null;
289
290
291 a = fac.random(kl, ll, el, q );
292 b = fac.random(kl, ll, el, q );
293 c = fac.random(kl, ll, el, q );
294 d = fac.random(kl, ll, el, q );
295
296 assertTrue("not isZERO( a )", !a.isZERO() );
297
298 L = new ArrayList<GenSolvablePolynomial<BigRational>>();
299
300 L.add(a);
301 row = new ArrayList<GenSolvablePolynomial<BigRational>>( L.size() );
302 for ( int m = 0; m < L.size(); m++ ) {
303 row.add(null);
304 }
305 e = sred.leftNormalform( row, L, a );
306 assertTrue("isZERO( e )", e.isZERO() );
307 assertTrue("not isZERO( b )", !b.isZERO() );
308 assertTrue("is leftReduction ", sred.isLeftReductionNF(row,L,a,e) );
309
310 L.add(b);
311 row = new ArrayList<GenSolvablePolynomial<BigRational>>( L.size() );
312 for ( int m = 0; m < L.size(); m++ ) {
313 row.add(null);
314 }
315 e = sred.leftNormalform( row, L, b );
316 assertTrue("is leftReduction ", sred.isLeftReductionNF(row,L,b,e) );
317
318 L.add(c);
319 row = new ArrayList<GenSolvablePolynomial<BigRational>>( L.size() );
320 for ( int m = 0; m < L.size(); m++ ) {
321 row.add(null);
322 }
323 e = sred.leftNormalform( row, L, c );
324 assertTrue("is leftReduction ", sred.isLeftReductionNF(row,L,c,e) );
325
326 L.add(d);
327 row = new ArrayList<GenSolvablePolynomial<BigRational>>( L.size() );
328 for ( int m = 0; m < L.size(); m++ ) {
329 row.add(null);
330 }
331 e = sred.leftNormalform( row, L, d );
332 assertTrue("is leftReduction ", sred.isLeftReductionNF(row,L,d,e) );
333 }
334
335
336 }