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