package org.springside.modules.utils.collection;
import static org.assertj.core.api.Assertions.*;
import java.util.List;
import java.util.Set;
import org.junit.Test;
import com.google.common.collect.Ordering;
public class CollectionUtilTest {
@Test
public void test() {
List<String> list1 = ListUtil.newArrayList();
List<String> list2 = ListUtil.newArrayList("a", "b", "c");
List<String> list3 = ListUtil.newArrayList("a");
Set<String> set1 = SetUtil.newSortedSet();
set1.add("a");
set1.add("b");
set1.add("c");
Set<String> set2 = SetUtil.newSortedSet();
set2.add("a");
assertThat(CollectionUtil.isEmpty(list1)).isTrue();
assertThat(CollectionUtil.isEmpty(null)).isTrue();
assertThat(CollectionUtil.isEmpty(list2)).isFalse();
assertThat(CollectionUtil.isNotEmpty(list1)).isFalse();
assertThat(CollectionUtil.isNotEmpty(null)).isFalse();
assertThat(CollectionUtil.isNotEmpty(list2)).isTrue();
assertThat(CollectionUtil.getFirst(list2)).isEqualTo("a");
assertThat(CollectionUtil.getLast(list2)).isEqualTo("c");
assertThat(CollectionUtil.getFirst(set1)).isEqualTo("a");
assertThat(CollectionUtil.getLast(set1)).isEqualTo("c");
assertThat(CollectionUtil.getFirst(list3)).isEqualTo("a");
assertThat(CollectionUtil.getLast(list3)).isEqualTo("a");
assertThat(CollectionUtil.getFirst(set2)).isEqualTo("a");
assertThat(CollectionUtil.getLast(set2)).isEqualTo("a");
assertThat(CollectionUtil.getFirst(list1)).isNull();
assertThat(CollectionUtil.getFirst(null)).isNull();
assertThat(CollectionUtil.getLast(list1)).isNull();
assertThat(CollectionUtil.getLast(null)).isNull();
}
@Test
public void minAndMax() {
List<Integer> list = ListUtil.newArrayList(4, 1, 9, 100, 20, 101, 40);
assertThat(CollectionUtil.min(list)).isEqualTo(1);
assertThat(CollectionUtil.min(list, Ordering.natural())).isEqualTo(1);
assertThat(CollectionUtil.max(list)).isEqualTo(101);
assertThat(CollectionUtil.max(list, Ordering.natural())).isEqualTo(101);
assertThat(CollectionUtil.minAndMax(list).getFirst()).isEqualTo(1);
assertThat(CollectionUtil.minAndMax(list).getSecond()).isEqualTo(101);
assertThat(CollectionUtil.minAndMax(list, Ordering.natural()).getFirst()).isEqualTo(1);
assertThat(CollectionUtil.minAndMax(list, Ordering.natural()).getSecond()).isEqualTo(101);
}
@Test
public void listCompare() {
List<String> list1 = ArrayUtil.asList("d", "a", "c", "b", "e", "i", "g");
List<String> list2 = ArrayUtil.asList("d", "a", "c", "b", "e", "i", "g");
List<String> list3 = ArrayUtil.asList("d", "c", "a", "b", "e", "i", "g");
List<String> list4 = ArrayUtil.asList("d", "a", "c", "b", "e");
List<String> list5 = ArrayUtil.asList("d", "a", "c", "b", "e", "i", "g", "x");
assertThat(CollectionUtil.elementsEqual(list1, list1)).isTrue();
assertThat(CollectionUtil.elementsEqual(list1, list2)).isTrue();
assertThat(CollectionUtil.elementsEqual(list1, list3)).isFalse();
assertThat(CollectionUtil.elementsEqual(list1, list4)).isFalse();
assertThat(CollectionUtil.elementsEqual(list1, list5)).isFalse();
}
@Test
public void topNAndBottomN() {
List<Integer> list = ArrayUtil.asList(3, 5, 7, 4, 2, 6, 9);
assertThat(CollectionUtil.topN(list, 3)).containsExactly(9,7,6);
assertThat(CollectionUtil.topN(list, 3, Ordering.natural().reverse())).containsExactly(2,3,4);
assertThat(CollectionUtil.bottomN(list, 3)).containsExactly(2,3,4);
assertThat(CollectionUtil.bottomN(list, 3, Ordering.natural().reverse())).containsExactly(9,7,6);
}
}