|
@@ -17,6 +17,7 @@
|
|
|
*/
|
|
|
package org.apache.hadoop.util;
|
|
|
|
|
|
+import java.util.Collection;
|
|
|
import java.util.ConcurrentModificationException;
|
|
|
import java.util.Iterator;
|
|
|
import java.util.Random;
|
|
@@ -41,10 +42,15 @@ public class TestGSet {
|
|
|
|
|
|
@Test
|
|
|
public void testExceptionCases() {
|
|
|
+ testExceptionCases(false);
|
|
|
+ testExceptionCases(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void testExceptionCases(boolean resizable) {
|
|
|
{
|
|
|
//test contains
|
|
|
final LightWeightGSet<Integer, Integer> gset
|
|
|
- = new LightWeightGSet<Integer, Integer>(16);
|
|
|
+ = createGSet(16, resizable);
|
|
|
try {
|
|
|
//test contains with a null element
|
|
|
gset.contains(null);
|
|
@@ -57,7 +63,7 @@ public class TestGSet {
|
|
|
{
|
|
|
//test get
|
|
|
final LightWeightGSet<Integer, Integer> gset
|
|
|
- = new LightWeightGSet<Integer, Integer>(16);
|
|
|
+ = createGSet(16, resizable);
|
|
|
try {
|
|
|
//test get with a null element
|
|
|
gset.get(null);
|
|
@@ -70,7 +76,7 @@ public class TestGSet {
|
|
|
{
|
|
|
//test put
|
|
|
final LightWeightGSet<Integer, Integer> gset
|
|
|
- = new LightWeightGSet<Integer, Integer>(16);
|
|
|
+ = createGSet(16, resizable);
|
|
|
try {
|
|
|
//test put with a null element
|
|
|
gset.put(null);
|
|
@@ -97,7 +103,7 @@ public class TestGSet {
|
|
|
for(int v = 1; v < data.length-1; v++) {
|
|
|
{
|
|
|
//test remove while iterating
|
|
|
- final GSet<IntElement, IntElement> gset = createGSet(data);
|
|
|
+ final GSet<IntElement, IntElement> gset = createGSet(data, resizable);
|
|
|
for(IntElement i : gset) {
|
|
|
if (i.value == v) {
|
|
|
//okay because data[0] is not in gset
|
|
@@ -120,7 +126,7 @@ public class TestGSet {
|
|
|
|
|
|
{
|
|
|
//test put new element while iterating
|
|
|
- final GSet<IntElement, IntElement> gset = createGSet(data);
|
|
|
+ final GSet<IntElement, IntElement> gset = createGSet(data, resizable);
|
|
|
try {
|
|
|
for(IntElement i : gset) {
|
|
|
if (i.value == v) {
|
|
@@ -135,7 +141,7 @@ public class TestGSet {
|
|
|
|
|
|
{
|
|
|
//test put existing element while iterating
|
|
|
- final GSet<IntElement, IntElement> gset = createGSet(data);
|
|
|
+ final GSet<IntElement, IntElement> gset = createGSet(data, resizable);
|
|
|
try {
|
|
|
for(IntElement i : gset) {
|
|
|
if (i.value == v) {
|
|
@@ -151,9 +157,17 @@ public class TestGSet {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private static GSet<IntElement, IntElement> createGSet(final IntElement[] data) {
|
|
|
+ private static LightWeightGSet<Integer, Integer> createGSet(
|
|
|
+ int size, boolean resizable) {
|
|
|
+ return resizable ? new LightWeightResizableGSet<Integer, Integer>(size) :
|
|
|
+ new LightWeightGSet<Integer, Integer>(size);
|
|
|
+ }
|
|
|
+
|
|
|
+ private static GSet<IntElement, IntElement> createGSet(
|
|
|
+ final IntElement[] data, boolean resizable) {
|
|
|
final GSet<IntElement, IntElement> gset
|
|
|
- = new LightWeightGSet<IntElement, IntElement>(8);
|
|
|
+ = resizable ? new LightWeightResizableGSet<IntElement, IntElement>(8) :
|
|
|
+ new LightWeightGSet<IntElement, IntElement>(8);
|
|
|
for(int i = 1; i < data.length; i++) {
|
|
|
gset.put(data[i]);
|
|
|
}
|
|
@@ -168,6 +182,14 @@ public class TestGSet {
|
|
|
check(new GSetTestCase(255, 1 << 10, 65537));
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void testResizableGSet() {
|
|
|
+ //The parameters are: table length, data size, modulus, resizable.
|
|
|
+ check(new GSetTestCase(1, 1 << 4, 65537, true));
|
|
|
+ check(new GSetTestCase(17, 1 << 16, 17, true));
|
|
|
+ check(new GSetTestCase(255, 1 << 10, 65537, true));
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* A long running test with various data sets and parameters.
|
|
|
* It may take ~5 hours,
|
|
@@ -177,14 +199,25 @@ public class TestGSet {
|
|
|
//@Test
|
|
|
public void runMultipleTestGSet() {
|
|
|
for(int offset = -2; offset <= 2; offset++) {
|
|
|
- runTestGSet(1, offset);
|
|
|
+ runTestGSet(1, offset, false);
|
|
|
+ for(int i = 1; i < Integer.SIZE - 1; i++) {
|
|
|
+ runTestGSet((1 << i) + 1, offset, false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //@Test
|
|
|
+ public void runMultipleTestResizableGSet() {
|
|
|
+ for(int offset = -2; offset <= 2; offset++) {
|
|
|
+ runTestGSet(1, offset, true);
|
|
|
for(int i = 1; i < Integer.SIZE - 1; i++) {
|
|
|
- runTestGSet((1 << i) + 1, offset);
|
|
|
+ runTestGSet((1 << i) + 1, offset, true);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private static void runTestGSet(final int modulus, final int offset) {
|
|
|
+ private static void runTestGSet(final int modulus, final int offset,
|
|
|
+ boolean resizable) {
|
|
|
println("\n\nmodulus=" + modulus + ", offset=" + offset);
|
|
|
for(int i = 0; i <= 16; i += 4) {
|
|
|
final int tablelength = (1 << i) + offset;
|
|
@@ -194,7 +227,7 @@ public class TestGSet {
|
|
|
|
|
|
for(int j = 0; j <= upper; j += steps) {
|
|
|
final int datasize = 1 << j;
|
|
|
- check(new GSetTestCase(tablelength, datasize, modulus));
|
|
|
+ check(new GSetTestCase(tablelength, datasize, modulus, resizable));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -265,6 +298,10 @@ public class TestGSet {
|
|
|
int contain_count = 0;
|
|
|
|
|
|
GSetTestCase(int tablelength, int datasize, int modulus) {
|
|
|
+ this(tablelength, datasize, modulus, false);
|
|
|
+ }
|
|
|
+
|
|
|
+ GSetTestCase(int tablelength, int datasize, int modulus, boolean resizable) {
|
|
|
denominator = Math.min((datasize >> 7) + 1, 1 << 16);
|
|
|
info = getClass().getSimpleName()
|
|
|
+ ": tablelength=" + tablelength
|
|
@@ -274,7 +311,8 @@ public class TestGSet {
|
|
|
println(info);
|
|
|
|
|
|
data = new IntData(datasize, modulus);
|
|
|
- gset = new LightWeightGSet<IntElement, IntElement>(tablelength);
|
|
|
+ gset = resizable ? new LightWeightResizableGSet<IntElement, IntElement>() :
|
|
|
+ new LightWeightGSet<IntElement, IntElement>(tablelength);
|
|
|
|
|
|
Assert.assertEquals(0, gset.size());
|
|
|
}
|
|
@@ -392,6 +430,11 @@ public class TestGSet {
|
|
|
gset.clear();
|
|
|
Assert.assertEquals(0, size());
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Collection<IntElement> values() {
|
|
|
+ throw new UnsupportedOperationException();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/** Test data set */
|