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