package redis.clients.jedis.tests.collections;
import static org.junit.Assert.*;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
public class SetFromListTest {
private static Method method;
@BeforeClass
public static void beforeClass() throws Exception {
Class<?> clazz = Class.forName("redis.clients.jedis.BinaryJedis$SetFromList");
method = clazz.getDeclaredMethod("of", List.class);
method.setAccessible(true);
}
/**
* Instantiate SetFromList class by reflection because it is protected static inner class of
* BinaryJedis.
*/
@SuppressWarnings("unchecked")
private <E> Set<E> setFromList(List<E> list) throws Exception {
return (Set<E>) method.invoke(null, list);
}
@Test
public void setOperations() throws Exception {
// add
Set<String> cut = setFromList(new ArrayList<String>());
cut.add("A");
cut.add("B");
cut.add("A");
assertEquals(2, cut.size());
// remove
cut.remove("A");
assertEquals(1, cut.size());
cut.remove("C");
assertEquals(1, cut.size());
// contains
assertTrue(cut.contains("B"));
assertFalse(cut.contains("A"));
cut.add("C");
cut.add("D");
// containsAll
assertTrue(cut.containsAll(cut));
// retainAll
cut.retainAll(Arrays.asList("C", "D"));
assertEquals(2, cut.size());
assertTrue(cut.contains("C"));
assertTrue(cut.contains("D"));
// removeAll
cut.removeAll(Arrays.asList("C"));
assertEquals(1, cut.size());
assertTrue(cut.contains("D"));
// clear
cut.clear();
assertTrue(cut.isEmpty());
}
@Test
public void iteration() throws Exception {
List<String> list = new ArrayList<String>();
for (int i = 'a'; i <= 'z'; i++) {
list.add(String.valueOf((char) i));
}
Set<String> cut = setFromList(list);
// ordering guarantee
int i = 0;
for (String x : cut) {
assertEquals(list.get(i++), x);
}
}
@Test
public void equals() throws Exception {
Set<String> hashSet = new HashSet<String>();
for (int i = 'a'; i <= 'z'; i++) {
hashSet.add(String.valueOf((char) i));
}
Set<String> cut = setFromList(new ArrayList<String>(hashSet));
assertTrue(hashSet.equals(cut));
assertTrue(cut.equals(hashSet));
// equals with null
assertFalse(cut.equals(null));
// equals with other types
assertFalse(cut.equals(new ArrayList<String>()));
}
}