package org.enumerable.lambda.enumerable; import static org.enumerable.lambda.Lambda.*; import static org.enumerable.lambda.Parameters.*; import static org.enumerable.lambda.enumerable.EnumerableArrays.*; import static org.junit.Assert.*; import java.util.List; import org.enumerable.lambda.TestBase; import org.junit.Test; public class EnumerableArraysTest extends TestBase { Integer[] oneToFive = new Integer[] { 1, 2, 3, 4, 5 }; @Test public void callsBlockOnceForEachElement() throws Exception { List<Integer> actual = list(); each(oneToFive, λ(n, actual.add(n))); assertArrayEquals(oneToFive, actual.toArray()); } @Test public void collectElementsToDifferentType() throws Exception { String[] expected = new String[] { "#1", "#2", "#3", "#4", "#5" }; Object[] actual = collect(oneToFive, λ(n, "#" + n)); assertArrayEquals(expected, actual); assertFalse(expected.getClass().equals(actual.getClass())); String[] actualStrings = collect(oneToFive, λ(n, "#" + n), String.class); assertArrayEquals(expected, actualStrings); } @Test public void collectElementsToDifferentTypeWithEmptyArray() throws Exception { String[] expected = new String[] {}; Object[] actuals = collect(new Integer[0], λ(n, "#" + n)); assertArrayEquals(expected, actuals); } @Test public void inclusiveRanges() throws Exception { assertArrayEquals(oneToFive, range(1, 5)); } @Test public void exclusiveRanges() throws Exception { assertArrayEquals(list(1, 2, 3, 4).toArray(), range(1, 5, true)); } @Test public void selectMatchingElements() throws Exception { Integer[] selected = select(oneToFive, λ(n, n % 2 == 0)); assertArrayEquals(new Integer[] { 2, 4 }, selected); } @Test public void detectFirstMatchingElement() throws Exception { assertEquals(2, (int) detect(oneToFive, λ(n, n % 2 == 0))); } @Test public void anyOnEmptyArray() throws Exception { assertFalse(any(new Integer[0], λ(n, n > 0))); } @Test public void maxReturnsLastNullForEmptyArray() throws Exception { assertNull(max(new String[0])); } @Test public void partitionArrayIntoTwoBasedOnPredicate() throws Exception { Integer[] even = { 2, 4 }; Integer[] odd = { 1, 3, 5 }; Integer[][] partition = partition(oneToFive, λ(n, n % 2 == 0)); assertArrayEquals(even, partition[0]); assertArrayEquals(odd, partition[1]); } @Test public void reverseEachEvaluatesBlockForEachElementInReverseOrder() throws Exception { List<Integer> actual = list(); reverseEach(oneToFive, λ(n, actual.add(n))); assertEquals(list(5, 4, 3, 2, 1), actual); } @Test public void zipMoreThanOneCollection() throws Exception { Integer[] array = new Integer[] { 1, 2, 3 }; Integer[] a = new Integer[] { 4, 5, 6 }; Integer[] b = new Integer[] { 7, 8, 9 }; Object[][] result = zip(array, a, b); assertArrayEquals(list(1, 4, 7).toArray(), result[0]); assertArrayEquals(list(2, 5, 8).toArray(), result[1]); assertArrayEquals(list(3, 6, 9).toArray(), result[2]); } }