/*
* Copyright 2004-2014 H2 Group. Multiple-Licensed under the MPL 2.0,
* and the EPL 1.0 (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.test.store;
import java.util.TreeMap;
import org.h2.dev.cluster.ShardedMap;
import org.h2.test.TestBase;
/**
* Test sharded maps.
*/
public class TestShardedMap extends TestBase {
/**
* Run just this test.
*
* @param a ignored
*/
public static void main(String... a) throws Exception {
TestBase.createCaller().init().test();
}
@Override
public void test() {
testLinearSplit();
testReplication();
testOverlap();
}
private void testLinearSplit() {
ShardedMap<Integer, Integer> map = new ShardedMap<Integer, Integer>();
TreeMap<Integer, Integer> a = new TreeMap<Integer, Integer>();
TreeMap<Integer, Integer> b = new TreeMap<Integer, Integer>();
map.addMap(a, null, 5);
map.addMap(b, 5, null);
for (int i = 0; i < 10; i++) {
map.put(i, i * 10);
}
assertEquals(10, map.size());
for (int i = 0; i < 10; i++) {
assertEquals(i * 10, map.get(i).intValue());
}
assertEquals("[0, 1, 2, 3, 4]",
a.keySet().toString());
assertEquals("[5, 6, 7, 8, 9]",
b.keySet().toString());
assertEquals("[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]",
map.keySet().toString());
assertEquals(10, map.sizeAsLong());
}
private void testReplication() {
ShardedMap<Integer, Integer> map = new ShardedMap<Integer, Integer>();
TreeMap<Integer, Integer> a = new TreeMap<Integer, Integer>();
TreeMap<Integer, Integer> b = new TreeMap<Integer, Integer>();
map.addMap(a, null, null);
map.addMap(b, null, null);
for (int i = 0; i < 10; i++) {
map.put(i, i * 10);
}
assertEquals(10, map.size());
for (int i = 0; i < 10; i++) {
assertEquals(i * 10, map.get(i).intValue());
}
assertEquals("[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]",
a.keySet().toString());
assertEquals("[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]",
b.keySet().toString());
assertEquals("[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]",
map.keySet().toString());
assertEquals(10, map.sizeAsLong());
}
private void testOverlap() {
ShardedMap<Integer, Integer> map = new ShardedMap<Integer, Integer>();
TreeMap<Integer, Integer> a = new TreeMap<Integer, Integer>();
TreeMap<Integer, Integer> b = new TreeMap<Integer, Integer>();
map.addMap(a, null, 10);
map.addMap(b, 5, null);
for (int i = 0; i < 20; i++) {
map.put(i, i * 10);
}
// overlap: size is unknown
assertEquals(-1, map.size());
for (int i = 0; i < 20; i++) {
assertEquals(i * 10, map.get(i).intValue());
}
assertEquals("[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]",
a.keySet().toString());
assertEquals("[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]",
b.keySet().toString());
assertEquals(-1, map.sizeAsLong());
}
}