001/*
002 * $Id$
003 */
004
005package edu.jas.gb;
006
007
008import java.util.ArrayList;
009import java.util.List;
010
011import junit.framework.Test;
012import junit.framework.TestCase;
013import junit.framework.TestSuite;
014
015
016import edu.jas.arith.BigRational;
017import edu.jas.poly.GenPolynomial;
018import edu.jas.poly.GenPolynomialRing;
019import edu.jas.poly.PolynomialList;
020
021
022/**
023 * Groebner base sequential tests with JUnit.
024 * @author Heinz Kredel
025 */
026
027public class PairListTest extends TestCase {
028
029
030    /**
031     * main
032     */
033    public static void main(String[] args) {
034        junit.textui.TestRunner.run(suite());
035    }
036
037
038    /**
039     * Constructs a <CODE>PairListTest</CODE> object.
040     * @param name String.
041     */
042    public PairListTest(String name) {
043        super(name);
044    }
045
046
047    /**
048     * suite.
049     */
050    public static Test suite() {
051        TestSuite suite = new TestSuite(PairListTest.class);
052        return suite;
053    }
054
055
056    GenPolynomialRing<BigRational> fac;
057
058
059    List<GenPolynomial<BigRational>> L;
060
061
062    PolynomialList<BigRational> F;
063
064
065    List<GenPolynomial<BigRational>> G;
066
067
068    PairList<BigRational> pairlist;
069
070
071    GenPolynomial<BigRational> a;
072
073
074    GenPolynomial<BigRational> b;
075
076
077    GenPolynomial<BigRational> c;
078
079
080    GenPolynomial<BigRational> d;
081
082
083    GenPolynomial<BigRational> e;
084
085
086    int rl = 4; //4; //3; 
087
088
089    int kl = 5;
090
091
092    int ll = 2;
093
094
095    int el = 4;
096
097
098    float q = 0.3f; //0.4f
099
100
101    @Override
102    protected void setUp() {
103        BigRational coeff = new BigRational(9);
104        fac = new GenPolynomialRing<BigRational>(coeff, rl);
105        a = b = c = d = e = null;
106    }
107
108
109    @Override
110    protected void tearDown() {
111        a = b = c = d = e = null;
112        fac = null;
113    }
114
115
116    /**
117     * Test and compare random OrderedPairlist and CriticalPairList.
118     */
119    public void testRandomPL() {
120        pairlist = new OrderedPairlist<BigRational>(fac);
121        //System.out.println("pairlist = " + pairlist);
122
123        CriticalPairList<BigRational> cpl = new CriticalPairList<BigRational>(fac);
124        //System.out.println("cpl = " + cpl);
125
126        L = new ArrayList<GenPolynomial<BigRational>>();
127        for (int i = 0; i < 7; i++) {
128            a = fac.random(kl, ll, el, q);
129            if (a.isZERO()) {
130                continue;
131            }
132            pairlist.put(a);
133            cpl.put(a);
134        }
135        //System.out.println("pairlist = " + pairlist);
136        //System.out.println("cpl = " + cpl);
137
138        while (pairlist.hasNext() && cpl.hasNext()) {
139            Pair<BigRational> pair = pairlist.removeNext();
140            //System.out.println("pair = " + pair);
141            CriticalPair<BigRational> cpair = cpl.getNext();
142            //System.out.println("cpair = " + cpair);
143            if (cpair != null) {
144                cpl.update(cpair, fac.getZERO());
145            } else {
146                cpl.update();
147            }
148            if (pair != null && cpair != null) {
149                boolean t = (pair.i == cpair.i) && (pair.j == cpair.j);
150                assertTrue("pair == cpair ", t);
151            }
152        }
153        //System.out.println("pairlist = " + pairlist);
154        //System.out.println("cpl = " + cpl);
155        boolean t = pairlist.hasNext() || cpl.hasNext();
156        assertFalse("#pairlist == #cpl ", t);
157    }
158
159
160    /**
161     * Test and compare random OrderedPairlist and OrderedSyzPairlist.
162     */
163    public void testRandomSyzPL() {
164        pairlist = new OrderedPairlist<BigRational>(fac);
165        //System.out.println("pairlist = " + pairlist);
166
167        OrderedSyzPairlist<BigRational> spl = new OrderedSyzPairlist<BigRational>(fac);
168        //System.out.println("spl = " + spl);
169
170        L = new ArrayList<GenPolynomial<BigRational>>();
171        for (int i = 0; i < 7; i++) {
172            a = fac.random(kl, ll, el, q);
173            if (a.isZERO()) {
174                continue;
175            }
176            pairlist.put(a);
177            spl.put(a);
178        }
179        //System.out.println("pairlist = " + pairlist);
180        //System.out.println("spl = " + spl);
181
182        while (pairlist.hasNext() && spl.hasNext()) {
183            Pair<BigRational> pair = pairlist.removeNext();
184            //System.out.println("pair = " + pair);
185            Pair<BigRational> spair = spl.removeNext();
186            //System.out.println("spair = " + spair);
187            if (pair != null && spair != null) {
188                @SuppressWarnings("unused")
189                boolean t = (pair.i == spair.i) && (pair.j == spair.j);
190                //not always true: assertTrue("pair == spair " + pair + ", " + spair, t);
191            }
192        }
193        //System.out.println("pairlist = " + pairlist);
194        //System.out.println("spl = " + spl);
195        boolean t = pairlist.hasNext() && spl.hasNext();
196        assertFalse("#pairlist == #spl ", t);
197    }
198
199}