summaryrefslogtreecommitdiff
path: root/chapter24/src/test
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-09-17 14:36:22 -0700
committerCliff Click <cliffc@acm.org>2026-09-17 14:36:22 -0700
commit0c99d74c85b937e5d566a7f2899d75025d9c54ea (patch)
tree9f4834d3fb1ec936fbea575d241f05a53c09336e /chapter24/src/test
parent410ee209ba1db89959f8e6be9cdaf2350e70fd27 (diff)
downloadSimple-0c99d74c85b937e5d566a7f2899d75025d9c54ea.tar.gz
Simple-0c99d74c85b937e5d566a7f2899d75025d9c54ea.zip
Get makefiles and fuzzer testing uniform across chapters
Diffstat (limited to 'chapter24/src/test')
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/FuzzerWrap.java27
-rw-r--r--chapter24/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java14
2 files changed, 35 insertions, 6 deletions
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/FuzzerWrap.java b/chapter24/src/test/java/com/seaofnodes/simple/FuzzerWrap.java
index d67b2065..b022bec9 100644
--- a/chapter24/src/test/java/com/seaofnodes/simple/FuzzerWrap.java
+++ b/chapter24/src/test/java/com/seaofnodes/simple/FuzzerWrap.java
@@ -7,15 +7,30 @@ import org.junit.Test;
import static org.junit.Assert.assertTrue;
/**
- * To use the fuzzer run the <code>fuzzPeeps</code> methods.
- * This can be done from IntelliJ Gui or remove the `@Ignore` annotation and start the test case from the command line
- * via <code>mvn clean test -Dtest=com.seaofnodes.simple.Fuzzer08Test#fuzzPeeps</code>
+ * Normal tests run chapter-local regression seeds. Open failures and exploratory
+ * fuzzing are opt-in (run directly in the IDE or temporarily remove Ignore).
+ * Seeds depend on this chapter's generator; do not copy them between chapters.
*/
public class FuzzerWrap {
+ private static final long[] REGRESSION_SEEDS = {
+ };
+
+ private static final long[] OPEN_FAILING_SEEDS = {
+ };
+
+ @Test public void fuzzPeepsRegression () { fuzzPeepsSeeds(REGRESSION_SEEDS); }
+ @Test @Ignore public void fuzzPeepsOpenFailures() { fuzzPeepsSeeds(OPEN_FAILING_SEEDS); }
+
+ private static void fuzzPeepsSeeds(long... seeds) {
+ var fuzzer = new Fuzzer();
+ for (long seed : seeds)
+ fuzzer.fuzzPeepsRegression(seed);
+ }
+
@Ignore
@Test
- public void fuzzPeeps() {
+ public void fuzzPeepsLarge() {
var fuzzer = new Fuzzer();
for (int i=0; i<1000000; i++)
fuzzer.fuzzPeeps(i);
@@ -23,8 +38,8 @@ public class FuzzerWrap {
}
- @Test
- public void fuzzPeepsSmall() {
+ @Test @Ignore
+ public void fuzzPeepsRandom() {
Random R = new Random(System.currentTimeMillis());
var fuzzer = new Fuzzer();
for (int i=0; i<100; i++)
diff --git a/chapter24/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java b/chapter24/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java
index 77e61b42..962202a6 100644
--- a/chapter24/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java
+++ b/chapter24/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java
@@ -171,4 +171,18 @@ public class Fuzzer {
public boolean noExceptions() {
return exceptions.isEmpty();
}
+
+ /** Run a fixed chapter-local seed without reducing or swallowing failures. */
+ public void fuzzPeepsRegression(long seed) {
+ var rand = new Random(seed);
+ var sb = new StringBuilder();
+ var valid = new ScriptGenerator(rand, sb, true).genProgram();
+ try {
+ runCheck(sb.toString(), valid);
+ } catch (Throwable e) {
+ AssertionError ae = new AssertionError("Fuzzer regression seed failed: " + seed);
+ ae.initCause(e);
+ throw ae;
+ }
+ }
}