package com.linkedin.cubert.memory;
import com.linkedin.cubert.operator.cube.DimensionKey;
import com.linkedin.cubert.utils.DataGenerator;
import com.linkedin.cubert.utils.Pair;
import java.util.HashMap;
import org.testng.Assert;
import org.testng.annotations.Test;
/**
* @author Mani Parkhe
*/
public class TestCompactHashtable
{
@Test
public void testCompactHashtable()
{
CompactHashTableBase ht = new CompactHashTableBase(1, 1000);
// data structures
HashMap<Integer, Integer> value2index = new HashMap<Integer, Integer>();
DimensionKey dk = new DimensionKey(new int[] { 4 });
Pair<Integer, Boolean> indexPut, indexGet;
// manual testing
indexPut = ht.lookupOrCreateIndex(dk);
Assert.assertEquals(indexPut.getSecond().booleanValue(), true);
value2index.put(4, indexPut.getFirst().intValue());
indexGet = ht.lookupOrCreateIndex(new DimensionKey(new int[] { 4 }));
Assert.assertEquals(indexGet.getSecond().booleanValue(), false);
Assert.assertEquals(indexGet.getFirst().intValue(), value2index.get(4).intValue());
// automated testing
DataGenerator dgen = new DataGenerator();
dgen.setMAX_INT(10000);
final int size = 4000;
final int[] ints = dgen.randomInts(size);
ht.clear();
value2index.clear();
// add
for (int i : ints)
{
boolean wasInHt = value2index.containsKey(i);
dk.set(0, i);
indexPut = ht.lookupOrCreateIndex(dk);
Assert.assertEquals(wasInHt, ! indexPut.getSecond().booleanValue());
if (! wasInHt)
{
value2index.put(i, indexPut.getFirst());
}
}
// test
for (int i : ints)
{
dk.set(0, i);
indexGet = ht.lookupOrCreateIndex(dk);
Assert.assertEquals(indexGet.getSecond().booleanValue(), false);
Assert.assertEquals(indexGet.getFirst().intValue(), value2index.get(i).intValue());
}
}
}