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