001 /* 002 * $Id: ReductionTest.java 3426 2010-12-24 13:17:58Z kredel $ 003 */ 004 005 package edu.jas.application; 006 007 008 import java.util.ArrayList; 009 import java.util.List; 010 import java.util.Map; 011 012 import junit.framework.Test; 013 import junit.framework.TestCase; 014 import junit.framework.TestSuite; 015 016 import org.apache.log4j.BasicConfigurator; 017 018 import edu.jas.arith.BigRational; 019 import edu.jas.kern.ComputerThreads; 020 import edu.jas.poly.ExpVector; 021 import edu.jas.poly.GenPolynomial; 022 import edu.jas.poly.GenPolynomialRing; 023 import edu.jas.poly.PolynomialList; 024 import edu.jas.structure.RingFactory; 025 026 027 // import edu.jas.application.Ideal; 028 029 030 /** 031 * Reduction tests with JUnit. 032 * @author Heinz Kredel. 033 */ 034 035 public class ReductionTest extends TestCase { 036 037 038 /** 039 * main 040 */ 041 public static void main(String[] args) { 042 BasicConfigurator.configure(); 043 junit.textui.TestRunner.run(suite()); 044 ComputerThreads.terminate(); 045 } 046 047 048 /** 049 * Constructs a <CODE>ReductionTest</CODE> object. 050 * @param name String 051 */ 052 public ReductionTest(String name) { 053 super(name); 054 } 055 056 057 /** 058 * suite. 059 * @return a test suite. 060 */ 061 public static Test suite() { 062 TestSuite suite = new TestSuite(ReductionTest.class); 063 return suite; 064 } 065 066 067 //private final static int bitlen = 100; 068 069 GenPolynomialRing<BigRational> fac; 070 071 072 GenPolynomial<BigRational> a; 073 074 075 GenPolynomial<BigRational> b; 076 077 078 GenPolynomial<BigRational> c; 079 080 081 GenPolynomial<BigRational> d; 082 083 084 GenPolynomial<BigRational> e; 085 086 087 List<GenPolynomial<BigRational>> L; 088 089 090 PolynomialList<BigRational> F; 091 092 093 PolynomialList<BigRational> G; 094 095 096 //ReductionSeq<BigRational> red; 097 //Reduction<BigRational> redpar; 098 099 int rl = 2; 100 101 102 int kl = 2; 103 104 105 int ll = 3; 106 107 108 int el = 3; 109 110 111 float q = 0.4f; 112 113 114 @Override 115 protected void setUp() { 116 a = b = c = d = e = null; 117 fac = new GenPolynomialRing<BigRational>(new BigRational(0), rl); 118 //red = new ReductionSeq<BigRational>(); 119 //redpar = new ReductionPar<BigRational>(); 120 } 121 122 123 @Override 124 protected void tearDown() { 125 a = b = c = d = e = null; 126 fac = null; 127 //red = null; 128 //redpar = null; 129 } 130 131 132 /* 133 * Test dummy. 134 * 135 public void testDummy() { 136 } 137 */ 138 139 140 /** 141 * Test rational coefficient polynomial parametric reduction, 142 * caseDistinction and determination. 143 * 144 */ 145 public void testRatPolReduction() { 146 147 RingFactory<BigRational> bi = new BigRational(0); 148 GenPolynomialRing<BigRational> pr = new GenPolynomialRing<BigRational>(bi, 2, 149 new String[] { "a", "b" }); 150 GenPolynomialRing<GenPolynomial<BigRational>> fac = new GenPolynomialRing<GenPolynomial<BigRational>>( 151 pr, rl); 152 153 CReductionSeq<BigRational> cred = new CReductionSeq<BigRational>(bi); 154 155 GenPolynomial<GenPolynomial<BigRational>> a = fac.random(kl, ll, el, q); 156 while (a.isZERO()) { 157 a = fac.random(kl, ll, el, q).sum(fac.getONE()); 158 } 159 GenPolynomial<GenPolynomial<BigRational>> b = fac.random(kl, ll, el, q); 160 while (b.isZERO()) { 161 b = fac.random(kl, ll, el, q).subtract(fac.getONE()); 162 } 163 GenPolynomial<GenPolynomial<BigRational>> g = fac.getZERO(); 164 165 Map.Entry<ExpVector, GenPolynomial<BigRational>> m = a.leadingMonomial(); 166 ExpVector e = m.getKey(); 167 GenPolynomial<BigRational> c = m.getValue(); 168 169 GenPolynomial<GenPolynomial<BigRational>> r = fac.getZERO(); 170 r = r.sum(c, e); 171 if (r.isZERO()) { 172 r = fac.getONE(); 173 } 174 175 GenPolynomial<GenPolynomial<BigRational>> w = a.reductum(); 176 177 ColorPolynomial<BigRational> p = new ColorPolynomial<BigRational>(g, r, w); 178 //System.out.println("p = " + p); 179 assertTrue("check(p) ", p.checkInvariant()); 180 assertTrue("deter(p) ", p.isDetermined()); 181 //System.out.println("cond != 0: " + p.getConditionNonZero()); 182 //System.out.println("cond == 0: " + p.getConditionZero()); 183 184 p = new ColorPolynomial<BigRational>(r, g, w); 185 //System.out.println("p = " + p); 186 assertTrue("check(p) ", p.checkInvariant()); 187 if (!w.isZERO()) { 188 assertFalse("deter(p) ", p.isDetermined()); 189 } 190 //System.out.println("cond != 0: " + p.getConditionNonZero()); 191 //System.out.println("cond == 0: " + p.getConditionZero()); 192 193 p = new ColorPolynomial<BigRational>(r, w, g); 194 //System.out.println("p = " + p); 195 assertTrue("check(p) ", p.checkInvariant()); 196 assertTrue("deter(p) ", p.isDetermined()); 197 //System.out.println("cond != 0: " + p.getConditionNonZero()); 198 //System.out.println("cond == 0: " + p.getConditionZero()); 199 200 // wrong test: p = new ColorPolynomial<BigRational>(w,r,g); //(w,g,r); 201 //System.out.println("p = " + p); 202 //if ( !w.isZERO() ) { 203 // assertFalse("check(p) ", p.checkInvariant()); 204 //} 205 //assertFalse("deter(p) ", p.isDetermined()); 206 //assertFalse("p == 0 ", p.isZERO()); 207 //System.out.println("cond != 0: " + p.getConditionNonZero()); 208 //System.out.println("cond == 0: " + p.getConditionZero()); 209 210 p = new ColorPolynomial<BigRational>(w, g, g); 211 //System.out.println("p = " + p); 212 assertTrue("check(p) ", p.checkInvariant()); 213 assertTrue("deter(p) ", p.isDetermined()); 214 assertTrue("p == 0 ", p.isZERO()); 215 //System.out.println("cond != 0: " + p.getConditionNonZero()); 216 //System.out.println("cond == 0: " + p.getConditionZero()); 217 218 List<GenPolynomial<BigRational>> i = new ArrayList<GenPolynomial<BigRational>>(); 219 Ideal<BigRational> id = new Ideal<BigRational>(pr, i); 220 List<ColorPolynomial<BigRational>> cp = new ArrayList<ColorPolynomial<BigRational>>(); 221 222 Condition<BigRational> cond = new Condition<BigRational>(id); 223 ColoredSystem<BigRational> s = new ColoredSystem<BigRational>(cond, cp); 224 //System.out.println("s = " + s); 225 226 assertTrue("isDetermined ", s.isDetermined()); 227 assertTrue("checkInvariant ", s.checkInvariant()); 228 229 List<ColoredSystem<BigRational>> CS = new ArrayList<ColoredSystem<BigRational>>(); 230 CS.add(s); 231 //System.out.println("CS = " + CS); 232 List<ColoredSystem<BigRational>> CSp = CS; 233 234 //System.out.println("\na = " + a); 235 //System.out.println("b = " + b + "\n"); 236 237 //CS = cred.determine(p); 238 //System.out.println("CS = " + CS); 239 for (ColoredSystem<BigRational> x : CS) { 240 assertTrue("isDetermined ", x.isDetermined()); 241 assertTrue("checkInvariant ", x.checkInvariant()); 242 } 243 244 List<GenPolynomial<GenPolynomial<BigRational>>> L; 245 L = new ArrayList<GenPolynomial<GenPolynomial<BigRational>>>(); 246 L.add(a); 247 L.add(b); 248 249 //System.out.println("\na = " + a); 250 //System.out.println("b = " + b + "\n"); 251 //System.out.println("L = " + L); 252 253 List<Condition<BigRational>> Ccond; 254 Ccond = cred.caseDistinction(L); 255 //for ( Condition<BigRational> cnd : Ccond ) { 256 // System.out.println("" + cnd); 257 //} 258 //+System.out.println("Ccond = " + Ccond); 259 260 // check if polynomials are determined 261 CSp = cred.determine(L); 262 //+System.out.println("CSp = " + CSp); 263 for (ColoredSystem<BigRational> x : CSp) { 264 assertTrue("isDetermined ", x.isDetermined()); 265 assertTrue("checkInvariant ", x.checkInvariant()); 266 } 267 268 // check if reduced polynomials are in normalform 269 ColorPolynomial<BigRational> q, h; 270 List<ColoredSystem<BigRational>> NCS; 271 for (ColoredSystem<BigRational> x : CSp) { 272 int k = x.list.size(); 273 for (int j = 0; j < k; j++) { 274 p = x.list.get(j); 275 for (int l = j + 1; l < k; l++) { 276 q = x.list.get(l); 277 h = cred.SPolynomial(p, q); 278 //System.out.println("spol(a,b) = " + h); 279 boolean t = true; //cred.isNormalform( x.list, h ); 280 //System.out.println("isNF(spol(a,b)) = " + t); 281 h = cred.normalform(x.condition, x.list, h); 282 //System.out.println("NF(spol(a,b)) = " + h); 283 t = cred.isNormalform(x.list, h); 284 //System.out.println("isNF(NF(spol(a,b))) = " + t); 285 assertTrue("isNF(NF(spol(a,b))) ", t); 286 //h = x.condition.reDetermine( h ); 287 } 288 } 289 } 290 } 291 292 }