package fj.data; import fj.Equal; import fj.P2; import org.junit.Test; import java.util.Arrays; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; /** * Created by MarkPerry on 16/01/2015. */ public class ListTest { @Test public void objectMethods() { int max = 5; List<Integer> list = List.range(1, max); assertTrue(list.equals(list)); assertTrue(list.equals(List.range(1, max))); assertFalse(list.equals(List.single(1))); assertFalse(list.equals(true)); assertFalse(list.equals(null)); assertTrue(List.list(1, 2).toString().equals("List(1,2)")); } @Test public void integration() { java.util.List<Integer> ul = Arrays.asList(1, 2, 3); List<Integer> dl = List.iterableList(ul); assertTrue(ul.equals(dl.toJavaList())); } @Test public void convertToString() { final int n = 10000; final StringBuilder expected = new StringBuilder("List("); for (int i = 0; i < n; i++) { expected.append(i); if (i < n - 1) { expected.append(','); } } expected.append(')'); assertEquals(expected.toString(), List.range(0, n).toString()); } @Test public void partition() { P2<List<Integer>, List<Integer>> p = List.range(1, 5).partition(i -> i % 2 == 0); Equal<List<Integer>> e = Equal.listEqual(Equal.intEqual); assertTrue(e.eq(p._1(), List.list(2, 4))); assertTrue(e.eq(p._2(), List.list(1, 3))); } @Test public void intersperseOverflow() { // should not overflow int n = 100000; List<Integer> list = List.replicate(n, 1).intersperse(2); String s = list.toString(); } @Test public void listReduce() { String list = List.range(1, 11).uncons((a, la) -> List.cons(a, la).toString(), ""); String expected = List.range(1, 11).toString(); assertThat(expected, equalTo(list)); } @Test public void array() { final int max = 3; Integer[] ints = new Integer[max]; for (int i = 0; i < max; i++) { ints[i] = i + 1; }; assertThat(List.range(1, max + 1).array(Integer[].class), equalTo(ints)); } }