001/*
002 * $Id: RelationTableTest.java 3789 2011-10-01 18:54:43Z kredel $
003 */
004
005package edu.jas.poly;
006
007//import edu.jas.poly.RelationTable;
008
009import junit.framework.Test;
010import junit.framework.TestCase;
011import junit.framework.TestSuite;
012
013import org.apache.log4j.BasicConfigurator;
014
015import edu.jas.arith.BigRational;
016
017/**
018 * RelationTable tests with JUnit.
019 * @author Heinz Kredel.
020 */
021
022public class RelationTableTest extends TestCase {
023
024/**
025 * main.
026 */
027   public static void main (String[] args) {
028          BasicConfigurator.configure();
029          junit.textui.TestRunner.run( suite() );
030   }
031
032/**
033 * Constructs a <CODE>RelationTableTest</CODE> object.
034 * @param name String.
035 */
036   public RelationTableTest(String name) {
037          super(name);
038   }
039
040/**
041 * suite.
042 */ 
043 public static Test suite() {
044     TestSuite suite= new TestSuite(RelationTableTest.class);
045     return suite;
046   }
047
048   RelationTable<BigRational> table;
049   GenSolvablePolynomialRing<BigRational> ring; 
050   int rl = 5;
051
052   protected void setUp() {
053       BigRational cfac = new BigRational(1);
054       ring = new GenSolvablePolynomialRing<BigRational>(cfac,rl);
055       table = ring.table; // non null
056   }
057
058   protected void tearDown() {
059       table = null;
060       ring = null;
061   }
062
063
064/**
065 * Test constructor and toString.
066 * 
067 */
068 public void testConstructor() {
069     table = new RelationTable<BigRational>(ring);
070     assertEquals("size() = 0",0,table.size());
071     assertEquals("ring == table.ring",ring,table.ring);
072
073     String s = "RelationTable[]";
074     String t = table.toString();
075     assertEquals("RelationTable[]",s,t);
076   }
077
078
079/**
080 * Test update one key.
081 * 
082 */
083 public void testUpdateOneKey() {
084     table = ring.table; 
085     assertEquals("size() = 0",0,table.size());
086
087     //ExpVector z = ring.evzero;
088     ExpVector e = ExpVector.create(rl,2,1);
089     ExpVector f = ExpVector.create(rl,3,1); // insert in empty
090
091     ExpVector ef = e.sum(f);
092
093     GenSolvablePolynomial<BigRational> a = ring.getONE();
094     GenSolvablePolynomial<BigRational> b = ring.getONE().multiply(ef);
095     GenSolvablePolynomial<BigRational> rel 
096        = (GenSolvablePolynomial<BigRational>)a.sum(b);
097
098     table.update(e,f,rel);
099     assertEquals("size() = 1",1,table.size());
100
101     e = ExpVector.create(rl,2,2);
102     f = ExpVector.create(rl,3,1); // insert in beginning
103
104     ef = e.sum(f);
105     b = ring.getONE().multiply(ef);
106     rel = (GenSolvablePolynomial<BigRational>)a.sum(b);
107
108     table.update(e,f,rel);
109     assertEquals("size() = 2",2,table.size());
110
111     e = ExpVector.create(rl,2,2);
112     f = ExpVector.create(rl,3,2);
113
114     ef = e.sum(f);
115     b = ring.getONE().multiply(ef);
116     rel = (GenSolvablePolynomial<BigRational>)a.sum(b);
117
118     table.update(e,f,rel);
119     assertEquals("size() = 3",3,table.size());
120
121     e = ExpVector.create(rl,2,2);
122     f = ExpVector.create(rl,3,4);
123
124     ef = e.sum(f);
125     b = ring.getONE().multiply(ef);
126     rel = (GenSolvablePolynomial<BigRational>)a.sum(b);
127
128     table.update(e,f,rel);
129     assertEquals("size() = 4",4,table.size());
130
131     e = ExpVector.create(rl,2,2);
132     f = ExpVector.create(rl,3,3); // insert in middle
133
134     ef = e.sum(f);
135     b = ring.getONE().multiply(ef);
136     rel = (GenSolvablePolynomial<BigRational>)a.sum(b);
137
138     table.update(e,f,rel);
139     assertEquals("size() = 5",5,table.size());
140
141     //System.out.println("table = " + table);
142   }
143
144
145/**
146 * Test update more keys.
147 * 
148 */
149 public void testUpdateKeys() {
150     table = ring.table; 
151     assertEquals("size() = 0",0,table.size());
152
153     //ExpVector z = ring.evzero;
154     ExpVector e = ExpVector.create(rl,2,1);
155     ExpVector f = ExpVector.create(rl,3,1); // insert in empty
156
157     ExpVector ef = e.sum(f);
158
159     GenSolvablePolynomial<BigRational> a = ring.getONE();
160     GenSolvablePolynomial<BigRational> b = ring.getONE().multiply(ef);
161     GenSolvablePolynomial<BigRational> rel 
162        = (GenSolvablePolynomial<BigRational>)a.sum(b);
163
164     table.update(e,f,rel);
165     assertEquals("size() = 1",1,table.size());
166
167     e = ExpVector.create(rl,0,1);
168     f = ExpVector.create(rl,2,1);
169
170     ef = e.sum(f);
171
172     b = ring.getONE().multiply(ef);
173     rel = (GenSolvablePolynomial<BigRational>)a.sum(b);
174
175     table.update(e,f,rel);
176     assertEquals("size() = 2",2,table.size());
177
178     e = ExpVector.create(rl,2,1);
179     f = ExpVector.create(rl,4,1);
180
181     ef = e.sum(f);
182     b = ring.getONE().multiply(ef);
183     rel = (GenSolvablePolynomial<BigRational>)a.sum(b);
184
185     table.update(e,f,rel);
186     assertEquals("size() = 3",3,table.size());
187
188     //System.out.println("table = " + table);
189   }
190
191
192/**
193 * Test lookup one key.
194 * 
195 */
196 public void testLookupOneKey() {
197     table = ring.table; 
198     assertEquals("size() = 0",0,table.size());
199
200     //ExpVector z = ring.evzero;
201     ExpVector e = ExpVector.create(rl,2,1);
202     ExpVector f = ExpVector.create(rl,3,1); // insert in empty
203
204     ExpVector ef = e.sum(f);
205     GenSolvablePolynomial<BigRational> a = ring.getONE();
206     GenSolvablePolynomial<BigRational> b = ring.getONE().multiply(ef);
207     GenSolvablePolynomial<BigRational> rel 
208        = (GenSolvablePolynomial<BigRational>)a.sum(b);
209     GenSolvablePolynomial<BigRational> r1 = rel; 
210
211     table.update(e,f,rel);
212     assertEquals("size() = 1",1,table.size());
213
214     TableRelation<BigRational> r = table.lookup(e,f);
215     //System.out.println("relation = " + r);
216     assertEquals("e = e",null,r.e);
217     assertEquals("f = f",null,r.f);
218     assertEquals("p = p",rel,r.p);
219
220
221     e = ExpVector.create(rl,2,2);
222     f = ExpVector.create(rl,3,1); // insert in beginning
223
224     ef = e.sum(f);
225     b = ring.getONE().multiply(ef);
226     rel = (GenSolvablePolynomial<BigRational>)a.sum(b);
227
228     table.update(e,f,rel);
229     assertEquals("size() = 2",2,table.size());
230
231     r = table.lookup(e,f);
232     assertEquals("e = e",null,r.e);
233     assertEquals("f = f",null,r.f);
234     assertEquals("p = p",rel,r.p);
235
236
237     e = ExpVector.create(rl,2,2);
238     f = ExpVector.create(rl,3,2);
239
240     ef = e.sum(f);
241     b = ring.getONE().multiply(ef);
242     rel = (GenSolvablePolynomial<BigRational>)a.sum(b);
243
244     table.update(e,f,rel);
245     assertEquals("size() = 3",3,table.size());
246
247     r = table.lookup(e,f);
248     assertEquals("e = e",null,r.e);
249     assertEquals("f = f",null,r.f);
250     assertEquals("p = p",rel,r.p);
251
252
253     e = ExpVector.create(rl,2,2);
254     f = ExpVector.create(rl,3,4);
255
256     ef = e.sum(f);
257     b = ring.getONE().multiply(ef);
258     rel = (GenSolvablePolynomial<BigRational>)a.sum(b);
259
260     table.update(e,f,rel);
261     assertEquals("size() = 4",4,table.size());
262
263     r = table.lookup(e,f);
264     assertEquals("e = e",null,r.e);
265     assertEquals("f = f",null,r.f);
266     assertEquals("p = p",rel,r.p);
267
268
269     e = ExpVector.create(rl,2,2);
270     f = ExpVector.create(rl,3,3); // insert in middle
271
272     ef = e.sum(f);
273     b = ring.getONE().multiply(ef);
274     rel = (GenSolvablePolynomial<BigRational>)a.sum(b);
275
276     table.update(e,f,rel);
277     assertEquals("size() = 5",5,table.size());
278
279     r = table.lookup(e,f);
280     assertEquals("e = e",null,r.e);
281     assertEquals("f = f",null,r.f);
282     assertEquals("p = p",rel,r.p);
283
284
285     // lookup only
286     e = ExpVector.create(rl,2,1);
287     f = ExpVector.create(rl,3,1); 
288
289     r = table.lookup(e,f);
290     assertEquals("e = e",null,r.e);
291     assertEquals("f = f",null,r.f);
292     assertEquals("p = p",r1,r.p);
293
294     //System.out.println("table = " + table);
295   }
296
297
298/**
299 * Test lookup keys.
300 * 
301 */
302 public void testLookupKeys() {
303     table = ring.table; 
304     assertEquals("size() = 0",0,table.size());
305
306     //ExpVector z = ring.evzero;
307     ExpVector e = ExpVector.create(rl,2,1);
308     ExpVector f = ExpVector.create(rl,3,1);
309
310     ExpVector ef = e.sum(f);
311     GenSolvablePolynomial<BigRational> a = ring.getONE();
312     GenSolvablePolynomial<BigRational> b = ring.getONE().multiply(ef);
313     GenSolvablePolynomial<BigRational> rel 
314        = (GenSolvablePolynomial<BigRational>)a.sum(b);
315
316     table.update(e,f,rel);
317     assertEquals("size() = 1",1,table.size());
318
319     TableRelation<BigRational> r = table.lookup(e,f);
320     assertEquals("e = e",null,r.e);
321     assertEquals("f = f",null,r.f);
322     assertEquals("p = p",rel,r.p);
323
324
325     e = ExpVector.create(rl,0,1);
326     f = ExpVector.create(rl,2,1);
327     ef = e.sum(f);
328     b = ring.getONE().multiply(ef);
329     rel = (GenSolvablePolynomial<BigRational>)a.sum(b);
330
331     table.update(e,f,rel);
332     assertEquals("size() = 2",2,table.size());
333
334     r = table.lookup(e,f);
335     assertEquals("e = e",null,r.e);
336     assertEquals("f = f",null,r.f);
337     assertEquals("p = p",rel,r.p);
338
339
340     e = ExpVector.create(rl,2,1);
341     f = ExpVector.create(rl,4,1);
342     ef = e.sum(f);
343     b = ring.getONE().multiply(ef);
344     rel = (GenSolvablePolynomial<BigRational>)a.sum(b);
345
346     table.update(e,f,rel);
347     assertEquals("size() = 3",3,table.size());
348
349     r = table.lookup(e,f);
350     assertEquals("e = e",null,r.e);
351     assertEquals("f = f",null,r.f);
352     assertEquals("p = p",rel,r.p);
353
354
355     //System.out.println("table = " + table);
356   }
357
358
359/**
360 * Test lookup symmetric products.
361 * 
362 */
363 public void testSymmetric() {
364     table = ring.table; 
365     assertEquals("size() = 0",0,table.size());
366
367     //ExpVector z = ring.evzero;
368     ExpVector e = ExpVector.create(rl,2,1);
369     ExpVector f = ExpVector.create(rl,3,1);
370
371     ExpVector ef = e.sum(f);
372
373     //GenSolvablePolynomial<BigRational> a = ring.getONE();
374     GenSolvablePolynomial<BigRational> b = ring.getONE().multiply(ef);
375     //GenSolvablePolynomial<BigRational> rel 
376     //   = (GenSolvablePolynomial<BigRational>)a.add(b);
377
378     TableRelation<BigRational> r = table.lookup(e,f);
379     //System.out.println("relation = " + r);
380     assertEquals("e = e",null,r.e);
381     assertEquals("f = f",null,r.f);
382     assertEquals("p = b",b,r.p);
383
384
385     e = ExpVector.create(rl,0,1);
386     f = ExpVector.create(rl,2,1);
387     ef = e.sum(f);
388     b = ring.getONE().multiply(ef);
389
390     r = table.lookup(e,f);
391     assertEquals("e = e",null,r.e);
392     assertEquals("f = f",null,r.f);
393     assertEquals("p = b",b,r.p);
394
395
396     e = ExpVector.create(rl,2,1);
397     f = ExpVector.create(rl,4,1);
398     ef = e.sum(f);
399     b = ring.getONE().multiply(ef);
400
401     r = table.lookup(e,f);
402     assertEquals("e = e",null,r.e);
403     assertEquals("f = f",null,r.f);
404     assertEquals("p = b",b,r.p);
405
406     assertEquals("size() = 0",0,table.size());
407     //System.out.println("table = " + table);
408   }
409
410}