001/* 002 * $Id: IteratorsTest.java 5688 2017-01-03 08:45:09Z kredel $ 003 */ 004 005package edu.jas.ps; 006 007 008import java.util.ArrayList; 009import java.util.List; 010import java.util.Map; 011import java.util.Set; 012import java.util.TreeMap; 013import java.util.TreeSet; 014 015import junit.framework.Test; 016import junit.framework.TestCase; 017import junit.framework.TestSuite; 018 019import edu.jas.arith.BigInteger; 020import edu.jas.arith.ModInteger; 021import edu.jas.arith.ModIntegerRing; 022import edu.jas.poly.ExpVector; 023import edu.jas.poly.GenPolynomial; 024import edu.jas.poly.GenPolynomialRing; 025import edu.jas.poly.TermOrder; 026import edu.jas.util.CartesianProductInfinite; 027import edu.jas.util.CartesianProductLong; 028import edu.jas.util.LongIterable; 029 030 031/** 032 * Iterator tests with JUnit. 033 * @author Heinz Kredel 034 */ 035 036public 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 assertFalse("es != null", es == null); 225 //System.out.println("#es = " + es.size() + ", es = " + es); 226 //System.out.println("#es = " + es.size() + ", deg = " + es.iterator().next().totalDeg()); 227 } 228 assertTrue("#set", set.size() == t); 229 } 230 231 232 /** 233 * Test total degree ExpVector iterator. 234 * 235 */ 236 public void testTotalDegExpVectorIteratorInf() { 237 int n = 4; 238 239 Set<ExpVector> set = new TreeSet<ExpVector>((new TermOrder()).getDescendComparator()); 240 241 ExpVectorIterable eiter = new ExpVectorIterable(n); 242 long t = 0; 243 for (ExpVector e : eiter) { 244 //System.out.println("e = " + e + ", deg = " + e.totalDeg()); 245 t++; 246 if (t > 500L) { 247 //System.out.println("i = " + i); 248 break; 249 } 250 assertFalse("e in set", set.contains(e)); 251 set.add(e); 252 } 253 254 } 255 256 257 /** 258 * Test total degree ExpVector iterator. 259 * 260 */ 261 public void testTotalDegExpVectorIteratorFin() { 262 int n = 4; 263 264 Set<ExpVector> set = new TreeSet<ExpVector>((new TermOrder()).getDescendComparator()); 265 266 ExpVectorIterable eiter = new ExpVectorIterable(n, 5); 267 long t = 0; 268 for (ExpVector e : eiter) { 269 //System.out.println("e = " + e + ", deg = " + e.totalDeg()); 270 t++; 271 if (t > 500L) { 272 //System.out.println("i = " + i); 273 break; 274 } 275 assertFalse("e in set", set.contains(e)); 276 set.add(e); 277 } 278 279 } 280 281 282 /** 283 * Test total degree ExpVector iterator. 284 * 285 */ 286 public void testTotalDegExpVectorIteratorAllFin() { 287 int n = 4; 288 289 Set<ExpVector> set = new TreeSet<ExpVector>((new TermOrder()).getDescendComparator()); 290 291 ExpVectorIterable eiter = new ExpVectorIterable(n, true, 5); 292 long t = 0; 293 for (ExpVector e : eiter) { 294 //System.out.println("e = " + e + ", deg = " + e.totalDeg()); 295 t++; 296 if (t > 500L) { 297 //System.out.println("i = " + i); 298 break; 299 } 300 assertFalse("e in set", set.contains(e)); 301 set.add(e); 302 } 303 304 } 305 306}