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}