Improve reference map testing

git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/collections/trunk@131687 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Stephen Colebourne 2004-04-30 22:53:16 +00:00
parent 51c209801f
commit 6f57c5a1f7
3 changed files with 140 additions and 85 deletions

View File

@ -16,6 +16,7 @@
package org.apache.commons.collections;
import java.lang.ref.WeakReference;
import java.util.Iterator;
import java.util.Map;
import junit.framework.Test;
@ -25,7 +26,7 @@ import org.apache.commons.collections.map.AbstractTestMap;
/**
* Tests for ReferenceMap.
*
* @version $Revision: 1.17 $ $Date: 2004/02/18 01:20:35 $
* @version $Revision: 1.18 $ $Date: 2004/04/30 22:53:16 $
*
* @author Paul Jack
*/
@ -57,13 +58,35 @@ public class TestReferenceMap extends AbstractTestMap {
return false;
}
public String getCompatibilityVersion() {
return "2.1";
}
/*
// Unfortunately, these tests all rely on System.gc(), which is
// not reliable across platforms. Not sure how to code the tests
// without using System.gc() though...
// They all passed on my platform though. :)
//-----------------------------------------------------------------------
public void testNullHandling() {
resetFull();
assertEquals(null, map.get(null));
assertEquals(false, map.containsKey(null));
assertEquals(false, map.containsValue(null));
assertEquals(null, map.remove(null));
assertEquals(false, map.entrySet().contains(null));
assertEquals(false, map.keySet().contains(null));
assertEquals(false, map.values().contains(null));
try {
map.put(null, null);
fail();
} catch (NullPointerException ex) {}
try {
map.put(new Object(), null);
fail();
} catch (NullPointerException ex) {}
try {
map.put(null, new Object());
fail();
} catch (NullPointerException ex) {}
}
//-----------------------------------------------------------------------
public void testPurge() {
ReferenceMap map = new ReferenceMap(ReferenceMap.WEAK, ReferenceMap.WEAK);
Object[] hard = new Object[10];
@ -71,13 +94,13 @@ public class TestReferenceMap extends AbstractTestMap {
hard[i] = new Object();
map.put(hard[i], new Object());
}
System.gc();
gc();
assertTrue("map should be empty after purge of weak values", map.isEmpty());
for (int i = 0; i < hard.length; i++) {
map.put(new Object(), hard[i]);
}
System.gc();
gc();
assertTrue("map should be empty after purge of weak keys", map.isEmpty());
for (int i = 0; i < hard.length; i++) {
@ -85,7 +108,7 @@ public class TestReferenceMap extends AbstractTestMap {
map.put(hard[i], new Object());
}
System.gc();
gc();
assertTrue("map should be empty after purge of weak keys and values", map.isEmpty());
}
@ -96,7 +119,7 @@ public class TestReferenceMap extends AbstractTestMap {
map.put(new Integer(i), new Integer(i));
}
System.gc();
gc();
for (int i = 0; i < 10; i++) {
Integer I = new Integer(i);
assertTrue("map.containsKey should return false for GC'd element", !map.containsKey(I));
@ -114,7 +137,7 @@ public class TestReferenceMap extends AbstractTestMap {
map.put(hard[i], hard[i]);
}
System.gc();
gc();
Iterator iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry)iterator.next();
@ -125,24 +148,8 @@ public class TestReferenceMap extends AbstractTestMap {
}
}
*/
/*
// Uncomment to create test files in /data/test
public void testCreateTestFiles() throws Exception {
ReferenceMap m = (ReferenceMap)makeEmptyMap();
writeExternalFormToDisk(m, getCanonicalEmptyCollectionName(m));
m = (ReferenceMap)makeFullMap();
writeExternalFormToDisk(m, getCanonicalFullCollectionName(m));
}
*/
public String getCompatibilityVersion() {
return "2.1";
}
/** Tests whether purge values setting works */
public void testPurgeValues() throws Exception {
// many thanks to Juozas Baliuka for suggesting this method
@ -183,4 +190,14 @@ public class TestReferenceMap extends AbstractTestMap {
}
}
}
private static void gc() {
try {
// trigger GC
byte[][] tooLarge = new byte[1000000000][1000000000];
fail("you have too much RAM");
} catch (OutOfMemoryError ex) {
System.gc(); // ignore
}
}
}

View File

@ -23,11 +23,12 @@ import junit.framework.Test;
import org.apache.commons.collections.BulkTest;
import org.apache.commons.collections.IterableMap;
import org.apache.commons.collections.MapIterator;
/**
* Tests for ReferenceIdentityMap.
*
* @version $Revision: 1.1 $
* @version $Revision: 1.2 $
*
* @author Paul Jack
* @author Stephen Colebourne
@ -71,6 +72,10 @@ public class TestReferenceIdentityMap extends AbstractTestIterableMap {
return false;
}
public String getCompatibilityVersion() {
return "3.1";
}
//-----------------------------------------------------------------------
public void testBasics() {
IterableMap map = new ReferenceIdentityMap(ReferenceIdentityMap.HARD, ReferenceIdentityMap.HARD);
@ -123,11 +128,30 @@ public class TestReferenceIdentityMap extends AbstractTestIterableMap {
//-----------------------------------------------------------------------
// Unfortunately, these tests all rely on System.gc(), which is
// not reliable across platforms. Not sure how to code the tests
// without using System.gc() though...
// They all passed on my platform though. :)
/*
public void testNullHandling() {
resetFull();
assertEquals(null, map.get(null));
assertEquals(false, map.containsKey(null));
assertEquals(false, map.containsValue(null));
assertEquals(null, map.remove(null));
assertEquals(false, map.entrySet().contains(null));
assertEquals(false, map.keySet().contains(null));
assertEquals(false, map.values().contains(null));
try {
map.put(null, null);
fail();
} catch (NullPointerException ex) {}
try {
map.put(new Object(), null);
fail();
} catch (NullPointerException ex) {}
try {
map.put(null, new Object());
fail();
} catch (NullPointerException ex) {}
}
//-----------------------------------------------------------------------
public void testPurge() {
ReferenceIdentityMap map = new ReferenceIdentityMap(ReferenceIdentityMap.WEAK, ReferenceIdentityMap.WEAK);
Object[] hard = new Object[10];
@ -135,13 +159,13 @@ public class TestReferenceIdentityMap extends AbstractTestIterableMap {
hard[i] = new Object();
map.put(hard[i], new Object());
}
System.gc();
gc();
assertTrue("map should be empty after purge of weak values", map.isEmpty());
for (int i = 0; i < hard.length; i++) {
map.put(new Object(), hard[i]);
}
System.gc();
gc();
assertTrue("map should be empty after purge of weak keys", map.isEmpty());
for (int i = 0; i < hard.length; i++) {
@ -149,7 +173,7 @@ public class TestReferenceIdentityMap extends AbstractTestIterableMap {
map.put(hard[i], new Object());
}
System.gc();
gc();
assertTrue("map should be empty after purge of weak keys and values", map.isEmpty());
}
@ -160,7 +184,7 @@ public class TestReferenceIdentityMap extends AbstractTestIterableMap {
map.put(new Integer(i), new Integer(i));
}
System.gc();
gc();
for (int i = 0; i < 10; i++) {
Integer I = new Integer(i);
assertTrue("map.containsKey should return false for GC'd element", !map.containsKey(I));
@ -178,7 +202,7 @@ public class TestReferenceIdentityMap extends AbstractTestIterableMap {
map.put(hard[i], hard[i]);
}
System.gc();
gc();
Iterator iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry)iterator.next();
@ -199,7 +223,7 @@ public class TestReferenceIdentityMap extends AbstractTestIterableMap {
map.put(hard[i], hard[i]);
}
System.gc();
gc();
MapIterator iterator = map.mapIterator();
while (iterator.hasNext()) {
Object key1 = iterator.next();
@ -224,7 +248,7 @@ public class TestReferenceIdentityMap extends AbstractTestIterableMap {
MapIterator iterator = map.mapIterator();
while (iterator.hasNext()) {
Object key1 = iterator.next();
System.gc();
gc();
Integer key = (Integer) iterator.getKey();
Integer value = (Integer) iterator.getValue();
assertTrue("iterator keys should match", key == key1);
@ -233,21 +257,6 @@ public class TestReferenceIdentityMap extends AbstractTestIterableMap {
}
}
*/
/*
// Uncomment to create test files in /data/test
public void testCreateTestFiles() throws Exception {
ReferenceIdentityMap m = (ReferenceIdentityMap) makeEmptyMap();
writeExternalFormToDisk(m, getCanonicalEmptyCollectionName(m));
m = (ReferenceIdentityMap) makeFullMap();
writeExternalFormToDisk(m, getCanonicalFullCollectionName(m));
}
*/
public String getCompatibilityVersion() {
return "3.1";
}
/** Tests whether purge values setting works */
public void testPurgeValues() throws Exception {
@ -289,4 +298,15 @@ public class TestReferenceIdentityMap extends AbstractTestIterableMap {
}
}
}
private static void gc() {
try {
// trigger GC
byte[][] tooLarge = new byte[1000000000][1000000000];
fail("you have too much RAM");
} catch (OutOfMemoryError ex) {
System.gc(); // ignore
}
}
}

View File

@ -16,16 +16,18 @@
package org.apache.commons.collections.map;
import java.lang.ref.WeakReference;
import java.util.Iterator;
import java.util.Map;
import junit.framework.Test;
import org.apache.commons.collections.BulkTest;
import org.apache.commons.collections.MapIterator;
/**
* Tests for ReferenceMap.
*
* @version $Revision: 1.6 $ $Date: 2004/04/27 21:35:23 $
* @version $Revision: 1.7 $ $Date: 2004/04/30 22:53:16 $
*
* @author Paul Jack
*/
@ -57,13 +59,35 @@ public class TestReferenceMap extends AbstractTestIterableMap {
return false;
}
public String getCompatibilityVersion() {
return "3.1";
}
/*
// Unfortunately, these tests all rely on System.gc(), which is
// not reliable across platforms. Not sure how to code the tests
// without using System.gc() though...
// They all passed on my platform though. :)
//-----------------------------------------------------------------------
public void testNullHandling() {
resetFull();
assertEquals(null, map.get(null));
assertEquals(false, map.containsKey(null));
assertEquals(false, map.containsValue(null));
assertEquals(null, map.remove(null));
assertEquals(false, map.entrySet().contains(null));
assertEquals(false, map.keySet().contains(null));
assertEquals(false, map.values().contains(null));
try {
map.put(null, null);
fail();
} catch (NullPointerException ex) {}
try {
map.put(new Object(), null);
fail();
} catch (NullPointerException ex) {}
try {
map.put(null, new Object());
fail();
} catch (NullPointerException ex) {}
}
//-----------------------------------------------------------------------
public void testPurge() {
ReferenceMap map = new ReferenceMap(ReferenceMap.WEAK, ReferenceMap.WEAK);
Object[] hard = new Object[10];
@ -71,13 +95,13 @@ public class TestReferenceMap extends AbstractTestIterableMap {
hard[i] = new Object();
map.put(hard[i], new Object());
}
System.gc();
gc();
assertTrue("map should be empty after purge of weak values", map.isEmpty());
for (int i = 0; i < hard.length; i++) {
map.put(new Object(), hard[i]);
}
System.gc();
gc();
assertTrue("map should be empty after purge of weak keys", map.isEmpty());
for (int i = 0; i < hard.length; i++) {
@ -85,7 +109,7 @@ public class TestReferenceMap extends AbstractTestIterableMap {
map.put(hard[i], new Object());
}
System.gc();
gc();
assertTrue("map should be empty after purge of weak keys and values", map.isEmpty());
}
@ -96,7 +120,7 @@ public class TestReferenceMap extends AbstractTestIterableMap {
map.put(new Integer(i), new Integer(i));
}
System.gc();
gc();
for (int i = 0; i < 10; i++) {
Integer I = new Integer(i);
assertTrue("map.containsKey should return false for GC'd element", !map.containsKey(I));
@ -114,7 +138,7 @@ public class TestReferenceMap extends AbstractTestIterableMap {
map.put(hard[i], hard[i]);
}
System.gc();
gc();
Iterator iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry)iterator.next();
@ -135,7 +159,7 @@ public class TestReferenceMap extends AbstractTestIterableMap {
map.put(hard[i], hard[i]);
}
System.gc();
gc();
MapIterator iterator = map.mapIterator();
while (iterator.hasNext()) {
Object key1 = iterator.next();
@ -160,7 +184,7 @@ public class TestReferenceMap extends AbstractTestIterableMap {
MapIterator iterator = map.mapIterator();
while (iterator.hasNext()) {
Object key1 = iterator.next();
System.gc();
gc();
Integer key = (Integer) iterator.getKey();
Integer value = (Integer) iterator.getValue();
assertTrue("iterator keys should match", key == key1);
@ -170,23 +194,6 @@ public class TestReferenceMap extends AbstractTestIterableMap {
}
*/
/*
// Uncomment to create test files in /data/test
public void testCreateTestFiles() throws Exception {
ReferenceMap m = (ReferenceMap)makeEmptyMap();
writeExternalFormToDisk(m, getCanonicalEmptyCollectionName(m));
m = (ReferenceMap)makeFullMap();
writeExternalFormToDisk(m, getCanonicalFullCollectionName(m));
}
*/
public String getCompatibilityVersion() {
return "3.1";
}
/** Tests whether purge values setting works */
public void testPurgeValues() throws Exception {
// many thanks to Juozas Baliuka for suggesting this method
@ -227,4 +234,15 @@ public class TestReferenceMap extends AbstractTestIterableMap {
}
}
}
private static void gc() {
try {
// trigger GC
byte[][] tooLarge = new byte[1000000000][1000000000];
fail("you have too much RAM");
} catch (OutOfMemoryError ex) {
System.gc(); // ignore
}
}
}