1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.atlassian.fugue;
17
18 import org.junit.Test;
19
20 import java.util.Arrays;
21 import java.util.List;
22 import java.util.stream.Collectors;
23
24 import static io.atlassian.fugue.Either.left;
25 import static io.atlassian.fugue.Either.right;
26 import static io.atlassian.fugue.Eithers.sequenceLeft;
27 import static io.atlassian.fugue.Eithers.sequenceRight;
28 import static org.hamcrest.Matchers.contains;
29 import static org.hamcrest.Matchers.is;
30 import static org.junit.Assert.assertThat;
31
32 @SuppressWarnings("unchecked") public class EitherSequenceTest {
33 @Test public void sequenceRights() {
34 final List<Either<Object, Integer>> eithers = Arrays.asList(right(1), right(2), right(3));
35 assertThat(sequenceRight(eithers).right().get(), contains(1, 2, 3));
36 }
37
38 @Test public void sequenceRightWithLeft() {
39 final Iterable<Either<String, Integer>> eithers = build(Build.<String, Integer> r(1), Build.<String, Integer> l("2"),
40 Build.<String, Integer> r(3));
41 assertThat(sequenceRight(eithers), is(Build.<String, Iterable<Integer>> l("2")));
42 }
43
44 @Test public void sequenceRightsCustomCollector() {
45 final List<Either<Object, Integer>> eithers = Arrays.asList(right(1), right(2), right(2), right(3));
46 assertThat(sequenceRight(eithers, Collectors.toSet()).right().get(), contains(1, 2, 3));
47 }
48
49 @Test public void sequenceLefts() {
50 final List<Either<Integer, Object>> eithers = Arrays.asList(left(1), left(2), left(3));
51 assertThat(sequenceLeft(eithers).left().get(), contains(1, 2, 3));
52 }
53
54 @Test public void sequenceLeftWithRight() {
55 final Iterable<Either<String, Integer>> eithers = build(Build.<String, Integer> l("1"), Build.<String, Integer> r(2),
56 Build.<String, Integer> l("3"));
57 assertThat(sequenceLeft(eithers), is(Build.<Iterable<String>, Integer> r(2)));
58 }
59
60 @Test public void sequenceLeftCustomCollector() {
61 final List<Either<Integer, Object>> eithers = Arrays.asList(left(1), left(2), left(2), left(3));
62 assertThat(sequenceLeft(eithers, Collectors.toSet()).left().get(), contains(1, 2, 3));
63 }
64
65 static class Build {
66 static <L, R> Either<L, R> r(final R i) {
67 return right(i);
68 }
69
70 static <L, R> Either<L, R> l(final L s) {
71 return left(s);
72 }
73 }
74
75 static <L, R> Iterable<Either<L, R>> build(final Either<L, R>... e) {
76 return Arrays.asList(e);
77 }
78 }