001    /*
002     * $Id: RelationTableTest.java 1894 2008-07-12 13:50:23Z kredel $
003     */
004    
005    package edu.jas.poly;
006    
007    //import edu.jas.poly.RelationTable;
008    
009    import junit.framework.Test;
010    import junit.framework.TestCase;
011    import junit.framework.TestSuite;
012    
013    import org.apache.log4j.BasicConfigurator;
014    
015    import edu.jas.arith.BigRational;
016    
017    /**
018     * RelationTable tests with JUnit.
019     * @author Heinz Kredel.
020     */
021    
022    public 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    }