package org.limewire.collection;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import junit.framework.Test;
import org.limewire.util.BaseTestCase;
@SuppressWarnings("unchecked")
public class RandomOrderHashMapTest extends BaseTestCase {
public RandomOrderHashMapTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(RandomOrderHashMapTest.class);
}
/**
* tests that two subsequent iterations over the same map
* will return the elements in different order.
*/
public void testRandomOrder() throws Exception {
Map m = new RandomOrderHashMap(50);
for (int i = 0; i < 50; i++)
m.put(i, i + "x" + i);
String out1 = "";
String out2 = "";
Set s = m.entrySet();
for (Object o : s)
out1 = out1 + o;
for (Object o : s)
out2 = out2 + o;
assertNotEquals(out1, out2);
out1 = "";
out2 = "";
s = m.keySet();
for (Object o : s)
out1 = out1 + o;
for (Object o : s)
out2 = out2 + o;
assertNotEquals(out1, out2);
out1 = "";
out2 = "";
Collection c = m.values();
for (Object o : c)
out1 = out1 + o;
for (Object o : c)
out2 = out2 + o;
assertNotEquals(out1, out2);
}
public void testAllKeysInKeySet() {
testAllKeysFor(200);
testAllKeysFor(1);
testAllKeysFor(199);
// powers of two and values around
testAllKeysFor(16);
testAllKeysFor(15);
testAllKeysFor(17);
testAllKeysFor(2);
}
private void testAllKeysFor(int size) {
RandomOrderHashMap<Integer, Integer> map = new RandomOrderHashMap<Integer, Integer>(size);
Set<Integer> set = new HashSet<Integer>();
// overfill it by one
for (int i = 1; i <= size + 1; i++) {
map.put(i, i);
set.add(i);
}
assertEquals(size, map.keySet().size());
for (Integer key : map.keySet()) {
set.remove(key);
}
assertEquals("set: " + set + "for size " + size, 1, set.size());
}
}