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}