001/* 002 * $Id$ 003 */ 004 005package edu.jas.poly; 006 007 008import java.util.Arrays; 009import java.util.List; 010 011import junit.framework.Test; 012import junit.framework.TestCase; 013import junit.framework.TestSuite; 014 015 016/** 017 * IndexList tests with JUnit. Tests construction and arithmetic operations. 018 * @author Heinz Kredel 019 */ 020 021public class IndexListTest extends TestCase { 022 023 024 /** 025 * main. 026 */ 027 public static void main(String[] args) { 028 junit.textui.TestRunner.run(suite()); 029 } 030 031 032 /** 033 * Constructs a <CODE>IndexListTest</CODE> object. 034 * @param name String. 035 */ 036 public IndexListTest(String name) { 037 super(name); 038 } 039 040 041 /** 042 */ 043 public static Test suite() { 044 TestSuite suite = new TestSuite(IndexListTest.class); 045 return suite; 046 } 047 048 049 IndexList a, b, c, d, e; 050 051 052 IndexFactory idf; 053 054 055 int ll = 11; 056 057 058 float q = 0.5f; 059 060 061 @Override 062 protected void setUp() { 063 idf = new IndexFactory(ll); 064 a = b = c = d = null; 065 } 066 067 068 @Override 069 protected void tearDown() { 070 a = b = c = d = null; 071 } 072 073 074 /** 075 * Test constructor and toString. 076 */ 077 public void testConstructor() { 078 a = idf.random(0, q); 079 b = a; 080 //System.out.println("a = " + a); 081 assertEquals("() = ()", a, b); 082 assertTrue("length( () ) = 0", a.length() <= 0); 083 assertTrue("isZERO( () )", a.isZERO()); 084 assertFalse("isONE( () )", a.isONE()); 085 assertFalse("isUnit( () )", a.isUnit()); 086 087 b = idf.random(10, q); 088 //System.out.println("b = " + b); 089 assertTrue("length( () ) = 0", b.length() >= 0); 090 assertFalse("isZERO( () )", b.isZERO()); 091 assertFalse("isONE( () )", b.isONE()); 092 assertFalse("isUnit( () )", b.isUnit()); 093 094 c = new IndexList(idf); 095 //System.out.println("c = " + c); 096 //assertNotEquals("() = ()", a, c); 097 assertTrue("length( 0 ) = -1", c.length() < 0); 098 assertTrue("isZERO( () )", c.isZERO()); 099 assertFalse("isONE( () )", c.isONE()); 100 assertFalse("isUnit( () )", c.isUnit()); 101 102 c = idf.getONE(); 103 //System.out.println("c = " + c); 104 assertTrue("length( 1 ) = 1", c.length() >= 0); 105 assertFalse("isZERO( () )", c.isZERO()); 106 assertTrue("isONE( () )", c.isONE()); 107 assertTrue("isUnit( () )", c.isUnit()); 108 109 String s = b.toString(); 110 String t = b.toScript(); 111 //System.out.println("s = " + s); 112 //System.out.println("t = " + t); 113 assertEquals("s == t: ", s, t); 114 115 //System.out.println("idf = " + idf); 116 IndexFactory ids = new IndexFactory(idf.imaxlength, "I"); 117 //System.out.println("ids = " + ids); 118 assertEquals("idf == ids: ", idf.length(), ids.length()); 119 assertEquals("idf == ids: ", idf, ids); 120 121 ids = new IndexFactory(idf.imaxlength); 122 //System.out.println("ids = " + ids); 123 assertEquals("idf == ids: ", idf.length(), ids.length()); 124 assertEquals("idf == ids: ", idf, ids); 125 } 126 127 128 /** 129 * Test random IndexList. 130 */ 131 public void testRandom() { 132 a = idf.random(5); 133 b = idf.random(7); 134 c = idf.random(9); 135 //System.out.println("a = " + a); 136 //System.out.println("b = " + b); 137 //System.out.println("c = " + c); 138 139 assertFalse("a != (): ", a.isZERO()); 140 assertFalse("b != (): ", b.isZERO()); 141 assertFalse("c != (): ", c.isZERO()); 142 143 assertFalse("a != b: ", a.equals(b)); 144 assertFalse("a != c: ", a.equals(c)); 145 assertFalse("c != b: ", c.equals(b)); 146 147 d = c.abs(); 148 //System.out.println("d = " + d); 149 assertTrue("sign(d) > 0: ", d.signum() > 0); 150 151 if (d.degree() > 1) { 152 assertTrue("minDeg < maxDeg: ", d.minDeg() < d.maxDeg()); 153 } 154 } 155 156 157 /** 158 * Test multiplication. 159 */ 160 public void testMultiplication() { 161 a = idf.random(9, 0.2f); 162 b = idf.random(7, 0.3f); 163 //System.out.println("a = " + a); 164 //System.out.println("b = " + b); 165 166 c = a.multiply(b); 167 d = b.multiply(a); 168 //System.out.println("c = " + c); 169 //System.out.println("d = " + d); 170 //assertTrue("ab = -ba: " + c + " ==? " + d, c.isZERO() || d.isZERO() || a.isONE() || b.isONE() || c.equals(d.negate())); 171 172 if (c.isZERO()) { 173 return; 174 } 175 176 boolean div = a.divides(c); 177 assertTrue("a | c: ", div); 178 div = b.divides(c); 179 assertTrue("b | c: ", div); 180 //System.out.println("div = " + div); 181 182 IndexList ca, cb; 183 ca = a.interiorRightProduct(c); 184 cb = b.interiorRightProduct(c); 185 //System.out.println("ca = " + ca); 186 //System.out.println("cb = " + cb); 187 188 assertEquals("a == cb: ", a.abs(), cb.abs()); 189 assertEquals("b == ca: ", b.abs(), ca.abs()); 190 191 ca = c.interiorLeftProduct(a); 192 cb = c.interiorLeftProduct(b); 193 //System.out.println("ca_l = " + ca); 194 //System.out.println("cb_l = " + cb); 195 } 196 197 198 /** 199 * Test sequence IndexList. 200 */ 201 public void testSequence() { 202 a = idf.sequence(0, 4); 203 b = idf.sequence(4, 3); 204 c = idf.sequence(0, 7); 205 //System.out.println("a = " + a); 206 //System.out.println("b = " + b); 207 //System.out.println("c = " + c); 208 209 assertFalse("a != (): ", a.isZERO()); 210 assertFalse("b != (): ", b.isZERO()); 211 assertFalse("c != (): ", c.isZERO()); 212 213 assertFalse("a != b: ", a.equals(b)); 214 assertFalse("a != c: ", a.equals(c)); 215 assertFalse("c != b: ", c.equals(b)); 216 217 d = a.multiply(b); 218 e = b.multiply(a); 219 //System.out.println("d = " + d); 220 //System.out.println("e = " + e); 221 assertEquals("c == ab: ", c, d); 222 223 IndexList ca, cb; 224 ca = a.interiorRightProduct(d); 225 cb = b.interiorRightProduct(d); 226 //System.out.println("ca = " + ca); 227 //System.out.println("cb = " + cb); 228 229 assertEquals("a == cb: ", a.abs(), cb.abs()); 230 assertEquals("b == ca: ", b.abs(), ca.abs()); 231 } 232 233 234 /** 235 * Test valueOf. 236 */ 237 public void testValueOf() { 238 ExpVector ef = ExpVector.random(4, 2L, 0.8f); 239 //System.out.println("ef = " + ef); 240 241 a = idf.valueOf(ef); 242 //System.out.println("a = " + a); 243 if (!a.isZERO()) { 244 assertTrue("depend(ef) == deg(a): " + ef + ", " + a, ef.dependentVariables() == a.degree()); 245 } 246 247 String as = a.toString() + " = " + a.toScript(); 248 //System.out.println("as = " + as); 249 assertTrue("as != ''" + as, as.length() >= 0); 250 251 List<Integer> W = Arrays.<Integer> asList(1, 4, 7, 8, 13, 17); 252 //System.out.println("W = " + W); 253 254 a = idf.valueOf(W); 255 //System.out.println("a = " + a); 256 assertTrue("deg(a) == #W " + W + ", " + a, W.size() == a.degree()); 257 258 int[] w = new int[] { 1, 4, 7, 8, 13, 17, 4, 1 }; 259 //System.out.println("w = " + w); 260 261 a = idf.valueOf(w); 262 //System.out.println("a = " + a); 263 assertTrue("a == 0: " + a, a.isZERO()); 264 a = idf.valueOf((int[]) null); 265 //System.out.println("a = " + a); 266 assertTrue("a == 0: " + a, a.isZERO()); 267 268 w = new int[] { 7, 8, 13, 17, 4, 1 }; 269 //System.out.println("w = " + w); 270 271 a = idf.valueOf(w); 272 //System.out.println("a = " + a); 273 assertTrue("deg(a) == #w: " + a, a.degree() == w.length); 274 assertTrue("sign(a) < 0: " + a, a.signum() < 0); 275 assertTrue("check(a) == true: " + a, a.isConformant()); 276 277 b = new IndexList(idf, w); 278 //System.out.println("b = " + b); 279 assertFalse("check(b) == false: " + b, b.isConformant()); 280 281 c = idf.valueOf(b); 282 //System.out.println("c = " + c); 283 assertTrue("check(b) == true: " + c, c.isConformant()); 284 } 285 286}