001/*
002 * $Id: GroebnerBasePseudoSeqTest.java 4015 2012-07-22 12:05:38Z kredel $
003 */
004
005package edu.jas.gbufd;
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.BigInteger;
022import edu.jas.arith.BigRational;
023import edu.jas.gb.GroebnerBase;
024import edu.jas.gb.GroebnerBaseSeq;
025
026import edu.jas.poly.GenPolynomial;
027import edu.jas.poly.GenPolynomialRing;
028import edu.jas.poly.GenPolynomialTokenizer;
029import edu.jas.poly.PolynomialList;
030import edu.jas.poly.PolyUtil;
031
032
033
034/**
035 * Groebner base pseudo reduction sequential tests with JUnit.
036 * @author Heinz Kredel.
037 */
038
039public 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 = new PolynomialList<BigInteger>(F.ring,G);
186     //System.out.println("G = " + trinks);
187     assertTrue("nonsense ", t >= 0L);
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     assertTrue("nonsense ", s >= 0L);
207 }
208
209}