|
30 | 30 | import java.util.Spliterator; |
31 | 31 | import java.util.concurrent.ExecutorService; |
32 | 32 | import java.util.concurrent.Executors; |
| 33 | +import java.util.concurrent.atomic.AtomicInteger; |
33 | 34 | import java.util.function.Function; |
34 | 35 | import java.util.function.Supplier; |
35 | 36 | import java.util.stream.Collector; |
|
39 | 40 | import org.junit.jupiter.api.Disabled; |
40 | 41 | import org.junit.jupiter.api.Test; |
41 | 42 |
|
42 | | -import static io.vavr.collection.Iterator.*; |
| 43 | +import static io.vavr.collection.Iterator.concat; |
| 44 | +import static io.vavr.collection.Iterator.continually; |
| 45 | +import static io.vavr.collection.Iterator.from; |
| 46 | +import static io.vavr.collection.Iterator.iterate; |
| 47 | +import static io.vavr.collection.Iterator.narrow; |
| 48 | +import static io.vavr.collection.Iterator.rangeBy; |
| 49 | +import static io.vavr.collection.Iterator.rangeClosedBy; |
43 | 50 | import static org.assertj.core.api.Assertions.assertThatThrownBy; |
44 | 51 | import static org.junit.jupiter.api.Assertions.assertThrows; |
45 | 52 | import static org.junit.jupiter.api.Assertions.assertTimeoutPreemptively; |
@@ -716,6 +723,39 @@ public void shouldPartitionLazily() { |
716 | 723 |
|
717 | 724 | // -- unfoldRight() |
718 | 725 |
|
| 726 | + @Test |
| 727 | + void shouldUnfoldRightLazily() { |
| 728 | + AtomicInteger calls = new AtomicInteger(); |
| 729 | + |
| 730 | + Iterator<Integer> it = Iterator.unfoldRight(1, i -> { |
| 731 | + calls.incrementAndGet(); |
| 732 | + return i <= 3 ? Option.some(Tuple.of(i, i + 1)) : Option.none(); |
| 733 | + }); |
| 734 | + |
| 735 | + assertThat(calls.get()).isZero(); |
| 736 | + |
| 737 | + assertThat(it.hasNext()).isTrue(); |
| 738 | + assertThat(calls.get()).isEqualTo(1); |
| 739 | + |
| 740 | + assertThat(it.next()).isEqualTo(1); |
| 741 | + assertThat(calls.get()).isEqualTo(1); |
| 742 | + |
| 743 | + assertThat(it.hasNext()).isTrue(); |
| 744 | + assertThat(calls.get()).isEqualTo(2); |
| 745 | + |
| 746 | + assertThat(it.next()).isEqualTo(2); |
| 747 | + assertThat(calls.get()).isEqualTo(2); |
| 748 | + |
| 749 | + assertThat(it.hasNext()).isTrue(); |
| 750 | + assertThat(calls.get()).isEqualTo(3); |
| 751 | + |
| 752 | + assertThat(it.next()).isEqualTo(3); |
| 753 | + assertThat(calls.get()).isEqualTo(3); |
| 754 | + |
| 755 | + assertThat(it.hasNext()).isFalse(); |
| 756 | + assertThat(calls.get()).isEqualTo(4); |
| 757 | + } |
| 758 | + |
719 | 759 | @Test |
720 | 760 | public void shouldUnfoldRightToEmpty() { |
721 | 761 | assertThat(Iterator.unfoldRight(0, x -> Option.none())).isEqualTo(empty()); |
|
0 commit comments