1 4 package com.tc.util; 5 6 import com.tc.object.ObjectID; 7 import com.tc.test.TCTestCase; 8 9 import java.security.SecureRandom ; 10 import java.util.ArrayList ; 11 import java.util.Collection ; 12 import java.util.Collections ; 13 import java.util.HashSet ; 14 import java.util.Iterator ; 15 import java.util.List ; 16 import java.util.Random ; 17 import java.util.Set ; 18 19 public class ObjectIDSetTest extends TCTestCase { 20 21 interface SetCreator { 22 public Set create(); 23 24 public Set create(Collection c); 25 } 26 27 public void DISABLEDtestObjectIDSet() { 30 SetCreator creator = new SetCreator() { 31 public Set create() { 32 return new ObjectIDSet(); 33 } 34 35 public Set create(Collection c) { 36 return new ObjectIDSet(c); 37 } 38 39 }; 40 basicTest(creator); 41 iteratorRemoveTest(creator); 42 } 43 44 public void basicTest(SetCreator creator) { 45 basicTest(creator, 100000, 100000); 46 basicTest(creator, 500000, 100000); 47 basicTest(creator, 100000, 1000000); 48 } 49 50 public void basicTest(SetCreator creator, int distRange, int iterationCount) { 51 long test_start = System.currentTimeMillis(); 52 Set s = new HashSet (); 53 Set small = creator.create(); 54 String cname = small.getClass().getName(); 55 System.err.println("Running tests for " + cname + " distRange = " + distRange + " iterationCount = " 56 + iterationCount); 57 assertTrue(small.isEmpty()); 58 assertTrue(small.size() == 0); 59 SecureRandom sr = new SecureRandom (); 60 long seed = sr.nextLong(); 61 System.err.println("Seed for Random is " + seed); 62 Random r = new Random (seed); 63 for (int i = 0; i < iterationCount; i++) { 64 long l = r.nextInt(distRange); 65 ObjectID id = new ObjectID(l); 66 s.add(id); 67 small.add(id); 68 assertEquals(s.size(), small.size()); 69 } 70 Iterator sit = small.iterator(); 71 List all = new ArrayList (); 72 all.addAll(s); 73 while (sit.hasNext()) { 74 ObjectID i = (ObjectID) sit.next(); 75 Assert.eval("FAILED:" + i.toString(), s.remove(i)); 76 } 77 Assert.eval(s.size() == 0); 78 79 long start = System.currentTimeMillis(); 81 Set copy = creator.create(all); 82 System.err.println("Time to add all IDs from a collection to a new " + cname + " = " 83 + (System.currentTimeMillis() - start) + " ms"); 84 start = System.currentTimeMillis(); 85 Set clone = creator.create(small); 86 System.err.println("Time to add all IDs from an ObjectIDSet to a new " + cname + " = " 87 + (System.currentTimeMillis() - start) + " ms"); 88 89 Collections.shuffle(all); 90 for (Iterator i = all.iterator(); i.hasNext();) { 91 ObjectID rid = (ObjectID) i.next(); 92 Assert.eval(small.contains(rid)); 93 Assert.eval(clone.contains(rid)); 94 Assert.eval(copy.contains(rid)); 95 if (!small.remove(rid)) { throw new AssertionError ("couldn't remove:" + rid); } 96 if (small.contains(rid)) { throw new AssertionError (rid); } 97 if (!clone.remove(rid)) { throw new AssertionError ("couldn't remove:" + rid); } 98 if (clone.contains(rid)) { throw new AssertionError (rid); } 99 if (!copy.remove(rid)) { throw new AssertionError ("couldn't remove:" + rid); } 100 if (copy.contains(rid)) { throw new AssertionError (rid); } 101 } 102 for (Iterator i = all.iterator(); i.hasNext();) { 103 ObjectID rid = (ObjectID) i.next(); 104 Assert.eval(!small.contains(rid)); 105 if (small.remove(rid)) { throw new AssertionError ("shouldn't have removed:" + rid); } 106 if (small.contains(rid)) { throw new AssertionError (rid); } 107 if (clone.remove(rid)) { throw new AssertionError ("shouldn't have removed:" + rid); } 108 if (clone.contains(rid)) { throw new AssertionError (rid); } 109 if (copy.remove(rid)) { throw new AssertionError ("shouldn't have removed:" + rid); } 110 if (copy.contains(rid)) { throw new AssertionError (rid); } 111 } 112 Assert.eval(s.size() == 0); 113 Assert.eval(small.size() == 0); 114 Assert.eval(copy.size() == 0); 115 Assert.eval(clone.size() == 0); 116 System.err.println("Time taken to run basic Test for " + small.getClass().getName() + " is " 117 + (System.currentTimeMillis() - test_start) + " ms"); 118 } 119 120 public void testObjectIDSet2() { 121 SetCreator creator = new SetCreator() { 122 public Set create() { 123 return new ObjectIDSet2(); 124 } 125 126 public Set create(Collection c) { 127 return new ObjectIDSet2(c); 128 } 129 130 }; 131 basicTest(creator); 132 } 133 134 public void iteratorRemoveTest(SetCreator creator) { 135 SecureRandom sr = new SecureRandom (); 136 long seed = sr.nextLong(); 137 iteratorRemoveTest(creator, seed); 138 } 139 140 private void iteratorRemoveTest(SetCreator creator, long seed) { 141 Set all = new HashSet (); 142 Set oidSet = creator.create(); 143 System.err.println("Running iteratorRemoveTest for " + oidSet.getClass().getName() + " and seed is " + seed); 144 Random r = new Random (seed); 145 for (int i = 0; i < 50000; i++) { 146 long l = r.nextInt(100000); 147 ObjectID id = new ObjectID(l); 148 all.add(id); 149 oidSet.add(id); 150 } 151 for (Iterator i = all.iterator(); i.hasNext();) { 152 ObjectID rid = (ObjectID) i.next(); 153 Assert.eval(oidSet.contains(rid)); 154 for (Iterator j = oidSet.iterator(); j.hasNext();) { 155 ObjectID crid = (ObjectID) j.next(); 156 if (crid.equals(rid)) { 157 j.remove(); 158 break; 159 } 160 } 161 } 162 Assert.eval(oidSet.size() == 0); 163 } 164 165 public void DISABLEDtestFailedCase() { 167 System.err.println("\nRunning testFailedCase()... "); 168 SetCreator creator = new SetCreator() { 169 public Set create() { 170 return new ObjectIDSet(); 171 } 172 173 public Set create(Collection c) { 174 return new ObjectIDSet(c); 175 } 176 177 }; 178 long seed = 1576555335886137186L; 179 iteratorRemoveTest(creator, seed); 180 } 181 182 } 183 | Popular Tags |