001/*
002 * $Id$
003 */
004
005package edu.jas.poly;
006
007
008import java.util.ArrayList;
009import java.util.List;
010
011import edu.jas.arith.BigRational;
012
013import junit.framework.Test;
014import junit.framework.TestCase;
015import junit.framework.TestSuite;
016
017
018/**
019 * ModuleList tests with JUnit.
020 * @author Heinz Kredel
021 */
022public class ModuleListTest extends TestCase {
023
024
025    /**
026     * main.
027     */
028    public static void main(String[] args) {
029        junit.textui.TestRunner.run(suite());
030    }
031
032
033    /**
034     * Constructs a <CODE>ModuleListTest</CODE> object.
035     * @param name String.
036     */
037    public ModuleListTest(String name) {
038        super(name);
039    }
040
041
042    /**
043     * suite.
044     * @return a test suite.
045     */
046    public static Test suite() {
047        TestSuite suite = new TestSuite(ModuleListTest.class);
048        return suite;
049    }
050
051
052    ModuleList<BigRational> m;
053
054
055    PolynomialList<BigRational> p;
056
057
058    GenPolynomial<BigRational> a, b, c, d, e;
059
060
061    BigRational cfac;
062
063
064    GenPolynomialRing<BigRational> pfac;
065
066
067    int rl = 4;
068
069
070    int kl = 4;
071
072
073    int ll = 4;
074
075
076    int el = 5;
077
078
079    float q = 0.5f;
080
081    @Override
082    protected void setUp() {
083        a = b = c = d = e = null;
084        cfac = new BigRational(1);
085        TermOrder tord = new TermOrder();
086        pfac = new GenPolynomialRing<BigRational>(cfac, rl, tord);
087        m = null;
088        p = null;
089    }
090
091
092    @Override
093    protected void tearDown() {
094        a = b = c = d = e = null;
095        m = null;
096        p = null;
097    }
098
099
100    /**
101     * Test constructor and toString.
102     */
103    public void testConstructor() {
104        p = new PolynomialList<BigRational>(pfac, (List<GenPolynomial<BigRational>>) null);
105        assertTrue("p = 0", p.list == null);
106
107        m = new ModuleList<BigRational>(pfac, (List<List<GenPolynomial<BigRational>>>) null);
108        assertTrue("m = 0", m.list == null);
109    }
110
111
112    /**
113     * Test polynomial list.
114     */
115    public void testPolynomialList() {
116        List<GenPolynomial<BigRational>> l = new ArrayList<GenPolynomial<BigRational>>();
117        for (int i = 0; i < 7; i++) {
118            a = pfac.random(kl, ll + i, el, q);
119            if (a.isZERO() || a.isONE()) {
120                continue;
121            }
122            assertTrue("length( a" + i + " ) <> 0", a.length() >= 0);
123            assertTrue(" not isZERO( a" + i + " )", !a.isZERO());
124            assertTrue(" not isONE( a" + i + " )", !a.isONE());
125            l.add(a);
126        }
127        p = new PolynomialList<BigRational>(pfac, l);
128        //System.out.println("p = "+p);
129
130        assertTrue("p == p", p.equals(p));
131        assertEquals("p.length", 7, p.list.size());
132    }
133
134
135    /**
136     * Test module list.
137     */
138    public void testModuleList() {
139        List<List<GenPolynomial<BigRational>>> l = new ArrayList<List<GenPolynomial<BigRational>>>();
140        for (int i = 0; i < 4; i++) {
141            List<GenPolynomial<BigRational>> r = new ArrayList<GenPolynomial<BigRational>>();
142            for (int j = 0; j < 3; j++) {
143                a = pfac.random(kl, ll, el, q);
144                if (a.isZERO() || a.isONE()) {
145                    continue;
146                }
147                assertTrue("length( a" + i + " ) <> 0", a.length() >= 0);
148                assertTrue(" not isZERO( a" + i + " )", !a.isZERO());
149                assertTrue(" not isONE( a" + i + " )", !a.isONE());
150                r.add(a);
151            }
152            l.add(r);
153        }
154        m = new ModuleList<BigRational>(pfac, l);
155        //System.out.println("m = "+m);
156        assertTrue("m == m", m.equals(m));
157        assertEquals("m.length", 4, m.list.size());
158
159        List<Integer> perm = new ArrayList<Integer>(pfac.nvar);
160        for (int i = 0; i < pfac.nvar; i++) {
161            perm.add(i);
162        }
163        OptimizedModuleList op = new OptimizedModuleList<BigRational>(perm, pfac, l);
164        assertTrue("op == op", op.equals(op));
165        assertFalse("op != m", op.equals(m));
166        assertEquals("#var == #perm", pfac.nvar, op.perm.size());
167    }
168
169
170    /**
171     * Test module and polynomial list.
172     */
173    public void testModulePolynomialList() {
174        List<List<GenPolynomial<BigRational>>> l = new ArrayList<List<GenPolynomial<BigRational>>>();
175        for (int i = 0; i < 4; i++) {
176            List<GenPolynomial<BigRational>> r = new ArrayList<GenPolynomial<BigRational>>();
177            for (int j = 0; j < 3; j++) {
178                a = pfac.random(kl, ll, el, q);
179                if (a.isZERO() || a.isONE()) {
180                    continue;
181                }
182                assertTrue("length( a" + i + " ) <> 0", a.length() >= 0);
183                assertTrue(" not isZERO( a" + i + " )", !a.isZERO());
184                assertTrue(" not isONE( a" + i + " )", !a.isONE());
185                r.add(a);
186            }
187            l.add(r);
188        }
189        m = new ModuleList<BigRational>(pfac, l);
190        //System.out.println("m = "+m);
191        assertTrue("m == m", m.equals(m));
192        assertEquals("m.length", 4, m.list.size());
193
194        p = m.getPolynomialList();
195        //System.out.println("p = "+p);
196        assertTrue("p == p", p.equals(p));
197        assertEquals("p.length", 4, p.list.size());
198    }
199
200
201    /**
202     * Test module and polynomial and module list.
203     */
204    public void testModulePolynomialModuleList() {
205        List<List<GenPolynomial<BigRational>>> l = new ArrayList<List<GenPolynomial<BigRational>>>();
206        for (int i = 0; i < 4; i++) {
207            List<GenPolynomial<BigRational>> r = new ArrayList<GenPolynomial<BigRational>>();
208            for (int j = 0; j < 3; j++) {
209                a = pfac.random(kl, ll, el, q);
210                if (a.isZERO() || a.isONE()) {
211                    continue;
212                }
213                assertTrue("length( a" + i + " ) <> 0", a.length() >= 0);
214                assertTrue(" not isZERO( a" + i + " )", !a.isZERO());
215                assertTrue(" not isONE( a" + i + " )", !a.isONE());
216                r.add(a);
217            }
218            l.add(r);
219        }
220        m = new ModuleList<BigRational>(pfac, l);
221        //System.out.println("m = "+m);
222        assertTrue("m == m", m.equals(m));
223        assertEquals("m.length", 4, m.list.size());
224
225        p = m.getPolynomialList();
226        //System.out.println("p = "+p);
227        assertTrue("p == p", p.equals(p));
228        assertEquals("p.length", 4, p.list.size());
229
230        ModuleList<BigRational> m2 = null;
231        m2 = p.getModuleList(3);
232        //System.out.println("m2 = "+m2);
233        assertTrue("m2 == m2", m2.equals(m2));
234        assertEquals("m2.length", 4, m2.list.size());
235
236        assertTrue("m == m2", m.equals(m2));
237    }
238
239
240    /**
241     * Test module and polynomial and module and polynomial list.
242     */
243    public void testModulePolynomialModuleListPolynomial() {
244        List<List<GenPolynomial<BigRational>>> l = new ArrayList<List<GenPolynomial<BigRational>>>();
245        for (int i = 0; i < 4; i++) {
246            List<GenPolynomial<BigRational>> r = new ArrayList<GenPolynomial<BigRational>>();
247            for (int j = 0; j < 3; j++) {
248                a = pfac.random(kl, ll, el, q);
249                if (a.isZERO() || a.isONE()) {
250                    continue;
251                }
252                assertTrue("length( a" + i + " ) <> 0", a.length() >= 0);
253                assertTrue(" not isZERO( a" + i + " )", !a.isZERO());
254                assertTrue(" not isONE( a" + i + " )", !a.isONE());
255                r.add(a);
256            }
257            l.add(r);
258        }
259        m = new ModuleList<BigRational>(pfac, l);
260        //System.out.println("m = "+m);
261        assertTrue("m == m", m.equals(m));
262        assertEquals("m.length", 4, m.list.size());
263
264        p = m.getPolynomialList();
265        //System.out.println("p = "+p);
266        assertTrue("p == p", p.equals(p));
267        assertEquals("p.length", 4, p.list.size());
268
269        ModuleList<BigRational> m2 = null;
270        m2 = p.getModuleList(3);
271        //System.out.println("m2 = "+m2);
272        assertTrue("m2 == m2", m2.equals(m2));
273        assertEquals("m2.length", 4, m2.list.size());
274
275        assertTrue("m == m2", m.equals(m2));
276
277        PolynomialList<BigRational> p2 = null;
278        p2 = m2.getPolynomialList();
279        //System.out.println("p2 = "+p2);
280        assertTrue("p2 == p2", p2.equals(p2));
281        assertEquals("p2.length", 4, p2.list.size());
282
283        assertTrue("p == p2", p.list.equals(p2.list));
284    }
285
286}