001    /*
002     * $Id: PairListTest.java 3388 2010-12-04 12:05:32Z kredel $
003     */
004    
005    package edu.jas.gb;
006    
007    
008    import java.util.List;
009    import java.util.ArrayList;
010    import java.io.IOException;
011    import java.io.Reader;
012    import java.io.StringReader;
013    
014    import junit.framework.Test;
015    import junit.framework.TestCase;
016    import junit.framework.TestSuite;
017    
018    import org.apache.log4j.BasicConfigurator;
019    //import org.apache.log4j.Logger;
020    
021    import edu.jas.arith.BigRational;
022    import edu.jas.gb.GroebnerBase;
023    import edu.jas.poly.GenPolynomial;
024    import edu.jas.poly.GenPolynomialRing;
025    import edu.jas.poly.GenPolynomialTokenizer;
026    import edu.jas.poly.PolynomialList;
027    
028    
029    /**
030     * Groebner base sequential tests with JUnit.
031     * @author Heinz Kredel.
032     */
033    
034    public 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    }