1 package io.atlassian.fugue;
2
3 import org.hamcrest.Matcher;
4 import org.hamcrest.Matchers;
5 import org.junit.Test;
6
7 import java.util.Arrays;
8 import java.util.Iterator;
9
10 import static io.atlassian.fugue.Iterables.unzip;
11 import static io.atlassian.fugue.Pair.pair;
12 import static io.atlassian.fugue.Pair.zip;
13 import static org.hamcrest.Matchers.contains;
14 import static org.junit.Assert.assertThat;
15
16 public class PairsTest {
17 @Test public void zipped() {
18 final Iterable<Integer> ints = Arrays.asList(1, 2, 3);
19 final Iterable<String> strings = Arrays.asList("1", "2", "3", "4");
20 @SuppressWarnings("unchecked")
21 final Matcher<Iterable<? extends Pair<Integer, String>>> contains = contains(pair(1, "1"), pair(2, "2"), pair(3, "3"));
22 assertThat(zip(ints, strings), contains);
23 }
24
25 @Test public void zippedDiscardsLongest() {
26 final Iterable<Integer> ints = Arrays.asList(1, 2, 3, 4, 5);
27 final Iterable<String> strings = Arrays.asList("1", "2", "3");
28 assertThat(zip(ints, strings), Matchers.<Pair<Integer, String>> iterableWithSize(3));
29 }
30
31 @Test(expected = UnsupportedOperationException.class) public void zippedUnmodifiable() {
32 final Iterable<Integer> ints = Arrays.asList(1, 2, 3, 4, 5);
33 final Iterable<String> strings = Arrays.asList("1", "2", "3");
34 final Iterator<Pair<Integer, String>> zip = zip(ints, strings).iterator();
35 zip.next();
36 zip.remove();
37 }
38
39 @Test public void unzipLeft() {
40 final Iterable<Pair<Integer, String>> pairs = Arrays.asList(pair(1, "1"), pair(2, "2"), pair(3, "3"), pair(4, "4"));
41 final Pair<Iterable<Integer>, Iterable<String>> ls = unzip(pairs);
42 assertThat(ls.left(), contains(1, 2, 3, 4));
43 }
44
45 @Test public void unzipRight() {
46 final Iterable<Pair<Integer, String>> pairs = Arrays.asList(pair(1, "1"), pair(2, "2"), pair(3, "3"), pair(4, "4"));
47 final Pair<Iterable<Integer>, Iterable<String>> ls = unzip(pairs);
48 assertThat(ls.right(), contains("1", "2", "3", "4"));
49 }
50 }