001 /* 002 * $Id: DGroebnerBaseSeqTest.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 * DGroebner base sequential tests with JUnit. 036 * @author Heinz Kredel. 037 */ 038 039 public 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 }