001 /* 002 * $Id: IteratorsTest.java 3444 2010-12-25 17:13:53Z kredel $ 003 */ 004 005 package edu.jas.ps; 006 007 008 import java.util.ArrayList; 009 import java.util.List; 010 import java.util.Map; 011 import java.util.Set; 012 import java.util.TreeMap; 013 import java.util.TreeSet; 014 015 import junit.framework.Test; 016 import junit.framework.TestCase; 017 import junit.framework.TestSuite; 018 019 import edu.jas.arith.BigInteger; 020 import edu.jas.arith.ModInteger; 021 import edu.jas.arith.ModIntegerRing; 022 import edu.jas.poly.ExpVector; 023 import edu.jas.poly.GenPolynomial; 024 import edu.jas.poly.GenPolynomialRing; 025 import edu.jas.poly.TermOrder; 026 import edu.jas.util.CartesianProductInfinite; 027 import edu.jas.util.CartesianProductLong; 028 import edu.jas.util.LongIterable; 029 030 031 /** 032 * Iterator tests with JUnit. 033 * @author Heinz Kredel. 034 */ 035 036 public class IteratorsTest extends TestCase { 037 038 039 /** 040 * main. 041 */ 042 public static void main(String[] args) { 043 junit.textui.TestRunner.run(suite()); 044 } 045 046 047 /** 048 * Constructs a <CODE>ListUtilTest</CODE> object. 049 * @param name String. 050 */ 051 public IteratorsTest(String name) { 052 super(name); 053 } 054 055 056 /** 057 */ 058 public static Test suite() { 059 TestSuite suite = new TestSuite(IteratorsTest.class); 060 return suite; 061 } 062 063 064 @Override 065 protected void setUp() { 066 } 067 068 069 @Override 070 protected void tearDown() { 071 } 072 073 074 /** 075 * Test ExpVector iterator. 076 * 077 */ 078 public void testExpVector() { 079 int n = 5; 080 LongIterable li = new LongIterable(); 081 li.setNonNegativeIterator(); 082 083 List<Iterable<Long>> tlist = new ArrayList<Iterable<Long>>(n); 084 for (int i = 0; i < n; i++) { 085 tlist.add(li); 086 } 087 //System.out.println("tlist = " + tlist); 088 089 Set<ExpVector> set = new TreeSet<ExpVector>((new TermOrder()).getDescendComparator()); 090 091 Iterable<List<Long>> ib = new CartesianProductInfinite<Long>(tlist); 092 093 long t = 0L; 094 for (List<Long> i : ib) { 095 //System.out.println("i = " + i); 096 ExpVector e = ExpVector.create(i); 097 //System.out.println("e = " + e); 098 assertFalse("e in set", set.contains(e)); 099 set.add(e); 100 t++; 101 if (t > 100L) { 102 //System.out.println("i = " + i); 103 break; 104 } 105 } 106 //System.out.println("set = " + set); 107 assertTrue("#set", set.size() == t); 108 } 109 110 111 /** 112 * Test GenPolynomial iterator. 113 * 114 */ 115 public void testGenPolynomial() { 116 ModIntegerRing mi = new ModIntegerRing(5, true); 117 int n = 3; 118 GenPolynomialRing<ModInteger> ring = new GenPolynomialRing<ModInteger>(mi, n); 119 120 Set<GenPolynomial<ModInteger>> set = new TreeSet<GenPolynomial<ModInteger>>(); 121 122 long t = 0; 123 for (GenPolynomial<ModInteger> p : ring) { 124 //System.out.println("p = " + p); 125 if (set.contains(p)) { 126 System.out.println("p = " + p); 127 System.out.println("set = " + set); 128 assertFalse("p in set ", true); 129 } 130 set.add(p); 131 t++; 132 if (t > 650L) { 133 //System.out.println("i = " + i); 134 break; 135 } 136 } 137 //System.out.println("set = " + set); 138 assertTrue("#set", set.size() == t); 139 } 140 141 142 /** 143 * Test GenPolynomial monomial iterator. 144 * 145 */ 146 public void testGenPolynomialMonomial() { 147 BigInteger bi = new BigInteger(1); 148 int n = 3; 149 GenPolynomialRing<BigInteger> ring = new GenPolynomialRing<BigInteger>(bi, n); 150 151 Set<GenPolynomial<BigInteger>> set = new TreeSet<GenPolynomial<BigInteger>>(); 152 153 long t = 0; 154 for (GenPolynomial<BigInteger> p : ring) { 155 //System.out.println("p = " + p); 156 if (set.contains(p)) { 157 System.out.println("p = " + p); 158 //System.out.println("set = " + set); 159 assertFalse("p in set ", true); 160 } 161 set.add(p); 162 t++; 163 if (t > 650L) { 164 //System.out.println("i = " + i); 165 break; 166 } 167 } 168 //System.out.println("set = " + set); 169 assertTrue("#set", set.size() == t); 170 } 171 172 173 /** 174 * Test total degree ExpVector iterator. 175 * 176 */ 177 public void testTotalDegExpVector() { 178 int n = 4; 179 180 Set<ExpVector> set = new TreeSet<ExpVector>((new TermOrder()).getDescendComparator()); 181 182 Map<Long, Set<ExpVector>> degset = new TreeMap<Long, Set<ExpVector>>(); 183 184 long t = 0L; 185 for (long k = 0; k < 14; k++) { 186 LongIterable li = new LongIterable(); 187 li.setNonNegativeIterator(); 188 li.setUpperBound(k); 189 List<LongIterable> tlist = new ArrayList<LongIterable>(n); 190 for (int i = 0; i < n; i++) { 191 tlist.add(li); // can reuse li 192 } 193 long kdeg = k; 194 //if ( kdeg > 5 ) { // kdeg < k ok but kdeg > k not allowed 195 // kdeg -= 2; 196 //} 197 Iterable<List<Long>> ib = new CartesianProductLong(tlist, kdeg); 198 //System.out.println("kdeg = " + kdeg); 199 for (List<Long> i : ib) { 200 //System.out.println("i = " + i); 201 ExpVector e = ExpVector.create(i); 202 long tdeg = e.totalDeg(); 203 //System.out.println("e = " + e + ", deg = " + tdeg); 204 assertTrue("tdeg == k", tdeg == kdeg); 205 Set<ExpVector> es = degset.get(tdeg); 206 if (es == null) { 207 es = new TreeSet<ExpVector>((new TermOrder()).getDescendComparator()); 208 degset.put(tdeg, es); 209 } 210 es.add(e); 211 //assertFalse("e in set", set.contains(e) ); 212 set.add(e); 213 t++; 214 if (t > 500000L) { 215 //System.out.println("i = " + i); 216 break; 217 } 218 } 219 } 220 //System.out.println("waste = " + w + ", of " + t); 221 //System.out.println("set = " + set); 222 //System.out.println("degset = " + degset); 223 for (Set<ExpVector> es : degset.values()) { 224 //System.out.println("#es = " + es.size() + ", es = " + es); 225 //System.out.println("#es = " + es.size() + ", deg = " + es.iterator().next().totalDeg()); 226 } 227 assertTrue("#set", set.size() == t); 228 } 229 230 231 /** 232 * Test total degree ExpVector iterator. 233 * 234 */ 235 public void testTotalDegExpVectorIteratorInf() { 236 int n = 4; 237 238 Set<ExpVector> set = new TreeSet<ExpVector>((new TermOrder()).getDescendComparator()); 239 240 ExpVectorIterable eiter = new ExpVectorIterable(n); 241 long t = 0; 242 for (ExpVector e : eiter) { 243 //System.out.println("e = " + e + ", deg = " + e.totalDeg()); 244 t++; 245 if (t > 500L) { 246 //System.out.println("i = " + i); 247 break; 248 } 249 assertFalse("e in set", set.contains(e)); 250 set.add(e); 251 } 252 253 } 254 255 256 /** 257 * Test total degree ExpVector iterator. 258 * 259 */ 260 public void testTotalDegExpVectorIteratorFin() { 261 int n = 4; 262 263 Set<ExpVector> set = new TreeSet<ExpVector>((new TermOrder()).getDescendComparator()); 264 265 ExpVectorIterable eiter = new ExpVectorIterable(n, 5); 266 long t = 0; 267 for (ExpVector e : eiter) { 268 //System.out.println("e = " + e + ", deg = " + e.totalDeg()); 269 t++; 270 if (t > 500L) { 271 //System.out.println("i = " + i); 272 break; 273 } 274 assertFalse("e in set", set.contains(e)); 275 set.add(e); 276 } 277 278 } 279 280 281 /** 282 * Test total degree ExpVector iterator. 283 * 284 */ 285 public void testTotalDegExpVectorIteratorAllFin() { 286 int n = 4; 287 288 Set<ExpVector> set = new TreeSet<ExpVector>((new TermOrder()).getDescendComparator()); 289 290 ExpVectorIterable eiter = new ExpVectorIterable(n, true, 5); 291 long t = 0; 292 for (ExpVector e : eiter) { 293 //System.out.println("e = " + e + ", deg = " + e.totalDeg()); 294 t++; 295 if (t > 500L) { 296 //System.out.println("i = " + i); 297 break; 298 } 299 assertFalse("e in set", set.contains(e)); 300 set.add(e); 301 } 302 303 } 304 305 }