From cdea6caa4ab3695e33f9998880d8879c620ee5a3 Mon Sep 17 00:00:00 2001 From: Miguel Gamboa Date: Fri, 30 Oct 2020 17:13:07 +0000 Subject: [PATCH] Add unit test for Bug Report in https://github.com/jayield/jayield/pull/7. Fix it according to the new approach based on tryAdvance(). --- .../java/org/jayield/advs/AdvancerList.java | 16 +++++--------- .../java/org/jayield/QueryTraverseTest.java | 22 +++++++++++++++++++ 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/jayield/advs/AdvancerList.java b/src/main/java/org/jayield/advs/AdvancerList.java index cc3455e..196d04d 100644 --- a/src/main/java/org/jayield/advs/AdvancerList.java +++ b/src/main/java/org/jayield/advs/AdvancerList.java @@ -20,29 +20,23 @@ import org.jayield.Traverser; import org.jayield.Yield; -import java.util.Iterator; import java.util.List; +import java.util.Spliterator; public class AdvancerList implements Advancer, Traverser { - private final List data; - private final Iterator current; + private final Spliterator current; public AdvancerList(List data) { - this.data = data; - this.current = data.iterator(); + this.current = data.spliterator(); } @Override public void traverse(Yield yield) { - if(!current.hasNext()) - throw new IllegalStateException("Traverser has already been operated on or closed!"); - data.forEach(yield::ret); + current.forEachRemaining(yield::ret); } @Override public boolean tryAdvance(Yield yield) { - if(!current.hasNext()) return false; - yield.ret(current.next()); - return true; + return current.tryAdvance(yield::ret); } } diff --git a/src/test/java/org/jayield/QueryTraverseTest.java b/src/test/java/org/jayield/QueryTraverseTest.java index 13701a7..d8e5f21 100644 --- a/src/test/java/org/jayield/QueryTraverseTest.java +++ b/src/test/java/org/jayield/QueryTraverseTest.java @@ -289,6 +289,28 @@ public void testReduce() { assertEquals(actual, expected); } + @Test + public void testFlatMapAndReduce() { + List> input = new ArrayList<>(); + input.add(Query.of("a")); + input.add(Query.of("b")); + input.add(Query.of("c")); + String expected = "abc"; + String actual = fromList(input).flatMap(s -> s).reduce((p, c) -> p + c).orElseThrow(); + assertEquals(actual, expected); + } + + @Test + public void testFromListFlatMapAndReduce() { + List> input = new ArrayList<>(); + input.add(fromList(List.of("a"))); + input.add(fromList(List.of("b"))); + input.add(fromList(List.of("c"))); + String expected = "abc"; + String actual = fromList(input).flatMap(s -> s).reduce((p, c) -> p + c).orElseThrow(); + assertEquals(actual, expected); + } + @Test public void testReduceOnEmpty() { String[] input = {};