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