001    /*
002     * $Id: GroebnerBasePseudoSeqTest.java 3423 2010-12-24 10:56:50Z kredel $
003     */
004    
005    package edu.jas.gbufd;
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.BigInteger;
022    import edu.jas.arith.BigRational;
023    import edu.jas.gb.GroebnerBase;
024    import edu.jas.gb.GroebnerBaseSeq;
025    
026    import edu.jas.poly.GenPolynomial;
027    import edu.jas.poly.GenPolynomialRing;
028    import edu.jas.poly.GenPolynomialTokenizer;
029    import edu.jas.poly.PolynomialList;
030    import edu.jas.poly.PolyUtil;
031    
032    
033    
034    /**
035     * Groebner base pseudo reduction sequential tests with JUnit.
036     * @author Heinz Kredel.
037     */
038    
039    public class GroebnerBasePseudoSeqTest extends TestCase {
040    
041        //private static final Logger logger = Logger.getLogger(GroebnerBasePseudoSeqTest.class);
042    
043    /**
044     * main
045     */
046       public static void main (String[] args) {
047              BasicConfigurator.configure();
048              junit.textui.TestRunner.run( suite() );
049       }
050    
051    /**
052     * Constructs a <CODE>GroebnerBasePseudoSeqTest</CODE> object.
053     * @param name String.
054     */
055       public GroebnerBasePseudoSeqTest(String name) {
056              super(name);
057       }
058    
059    /**
060     * suite.
061     */ 
062     public static Test suite() {
063         TestSuite suite= new TestSuite(GroebnerBasePseudoSeqTest.class);
064         return suite;
065       }
066    
067       GenPolynomialRing<BigInteger> fac;
068    
069       List<GenPolynomial<BigInteger>> L;
070       PolynomialList<BigInteger> F;
071       List<GenPolynomial<BigInteger>> G;
072    
073       GroebnerBase<BigInteger> bb;
074    
075       GenPolynomial<BigInteger> a;
076       GenPolynomial<BigInteger> b;
077       GenPolynomial<BigInteger> c;
078       GenPolynomial<BigInteger> d;
079       GenPolynomial<BigInteger> e;
080    
081       int rl = 3; //4; //3; 
082       int kl = 10;
083       int ll = 7;
084       int el = 3;
085       float q = 0.2f; //0.4f
086    
087       protected void setUp() {
088           BigInteger coeff = new BigInteger(9);
089           fac = new GenPolynomialRing<BigInteger>(coeff,rl);
090           a = b = c = d = e = null;
091           bb = new GroebnerBasePseudoSeq<BigInteger>(coeff);
092       }
093    
094       protected void tearDown() {
095           a = b = c = d = e = null;
096           fac = null;
097           bb = null;
098       }
099    
100    
101    /**
102     * Test sequential GBase.
103     * 
104     */
105     public void testSequentialGBase() {
106    
107         L = new ArrayList<GenPolynomial<BigInteger>>();
108    
109         a = fac.random(kl, ll, el, q );
110         b = fac.random(kl, ll, el, q );
111         c = fac.random(kl, ll, el, q );
112         d = fac.random(kl, ll, el, q );
113         e = d; //fac.random(kl, ll, el, q );
114    
115         if ( a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO() ) {
116            return;
117         }
118    
119         assertTrue("not isZERO( a )", !a.isZERO() );
120         L.add(a);
121    
122         L = bb.GB( L );
123         assertTrue("isGB( { a } )", bb.isGB(L) );
124    
125         assertTrue("not isZERO( b )", !b.isZERO() );
126         L.add(b);
127         //System.out.println("L = " + L.size() );
128    
129         L = bb.GB( L );
130         assertTrue("isGB( { a, b } )", bb.isGB(L) );
131    
132         assertTrue("not isZERO( c )", !c.isZERO() );
133         L.add(c);
134    
135         L = bb.GB( L );
136         assertTrue("isGB( { a, b, c } )", bb.isGB(L) );
137    
138         assertTrue("not isZERO( d )", !d.isZERO() );
139         L.add(d);
140    
141         L = bb.GB( L );
142         assertTrue("isGB( { a, b, c, d } )", bb.isGB(L) );
143    
144         assertTrue("not isZERO( e )", !e.isZERO() );
145         L.add(e);
146    
147         L = bb.GB( L );
148         assertTrue("isGB( { a, b, c, d, e } )", bb.isGB(L) );
149     }
150    
151    /**
152     * Test Trinks7 GBase.
153     * 
154     */
155     @SuppressWarnings("unchecked") 
156     public void testTrinks7GBase() {
157         String exam = "Z(B,S,T,Z,P,W) L "
158                     + "( "  
159                     + "( 45 P + 35 S - 165 B - 36 ), " 
160                     + "( 35 P + 40 Z + 25 T - 27 S ), "
161                     + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), "
162                     + "( - 9 W + 15 T P + 20 S Z ), "
163                     + "( P W + 2 T Z - 11 B**3 ), "
164                     + "( 99 W - 11 B S + 3 B**2 ), "
165                     + "( 10000 B**2 + 6600 B + 2673 ) "
166                     + ") ";
167         Reader source = new StringReader( exam );
168         GenPolynomialTokenizer parser
169                      = new GenPolynomialTokenizer( source );
170         try {
171             F = (PolynomialList<BigInteger>) parser.nextPolynomialSet();
172         } catch(ClassCastException e) {
173             fail(""+e);
174         } catch(IOException e) {
175             fail(""+e);
176         }
177         //System.out.println("F = " + F);
178    
179         long s,t;
180         t = System.currentTimeMillis();
181         G = bb.GB(F.list);
182         t = System.currentTimeMillis() - t;
183         assertTrue("isGB( GB(Trinks7) )", bb.isGB(G) );
184         assertEquals("#GB(Trinks7) == 6", 6, G.size() );
185         PolynomialList<BigInteger> trinks 
186               = new PolynomialList<BigInteger>(F.ring,G);
187         //System.out.println("G = " + trinks);
188    
189         GenPolynomialRing<BigInteger> ifac = F.ring;
190         BigRational cf = new BigRational();
191         GenPolynomialRing<BigRational> rfac 
192            = new GenPolynomialRing<BigRational>(cf,ifac);
193    
194         List<GenPolynomial<BigRational>> Gr, Fr, Gir; 
195         Fr = PolyUtil.<BigRational>fromIntegerCoefficients(rfac,F.list);
196         GroebnerBaseSeq<BigRational> bbr = new GroebnerBaseSeq<BigRational>();
197         s = System.currentTimeMillis();
198         Gr = bbr.GB(Fr);
199         s = System.currentTimeMillis() - s;
200    
201         Gir = PolyUtil.<BigRational>fromIntegerCoefficients(rfac,G);
202         Gir = PolyUtil.<BigRational>monic(Gir);
203    
204         assertEquals("ratGB == intGB", Gr, Gir );
205         //System.out.println("time: ratGB = " + s + ", intGB = " + t);
206     }
207    
208    }