001/* 002 * $Id: WordIdealTest.java 5822 2018-05-10 19:57:28Z kredel $ 003 */ 004 005package edu.jas.application; 006 007 008import java.util.ArrayList; 009import java.util.List; 010 011import junit.framework.Test; 012import junit.framework.TestCase; 013import junit.framework.TestSuite; 014 015import org.apache.log4j.BasicConfigurator; 016 017import edu.jas.arith.BigRational; 018import edu.jas.gb.WordGroebnerBase; 019import edu.jas.gb.WordGroebnerBaseSeq; 020// import edu.jas.kern.ComputerThreads; 021import edu.jas.poly.GenWordPolynomial; 022import edu.jas.poly.GenWordPolynomialRing; 023import edu.jas.poly.PolynomialList; 024import edu.jas.poly.TermOrder; 025 026 027/** 028 * WordIdeal tests with JUnit. 029 * @author Heinz Kredel 030 */ 031public class WordIdealTest extends TestCase { 032 033 034 //private static final Logger logger = Logger.getLogger(WordIdealTest.class); 035 036 037 /** 038 * main 039 */ 040 public static void main(String[] args) { 041 BasicConfigurator.configure(); 042 junit.textui.TestRunner.run(suite()); 043 } 044 045 046 /** 047 * Constructs a <CODE>WordIdealTest</CODE> object. 048 * @param name String. 049 */ 050 public WordIdealTest(String name) { 051 super(name); 052 } 053 054 055 /** 056 * suite. 057 */ 058 public static Test suite() { 059 TestSuite suite = new TestSuite(WordIdealTest.class); 060 return suite; 061 } 062 063 064 TermOrder to; 065 066 067 GenWordPolynomialRing<BigRational> fac; 068 069 070 List<GenWordPolynomial<BigRational>> L, M; 071 072 073 PolynomialList<BigRational> F; 074 075 076 List<GenWordPolynomial<BigRational>> G; 077 078 079 WordGroebnerBase<BigRational> bb; 080 081 082 GenWordPolynomial<BigRational> a, b, c, d, e; 083 084 085 int kl = 3; //10 086 087 088 int ll = 5; //7 089 090 091 int el = 2; 092 093 094 @Override 095 protected void setUp() { 096 BigRational coeff = new BigRational(17, 1); 097 to = new TermOrder( /*TermOrder.INVLEX*/); 098 String[] vars = new String[] { "x", "y", "z" }; 099 //WordFactory wf = new WordFactory(vars); 100 fac = new GenWordPolynomialRing<BigRational>(coeff, vars); 101 bb = new WordGroebnerBaseSeq<BigRational>(); 102 //bb = GBFactory.getImplementation(coeff); 103 a = b = c = d = e = null; 104 } 105 106 107 @Override 108 protected void tearDown() { 109 a = b = c = d = e = null; 110 fac = null; 111 bb = null; 112 //ComputerThreads.terminate(); 113 } 114 115 116 /** 117 * Test Ideal sum. 118 */ 119 public void testIdealSum() { 120 WordIdeal<BigRational> I, J, K; 121 L = new ArrayList<GenWordPolynomial<BigRational>>(); 122 123 a = fac.random(kl, ll, el); 124 b = fac.random(kl, ll, el); 125 c = fac.random(kl, ll, el); 126 d = fac.random(kl, ll, el); 127 e = d; //fac.random(kl, ll, el); 128 129 //System.out.println("a = " + a); 130 //System.out.println("b = " + b); 131 //System.out.println("c = " + c); 132 //System.out.println("d = " + d); 133 134 L.add(a); 135 //System.out.println("L = " + L.size() ); 136 137 I = new WordIdeal<BigRational>(fac, L, true); 138 assertTrue("isGB( I )", I.isGB()); 139 140 I = new WordIdeal<BigRational>(fac, L, false); 141 assertTrue("isGB( I )", I.isGB()); 142 143 L = bb.GB(L); 144 assertTrue("isGB( { a } )", bb.isGB(L)); 145 146 I = new WordIdeal<BigRational>(fac, L, true); 147 assertTrue("isGB( I )", I.isGB()); 148 149 I = new WordIdeal<BigRational>(fac, L, false); 150 assertTrue("isGB( I )", I.isGB()); 151 152 //assertTrue("not isZERO( b )", !b.isZERO()); 153 L.add(b); 154 //System.out.println("L = " + L.size() ); 155 156 I = new WordIdeal<BigRational>(fac, L, false); 157 assertTrue("not isZERO( I )", !I.isZERO()); 158 //assertTrue("not isONE( I )", !I.isONE() ); 159 //assertTrue("not isGB( I )", !I.isGB() ); 160 161 L = bb.GB(L); 162 assertTrue("isGB( { a, b } )", bb.isGB(L)); 163 164 I = new WordIdeal<BigRational>(fac, L, true); 165 assertTrue("not isZERO( I )", !I.isZERO()); 166 // assertTrue("not isONE( I )", !I.isONE() ); 167 assertTrue("isGB( I )", I.isGB()); 168 169 J = I; 170 K = J.sum(I); 171 //assertTrue("not isZERO( K )", !K.isZERO()); 172 assertTrue("isGB( K )", K.isGB()); 173 assertTrue("equals( K, I )", K.equals(I)); 174 175 L = new ArrayList<GenWordPolynomial<BigRational>>(); 176 177 L.add(c); 178 assertTrue("isGB( { c } )", bb.isGB(L)); 179 180 J = new WordIdeal<BigRational>(fac, L, true); 181 K = J.sum(I); 182 assertTrue("isGB( K )", K.isGB()); 183 assertTrue("K contains(I)", K.contains(I)); 184 assertTrue("K contains(J)", K.contains(J)); 185 186 L = new ArrayList<GenWordPolynomial<BigRational>>(); 187 L.add(d); 188 189 assertTrue("isGB( { d } )", bb.isGB(L)); 190 J = new WordIdeal<BigRational>(fac, L, true); 191 I = K; 192 K = J.sum(I); 193 assertTrue("isGB( K )", K.isGB()); 194 assertTrue("K contains(I)", K.contains(I)); 195 assertTrue("K contains(J)", K.contains(J)); 196 197 L = new ArrayList<GenWordPolynomial<BigRational>>(); 198 L.add(e); 199 200 assertTrue("isGB( { e } )", bb.isGB(L)); 201 J = new WordIdeal<BigRational>(fac, L, true); 202 I = K; 203 K = J.sum(I); 204 assertTrue("isGB( K )", K.isGB()); 205 assertTrue("equals( K, I )", K.equals(I)); 206 assertTrue("K contains(J)", K.contains(I)); 207 assertTrue("I contains(K)", I.contains(K)); 208 } 209 210 211 /** 212 * Test WordIdeal product. Sometimes non-terminating. 213 */ 214 public void testWordIdealProduct() { 215 WordIdeal<BigRational> I, J, K, H, G; 216 a = fac.random(kl, ll, el); 217 b = fac.random(kl, ll, el); 218 c = fac.random(kl, ll, el); 219 d = c; //fac.random(kl, ll, el); 220 e = d; //fac.random(kl, ll, el); 221 222 //System.out.println("a = " + a); 223 //System.out.println("b = " + b); 224 //System.out.println("c = " + c); 225 //System.out.println("d = " + d); 226 227 L = new ArrayList<GenWordPolynomial<BigRational>>(); 228 L.add(a); 229 230 I = new WordIdeal<BigRational>(fac, L, false); 231 assertTrue("not isONE( I )", !I.isONE() || a.isConstant()); 232 assertTrue("isGB( I )", I.isGB()); 233 234 L = new ArrayList<GenWordPolynomial<BigRational>>(); 235 L.add(b); 236 237 J = new WordIdeal<BigRational>(fac, L, false); 238 assertTrue("not isONE( J )", !J.isONE() || a.isConstant() || b.isConstant()); 239 assertTrue("isGB( J )", J.isGB()); 240 241 K = I.product(J); 242 //System.out.println("I = " + I); 243 //System.out.println("J = " + J); 244 //System.out.println("K = " + K); 245 H = J.product(I); 246 //System.out.println("H = " + H); 247 G = K.sum(H); 248 //System.out.println("G = " + G); 249 assertTrue("isGB( K )", K.isGB()); 250 assertTrue("isGB( H )", H.isGB()); 251 assertTrue("isGB( G )", G.isGB()); 252 //non-com 253 assertTrue("I contains(K)", I.contains(K)); 254 assertTrue("J contains(K)", J.contains(K)); 255 256 L = new ArrayList<GenWordPolynomial<BigRational>>(); 257 L.add(a); 258 //L.add(c); 259 L = bb.GB(L); // may be infinite 260 261 I = new WordIdeal<BigRational>(fac, L, true); 262 //System.out.println("I = " + I); 263 assertTrue("isGB( I )", I.isGB()); 264 265 //System.out.println("J = " + J); 266 K = I.product(J); 267 //System.out.println("K = " + K); 268 assertTrue("isGB( K )", K.isGB()); 269 assertTrue("I contains(K)", I.contains(K)); 270 assertTrue("J contains(K)", J.contains(K)); 271 } 272 273 274 /** 275 * Test WordIdeal common zeros. 276 */ 277 @SuppressWarnings("cast") 278 public void testWordIdealCommonZeros() { 279 WordIdeal<BigRational> I, J; 280 L = new ArrayList<GenWordPolynomial<BigRational>>(); 281 282 I = new WordIdeal<BigRational>(fac, L, true); 283 assertEquals("commonZeroTest( I )", I.commonZeroTest(), 1); 284 285 a = fac.getZERO(); 286 L.add(a); 287 I = new WordIdeal<BigRational>(fac, L, true); 288 assertEquals("commonZeroTest( I )", I.commonZeroTest(), 1); 289 290 b = fac.getONE(); 291 L.add(b); 292 I = new WordIdeal<BigRational>(fac, L, true); 293 assertEquals("commonZeroTest( I )", I.commonZeroTest(), -1); 294 295 L = new ArrayList<GenWordPolynomial<BigRational>>(); 296 a = fac.random(kl, ll, el); 297 if (!a.isZERO() && !a.isConstant()) { 298 L.add(a); 299 I = new WordIdeal<BigRational>(fac, L, true); 300 assertEquals("commonZeroTest( I )", I.commonZeroTest(), 1); 301 } 302 303 L = (List<GenWordPolynomial<BigRational>>) fac.univariateList(); 304 //System.out.println("L = " + L); 305 I = new WordIdeal<BigRational>(fac, L, true); 306 assertEquals("commonZeroTest( I )", I.commonZeroTest(), 0); 307 308 J = I.product(I); 309 //System.out.println("J = " + J); 310 assertEquals("commonZeroTest( J )", J.commonZeroTest(), 0); 311 312 L.remove(0); 313 I = new WordIdeal<BigRational>(fac, L, true); 314 assertEquals("commonZeroTest( I )", I.commonZeroTest(), 1); 315 } 316 317}