001 /* 002 * $Id: EGroebnerBaseSeqTest.java 3267 2010-08-15 11:03:00Z 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 org.apache.log4j.Logger; 015 import org.apache.log4j.BasicConfigurator; 016 017 import junit.framework.Test; 018 import junit.framework.TestCase; 019 import junit.framework.TestSuite; 020 021 import edu.jas.gb.GroebnerBase; 022 import edu.jas.kern.ComputerThreads; 023 024 import edu.jas.arith.BigRational; 025 import edu.jas.arith.BigInteger; 026 027 import edu.jas.poly.GenPolynomial; 028 import edu.jas.poly.GenPolynomialRing; 029 import edu.jas.poly.GenPolynomialTokenizer; 030 import edu.jas.poly.PolynomialList; 031 import edu.jas.poly.PolyUtil; 032 033 034 /** 035 * EGroebner base sequential tests with JUnit. 036 * @author Heinz Kredel. 037 */ 038 039 public class EGroebnerBaseSeqTest extends TestCase { 040 041 private static final Logger logger = Logger.getLogger(EGroebnerBaseSeqTest.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>EGroebnerBaseSeqTest</CODE> object. 053 * @param name String. 054 */ 055 public EGroebnerBaseSeqTest(String name) { 056 super(name); 057 } 058 059 /** 060 * suite. 061 */ 062 public static Test suite() { 063 TestSuite suite= new TestSuite(EGroebnerBaseSeqTest.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 = 4; //4; 10 083 int ll = 4; 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 EGroebnerBaseSeq<BigInteger>(); 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 ).abs(); 110 b = fac.random(kl, ll, el, q ).abs(); 111 c = fac.random(kl, ll/2, el, q ).abs(); 112 d = fac.random(kl, ll/2, el, q ).abs(); 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 L.add(a); 120 //System.out.println(" L = " + L ); 121 L = bb.GB( L ); 122 //System.out.println("eGB(L) = " + L ); 123 assertTrue("isGB( { a } )", bb.isGB(L) ); 124 125 L.add(b); 126 //System.out.println(" L = " + L ); 127 L = bb.GB( L ); 128 //System.out.println("eGB(L) = " + L ); 129 assertTrue("isGB( { a, b } )", bb.isGB(L) ); 130 131 L.add(c); 132 //System.out.println(" L = " + L ); 133 L = bb.GB( L ); 134 //System.out.println("eGB(L) = " + L ); 135 assertTrue("isGB( { a, b, c } )", bb.isGB(L) ); 136 137 L.add(d); 138 //System.out.println(" L = " + L ); 139 L = bb.GB( L ); 140 //System.out.println("eGB(L) = " + L ); 141 assertTrue("isGB( { a, b, c, d } )", bb.isGB(L) ); 142 143 L.add(e); 144 //System.out.println(" L = " + L ); 145 L = bb.GB( L ); 146 //System.out.println("eGB(L) = " + L ); 147 assertTrue("isGB( { a, b, c, d, e } )", bb.isGB(L) ); 148 } 149 150 /** 151 * Test Trinks7 GBase over Z. 152 * 153 */ 154 @SuppressWarnings("unchecked") 155 public void xtestTrinks7GBaseZ() { // needs 20 sec 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( eGB(Trinks7) )", bb.isGB(G) ); 184 //assertEquals("#GB(Trinks7) == 44", 44, 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 EGroebnerBaseSeq<GenPolynomial<BigRational>> bb 208 = new EGroebnerBaseSeq<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() = " + G.size()); 240 ComputerThreads.terminate(); 241 242 assertTrue("isGB( GB(Trinks7) )", bb.isGB(G) ); 243 //assertEquals("#GB(Trinks7) == 1", 1, G.size() ); 244 } 245 246 }