package com.loadimpact.util;
import org.junit.Test;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.junit.Assert.assertThat;
/**
* DESCRIPTION
*
* @author jens
*/
@SuppressWarnings("unchecked")
public class ListUtilsTest {
@Test
public void testJoin() {
List<String> input = Arrays.asList("foo", "bar", "fee");
String sep = "#";
assertThat(ListUtils.join(input,sep), is("foo#bar#fee"));
}
@Test
public void testLast() {
assertThat(ListUtils.last(Arrays.asList(1,2,3)), is(3));
assertThat(ListUtils.last(Arrays.asList("a", "b", "c")), is("c"));
assertThat(ListUtils.last(Arrays.asList(42)), is(42));
assertThat(ListUtils.last(Collections.EMPTY_LIST), nullValue());
assertThat(ListUtils.last(null), nullValue());
}
@Test
public void testMap() {
List<Integer> inputs = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> expected = Arrays.asList(1, 4, 9, 16, 25);
List<Integer> actual = ListUtils.map(inputs, new ListUtils.MapClosure<Integer, Integer>() {
public Integer eval(Integer value) {
return value * value;
}
});
assertThat(actual, is(expected));
}
enum E {
foo, bar, fee;
public final String p;
E() { this.p = "_" + name().toUpperCase(); }
}
@Test
public void testMapExtraction() {
List<String> actual = ListUtils.map(Arrays.asList(E.values()), new ListUtils.MapClosure<E, String>() {
public String eval(E value) { return value.p; }
});
List<String> expected = Arrays.asList("_FOO", "_BAR", "_FEE");
assertThat(actual, is(expected));
}
@Test
public void testReduce() {
List<Integer> input = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int actual = ListUtils.reduce(input, 0, new ListUtils.ReduceClosure<Integer, Integer>() {
public Integer eval(Integer sum, Integer value) {
return sum + value;
}
});
assertThat(actual, is(55));
}
@Test
public void testAverage() {
List<Double> target = Arrays.asList(1.0, 2.0, -10.0, 10.0, 5.0, 4.0);
// 12 / 6 = 2
assertThat(ListUtils.average(target), is(2.0));
}
@Test
public void testMedianWithOddNumbers() {
List<Integer> target = Arrays.asList(1, 2, -10, 10, 5);
// -10 1 [2] 5 10
assertThat(ListUtils.median(target), is(2));
}
@Test
public void testMedianWithEvenNumbers() {
List<Integer> target = Arrays.asList(1, 2, -10, 10, 5, 4);
// -10 1 [2 4] 5 10
assertThat(ListUtils.median(target), is(3));
}
@Test
public void testMedianWithTwoNumbers() {
List<Integer> target = Arrays.asList(-10, 10);
assertThat(ListUtils.median(target), is(0));
}
@Test
public void testMedianWithOneNumber() {
List<Integer> target = Arrays.asList(10);
assertThat(ListUtils.median(target), is(10));
}
@Test
public void testMedianWithZeroNumber() {
List<Integer> target = Arrays.asList();
assertThat(ListUtils.median(target), is(0));
}
}