Skip to content

Commit 2e8bb52

Browse files
committed
Chapter 12 tests and exercises
1 parent 09a070f commit 2e8bb52

73 files changed

Lines changed: 1507 additions & 521 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

fpinjava-parent/fpinjava-state-exercises/src/main/java/com/fpinjava/state/State.java

Lines changed: 0 additions & 5 deletions
This file was deleted.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.fpinjava.state.exercise12_01;
2+
3+
4+
import com.fpinjava.common.Tuple;
5+
6+
public class Generator {
7+
8+
public static Tuple<Integer, RNG> integer(RNG rng) {
9+
return rng.nextInt();
10+
}
11+
12+
public static Tuple<Integer, RNG> integer(RNG rng, int limit) {
13+
throw new IllegalStateException("To be implemented");
14+
}
15+
}

fpinjava-parent/fpinjava-state-solutions/src/main/java/com/fpinjava/state/exercise12_10_/JavaRNG.java renamed to fpinjava-parent/fpinjava-state-exercises/src/main/java/com/fpinjava/state/exercise12_01/JavaRNG.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.fpinjava.state.exercise12_10_;
1+
package com.fpinjava.state.exercise12_01;
22

33
import com.fpinjava.common.Tuple;
44

fpinjava-parent/fpinjava-state-solutions/src/main/java/com/fpinjava/state/exercise12_03_/RNG.java renamed to fpinjava-parent/fpinjava-state-exercises/src/main/java/com/fpinjava/state/exercise12_01/RNG.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.fpinjava.state.exercise12_03_;
1+
package com.fpinjava.state.exercise12_01;
22

33

44
import com.fpinjava.common.Tuple;
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.fpinjava.state.exercise12_02;
2+
3+
4+
import com.fpinjava.common.List;
5+
import com.fpinjava.common.Tuple;
6+
7+
public class Generator {
8+
9+
public static Tuple<Integer, RNG> integer(RNG rng) {
10+
return rng.nextInt();
11+
}
12+
13+
public static Tuple<Integer, RNG> integer(RNG rng, int limit) {
14+
Tuple<Integer, RNG> random = rng.nextInt();
15+
return new Tuple<>(Math.abs(random._1 % limit), random._2);
16+
}
17+
18+
public static Tuple<List<Integer>, RNG> integers(RNG rng, int length) {
19+
throw new IllegalStateException("To be implemented");
20+
}
21+
}

fpinjava-parent/fpinjava-state-solutions/src/main/java/com/fpinjava/state/exercise12_03_/JavaRNG.java renamed to fpinjava-parent/fpinjava-state-exercises/src/main/java/com/fpinjava/state/exercise12_02/JavaRNG.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.fpinjava.state.exercise12_03_;
1+
package com.fpinjava.state.exercise12_02;
22

33
import com.fpinjava.common.Tuple;
44

fpinjava-parent/fpinjava-state-solutions/src/main/java/com/fpinjava/state/exercise12_10_/RNG.java renamed to fpinjava-parent/fpinjava-state-exercises/src/main/java/com/fpinjava/state/exercise12_02/RNG.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.fpinjava.state.exercise12_10_;
1+
package com.fpinjava.state.exercise12_02;
22

33

44
import com.fpinjava.common.Tuple;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.fpinjava.state.exercise12_03;
2+
3+
import com.fpinjava.common.Tuple;
4+
5+
import java.util.Random;
6+
7+
public class JavaRNG implements RNG {
8+
9+
private final Random random;
10+
11+
private JavaRNG(long seed) {
12+
this.random = new Random(seed);
13+
}
14+
15+
private JavaRNG() {
16+
this.random = new Random();
17+
}
18+
19+
@Override
20+
public Tuple<Integer, RNG> nextInt() {
21+
return new Tuple<>(random.nextInt(), this);
22+
}
23+
24+
public static RNG rng(long seed) {
25+
return new JavaRNG(seed);
26+
}
27+
28+
public static RNG rng() {
29+
return new JavaRNG();
30+
}
31+
}

fpinjava-parent/fpinjava-state-solutions/src/main/java/com/fpinjava/state/exercise12_04_/RNG.java renamed to fpinjava-parent/fpinjava-state-exercises/src/main/java/com/fpinjava/state/exercise12_03/RNG.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
package com.fpinjava.state.exercise12_04_;
1+
package com.fpinjava.state.exercise12_03;
22

33

44
import com.fpinjava.common.Tuple;
55

66
public interface RNG {
77
Tuple<Integer, RNG> nextInt();
8-
int limit();
9-
int length();
108
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.fpinjava.state.exercise12_03;
2+
3+
4+
import com.fpinjava.common.Function;
5+
import com.fpinjava.common.Tuple;
6+
7+
public interface Random<A> extends Function<RNG, Tuple<A, RNG>> {
8+
9+
static <A> Random<A> unit(A a) {
10+
return rng -> new Tuple<>(a, rng);
11+
}
12+
13+
static <A, B> Random<B> map(Random<A> s, Function<A, B> f) {
14+
return rng -> {
15+
Tuple<A, RNG> t = s.apply(rng);
16+
return new Tuple<>(f.apply(t._1), t._2);
17+
};
18+
}
19+
20+
Random<Integer> intRnd = RNG::nextInt;
21+
22+
Random<Boolean> booleanRnd = null; // To be implemented
23+
}

0 commit comments

Comments
 (0)