/*
* Copyright (c) 2012.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* Author: GerdP
*/
package uk.me.parabola.mkgmap.reader.osm;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
*/
public class CustomCollectionsTest {
@Test
public void testOSMId2ObjectMap() {
testMap(new OSMId2ObjectMap<Long>(), 0L);
testMap(new OSMId2ObjectMap<Long>(), -10000L);
testMap(new OSMId2ObjectMap<Long>(), 1L << 35);
testMap(new OSMId2ObjectMap<Long>(), -1L << 35);
}
private void testMap(OSMId2ObjectMap<Long> map, long idOffset) {
for (long i = 1; i < 1000; i++) {
Long j = map.put(idOffset + i, new Long(i));
assertEquals(true, j == null);
assertEquals(map.size(), i);
}
for (long i = 1; i < 1000; i++) {
boolean b = map.containsKey(idOffset + i);
assertEquals(b, true);
}
for (long i = 1; i < 1000; i++) {
assertEquals((Long)map.get(idOffset + i), new Long(i));
}
// random read access
for (long i = 1; i < 1000; i++) {
Long key = (long) Math.max(1, (Math.random() * 1000));
assertEquals((Long)map.get(idOffset + key), key);
}
for (long i = 1000; i < 2000; i++) {
assertEquals(true, (Long)map.get(idOffset + i) == null);
}
for (long i = 1000; i < 2000; i++) {
boolean b = map.containsKey(idOffset + i);
assertEquals(b, false);
}
for (long i = 1000; i < 1200; i++) {
Long j = map.put(idOffset + i, new Long(333));
assertEquals(true, j == null);
assertEquals(map.size(), i);
}
// random read access 2
for (int i = 1; i < 1000; i++) {
Long key = 1000 + (long) (Math.random() * 200);
assertEquals((Long)map.get(idOffset + key), new Long(333));
}
for (long i = -2000; i < -1000; i++) {
assertEquals(true, map.get(idOffset + i) == null);
}
for (long i = -2000; i < -1000; i++) {
boolean b = map.containsKey(idOffset + i);
assertEquals(b, false);
}
long mapSize = map.size();
// seq. update existing records
for (int i = 1; i < 1000; i++) {
long j = map.put(idOffset + i, new Long (i+333));
assertEquals(j, i);
assertEquals(map.size(), mapSize);
}
// random read access 3, update existing entries
for (int i = 1; i < 1000; i++) {
long j = map.put(idOffset + i, new Long (i+555));
assertEquals(true, j == i+333 | j == i+555);
assertEquals(map.size(), mapSize);
}
assertEquals(true, map.get(idOffset + 123456) == null);
map.put(idOffset + 123456, (long) 999);
assertEquals((Long)map.get(idOffset + 123456), new Long(999));
map.put(idOffset + 123456, (long) 888);
assertEquals((Long)map.get(idOffset + 123456), new Long(888));
assertEquals(true, map.get(idOffset - 123456) == null);
map.put(idOffset - 123456, (long) 999);
assertEquals((Long)map.get(idOffset - 123456), new Long(999));
map.put(idOffset - 123456, (long) 888);
assertEquals((Long)map.get(idOffset - 123456), new Long(888));
map.clear();
assertEquals(map.size(), 0);
for (long i = 0; i < 100; i++){
map.put(idOffset + i, new Long(i));
}
Long old = map.remove(idOffset + 5);
assertEquals(old, new Long(5));
assertEquals(map.size(), 99);
assertEquals(true, map.get(idOffset + 5) == null);
}
}