001/* 002 * $Id$ 003 */ 004 005package edu.jas.poly; 006 007 008import java.util.ArrayList; 009import java.util.Arrays; 010import java.util.List; 011 012import edu.jas.arith.BigInteger; 013 014import junit.framework.Test; 015import junit.framework.TestCase; 016import junit.framework.TestSuite; 017 018 019/** 020 * ExpVector tests with JUnit. Tests arithmetic operations, for comparison tests 021 * see TermOrderTest. 022 * @author Heinz Kredel 023 */ 024 025public class ExpVectorTest extends TestCase { 026 027 028 /** 029 * main 030 */ 031 public static void main(String[] args) { 032 junit.textui.TestRunner.run(suite()); 033 } 034 035 036 /** 037 * Constructs a <CODE>ExpVectorTest</CODE> object. 038 * @param name String. 039 */ 040 public ExpVectorTest(String name) { 041 super(name); 042 } 043 044 045 /** 046 */ 047 public static Test suite() { 048 TestSuite suite = new TestSuite(ExpVectorTest.class); 049 return suite; 050 } 051 052 053 ExpVector a, b, c, d; 054 055 056 @Override 057 protected void setUp() { 058 a = b = c = d = null; 059 } 060 061 062 @Override 063 protected void tearDown() { 064 a = b = c = d = null; 065 } 066 067 068 /** 069 * Test constructor and toString. 070 */ 071 public void testConstructor() { 072 a = ExpVector.create(0); 073 b = ExpVector.create(0); 074 assertEquals("() = ()", a, b); 075 assertEquals("length( () ) = 0", a.length(), 0); 076 assertTrue("isZERO( () )", a.isZERO()); 077 078 a = ExpVector.create(10); 079 b = ExpVector.create(10); 080 assertEquals("10e = 10e", a, b); 081 assertEquals("length( 10e ) = 10", a.length(), 10); 082 assertTrue("isZERO( ( 10e ) )", a.isZERO()); 083 084 String s = "(0,0,0,0,0,0,0,0,0,0)"; 085 a = ExpVector.create(s); 086 String t = a.toString().substring(0, s.length()); 087 088 assertEquals("stringConstr = toString", s, t); 089 assertTrue("isZERO( ( 10e ) )", a.isZERO()); 090 091 s = a.toScript(); 092 //System.out.println("a.toScript: " + s + ", " + s.length()); 093 assertEquals("#s == 0: " + s, s.length(), 0); 094 } 095 096 097 /** 098 * Test bitLength. 099 */ 100 public void testBitLength() { 101 a = ExpVector.create(0); 102 assertEquals("blen(0) = 0", 0, a.bitLength()); 103 104 b = ExpVector.create(10); 105 assertEquals("blen(0) = 10", 10, b.bitLength()); 106 107 c = ExpVector.random(10, 20, 0.5f); 108 //System.out.println("c = " + c); 109 //System.out.println("blen(c) = " + c.bitLength()); 110 assertTrue("blen(random) >= 0", 0 <= c.bitLength()); 111 } 112 113 114 /** 115 * Test random integer. 116 */ 117 public void testRandom() { 118 float q = (float) 0.3; 119 120 a = ExpVector.random(5, 10, q); 121 String s = a.toString(); 122 if (s.indexOf(":") >= 0) { 123 s = s.substring(0, s.indexOf(":")); 124 } 125 b = ExpVector.create(s); 126 127 assertEquals("a == b", true, a.equals(b)); 128 129 c = ExpVector.EVDIF(b, a); 130 131 assertTrue("a-b = 0", c.isZERO()); 132 133 c = a.reverse(); 134 //System.out.println("c = " + c); 135 d = c.reverse(0); 136 //System.out.println("d = " + d); 137 assertEquals("rev(rev(a),0) == a", a, d); 138 } 139 140 141 /** 142 * Test addition. 143 */ 144 public void testAddition() { 145 float q = (float) 0.2; 146 147 a = ExpVector.random(5, 10, q); 148 149 b = ExpVector.EVSUM(a, a); 150 c = ExpVector.EVDIF(b, a); 151 152 assertEquals("a+a-a = a", c, a); 153 assertTrue("a+a-a = a", c.equals(a)); 154 155 boolean t; 156 t = ExpVector.EVMT(b, a); 157 assertTrue("a | a+a", t); 158 159 a = ExpVector.random(5, 10, q); 160 b = ExpVector.random(5, 10, q); 161 162 c = ExpVector.EVSUM(a, b); 163 d = ExpVector.EVSUM(b, a); 164 assertTrue("a+b = b+a", c.equals(d)); 165 } 166 167 168 /** 169 * Test lcm. 170 */ 171 public void testLcm() { 172 float q = (float) 0.2; 173 174 a = ExpVector.random(5, 10, q); 175 b = ExpVector.random(5, 10, q); 176 c = ExpVector.EVLCM(a, b); 177 d = ExpVector.EVLCM(b, a); 178 179 assertTrue("lcm(a,b) = lcm(b,a)", c.equals(d)); 180 181 assertTrue("a | lcm(a,b)", ExpVector.EVMT(c, a)); 182 assertTrue("b | lcm(a,b)", ExpVector.EVMT(c, b)); 183 184 d = ExpVector.EVDIF(c, a); 185 assertTrue("sign(lcm(a,b)-a) >= 0", ExpVector.EVSIGN(d) >= 0); 186 d = ExpVector.EVDIF(c, b); 187 assertTrue("sign(lcm(a,b)-b) >= 0", ExpVector.EVSIGN(d) >= 0); 188 } 189 190 191 /** 192 * Test tdeg. 193 */ 194 public void testTdeg() { 195 a = ExpVector.create(100); 196 assertTrue("tdeg(a) = 0", ExpVector.EVTDEG(a) == 0); 197 198 float q = (float) 0.2; 199 200 a = ExpVector.random(5, 10, q); 201 b = ExpVector.random(5, 10, q); 202 203 assertTrue("tdeg(a) >= 0", ExpVector.EVTDEG(a) >= 0); 204 assertTrue("tdeg(b) >= 0", ExpVector.EVTDEG(b) >= 0); 205 206 c = ExpVector.EVSUM(a, b); 207 assertTrue("tdeg(a+b) >= tdeg(a)", ExpVector.EVTDEG(c) >= ExpVector.EVTDEG(a)); 208 assertTrue("tdeg(a+b) >= tdeg(b)", ExpVector.EVTDEG(c) >= ExpVector.EVTDEG(b)); 209 210 c = ExpVector.EVLCM(a, b); 211 assertTrue("tdeg(lcm(a,b)) >= tdeg(a)", ExpVector.EVTDEG(c) >= ExpVector.EVTDEG(a)); 212 assertTrue("tdeg(lcm(a,b)) >= tdeg(b)", ExpVector.EVTDEG(c) >= ExpVector.EVTDEG(b)); 213 } 214 215 216 /** 217 * Test weight degree. 218 */ 219 public void testWeightdeg() { 220 a = ExpVector.create(100); 221 assertTrue("tdeg(a) = 0", ExpVector.EVTDEG(a) == 0); 222 assertTrue("wdeg(a) = 0", ExpVector.EVWDEG(null, a) == 0); 223 224 float q = (float) 0.2; 225 226 a = ExpVector.random(5, 10, q); 227 b = ExpVector.random(5, 10, q); 228 long[][] w = new long[][] { new long[] { 1l, 1l, 1l, 1l, 1l } }; 229 230 assertTrue("tdeg(a) >= 0", ExpVector.EVTDEG(a) >= 0); 231 assertTrue("tdeg(b) >= 0", ExpVector.EVTDEG(b) >= 0); 232 233 assertTrue("wdeg(a) >= 0", ExpVector.EVWDEG(w, a) >= 0); 234 assertTrue("wdeg(b) >= 0", ExpVector.EVWDEG(w, b) >= 0); 235 236 assertEquals("tdeg(a) == wdeg(a)", ExpVector.EVTDEG(a), ExpVector.EVWDEG(w, a)); 237 assertEquals("tdeg(b) == wdeg(b)", ExpVector.EVTDEG(b), ExpVector.EVWDEG(w, b)); 238 239 c = ExpVector.EVSUM(a, b); 240 assertTrue("wdeg(a+b) >= wdeg(a)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, a)); 241 assertTrue("wdeg(a+b) >= wdeg(b)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, b)); 242 243 c = ExpVector.EVLCM(a, b); 244 assertTrue("wdeg(lcm(a,b)) >= wdeg(a)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, a)); 245 assertTrue("wdeg(lcm(a,b)) >= wdeg(b)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, b)); 246 247 248 w = new long[][] { new long[] { 10l, 1l, 3l, 9l, 100l } }; 249 250 assertTrue("tdeg(a) >= 0", ExpVector.EVTDEG(a) >= 0); 251 assertTrue("tdeg(b) >= 0", ExpVector.EVTDEG(b) >= 0); 252 253 assertTrue("wdeg(a) >= 0", ExpVector.EVWDEG(w, a) >= 0); 254 assertTrue("wdeg(b) >= 0", ExpVector.EVWDEG(w, b) >= 0); 255 256 assertTrue("tdeg(a) <= wdeg(a)", ExpVector.EVTDEG(a) <= ExpVector.EVWDEG(w, a)); 257 assertTrue("tdeg(b) <= wdeg(b)", ExpVector.EVTDEG(b) <= ExpVector.EVWDEG(w, b)); 258 259 c = ExpVector.EVSUM(a, b); 260 assertTrue("wdeg(a+b) >= wdeg(a)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, a)); 261 assertTrue("wdeg(a+b) >= wdeg(b)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, b)); 262 263 c = ExpVector.EVLCM(a, b); 264 assertTrue("wdeg(lcm(a,b)) >= wdeg(a)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, a)); 265 assertTrue("wdeg(lcm(a,b)) >= wdeg(b)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, b)); 266 267 268 w = new long[][] { new long[] { 10l, 1l, 3l, 9l, 100l }, new long[] { 1l, 1l, 1l, 1l, 1l } }; 269 270 assertTrue("tdeg(a) >= 0", ExpVector.EVTDEG(a) >= 0); 271 assertTrue("tdeg(b) >= 0", ExpVector.EVTDEG(b) >= 0); 272 273 assertTrue("wdeg(a) >= 0", ExpVector.EVWDEG(w, a) >= 0); 274 assertTrue("wdeg(b) >= 0", ExpVector.EVWDEG(w, b) >= 0); 275 276 assertTrue("tdeg(a) <= wdeg(a)", ExpVector.EVTDEG(a) <= ExpVector.EVWDEG(w, a)); 277 assertTrue("tdeg(b) <= wdeg(b)", ExpVector.EVTDEG(b) <= ExpVector.EVWDEG(w, b)); 278 279 c = ExpVector.EVSUM(a, b); 280 assertTrue("wdeg(a+b) >= wdeg(a)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, a)); 281 assertTrue("wdeg(a+b) >= wdeg(b)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, b)); 282 283 c = ExpVector.EVLCM(a, b); 284 assertTrue("wdeg(lcm(a,b)) >= wdeg(a)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, a)); 285 assertTrue("wdeg(lcm(a,b)) >= wdeg(b)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, b)); 286 } 287 288 289 /** 290 * Test dependency on variables. 291 */ 292 public void testDependency() { 293 int[] exp; 294 int[] dep; 295 296 a = ExpVector.create(10, 5, 2l); 297 exp = new int[] { 5 }; 298 dep = ExpVector.EVDOV(a); 299 assertTrue("[5] = [5]", Arrays.equals(exp, dep)); 300 301 b = ExpVector.create(10, 3, 9l); 302 exp = new int[] { 3 }; 303 dep = ExpVector.EVDOV(b); 304 assertTrue("[3] = [3]", Arrays.equals(exp, dep)); 305 306 c = ExpVector.EVSUM(a, b); 307 exp = new int[] { 3, 5 }; 308 dep = ExpVector.EVDOV(c); 309 assertTrue("[3,5] = [3,5] " + Arrays.toString(exp) + "," + Arrays.toString(dep), 310 Arrays.equals(exp, dep)); 311 312 b = ExpVector.create(10); 313 exp = new int[] {}; 314 dep = ExpVector.EVDOV(b); 315 assertTrue("[] = []", Arrays.equals(exp, dep)); 316 317 b = ExpVector.create(0); 318 exp = new int[] {}; 319 dep = ExpVector.EVDOV(b); 320 assertTrue("[] = []", Arrays.equals(exp, dep)); 321 322 b = ExpVector.create(1, 0, 1l); 323 exp = new int[] { 0 }; 324 dep = ExpVector.EVDOV(b); 325 assertTrue("[0] = [0]", Arrays.equals(exp, dep)); 326 } 327 328 329 /** 330 * Test random exp vector 2. 331 */ 332 public void testRandom2() { 333 float q = (float) 0.2; 334 335 a = ExpVector.random(5, 10, q); 336 b = ExpVector.create("" + a); 337 338 assertEquals("a == b", true, a.equals(b)); 339 340 c = b.subtract(a); 341 342 assertTrue("a-b = 0", c.isZERO()); 343 } 344 345 346 /** 347 * Test addition. 348 */ 349 public void testAddition2() { 350 float q = (float) 0.2; 351 352 a = ExpVector.random(5, 10, q); 353 354 b = a.sum(a); 355 c = b.subtract(a); 356 357 assertEquals("a+a-a = a", c, a); 358 assertTrue("a+a-a = a", c.equals(a)); 359 360 boolean t; 361 t = b.multipleOf(a); 362 assertTrue("a | a+a", t); 363 364 a = ExpVector.random(5, 10, q); 365 b = ExpVector.random(5, 10, q); 366 367 c = a.sum(b); 368 d = b.sum(a); 369 assertTrue("a+b = b+a", c.equals(d)); 370 } 371 372 373 /** 374 * Test lcm. 375 */ 376 public void testLcm2() { 377 float q = (float) 0.2; 378 379 a = ExpVector.random(5, 10, q); 380 b = ExpVector.random(5, 10, q); 381 c = a.lcm(b); 382 d = b.lcm(a); 383 384 assertTrue("lcm(a,b) = lcm(b,a)", c.equals(d)); 385 386 assertTrue("a | lcm(a,b)", c.multipleOf(a)); 387 assertTrue("b | lcm(a,b)", c.multipleOf(b)); 388 389 d = c.subtract(a); 390 assertTrue("sign(lcm(a,b)-a) >= 0", d.signum() >= 0); 391 d = c.subtract(b); 392 assertTrue("sign(lcm(a,b)-b) >= 0", d.signum() >= 0); 393 } 394 395 396 /** 397 * Test tdeg. 398 */ 399 public void testTdeg2() { 400 a = ExpVector.create(100); 401 assertTrue("tdeg(a) = 0", ExpVector.EVTDEG(a) == 0); 402 403 float q = (float) 0.2; 404 405 a = ExpVector.random(5, 10, q); 406 b = ExpVector.random(5, 10, q); 407 408 assertTrue("tdeg(a) >= 0", ExpVector.EVTDEG(a) >= 0); 409 assertTrue("tdeg(b) >= 0", ExpVector.EVTDEG(b) >= 0); 410 411 c = a.sum(b); 412 assertTrue("tdeg(a+b) >= tdeg(a)", ExpVector.EVTDEG(c) >= ExpVector.EVTDEG(a)); 413 assertTrue("tdeg(a+b) >= tdeg(b)", ExpVector.EVTDEG(c) >= ExpVector.EVTDEG(b)); 414 415 c = a.lcm(b); 416 assertTrue("tdeg(lcm(a,b)) >= tdeg(a)", ExpVector.EVTDEG(c) >= ExpVector.EVTDEG(a)); 417 assertTrue("tdeg(lcm(a,b)) >= tdeg(b)", ExpVector.EVTDEG(c) >= ExpVector.EVTDEG(b)); 418 } 419 420 421 /** 422 * Test weighted. 423 */ 424 public void testWeightdeg2() { 425 a = ExpVector.create(100); 426 assertTrue("tdeg(a) = 0", ExpVector.EVTDEG(a) == 0); 427 assertTrue("wdeg(a) = 0", ExpVector.EVWDEG(null, a) == 0); 428 429 float q = (float) 0.2; 430 431 a = ExpVector.random(5, 10, q); 432 b = ExpVector.random(5, 10, q); 433 long[][] w = new long[][] { new long[] { 1l, 1l, 1l, 1l, 1l } }; 434 435 assertTrue("tdeg(a) >= 0", ExpVector.EVTDEG(a) >= 0); 436 assertTrue("tdeg(b) >= 0", ExpVector.EVTDEG(b) >= 0); 437 438 assertTrue("wdeg(a) >= 0", ExpVector.EVWDEG(w, a) >= 0); 439 assertTrue("wdeg(b) >= 0", ExpVector.EVWDEG(w, b) >= 0); 440 441 assertEquals("tdeg(a) == wdeg(a)", ExpVector.EVTDEG(a), ExpVector.EVWDEG(w, a)); 442 assertEquals("tdeg(b) == wdeg(b)", ExpVector.EVTDEG(b), ExpVector.EVWDEG(w, b)); 443 444 c = a.sum(b); 445 assertTrue("wdeg(a+b) >= wdeg(a)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, a)); 446 assertTrue("wdeg(a+b) >= wdeg(b)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, b)); 447 448 c = a.lcm(b); 449 assertTrue("wdeg(lcm(a,b)) >= wdeg(a)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, a)); 450 assertTrue("wdeg(lcm(a,b)) >= wdeg(b)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, b)); 451 452 453 w = new long[][] { new long[] { 10l, 1l, 3l, 9l, 100l } }; 454 455 assertTrue("tdeg(a) >= 0", ExpVector.EVTDEG(a) >= 0); 456 assertTrue("tdeg(b) >= 0", ExpVector.EVTDEG(b) >= 0); 457 458 assertTrue("wdeg(a) >= 0", ExpVector.EVWDEG(w, a) >= 0); 459 assertTrue("wdeg(b) >= 0", ExpVector.EVWDEG(w, b) >= 0); 460 461 assertTrue("tdeg(a) <= wdeg(a)", ExpVector.EVTDEG(a) <= ExpVector.EVWDEG(w, a)); 462 assertTrue("tdeg(b) <= wdeg(b)", ExpVector.EVTDEG(b) <= ExpVector.EVWDEG(w, b)); 463 464 c = a.sum(b); 465 assertTrue("wdeg(a+b) >= wdeg(a)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, a)); 466 assertTrue("wdeg(a+b) >= wdeg(b)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, b)); 467 468 c = a.lcm(b); 469 assertTrue("wdeg(lcm(a,b)) >= wdeg(a)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, a)); 470 assertTrue("wdeg(lcm(a,b)) >= wdeg(b)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, b)); 471 472 473 w = new long[][] { new long[] { 10l, 1l, 3l, 9l, 100l }, new long[] { 1l, 1l, 1l, 1l, 1l } }; 474 475 assertTrue("tdeg(a) >= 0", ExpVector.EVTDEG(a) >= 0); 476 assertTrue("tdeg(b) >= 0", ExpVector.EVTDEG(b) >= 0); 477 478 assertTrue("wdeg(a) >= 0", ExpVector.EVWDEG(w, a) >= 0); 479 assertTrue("wdeg(b) >= 0", ExpVector.EVWDEG(w, b) >= 0); 480 481 assertTrue("tdeg(a) <= wdeg(a)", ExpVector.EVTDEG(a) <= ExpVector.EVWDEG(w, a)); 482 assertTrue("tdeg(b) <= wdeg(b)", ExpVector.EVTDEG(b) <= ExpVector.EVWDEG(w, b)); 483 484 c = a.sum(b); 485 assertTrue("wdeg(a+b) >= wdeg(a)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, a)); 486 assertTrue("wdeg(a+b) >= wdeg(b)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, b)); 487 488 c = a.lcm(b); 489 assertTrue("wdeg(lcm(a,b)) >= wdeg(a)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, a)); 490 assertTrue("wdeg(lcm(a,b)) >= wdeg(b)", ExpVector.EVWDEG(w, c) >= ExpVector.EVWDEG(w, b)); 491 492 } 493 494 495 /** 496 * Test dependency on variables. 497 */ 498 public void testDependency2() { 499 int[] exp; 500 int[] dep; 501 502 a = ExpVector.create(10, 5, 2l); 503 exp = new int[] { 5 }; 504 dep = a.dependencyOnVariables(); 505 assertTrue("[5] = [5]", Arrays.equals(exp, dep)); 506 507 b = ExpVector.create(10, 3, 9l); 508 exp = new int[] { 3 }; 509 dep = b.dependencyOnVariables(); 510 assertTrue("[3] = [3]", Arrays.equals(exp, dep)); 511 512 c = a.sum(b); 513 exp = new int[] { 3, 5 }; 514 dep = c.dependencyOnVariables(); 515 assertTrue("[3,5] = [3,5] " + Arrays.toString(exp) + "," + Arrays.toString(dep), 516 Arrays.equals(exp, dep)); 517 518 b = ExpVector.create(10); 519 exp = new int[] {}; 520 dep = b.dependencyOnVariables(); 521 assertTrue("[] = []", Arrays.equals(exp, dep)); 522 523 b = ExpVector.create(0); 524 exp = new int[] {}; 525 dep = b.dependencyOnVariables(); 526 assertTrue("[] = []", Arrays.equals(exp, dep)); 527 528 b = ExpVector.create(1, 0, 1l); 529 exp = new int[] { 0 }; 530 dep = b.dependencyOnVariables(); 531 assertTrue("[0] = [0]", Arrays.equals(exp, dep)); 532 } 533 534 535 /** 536 * Test evaluation. 537 */ 538 public void testEvaluation() { 539 float q = (float) 0.2; 540 int rl = 5; 541 542 a = ExpVector.random(rl, 10, q); 543 b = ExpVector.random(rl, 10, q); 544 BigInteger fv = new BigInteger(0); 545 List<BigInteger> v = new ArrayList<BigInteger>(a.length()); 546 for (int i = 0; i < a.length(); i++) { 547 v.add(fv.random(4)); 548 } 549 550 BigInteger av = a.evaluate(fv, v); 551 BigInteger bv = b.evaluate(fv, v); 552 553 c = a.sum(b); 554 BigInteger cv = c.evaluate(fv, v); 555 BigInteger dv = av.multiply(bv); 556 557 assertEquals("a(v)*b(v) = (a+b)(v) ", cv, dv); 558 559 c = ExpVector.create(rl); 560 cv = c.evaluate(fv, v); 561 dv = fv.getONE(); 562 assertEquals("0(v) = 1 ", cv, dv); 563 564 v.clear(); 565 for (int i = 0; i < a.length(); i++) { 566 v.add(fv.getZERO()); 567 } 568 cv = c.evaluate(fv, v); 569 dv = fv.getONE(); 570 assertEquals("0(0) = 1 ", cv, dv); 571 572 av = a.evaluate(fv, v); 573 if (a.isZERO()) { 574 dv = fv.getONE(); 575 assertEquals("0(0) = 1 ", av, dv); 576 } else { 577 dv = fv.getZERO(); 578 assertEquals("a(0) = 0 ", av, dv); 579 } 580 } 581 582 583 /** 584 * Test ExpVectorInteger. 585 */ 586 public void testInteger() { 587 a = new ExpVectorInteger(10); 588 b = new ExpVectorInteger(10); 589 assertEquals("10e = 10e", a, b); 590 assertEquals("length( 10e ) = 10", a.length(), 10); 591 assertTrue("isZERO( ( 10e ) )", a.isZERO()); 592 593 String s = "(0,0,0,0,0,0,0,0,0,0)"; 594 a = new ExpVectorInteger(s); 595 String t = a.toString().substring(0, s.length()); 596 assertEquals("stringConstr = toString", s, t); 597 assertTrue("isZERO( ( 10e ) )", a.isZERO()); 598 599 a = ExpVectorInteger.valueOf(ExpVector.random(10, 20, 0.5f)); 600 //System.out.println("a = " + a); 601 t = a.toString(); 602 b = new ExpVectorInteger(t); 603 //System.out.println("b = " + b); 604 assertEquals("parse(toString(a)) == a", a, b); 605 606 b = ExpVectorInteger.valueOf(ExpVector.random(10, 20, 0.5f)); 607 //System.out.println("b = " + b); 608 c = new ExpVectorInteger(b.getVal()); 609 //System.out.println("c = " + c); 610 assertEquals("int(b) == c", b, c); 611 612 c = a.lcm(b); 613 //System.out.println("c = " + c); 614 assertTrue("deg(lcm(a,b)) >= deg(a)", c.totalDeg() >= a.totalDeg()); 615 assertTrue("deg(lcm(a,b)) >= deg(b)", c.totalDeg() >= b.totalDeg()); 616 assertTrue("a | lcm(a,b)", c.multipleOf(a)); 617 assertTrue("b | lcm(a,b)", c.multipleOf(b)); 618 619 d = a.gcd(b); 620 //System.out.println("d = " + d); 621 ExpVector e, f; 622 e = c.sum(d); 623 f = a.sum(b); 624 //System.out.println("e = " + e); 625 //System.out.println("f = " + f); 626 assertEquals("lcm(a,b)*gcd(a,b) == a*b", e, f); 627 628 c = a.reverse(); 629 //System.out.println("c = " + c); 630 d = c.reverse(0); 631 //System.out.println("d = " + d); 632 assertEquals("rev(rev(a),0) == a", a, d); 633 } 634 635 636 /** 637 * Test ExpVectorShort. 638 */ 639 public void testShort() { 640 a = new ExpVectorShort(10); 641 b = new ExpVectorShort(10); 642 assertEquals("10e = 10e", a, b); 643 assertEquals("length( 10e ) = 10", a.length(), 10); 644 assertTrue("isZERO( ( 10e ) )", a.isZERO()); 645 646 String s = "(0,0,0,0,0,0,0,0,0,0)"; 647 a = new ExpVectorShort(s); 648 String t = a.toString().substring(0, s.length()); 649 assertEquals("stringConstr = toString", s, t); 650 assertTrue("isZERO( ( 10e ) )", a.isZERO()); 651 652 a = ExpVectorShort.valueOf(ExpVector.random(10, 20, 0.5f)); 653 //System.out.println("a = " + a); // + ", " + a.toScript()); 654 t = a.toString(); 655 b = new ExpVectorShort(t); 656 assertEquals("parse(toString(a)) == a", a, b); 657 658 b = ExpVectorShort.valueOf(ExpVector.random(10, 20, 0.5f)); 659 //System.out.println("b = " + b); 660 c = new ExpVectorShort(b.getVal()); 661 //System.out.println("c = " + c); 662 assertEquals("short(a) == a", b, c); 663 664 c = a.lcm(b); 665 //System.out.println("c = " + c); 666 assertTrue("deg(lcm(a,b)) >= deg(a)", c.totalDeg() >= a.totalDeg()); 667 assertTrue("deg(lcm(a,b)) >= deg(b)", c.totalDeg() >= b.totalDeg()); 668 assertTrue("a | lcm(a,b)", c.multipleOf(a)); 669 assertTrue("b | lcm(a,b)", c.multipleOf(b)); 670 671 d = a.gcd(b); 672 //System.out.println("d = " + d); 673 ExpVector e, f; 674 e = c.sum(d); 675 f = a.sum(b); 676 //System.out.println("e = " + e); 677 //System.out.println("f = " + f); 678 assertEquals("lcm(a,b)*gcd(a,b) == a*b", e, f); 679 680 c = a.reverse(); 681 //System.out.println("c = " + c); 682 d = c.reverse(0); 683 //System.out.println("d = " + d); 684 assertEquals("rev(rev(a),0) == a", a, d); 685 } 686 687 688 /** 689 * Test ExpVectorByte. 690 */ 691 public void testByte() { 692 a = new ExpVectorByte(10); 693 b = new ExpVectorByte(10); 694 assertEquals("10e = 10e", a, b); 695 assertEquals("length( 10e ) = 10", a.length(), 10); 696 assertTrue("isZERO( ( 10e ) )", a.isZERO()); 697 698 String s = "(0,0,0,0,0,0,0,0,0,0)"; 699 a = new ExpVectorByte(s); 700 String t = a.toString().substring(0, s.length()); 701 assertEquals("stringConstr = toString", s, t); 702 assertTrue("isZERO( ( 10e ) )", a.isZERO()); 703 704 a = ExpVectorByte.valueOf(ExpVector.random(10, 20, 0.5f)); 705 //System.out.println("a = " + a); // + ", " + a.toScript()); 706 t = a.toString(); 707 b = new ExpVectorByte(t); 708 assertEquals("parse(toString(a)) == a", a, b); 709 710 b = ExpVectorByte.valueOf(ExpVector.random(10, 20, 0.5f)); 711 //System.out.println("b = " + b); 712 c = new ExpVectorByte(b.getVal()); 713 //System.out.println("c = " + c); 714 assertEquals("byte(a) == c", b, c); 715 716 c = a.lcm(b); 717 //System.out.println("c = " + c); 718 assertTrue("deg(lcm(a,b)) >= deg(a)", c.totalDeg() >= a.totalDeg()); 719 assertTrue("deg(lcm(a,b)) >= deg(b)", c.totalDeg() >= b.totalDeg()); 720 assertTrue("a | lcm(a,b)", c.multipleOf(a)); 721 assertTrue("b | lcm(a,b)", c.multipleOf(b)); 722 723 d = a.gcd(b); 724 //System.out.println("d = " + d); 725 ExpVector e, f; 726 e = c.sum(d); 727 f = a.sum(b); 728 //System.out.println("e = " + e); 729 //System.out.println("f = " + f); 730 assertEquals("lcm(a,b)*gcd(a,b) == a*b", e, f); 731 732 c = a.reverse(); 733 //System.out.println("c = " + c); 734 d = c.reverse(0); 735 //System.out.println("d = " + d); 736 assertEquals("rev(rev(a),0) == a", a, d); 737 } 738 739 740 /** 741 * Test weight degree, long, integer, short and byte. 742 */ 743 public void testWeightdegIntShortByte() { 744 float q = (float) 0.2; 745 a = new ExpVectorInteger(100); 746 assertTrue("tdeg(a) = 0", a.totalDeg() == 0); 747 assertTrue("wdeg(a) = 0", a.weightDeg((long[][])null) == 0); 748 749 a = ExpVectorInteger.valueOf(ExpVector.random(5, 10, q)); 750 b = ExpVectorInteger.valueOf(ExpVector.random(5, 10, q)); 751 //System.out.println("a = " + a); 752 //System.out.println("b = " + b); 753 runWeightdeg(a,b); 754 755 a = ExpVectorShort.valueOf(ExpVector.random(5, 10, q)); 756 b = ExpVectorShort.valueOf(ExpVector.random(5, 10, q)); 757 //System.out.println("a = " + a); 758 //System.out.println("b = " + b); 759 runWeightdeg(a,b); 760 761 a = ExpVectorByte.valueOf(ExpVector.random(5, 10, q)); 762 b = ExpVectorByte.valueOf(ExpVector.random(5, 10, q)); 763 //System.out.println("a = " + a); 764 //System.out.println("b = " + b); 765 runWeightdeg(a,b); 766 767 a = ExpVectorLong.valueOf(ExpVector.random(5, 10, q)); 768 b = ExpVectorLong.valueOf(ExpVector.random(5, 10, q)); 769 //System.out.println("a = " + a); 770 //System.out.println("b = " + b); 771 runWeightdeg(a,b); 772 } 773 774 775 /** 776 * Run weight degree tests. 777 */ 778 public void runWeightdeg(ExpVector a, ExpVector b) { 779 long[][] w = new long[][] { new long[] { 1l, 1l, 1l, 1l, 1l } }; 780 781 assertTrue("tdeg(a) >= 0", a.totalDeg() >= 0); 782 assertTrue("tdeg(b) >= 0", b.totalDeg() >= 0); 783 assertTrue("madeg(a) >= 0", a.maxDeg() >= 0); 784 assertTrue("madeg(b) >= 0", b.maxDeg() >= 0); 785 assertTrue("mideg(a) >= 0", a.minDeg() >= 0); 786 assertTrue("mideg(b) >= 0", b.minDeg() >= 0); 787 assertTrue("wdeg(a) >= 0", a.weightDeg(w) >= 0); 788 assertTrue("wdeg(b) >= 0", b.weightDeg(w) >= 0); 789 assertEquals("tdeg(a) == wdeg(a)", a.totalDeg(), a.weightDeg(w)); 790 assertEquals("tdeg(b) == wdeg(b)", b.totalDeg(), b.weightDeg(w)); 791 792 ExpVector c = a.sum(b); 793 assertTrue("wdeg(a+b) >= wdeg(a)", c.weightDeg(w) >= a.weightDeg(w)); 794 assertTrue("wdeg(a+b) >= wdeg(b)", c.weightDeg(w) >= b.weightDeg(w)); 795 796 c = a.lcm(b); 797 assertTrue("wdeg(lcm(a,b)) >= wdeg(a)", c.weightDeg(w) >= a.weightDeg(w)); 798 assertTrue("wdeg(lcm(a,b)) >= wdeg(b)", c.weightDeg(w) >= b.weightDeg(w)); 799 800 801 //w = new long[][] { new long[] { 10l, 1l, 3l, 9l, 100l } }; 802 long[] v = new long[] { 10l, 1l, 3l, 9l, 100l }; 803 804 assertTrue("tdeg(a) >= 0", a.totalDeg() >= 0); 805 assertTrue("tdeg(b) >= 0", b.totalDeg() >= 0); 806 assertTrue("wdeg(a) >= 0", a.weightDeg(v) >= 0); 807 assertTrue("wdeg(b) >= 0", b.weightDeg(v) >= 0); 808 assertTrue("tdeg(a) <= wdeg(a)", a.totalDeg() <= a.weightDeg(v)); 809 assertTrue("tdeg(b) <= wdeg(b)", b.totalDeg() <= b.weightDeg(v)); 810 811 c = a.sum(b); 812 assertTrue("wdeg(a+b) >= wdeg(a)", c.weightDeg(v) >= a.weightDeg(v)); 813 assertTrue("wdeg(a+b) >= wdeg(b)", c.weightDeg(v) >= b.weightDeg(v)); 814 815 c = a.lcm(b); 816 assertTrue("wdeg(lcm(a,b)) >= wdeg(a)", c.weightDeg(v) >= a.weightDeg(v)); 817 assertTrue("wdeg(lcm(a,b)) >= wdeg(b)", c.weightDeg(v) >= b.weightDeg(v)); 818 819 820 w = new long [][] { v, w[0] }; 821 822 assertTrue("tdeg(a) >= 0", a.totalDeg() >= 0); 823 assertTrue("tdeg(b) >= 0", b.totalDeg() >= 0); 824 assertTrue("wdeg(a) >= 0", a.weightDeg(w) >= 0); 825 assertTrue("wdeg(b) >= 0", b.weightDeg(w) >= 0); 826 assertTrue("tdeg(a) <= wdeg(a)", a.totalDeg() <= a.weightDeg(w)); 827 assertTrue("tdeg(b) <= wdeg(b)", b.totalDeg() <= b.weightDeg(w)); 828 829 c = a.sum(b); 830 assertTrue("wdeg(a+b) >= wdeg(a)", c.weightDeg(w) >= a.weightDeg(w)); 831 assertTrue("wdeg(a+b) >= wdeg(b)", c.weightDeg(w) >= b.weightDeg(w)); 832 833 c = a.lcm(b); 834 assertTrue("wdeg(lcm(a,b)) >= wdeg(a)", c.weightDeg(w) >= a.weightDeg(w)); 835 assertTrue("wdeg(lcm(a,b)) >= wdeg(b)", c.weightDeg(w) >= b.weightDeg(w)); 836 837 int t = a.invWeightCompareTo(w,b) + b.invWeightCompareTo(w,a); 838 assertTrue("(a <= b) + (b <= a) == 0", t == 0); 839 t = a.invWeightCompareTo(w,b,0,3) + b.invWeightCompareTo(w,a,0,3); 840 assertTrue("(a <= b) + (b <= a) == 0", t == 0); 841 842 t = a.revInvLexCompareTo(b) + b.revInvLexCompareTo(a); 843 assertTrue("(a <= b) + (b <= a) == 0", t == 0); 844 t = a.revInvLexCompareTo(b,0,3) + b.revInvLexCompareTo(a,0,3); 845 assertTrue("(a <= b) + (b <= a) == 0", t == 0); 846 847 t = a.revInvGradCompareTo(b) + b.revInvGradCompareTo(a); 848 assertTrue("(a <= b) + (b <= a) == 0", t == 0); 849 t = a.revInvGradCompareTo(b,0,3) + b.revInvGradCompareTo(a,0,3); 850 assertTrue("(a <= b) + (b <= a) == 0", t == 0); 851 852 t = a.invLexCompareTo(b) + b.invLexCompareTo(a); 853 assertTrue("(a <= b) + (b <= a) == 0", t == 0); 854 t = a.invLexCompareTo(b,0,3) + b.invLexCompareTo(a,0,3); 855 assertTrue("(a <= b) + (b <= a) == 0", t == 0); 856 857 t = a.invGradCompareTo(b) + b.invGradCompareTo(a); 858 assertTrue("(a <= b) + (b <= a) == 0", t == 0); 859 t = a.invGradCompareTo(b,0,3) + b.invGradCompareTo(a,0,3); 860 assertTrue("(a <= b) + (b <= a) == 0", t == 0); 861 862 if (a instanceof ExpVectorShort || a instanceof ExpVectorByte) { 863 return; 864 } 865 t = a.invTdegCompareTo(b) + b.invTdegCompareTo(a); 866 assertTrue("(a <= b) + (b <= a) == 0", t == 0); 867 868 t = a.revLexInvTdegCompareTo(b) + b.revLexInvTdegCompareTo(a); 869 assertTrue("(a <= b) + (b <= a) == 0", t == 0); 870 } 871 872}