001/*
002 * $Id: DGroebnerBaseSeqTest.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 org.apache.log4j.Logger;
015import org.apache.log4j.BasicConfigurator;
016
017import junit.framework.Test;
018import junit.framework.TestCase;
019import junit.framework.TestSuite;
020
021import edu.jas.gb.GroebnerBase;
022import edu.jas.kern.ComputerThreads;
023
024import edu.jas.arith.BigRational;
025import edu.jas.arith.BigInteger;
026
027import edu.jas.poly.GenPolynomial;
028import edu.jas.poly.GenPolynomialRing;
029import edu.jas.poly.GenPolynomialTokenizer;
030import edu.jas.poly.PolynomialList;
031import edu.jas.poly.PolyUtil;
032
033
034/**
035 * DGroebner base sequential tests with JUnit.
036 * @author Heinz Kredel.
037 */
038
039public class DGroebnerBaseSeqTest extends TestCase {
040
041
042/**
043 * main
044 */
045   public static void main (String[] args) {
046       BasicConfigurator.configure();
047       junit.textui.TestRunner.run( suite() );
048   }
049
050/**
051 * Constructs a <CODE>DGroebnerBaseSeqTest</CODE> object.
052 * @param name String.
053 */
054   public DGroebnerBaseSeqTest(String name) {
055          super(name);
056   }
057
058/**
059 * suite.
060 */ 
061 public static Test suite() {
062     TestSuite suite= new TestSuite(DGroebnerBaseSeqTest.class);
063     return suite;
064   }
065
066   GenPolynomialRing<BigInteger> fac;
067
068   List<GenPolynomial<BigInteger>> L;
069   PolynomialList<BigInteger> F;
070   List<GenPolynomial<BigInteger>> G;
071
072   GroebnerBase<BigInteger> bb;
073
074   GenPolynomial<BigInteger> a;
075   GenPolynomial<BigInteger> b;
076   GenPolynomial<BigInteger> c;
077   GenPolynomial<BigInteger> d;
078   GenPolynomial<BigInteger> e;
079
080   int rl = 3; //4; //3; 
081   int kl = 4; //4; 10
082   int ll = 4;
083   int el = 3;
084   float q = 0.2f; //0.4f
085
086   protected void setUp() {
087       BigInteger coeff = new BigInteger(9);
088       fac = new GenPolynomialRing<BigInteger>(coeff,rl);
089       a = b = c = d = e = null;
090       bb = new DGroebnerBaseSeq<BigInteger>();
091   }
092
093   protected void tearDown() {
094       a = b = c = d = e = null;
095       fac = null;
096       bb = null;
097   }
098
099
100/**
101 * Test sequential GBase.
102 * 
103 */
104 public void testSequentialGBase() {
105
106     L = new ArrayList<GenPolynomial<BigInteger>>();
107
108     a = fac.random(kl, ll, el, q ); //.abs();
109     b = fac.random(kl, ll, el, q ); //.abs();
110     c = fac.random(kl, ll/2, el, q ); //.abs();
111     d = fac.random(kl, ll/2, el, q ); //.abs();
112     e = d; //fac.random(kl, ll, el, q );
113
114     if ( a.isZERO() || b.isZERO() || c.isZERO() || d.isZERO() ) {
115        return;
116     }
117
118     L.add(a);
119     //System.out.println("    L  = " + L );
120     L = bb.GB( L );
121     //System.out.println("dGB(L) = " + L );
122     assertTrue("isGB( { a } )", bb.isGB(L) );
123
124     L.add(b);
125     //System.out.println("    L  = " + L );
126     L = bb.GB( L );
127     //System.out.println("dGB(L) = " + L );
128     assertTrue("isGB( { a, b } )", bb.isGB(L) );
129
130     L.add(c);
131     //System.out.println("    L  = " + L );
132     L = bb.GB( L );
133     //System.out.println("dGB(L) = " + L );
134     assertTrue("isGB( { a, b, c } )", bb.isGB(L) );
135
136     L.add(d);
137     //System.out.println("    L  = " + L );
138     L = bb.GB( L );
139     //System.out.println("dGB(L) = " + L );
140     assertTrue("isGB( { a, b, c, d } )", bb.isGB(L) );
141
142     L.add(e);
143     //System.out.println("    L  = " + L );
144     L = bb.GB( L );
145     //System.out.println("dGB(L) = " + L );
146     assertTrue("isGB( { a, b, c, d, e } )", bb.isGB(L) );
147 }
148
149
150/**
151 * Test Trinks7 GBase over Z.
152 * 
153 */ 
154 @SuppressWarnings("unchecked") // needs to long
155 public void xtestTrinks7GBaseZ() {
156     String exam = "Z(B,S,T,Z,P,W) L "
157                 + "( "  
158                 + "( 45 P + 35 S - 165 B - 36 ), " 
159                 + "( 35 P + 40 Z + 25 T - 27 S ), "
160                 + "( 15 W + 25 S P + 30 Z - 18 T - 165 B**2 ), "
161                 + "( - 9 W + 15 T P + 20 S Z ), "
162                 + "( P W + 2 T Z - 11 B**3 ), "
163                 + "( 99 W - 11 B S + 3 B**2 ), "
164                 + "( 10000 B**2 + 6600 B + 2673 ) "
165                 + ") ";
166     Reader source = new StringReader( exam );
167     GenPolynomialTokenizer parser
168                  = new GenPolynomialTokenizer( source );
169     try {
170         F = (PolynomialList<BigInteger>) parser.nextPolynomialSet();
171     } catch(ClassCastException e) {
172         fail(""+e);
173     } catch(IOException e) {
174         fail(""+e);
175     }
176     System.out.println("F = " + F);
177
178     G = bb.GB(F.list);
179     PolynomialList<BigInteger> trinks 
180           = new PolynomialList<BigInteger>(F.ring,G);
181     System.out.println("G = " + trinks);
182     System.out.println("G.size() = " + G.size());
183     assertTrue("isGB( GB(Trinks7) )", bb.isGB(G) );
184     //assertEquals("#GB(Trinks7) == 6", 6, G.size() );
185 }
186
187
188/**
189 * Test Trinks7 GBase over Z(B).
190 * 
191 */ 
192 @SuppressWarnings("unchecked") 
193 public void xtestTrinks7GBaseZ_B() {
194     String exam = "IntFunc{ B } (S,T,Z,P,W) G "
195                 + "( "  
196                 + "( { 45 } P + { 35 } S - { 165 B } - { 36 } ), " 
197                 + "( { 35 } P + { 40 } Z + { 25 } T - { 27 } S ), "
198                 + "( { 15 } W + { 25 } S P + { 30 } Z - { 18 } T - { 165 B**2 } ), "
199                 + "( { - 9 } W + { 15 } T P + { 20 } S Z ), "
200                 + "( P W + { 2 } T Z - { 11 B**3 } ), "
201                 + "( { 99 } W - { 11 B } S + { 3 B**2 } ), "
202                 + "( { 10000 B**2 + 6600 B + 2673 } ) "
203                 + ") ";
204     Reader source = new StringReader( exam );
205     GenPolynomialTokenizer parser
206                  = new GenPolynomialTokenizer( source );
207     DGroebnerBaseSeq<GenPolynomial<BigRational>> bb 
208         = new DGroebnerBaseSeq<GenPolynomial<BigRational>>();
209     PolynomialList<GenPolynomial<BigRational>> F = null;
210     List<GenPolynomial<GenPolynomial<BigRational>>> G = null;
211     try {
212         F = (PolynomialList<GenPolynomial<BigRational>>) parser.nextPolynomialSet();
213     } catch(ClassCastException e) {
214         fail(""+e);
215     } catch(IOException e) {
216         fail(""+e);
217     }
218     System.out.println("F = " + F);
219
220     List<GenPolynomial<GenPolynomial<BigRational>>> Fp 
221         = new ArrayList<GenPolynomial<GenPolynomial<BigRational>>>( F.list.size() );
222     for ( GenPolynomial<GenPolynomial<BigRational>> p : F.list ) {
223         p = PolyUtil.<BigRational>monic(p);
224         Fp.add( p );
225     }
226     //System.out.println("Fp = " + Fp);
227     G = bb.GB(Fp);
228     //System.out.println("G = " + G);
229
230     List<GenPolynomial<GenPolynomial<BigRational>>> Gp 
231         = new ArrayList<GenPolynomial<GenPolynomial<BigRational>>>( F.list.size() );
232     for ( GenPolynomial<GenPolynomial<BigRational>> p : G ) {
233         p = PolyUtil.<BigRational>monic(p);
234         Gp.add( p );
235     }
236     PolynomialList<GenPolynomial<BigRational>> trinks 
237           = new PolynomialList<GenPolynomial<BigRational>>(F.ring,Gp);
238     System.out.println("G = " + trinks);
239     System.out.println("G.size() = " + Gp.size());
240     ComputerThreads.terminate();
241     assertTrue("isGB( GB(Trinks7) )", bb.isGB(G) );
242     //assertEquals("#GB(Trinks7) == 1", 1, G.size() );
243 }
244
245}