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