Skip to content

Commit 225622c

Browse files
Fixes functionaljava#403. Add fj.data.Option.sequence*, fj.data.Option.traverse*; correct comment, distinguish between 0 and 0.
1 parent cb99e09 commit 225622c

2 files changed

Lines changed: 56 additions & 54 deletions

File tree

core/src/main/java/fj/data/Option.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ public final <B> Option<B> sequence(final Option<B> o) {
393393
}
394394

395395
/**
396-
* Sequence the given option and collect the output on the right side of an either.
396+
* Sequence the given option and collect the output on the left side of an either.
397397
*
398398
* @param option the given option
399399
* @param <R> the type of the right value
@@ -405,7 +405,7 @@ public static final <R, B> Either<Option<B>, R> sequenceEitherLeft(final Option<
405405
}
406406

407407
/**
408-
* Sequence the given option and collect the output on the left side of an either.
408+
* Sequence the given option and collect the output on the right side of an either.
409409
*
410410
* @param option the given option
411411
* @param <B> the type of the right value

core/src/test/java/fj/data/OptionTest.java

Lines changed: 54 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import static fj.data.Either.*;
1212
import static fj.data.List.*;
1313
import static fj.data.Option.sequence;
14+
import static fj.data.Option.sequenceEitherLeft;
15+
import static fj.data.Option.sequenceEitherRight;
1416
import static fj.data.Option.sequenceF;
1517
import static fj.data.Option.sequenceIO;
1618
import static fj.data.Option.sequenceList;
@@ -67,72 +69,72 @@ public void sequenceValidationTest() {
6769
@Test
6870
public void testSequenceEitherLeft() {
6971
assertEquals(left(none()), sequenceEitherLeft(none()));
70-
assertEquals(left(some("0")), sequenceEitherLeft(some(left("0"))));
71-
assertEquals(right("0"), sequenceEitherLeft(some(right("0"))));
72+
assertEquals(left(some("zero")), sequenceEitherLeft(some(left("zero"))));
73+
assertEquals(right("zero"), sequenceEitherLeft(some(right("zero"))));
7274
}
7375

7476
@Test
7577
public void testSequenceEitherRight() {
7678
assertEquals(right(none()), sequenceEitherRight(none()));
77-
assertEquals(right(some("0")), sequenceEitherRight(some(right("0"))));
78-
assertEquals(left("0"), sequenceEitherRight(some(left("0"))));
79+
assertEquals(right(some("zero")), sequenceEitherRight(some(right("zero"))));
80+
assertEquals(left("zero"), sequenceEitherRight(some(left("zero"))));
7981
}
8082

8183
@Test
8284
public void testSequenceF() {
8385
assertEquals(constant(none()).f(1), sequenceF(none()).f(1));
84-
assertEquals(constant(some("0")).f(1), sequenceF(some(constant("0"))).f(1));
86+
assertEquals(constant(some("zero")).f(1), sequenceF(some(constant("zero"))).f(1));
8587
}
8688

8789
@Test
8890
public void testSequenceIO() throws IOException {
8991
assertEquals(IOFunctions.lazy(constant(none())).run(), sequenceIO(none()).run());
90-
assertEquals(IOFunctions.lazy(constant(some("0"))).run(), sequenceIO(some(IOFunctions.lazy(constant("0")))).run());
92+
assertEquals(IOFunctions.lazy(constant(some("zero"))).run(), sequenceIO(some(IOFunctions.lazy(constant("zero")))).run());
9193
}
9294

9395
@Test
9496
public void testSequenceList() {
95-
assertEquals(List.arrayList(none()), sequenceList(none()));
97+
assertEquals(List.single(none()), sequenceList(none()));
9698
assertEquals(List.nil(), sequenceList(some(List.nil())));
97-
assertEquals(List.arrayList(some("0")), sequenceList(some(List.single("0"))));
98-
assertEquals(List.arrayList(some("0"), some("1")), sequenceList(some(List.arrayList("0", "1"))));
99+
assertEquals(List.single(some("zero")), sequenceList(some(List.single("zero"))));
100+
assertEquals(List.arrayList(some("zero"), some("one")), sequenceList(some(List.arrayList("zero", "one"))));
99101
}
100102

101103
@Test
102104
public void testSequenceOption() {
103105
assertEquals(some(none()), sequenceOption(none()));
104106
assertEquals(none(), sequenceOption(some(none())));
105-
assertEquals(some(some("0")), sequenceOption(some(some("0"))));
107+
assertEquals(some(some("zero")), sequenceOption(some(some("zero"))));
106108
}
107109

108110
@Test
109111
public void testSequenceP1() {
110112
assertEquals(p(none()), sequenceP1(none()));
111-
assertEquals(p(some("0")), sequenceP1(some(p("0"))));
113+
assertEquals(p(some("zero")), sequenceP1(some(p("zero"))));
112114
}
113115

114116
@Test
115117
public void testSequenceSeq() {
116-
assertEquals(Seq.arraySeq(none()), sequenceSeq(none()));
118+
assertEquals(Seq.single(none()), sequenceSeq(none()));
117119
assertEquals(Seq.empty(), sequenceSeq(some(Seq.empty())));
118-
assertEquals(Seq.arraySeq(some("0")), sequenceSeq(some(Seq.single("0"))));
119-
assertEquals(Seq.arraySeq(some("0"), some("1")), sequenceSeq(some(Seq.arraySeq("0", "1"))));
120+
assertEquals(Seq.single(some("zero")), sequenceSeq(some(Seq.single("zero"))));
121+
assertEquals(Seq.arraySeq(some("zero"), some("one")), sequenceSeq(some(Seq.arraySeq("zero", "one"))));
120122
}
121123

122124
@Test
123125
public void testSequenceSet() {
124126
assertEquals(Set.arraySet(optionOrd(stringOrd), none()), sequenceSet(stringOrd, none()));
125127
assertEquals(Set.empty(optionOrd(stringOrd)), sequenceSet(stringOrd, some(Set.empty(stringOrd))));
126-
assertEquals(Set.arraySet(optionOrd(stringOrd), some("0")), sequenceSet(stringOrd, some(Set.single(stringOrd, "0"))));
127-
assertEquals(Set.arraySet(optionOrd(stringOrd), some("0"), some("1")), sequenceSet(stringOrd, some(Set.arraySet(stringOrd, "0", "1"))));
128+
assertEquals(Set.arraySet(optionOrd(stringOrd), some("zero")), sequenceSet(stringOrd, some(Set.single(stringOrd, "zero"))));
129+
assertEquals(Set.arraySet(optionOrd(stringOrd), some("zero"), some("one")), sequenceSet(stringOrd, some(Set.arraySet(stringOrd, "zero", "one"))));
128130
}
129131

130132
@Test
131133
public void testSequenceStream() {
132-
assertEquals(Stream.arrayStream(none()), sequenceStream(none()));
134+
assertEquals(Stream.single(none()), sequenceStream(none()));
133135
assertEquals(Stream.nil(), sequenceStream(some(Stream.nil())));
134-
assertEquals(Stream.arrayStream(some("0")), sequenceStream(some(Stream.single("0"))));
135-
assertEquals(Stream.arrayStream(some("0"), some("1")), sequenceStream(some(Stream.arrayStream("0", "1"))));
136+
assertEquals(Stream.single(some("zero")), sequenceStream(some(Stream.single("zero"))));
137+
assertEquals(Stream.arrayStream(some("zero"), some("one")), sequenceStream(some(Stream.arrayStream("zero", "one"))));
136138
}
137139

138140
@Test
@@ -151,96 +153,96 @@ public void testSequenceValidation() {
151153
@Test
152154
public void testTraverseEitherLeft() {
153155
assertEquals(left(none()), none().traverseEitherLeft(constant(left(0))));
154-
assertEquals(left(some(0)), some("0").traverseEitherLeft(constant(left(0))));
156+
assertEquals(left(some(0)), some("zero").traverseEitherLeft(constant(left(0))));
155157
assertEquals(left(none()), none().traverseEitherLeft(constant(right(0))));
156-
assertEquals(right(0), some("0").traverseEitherLeft(constant(right(0))));
158+
assertEquals(right(0), some("zero").traverseEitherLeft(constant(right(0))));
157159
}
158160

159161
@Test
160162
public void testTraverseEitherRight() {
161163
assertEquals(right(none()), none().traverseEitherRight(constant(right(0))));
162-
assertEquals(right(some(0)), some("0").traverseEitherRight(constant(right(0))));
164+
assertEquals(right(some(0)), some("zero").traverseEitherRight(constant(right(0))));
163165
assertEquals(right(none()), none().traverseEitherRight(constant(left(0))));
164-
assertEquals(left(0), some("0").traverseEitherRight(constant(left(0))));
166+
assertEquals(left(0), some("zero").traverseEitherRight(constant(left(0))));
165167
}
166168

167169
@Test
168170
public void testTraverseF() {
169171
assertEquals(constant(none()).f(1), none().traverseF(constant(constant(0))).f(1));
170-
assertEquals(constant(some(0)).f(1), some("0").traverseF(constant(constant(0))).f(1));
172+
assertEquals(constant(some(0)).f(1), some("zero").traverseF(constant(constant(0))).f(1));
171173
}
172174

173175
@Test
174176
public void testTraverseIO() throws IOException {
175177
assertEquals(IOFunctions.lazy(constant(none())).run(), none().traverseIO(constant(IOFunctions.lazy(constant(0)))).run());
176-
assertEquals(IOFunctions.lazy(constant(some(0))).run(), some("0").traverseIO(constant(IOFunctions.lazy(constant(0)))).run());
178+
assertEquals(IOFunctions.lazy(constant(some(0))).run(), some("zero").traverseIO(constant(IOFunctions.lazy(constant(0)))).run());
177179
}
178180

179181
@Test
180182
public void testTraverseList() {
181-
assertEquals(List.arrayList(none()), none().traverseList(constant(List.nil())));
182-
assertEquals(List.nil(), some("0").traverseList(constant(List.nil())));
183-
assertEquals(List.arrayList(none()), none().traverseList(constant(List.single(0))));
184-
assertEquals(List.arrayList(some(0)), some("0").traverseList(constant(List.single(0))));
185-
assertEquals(List.arrayList(none()), none().traverseList(constant(List.arrayList(0, 1))));
186-
assertEquals(List.arrayList(some(0), some(1)), some("0").traverseList(constant(List.arrayList(0, 1))));
183+
assertEquals(List.single(none()), none().traverseList(constant(List.nil())));
184+
assertEquals(List.nil(), some("zero").traverseList(constant(List.nil())));
185+
assertEquals(List.single(none()), none().traverseList(constant(List.single(0))));
186+
assertEquals(List.single(some(0)), some("zero").traverseList(constant(List.single(0))));
187+
assertEquals(List.single(none()), none().traverseList(constant(List.arrayList(0, 1))));
188+
assertEquals(List.arrayList(some(0), some(1)), some("zero").traverseList(constant(List.arrayList(0, 1))));
187189
}
188190

189191
@Test
190192
public void testTraverseOption() {
191193
assertEquals(some(none()), none().traverseOption(constant(none())));
192-
assertEquals(none(), some("0").traverseOption(constant(none())));
194+
assertEquals(none(), some("zero").traverseOption(constant(none())));
193195
assertEquals(some(none()), none().traverseOption(constant(some(0))));
194-
assertEquals(some(some(0)), some("0").traverseOption(constant(some(0))));
196+
assertEquals(some(some(0)), some("zero").traverseOption(constant(some(0))));
195197
}
196198

197199
@Test
198200
public void testTraverseP1() {
199201
assertEquals(p(none()), none().traverseP1(constant(p(0))));
200-
assertEquals(p(some(0)), some("0").traverseP1(constant(p(0))));
202+
assertEquals(p(some(0)), some("zero").traverseP1(constant(p(0))));
201203
}
202204

203205
@Test
204206
public void testTraverseSeq() {
205-
assertEquals(Seq.arraySeq(none()), none().traverseSeq(constant(Seq.empty())));
206-
assertEquals(Seq.empty(), some("0").traverseSeq(constant(Seq.empty())));
207-
assertEquals(Seq.arraySeq(none()), none().traverseSeq(constant(Seq.single(0))));
208-
assertEquals(Seq.arraySeq(some(0)), some("0").traverseSeq(constant(Seq.single(0))));
209-
assertEquals(Seq.arraySeq(none()), none().traverseSeq(constant(Seq.arraySeq(0, 1))));
210-
assertEquals(Seq.arraySeq(some(0), some(1)), some("0").traverseSeq(constant(Seq.arraySeq(0, 1))));
207+
assertEquals(Seq.single(none()), none().traverseSeq(constant(Seq.empty())));
208+
assertEquals(Seq.empty(), some("zero").traverseSeq(constant(Seq.empty())));
209+
assertEquals(Seq.single(none()), none().traverseSeq(constant(Seq.single(0))));
210+
assertEquals(Seq.single(some(0)), some("zero").traverseSeq(constant(Seq.single(0))));
211+
assertEquals(Seq.single(none()), none().traverseSeq(constant(Seq.arraySeq(0, 1))));
212+
assertEquals(Seq.arraySeq(some(0), some(1)), some("zero").traverseSeq(constant(Seq.arraySeq(0, 1))));
211213
}
212214

213215
@Test
214216
public void testTraverseSet() {
215217
assertEquals(Set.arraySet(optionOrd(intOrd), none()), none().traverseSet(intOrd, constant(Set.empty(intOrd))));
216-
assertEquals(Set.empty(optionOrd(intOrd)), some("0").traverseSet(intOrd, constant(Set.empty(intOrd))));
218+
assertEquals(Set.empty(optionOrd(intOrd)), some("zero").traverseSet(intOrd, constant(Set.empty(intOrd))));
217219
assertEquals(Set.arraySet(optionOrd(intOrd), none()), none().traverseSet(intOrd, constant(Set.single(intOrd, 0))));
218-
assertEquals(Set.arraySet(optionOrd(intOrd), some(0)), some("0").traverseSet(intOrd, constant(Set.single(intOrd, 0))));
220+
assertEquals(Set.arraySet(optionOrd(intOrd), some(0)), some("zero").traverseSet(intOrd, constant(Set.single(intOrd, 0))));
219221
assertEquals(Set.arraySet(optionOrd(intOrd), none()), none().traverseSet(intOrd, constant(Set.arraySet(intOrd, 0, 1))));
220-
assertEquals(Set.arraySet(optionOrd(intOrd), some(0), some(1)), some("0").traverseSet(intOrd, constant(Set.arraySet(intOrd, 0, 1))));
222+
assertEquals(Set.arraySet(optionOrd(intOrd), some(0), some(1)), some("zero").traverseSet(intOrd, constant(Set.arraySet(intOrd, 0, 1))));
221223
}
222224

223225
@Test
224226
public void testTraverseStream() {
225-
assertEquals(Stream.arrayStream(none()), none().traverseStream(constant(Stream.nil())));
226-
assertEquals(Stream.nil(), some("0").traverseStream(constant(Stream.nil())));
227-
assertEquals(Stream.arrayStream(none()), none().traverseStream(constant(Stream.single(0))));
228-
assertEquals(Stream.arrayStream(some(0)), some("0").traverseStream(constant(Stream.single(0))));
229-
assertEquals(Stream.arrayStream(none()), none().traverseStream(constant(Stream.arrayStream(0, 1))));
230-
assertEquals(Stream.arrayStream(some(0), some(1)), some("0").traverseStream(constant(Stream.arrayStream(0, 1))));
227+
assertEquals(Stream.single(none()), none().traverseStream(constant(Stream.nil())));
228+
assertEquals(Stream.nil(), some("zero").traverseStream(constant(Stream.nil())));
229+
assertEquals(Stream.single(none()), none().traverseStream(constant(Stream.single(0))));
230+
assertEquals(Stream.single(some(0)), some("zero").traverseStream(constant(Stream.single(0))));
231+
assertEquals(Stream.single(none()), none().traverseStream(constant(Stream.arrayStream(0, 1))));
232+
assertEquals(Stream.arrayStream(some(0), some(1)), some("zero").traverseStream(constant(Stream.arrayStream(0, 1))));
231233
}
232234

233235
@Test
234236
public void testTraverseTrampoline() {
235237
assertEquals(Trampoline.pure(none()).run(), none().traverseTrampoline(constant(Trampoline.pure(0))).run());
236-
assertEquals(Trampoline.pure(some(0)).run(), some("0").traverseTrampoline(constant(Trampoline.pure(0))).run());
238+
assertEquals(Trampoline.pure(some(0)).run(), some("zero").traverseTrampoline(constant(Trampoline.pure(0))).run());
237239
}
238240

239241
@Test
240242
public void testTraverseValidation() {
241243
assertEquals(success(none()), none().traverseValidation(constant(Validation.fail(0))));
242-
assertEquals(fail(0), some("0").traverseValidation(constant(Validation.fail(0))));
244+
assertEquals(fail(0), some("zero").traverseValidation(constant(Validation.fail(0))));
243245
assertEquals(success(none()), none().traverseValidation(constant(Validation.success(0))));
244-
assertEquals(success(some(0)), some("0").traverseValidation(constant(Validation.success(0))));
246+
assertEquals(success(some(0)), some("zero").traverseValidation(constant(Validation.success(0))));
245247
}
246248
}

0 commit comments

Comments
 (0)