Skip to content

Commit db7c1af

Browse files
committed
Cycle automatically deforests
1 parent db06c19 commit db7c1af

File tree

6 files changed

+42
-7
lines changed

6 files changed

+42
-7
lines changed

src/main/java/com/jnape/palatable/lambda/functions/builtin/fn1/Cycle.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.jnape.palatable.lambda.functions.builtin.fn1;
22

33
import com.jnape.palatable.lambda.functions.Fn1;
4-
import com.jnape.palatable.lambda.iteration.CyclicIterator;
4+
import com.jnape.palatable.lambda.iteration.CyclicIterable;
55

66
import static java.util.Arrays.asList;
77

@@ -20,7 +20,7 @@ private Cycle() {
2020

2121
@Override
2222
public Iterable<A> apply(Iterable<A> as) {
23-
return () -> new CyclicIterator<>(as.iterator());
23+
return new CyclicIterable<>(as);
2424
}
2525

2626
@SuppressWarnings("unchecked")
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.jnape.palatable.lambda.iteration;
2+
3+
import java.util.Iterator;
4+
5+
public final class CyclicIterable<A> implements Iterable<A> {
6+
private final Iterable<A> as;
7+
8+
public CyclicIterable(Iterable<A> as) {
9+
while (as instanceof CyclicIterable) {
10+
as = ((CyclicIterable<A>) as).as;
11+
}
12+
this.as = as;
13+
}
14+
15+
@Override
16+
public Iterator<A> iterator() {
17+
return new CyclicIterator<>(as.iterator());
18+
}
19+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.jnape.palatable.lambda.iteration;
2+
3+
import com.jnape.palatable.lambda.functions.Fn1;
4+
import com.jnape.palatable.traitor.annotations.TestTraits;
5+
import com.jnape.palatable.traitor.runners.Traits;
6+
import org.junit.runner.RunWith;
7+
import testsupport.traits.Deforesting;
8+
9+
@RunWith(Traits.class)
10+
public class CyclicIterableTest {
11+
12+
@TestTraits({Deforesting.class})
13+
public Fn1<Iterable<?>, Iterable<?>> testSubject() {
14+
return CyclicIterable::new;
15+
}
16+
}

src/test/java/com/jnape/palatable/lambda/iteration/DroppingIterableTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
import com.jnape.palatable.traitor.annotations.TestTraits;
55
import com.jnape.palatable.traitor.runners.Traits;
66
import org.junit.runner.RunWith;
7-
import testsupport.traits.NestingStackSafety;
7+
import testsupport.traits.Deforesting;
88

99
@RunWith(Traits.class)
1010
public class DroppingIterableTest {
1111

12-
@TestTraits({NestingStackSafety.class})
12+
@TestTraits({Deforesting.class})
1313
public Fn1<Iterable<?>, Iterable<?>> testSubject() {
1414
return x -> new DroppingIterable<>(1, x);
1515
}

src/test/java/com/jnape/palatable/lambda/iteration/SnocIterableTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
import com.jnape.palatable.traitor.annotations.TestTraits;
55
import com.jnape.palatable.traitor.runners.Traits;
66
import org.junit.runner.RunWith;
7-
import testsupport.traits.NestingStackSafety;
7+
import testsupport.traits.Deforesting;
88

99
@RunWith(Traits.class)
1010
public class SnocIterableTest {
1111

12-
@TestTraits({NestingStackSafety.class})
12+
@TestTraits({Deforesting.class})
1313
public Fn1<Iterable<Object>, Iterable<Object>> testSubject() {
1414
return xs -> new SnocIterable<>(1, xs);
1515
}

src/test/java/testsupport/traits/NestingStackSafety.java renamed to src/test/java/testsupport/traits/Deforesting.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import static com.jnape.palatable.lambda.functions.builtin.fn1.Repeat.repeat;
77
import static com.jnape.palatable.lambda.functions.builtin.fn3.Times.times;
88

9-
public final class NestingStackSafety implements Trait<Fn1<Iterable<?>, Iterable<?>>> {
9+
public final class Deforesting implements Trait<Fn1<Iterable<?>, Iterable<?>>> {
1010

1111
@Override
1212
public void test(Fn1<Iterable<?>, Iterable<?>> fn) {

0 commit comments

Comments
 (0)