package org.molgenis.util;
import com.google.common.collect.Sets;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.IntStream;
import static org.testng.Assert.*;
public class HugeMapTest
{
private HugeMap<String, String> hugeMap;
@BeforeMethod
public void beforeMethod()
{
hugeMap = new HugeMap<String, String>();
}
@AfterMethod
public void afterMethod() throws IOException
{
hugeMap.close();
}
@Test
public void clear()
{
hugeMap.put("key", "value");
hugeMap.clear();
assertTrue(hugeMap.isEmpty());
}
@Test
public void clearLarge()
{
fillToThreshold();
hugeMap.clear();
assertTrue(hugeMap.isEmpty());
}
@Test
public void containsKey()
{
hugeMap.put("key", "value");
assertTrue(hugeMap.containsKey("key"));
assertFalse(hugeMap.containsKey("value"));
}
@Test
public void containsKeyLarge()
{
fillToThreshold();
assertTrue(hugeMap.containsKey("3"));
assertFalse(hugeMap.containsKey("value"));
}
@Test
public void containsValue()
{
hugeMap.put("key", "value");
assertTrue(hugeMap.containsValue("value"));
assertFalse(hugeMap.containsValue("key"));
}
@Test
public void containsValueLarge()
{
fillToThreshold();
assertTrue(hugeMap.containsValue("3"));
assertFalse(hugeMap.containsValue("key"));
}
@Test
public void entrySet()
{
hugeMap.put("key", "value");
assertEquals(hugeMap.entrySet().size(), 1);
}
@Test
public void entrySetLarge()
{
fillToThreshold();
assertEquals(hugeMap.entrySet().size(), HugeMap.THRESHOLD);
}
@Test
public void get()
{
hugeMap.put("key", "value");
assertEquals(hugeMap.get("key"), "value");
assertNull(hugeMap.get("value"));
}
@Test
public void getLarge()
{
fillToThreshold();
assertEquals(hugeMap.get("2"), "2");
assertNull(hugeMap.get("value"));
}
@Test
public void isEmpty()
{
assertTrue(hugeMap.isEmpty());
hugeMap.put("key", "value");
assertFalse(hugeMap.isEmpty());
}
@Test
public void isEmptyLarge()
{
assertTrue(hugeMap.isEmpty());
fillToThreshold();
assertFalse(hugeMap.isEmpty());
}
@Test
public void keySet()
{
hugeMap.put("key", "value");
assertEquals(hugeMap.keySet(), Sets.newHashSet("key"));
}
@Test
public void keySetLarge()
{
fillToThreshold();
assertEquals(hugeMap.keySet().size(), HugeMap.THRESHOLD);
}
@Test
public void putAll()
{
hugeMap.putAll(Collections.singletonMap("key", "value"));
assertEquals(hugeMap.size(), 1);
}
@Test
public void putAllLarge()
{
Map<String, String> map = new HashMap<String, String>();
for (int i = 0; i < HugeMap.THRESHOLD; i++)
{
map.put(Integer.toString(i), Integer.toString(i));
}
hugeMap.putAll(map);
assertEquals(hugeMap.size(), HugeMap.THRESHOLD);
}
@Test
public void remove()
{
fillToThreshold();
assertEquals(hugeMap.remove("5"), "5");
assertEquals(hugeMap.size(), HugeMap.THRESHOLD - 1);
}
@Test
public void removeLarge()
{
hugeMap.put("test", "value");
assertEquals(hugeMap.remove("test"), "value");
assertTrue(hugeMap.isEmpty());
}
@Test
public void values()
{
hugeMap.put("key", "value");
assertEquals(hugeMap.values().size(), 1);
}
@Test
public void valuesLarge()
{
fillToThreshold();
assertEquals(hugeMap.values().size(), HugeMap.THRESHOLD);
}
private void fillToThreshold()
{
IntStream.range(0, HugeMap.THRESHOLD).mapToObj(Integer::toString).forEach(s -> hugeMap.put(s, s));
}
}