001/* 002 * $Id: RelationTableTest.java 5863 2018-07-20 11:13:34Z 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 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}