package edu.berkeley.cs.nlp.ocular.util;
import static edu.berkeley.cs.nlp.ocular.util.Tuple2.Tuple2;
import static java.util.Arrays.asList;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.junit.Test;
/**
* @author Dan Garrette (dhgarrette@gmail.com)
*/
public class CollectionHelperTests {
@Test
public void test_map1() {
Map<String, Integer> m1 = CollectionHelper.map1("two", 2);
assertEquals(1, m1.size());
assertEquals(Integer.valueOf(2), m1.get("two"));
assertNull(m1.get("three"));
}
@Test
public void test_makeMap() {
Tuple2<String, Integer> t1 = Tuple2("one", 21);
Tuple2<String, Integer> t2 = Tuple2("two", 22);
Tuple2<String, Integer> t3 = Tuple2("three", 23);
Map<String, Integer> m0 = CollectionHelper.makeMap();
assertEquals(0, m0.size());
assertNull(m0.get("four"));
Map<String, Integer> m1 = CollectionHelper.makeMap(t1);
assertEquals(1, m1.size());
assertEquals(Integer.valueOf(21), m1.get("one"));
assertNull(m1.get("four"));
Map<String, Integer> m2 = CollectionHelper.makeMap(t1, t2);
assertEquals(2, m2.size());
assertEquals(Integer.valueOf(21), m2.get("one"));
assertEquals(Integer.valueOf(22), m2.get("two"));
assertNull(m2.get("four"));
Map<String, Integer> m3 = CollectionHelper.makeMap(t1, t2, t3);
assertEquals(3, m3.size());
assertEquals(Integer.valueOf(21), m3.get("one"));
assertEquals(Integer.valueOf(22), m3.get("two"));
assertEquals(Integer.valueOf(23), m3.get("three"));
assertNull(m3.get("four"));
}
@Test
public void test_Map_getOrElse() {
Tuple2<String, Integer> t1 = Tuple2("one", 21);
Tuple2<String, Integer> t2 = Tuple2("two", 22);
Map<String, Integer> m2 = CollectionHelper.makeMap(t1, t2);
assertEquals(2, m2.size());
assertEquals(Integer.valueOf(21), m2.get("one"));
assertEquals(Integer.valueOf(22), m2.get("two"));
assertNull(m2.get("four"));
assertEquals(Integer.valueOf(21), CollectionHelper.getOrElse(m2, "one", Integer.valueOf(131)));
assertEquals(Integer.valueOf(22), CollectionHelper.getOrElse(m2, "two", Integer.valueOf(132)));
assertEquals(Integer.valueOf(134), CollectionHelper.getOrElse(m2, "four", Integer.valueOf(134)));
}
@Test
public void test_makeSet_collection() {
Set<String> m0 = CollectionHelper.makeSet(new ArrayList<String>());
assertEquals(0, m0.size());
assertFalse(m0.contains("four"));
Set<String> m1 = CollectionHelper.makeSet(Arrays.asList("one"));
assertEquals(1, m1.size());
assertTrue(m1.contains("one"));
assertFalse(m1.contains("four"));
Set<String> m2 = CollectionHelper.makeSet(Arrays.asList("one", "two"));
assertEquals(2, m2.size());
assertTrue(m2.contains("one"));
assertTrue(m2.contains("two"));
assertFalse(m2.contains("four"));
Set<String> m3 = CollectionHelper.makeSet(Arrays.asList("one", "two", "three"));
assertEquals(3, m3.size());
assertTrue(m3.contains("one"));
assertTrue(m3.contains("two"));
assertTrue(m3.contains("three"));
assertFalse(m3.contains("four"));
Set<String> m3b = CollectionHelper.makeSet(Arrays.asList("one", "two", "three", "two"));
assertEquals(3, m3b.size());
assertTrue(m3b.contains("one"));
assertTrue(m3b.contains("two"));
assertTrue(m3b.contains("three"));
assertFalse(m3b.contains("four"));
}
@Test
public void test_makeSet_varargs() {
Set<String> m0 = CollectionHelper.makeSet();
assertEquals(0, m0.size());
assertFalse(m0.contains("four"));
Set<String> m1 = CollectionHelper.makeSet("one");
assertEquals(1, m1.size());
assertTrue(m1.contains("one"));
assertFalse(m1.contains("four"));
Set<String> m2 = CollectionHelper.makeSet("one", "two");
assertEquals(2, m2.size());
assertTrue(m2.contains("one"));
assertTrue(m2.contains("two"));
assertFalse(m2.contains("four"));
Set<String> m3 = CollectionHelper.makeSet("one", "two", "three");
assertEquals(3, m3.size());
assertTrue(m3.contains("one"));
assertTrue(m3.contains("two"));
assertTrue(m3.contains("three"));
assertFalse(m3.contains("four"));
Set<String> m3b = CollectionHelper.makeSet("one", "two", "three", "two");
assertEquals(3, m3b.size());
assertTrue(m3b.contains("one"));
assertTrue(m3b.contains("two"));
assertTrue(m3b.contains("three"));
assertFalse(m3b.contains("four"));
}
@Test
public void test_setUnion() {
Set<String> s1 = CollectionHelper.makeSet("one", "two", "three");
Set<String> s2 = CollectionHelper.makeSet("two", "three", "four");
Set<String> su = CollectionHelper.setUnion(s1, s2);
assertEquals(4, su.size());
assertTrue(su.contains("one"));
assertTrue(su.contains("two"));
assertTrue(su.contains("three"));
assertTrue(su.contains("four"));
assertFalse(su.contains("five"));
}
@Test
public void test_setIntersection() {
Set<String> s1 = CollectionHelper.makeSet("one", "two", "three");
Set<String> s2 = CollectionHelper.makeSet("two", "three", "four");
Set<String> su = CollectionHelper.setIntersection(s1, s2);
assertEquals(2, su.size());
assertFalse(su.contains("one"));
assertTrue(su.contains("two"));
assertTrue(su.contains("three"));
assertFalse(su.contains("four"));
assertFalse(su.contains("five"));
}
@Test
public void test_setDiff() {
Set<String> s1 = CollectionHelper.makeSet("zero", "one", "two", "three");
Set<String> s2 = CollectionHelper.makeSet("two", "three", "four");
Set<String> su = CollectionHelper.setDiff(s1, s2);
assertEquals(2, su.size());
assertTrue(su.contains("zero"));
assertTrue(su.contains("one"));
assertFalse(su.contains("two"));
assertFalse(su.contains("three"));
assertFalse(su.contains("four"));
assertFalse(su.contains("five"));
}
@Test
public void test_makeList_collection() {
List<String> l1 = CollectionHelper.makeList(CollectionHelper.makeSet("one", "two", "three"));
assertEquals(3, l1.size());
assertTrue(l1.contains("one"));
assertTrue(l1.contains("two"));
assertTrue(l1.contains("three"));
assertFalse(l1.contains("four"));
}
@Test
public void test_makeList_varargs() {
List<String> l1 = CollectionHelper.makeList("one", "two", "three");
assertEquals(3, l1.size());
assertEquals("one", l1.get(0));
assertEquals("two", l1.get(1));
assertEquals("three", l1.get(2));
}
@Test
public void test_fillList() {
List<String> l1 = CollectionHelper.fillList(3, "one");
assertEquals(3, l1.size());
assertEquals("one", l1.get(0));
assertEquals("one", l1.get(1));
assertEquals("one", l1.get(2));
}
@Test
public void test_listCat() {
List<String> l0 = CollectionHelper.listCat();
assertEquals(0, l0.size());
List<String> l1 = CollectionHelper.listCat(Arrays.asList("one", "two", "three"));
assertEquals(3, l1.size());
assertEquals("one", l1.get(0));
assertEquals("two", l1.get(1));
assertEquals("three", l1.get(2));
List<String> l2 = CollectionHelper.listCat(Arrays.asList("one", "two", "three"), Arrays.<String>asList(), Arrays.asList("four", "five"));
assertEquals(5, l2.size());
assertEquals("one", l2.get(0));
assertEquals("two", l2.get(1));
assertEquals("three", l2.get(2));
assertEquals("four", l2.get(3));
assertEquals("five", l2.get(4));
}
@Test
public void test_sliding() {
Iterator<List<String>> s1 = CollectionHelper.sliding(Arrays.asList("one", "two", "three", "four", "five"), 3);
assertTrue(s1.hasNext());
List<String> s10 = s1.next();
assertEquals(3, s10.size());
assertEquals("one", s10.get(0));
assertEquals("two", s10.get(1));
assertEquals("three", s10.get(2));
assertTrue(s1.hasNext());
List<String> s11 = s1.next();
assertEquals(3, s11.size());
assertEquals("two", s11.get(0));
assertEquals("three", s11.get(1));
assertEquals("four", s11.get(2));
assertTrue(s1.hasNext());
List<String> s12 = s1.next();
assertEquals(3, s12.size());
assertEquals("three", s12.get(0));
assertEquals("four", s12.get(1));
assertEquals("five", s12.get(2));
assertFalse(s1.hasNext());
Iterator<List<String>> s2 = CollectionHelper.sliding(Arrays.asList("one", "two"), 3);
assertFalse(s2.hasNext());
}
@Test
public void test_List_take() {
{
List<String> l1 = CollectionHelper.take(Arrays.asList("one", "two", "three", "four", "five"), 3);
assertEquals(3, l1.size());
assertEquals("one", l1.get(0));
assertEquals("two", l1.get(1));
assertEquals("three", l1.get(2));
}
{
List<String> l1 = CollectionHelper.take(Arrays.asList("one", "two", "three", "four", "five"), 5);
assertEquals(5, l1.size());
assertEquals("one", l1.get(0));
assertEquals("two", l1.get(1));
assertEquals("three", l1.get(2));
assertEquals("four", l1.get(3));
assertEquals("five", l1.get(4));
}
{
List<String> l1 = CollectionHelper.take(Arrays.asList("one", "two", "three", "four", "five"), 7);
assertEquals(5, l1.size());
assertEquals("one", l1.get(0));
assertEquals("two", l1.get(1));
assertEquals("three", l1.get(2));
assertEquals("four", l1.get(3));
assertEquals("five", l1.get(4));
}
{
List<String> l1 = CollectionHelper.take(Arrays.asList("one", "two", "three", "four", "five"), 0);
assertEquals(0, l1.size());
}
}
@Test
public void test_List_takeRight() {
{
List<String> l1 = CollectionHelper.takeRight(Arrays.asList("one", "two", "three", "four", "five"), 3);
assertEquals(3, l1.size());
assertEquals("three", l1.get(0));
assertEquals("four", l1.get(1));
assertEquals("five", l1.get(2));
}
{
List<String> l1 = CollectionHelper.takeRight(Arrays.asList("one", "two", "three", "four", "five"), 5);
assertEquals(5, l1.size());
assertEquals("one", l1.get(0));
assertEquals("two", l1.get(1));
assertEquals("three", l1.get(2));
assertEquals("four", l1.get(3));
assertEquals("five", l1.get(4));
}
{
List<String> l1 = CollectionHelper.takeRight(Arrays.asList("one", "two", "three", "four", "five"), 7);
assertEquals(5, l1.size());
assertEquals("one", l1.get(0));
assertEquals("two", l1.get(1));
assertEquals("three", l1.get(2));
assertEquals("four", l1.get(3));
assertEquals("five", l1.get(4));
}
{
List<String> l1 = CollectionHelper.takeRight(Arrays.asList("one", "two", "three", "four", "five"), 0);
assertEquals(0, l1.size());
}
}
@Test
public void test_List_drop() {
{
List<String> l1 = CollectionHelper.drop(Arrays.asList("one", "two", "three", "four", "five"), 2);
assertEquals(3, l1.size());
assertEquals("three", l1.get(0));
assertEquals("four", l1.get(1));
assertEquals("five", l1.get(2));
}
{
List<String> l1 = CollectionHelper.drop(Arrays.asList("one", "two", "three", "four", "five"), 5);
assertEquals(0, l1.size());
}
{
List<String> l1 = CollectionHelper.drop(Arrays.asList("one", "two", "three", "four", "five"), 7);
assertEquals(0, l1.size());
}
{
List<String> l1 = CollectionHelper.drop(Arrays.asList("one", "two", "three", "four", "five"), 0);
assertEquals(5, l1.size());
assertEquals("one", l1.get(0));
assertEquals("two", l1.get(1));
assertEquals("three", l1.get(2));
assertEquals("four", l1.get(3));
assertEquals("five", l1.get(4));
}
}
@Test
public void test_intArrayToList() {
int[] a1 = { 4, 5, 6, 7 };
List<Integer> l1 = CollectionHelper.intArrayToList(a1);
assertEquals(4, l1.size());
assertEquals(Integer.valueOf(4), l1.get(0));
assertEquals(Integer.valueOf(5), l1.get(1));
assertEquals(Integer.valueOf(6), l1.get(2));
assertEquals(Integer.valueOf(7), l1.get(3));
}
@Test
public void test_intListToArray() {
int[] a1a = CollectionHelper.intListToArray(Arrays.asList(4, 5, 6, 7));
int[] a1b = { 4, 5, 6, 7 };
assertArrayEquals(a1b, a1a);
}
@Test
public void test_longestCommonPrefix() {
assertEquals(0, CollectionHelper.longestCommonPrefix(asList(Arrays.<Integer>asList(), Arrays.<Integer>asList())));
assertEquals(0, CollectionHelper.longestCommonPrefix(asList(Arrays.<Integer>asList(1), Arrays.<Integer>asList())));
assertEquals(0, CollectionHelper.longestCommonPrefix(asList(Arrays.<Integer>asList(), Arrays.<Integer>asList(2))));
assertEquals(0, CollectionHelper.longestCommonPrefix(asList(Arrays.<Integer>asList(1), Arrays.<Integer>asList(2))));
assertEquals(2, CollectionHelper.longestCommonPrefix(asList(Arrays.<Integer>asList(1, 2), Arrays.<Integer>asList(1, 2, 3, 4))));
assertEquals(2, CollectionHelper.longestCommonPrefix(asList(Arrays.<Integer>asList(1, 2, 3, 4), Arrays.<Integer>asList(1, 2))));
assertEquals(3, CollectionHelper.longestCommonPrefix(asList(Arrays.<Integer>asList(1, 2, 3), Arrays.<Integer>asList(1, 2, 3))));
assertEquals(2, CollectionHelper.longestCommonPrefix(asList(Arrays.<Integer>asList(1, 2, 3), Arrays.<Integer>asList(1, 2), Arrays.<Integer>asList(1, 2, 3, 4))));
}
}