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