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 }