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 }