/**
* OSM2ShareNav
*
* Copyright (C) 2008 Kai Krueger
*/
package net.sharenav.osmToShareNav;
import java.util.Iterator;
import java.util.Random;
import junit.framework.TestCase;
import net.sharenav.osmToShareNav.LongArrayMap;
/**
*
*
*/
public class LongArrayMapTest extends TestCase {
private long [] entries;
/**
* @param name
*/
public LongArrayMapTest(String name) {
super(name);
}
private void genEntries() {
Random r = new Random();
entries = new long [5000];
int idx = 0;
long val = r.nextInt();
for (int i = 0; i < 50; i++) {
val += (r.nextInt(10000) + 1);
entries[idx++] = val++;
for (int j = 0; j < 99; j++) {
entries[idx++] = val++;
}
}
}
private LongArrayMap<Long, Long> populateLAM() {
System.out.println("Populating LAM");
LongArrayMap<Long, Long> lam = new LongArrayMap<Long, Long>(100);
genEntries();
for (int i = 0; i < entries.length; i++) {
try {
lam.put(new Long(entries[i]), new Long(entries[i]));
} catch (Exception e) {
e.printStackTrace();
fail("Failed to populate entry " + entries[i]);
}
}
return lam;
}
/* (non-Javadoc)
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception {
super.setUp();
}
/* (non-Javadoc)
* @see junit.framework.TestCase#tearDown()
*/
protected void tearDown() throws Exception {
super.tearDown();
}
/**
* Test method for {@link net.sharenav.osmToShareNav.LongArrayMap#put(java.lang.Object, java.lang.Object)}.
*/
public void testPut() {
System.out.println("Testing Put");
LongArrayMap<Long,Long> lam = new LongArrayMap<Long,Long>(100);
genEntries();
for (int i = 0; i < entries.length; i++) {
try {
lam.put(new Long(entries[i]), new Long(entries[i]));
} catch (Exception e) {
e.printStackTrace();
fail("Failed to put entry " + entries[i]);
}
}
}
/**
* Test method for {@link net.sharenav.osmToShareNav.LongArrayMap#get(java.lang.Object)}.
*/
public void testGet() {
System.out.println("Testing Get");
LongArrayMap<Long,Long> lam = populateLAM();
System.out.println("Testing getting of existing objects");
for (int i = 0; i < entries.length; i++) {
Long tmp = lam.get(new Long(entries[i]));
assertNotNull("Failed to fetch an object that should be in the Map (idx=" + i + "," + entries[i] + ")", tmp);
assertEquals(entries[i], tmp.longValue());
}
System.out.println("Testing getting of nonexisting objects");
Random r = new Random();
for (int i = 0; i < 1000; i++) {
long testV = r.nextLong();
Long tmp = lam.get(new Long(testV));
if (tmp != null) {
System.out.println("Testing getting of nonexisting objects: Object found");
boolean expected = false;
for (long l : entries) {
if (l == testV)
expected = true;
}
assertTrue(expected);
}
}
}
/**
* Test method for {@link net.sharenav.osmToShareNav.LongArrayMap#containsKey(java.lang.Object)}.
*/
public void testContainsKey() {
System.out.println("Testing Contains Key");
LongArrayMap<Long,Long> lam = populateLAM();
System.out.println("Testing of existing objects");
for (int i = 0; i < entries.length; i++) {
boolean tmp = lam.containsKey(new Long(entries[i]));
assertTrue("ContainsKey falsely said a value is not in the Map (idx=" + i + "," + entries[i] + ")" , tmp);
}
System.out.println("Testing of nonexisting objects");
Random r = new Random();
for (int i = 0; i < 1000; i++) {
long testV = r.nextLong();
boolean tmp = lam.containsKey(new Long(testV));
if (tmp != false) {
boolean expected = false;
for (long l : entries) {
if (l == testV)
expected = true;
}
assertEquals("Testing non-keys", expected, tmp);
}
}
}
/**
* Test method for {@link net.sharenav.osmToShareNav.LongArrayMap#containsValue(java.lang.Object)}.
*/
public void testContainsValue() {
System.out.println("Testing Contains Value");
LongArrayMap<Long,Long> lam = new LongArrayMap<Long,Long>(100);
genEntries();
Long [] values = new Long[entries.length];
for (int i = 0; i < entries.length; i++) {
values[i] = new Long(entries[i]);
lam.put(new Long(entries[i]), values[i]);
}
System.out.println("Testing of existing objects");
for (int i = 0; i < entries.length; i++) {
boolean tmp = lam.containsValue(values[i]);
assertTrue("ContainsValue falsely said a value is not in the Map (" + entries[i] + ")" , tmp);
}
}
/**
* Test method for {@link net.sharenav.osmToShareNav.LongArrayMap#isEmpty()}.
*/
public void testIsEmpty() {
System.out.println("Testing isEmpty");
LongArrayMap<Long,Long> lam = new LongArrayMap<Long,Long>(100);
assertTrue("A new Map should be empty.", lam.isEmpty());
genEntries();
for (int i = 0; i < entries.length; i++) {
lam.put(new Long(entries[i]), new Long(entries[i]));
}
assertFalse("After adding entries, a Map should not be empty", lam.isEmpty());
}
/**
* Test method for {@link net.sharenav.osmToShareNav.LongArrayMap#remove(java.lang.Object)}.
*/
public void testRemove() {
System.out.println("Testing Remove");
LongArrayMap<Long,Long> lam = populateLAM();
Random r = new Random();
for (int i = 0; i < entries.length; i++) {
if (r.nextInt(10) == 0) {
assertTrue("Element was not in LAM before deleting", lam.containsKey(entries[i]));
assertEquals("Failed to delete key (didn't return correct value)", entries[i], lam.remove(new Long(entries[i])).longValue());
assertFalse("Element was still in LAM after deleting", lam.containsKey(entries[i]));
}
}
}
/**
* Test method for {@link net.sharenav.osmToShareNav.LongArrayMap#size()}.
*/
public void testSize() {
System.out.println("Testing Size");
LongArrayMap<Long,Long> lam = new LongArrayMap<Long,Long>(100);
assertEquals(0,lam.size());
genEntries();
for (int i = 0; i < entries.length; i++) {
lam.put(new Long(entries[i]), new Long(entries[i]));
}
assertEquals(entries.length,lam.size());
lam.remove(new Long(entries[0]));
assertEquals("Size was not decremented after delete", entries.length - 1, lam.size());
}
/**
* Test method for {@link net.sharenav.osmToShareNav.LongArrayMap#values()}.
*/
public void testValueIterator() {
System.out.println("Testing Value iterator");
LongArrayMap<Long,Long> lam = populateLAM();
int idx = 0;
for (Long l : lam.values()) {
assertEquals("Iterator did not return the correct values for idx=" + idx, entries[idx++], l.longValue());
}
assertEquals("Iterator did not iterate through all values", entries.length, idx);
idx = 0;
for (Long l : lam.values()) {
assertEquals("Iterator on repeat did not return the correct values for idx=" + idx, entries[idx++], l.longValue());
}
assertEquals("Iterator on repeat did not iterate through all values", entries.length, idx);
}
/**
* Test method for {@link net.sharenav.osmToShareNav.LongArrayMap#values()}.
*/
public void testValueIteratorRemove() {
System.out.println("Testing Value iterator remove");
LongArrayMap<Long,Long> lam = populateLAM();
int idx = 0;
Iterator<Long> it = lam.values().iterator();
while (it.hasNext()) {
Long tmpV = it.next();
assertEquals("Iterator did not return the correct values for idx=" + idx, entries[idx++], tmpV.longValue());
assertNotNull("Object not deleted yet, should still be in LAM", lam.get(tmpV));
it.remove();
assertNull("Object was deleted, should not be in LAM anymore", lam.get(tmpV));
}
assertEquals("Iterator did not iterate through all values while deleting", entries.length,idx);
lam = populateLAM();
Random r = new Random();
boolean [] removedIdx = new boolean[entries.length];
for (int i = 0; i < entries.length; i++) {
if (r.nextInt(10) == 0) {
assertTrue("Element was not in LAM before deleting", lam.containsKey(entries[i]));
assertEquals("Failed to delete key (didn't return correct value)", entries[i], lam.remove(new Long(entries[i])).longValue());
assertFalse("Element was still in LAM after deleting", lam.containsKey(entries[i]));
removedIdx[i] = true;
} else {
removedIdx[i] = false;
}
}
for (int i = 0; i < entries.length; i++) {
Long l = lam.get(new Long(entries[i]));
assertEquals("Object was incorrectly removed", removedIdx[i], l == null);
if (l != null)
assertEquals("Key value pair does not match up", entries[i],l.longValue());
}
idx = 0;
for (Long l : lam.values()) {
while (removedIdx[idx] == true) idx++;
assertEquals("Iterator isn't working after remove for idx=" + idx, entries[idx], l.longValue());
idx++;
}
}
}