From 0c99d74c85b937e5d566a7f2899d75025d9c54ea Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Thu, 17 Sep 2026 14:36:22 -0700 Subject: Get makefiles and fuzzer testing uniform across chapters --- .../java/com/seaofnodes/simple/FuzzerWrap.java | 23 ++++++++++++++++++---- .../java/com/seaofnodes/simple/fuzzer/Fuzzer.java | 14 +++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) (limited to 'chapter13/src') diff --git a/chapter13/src/test/java/com/seaofnodes/simple/FuzzerWrap.java b/chapter13/src/test/java/com/seaofnodes/simple/FuzzerWrap.java index 699711fc..52c2a014 100644 --- a/chapter13/src/test/java/com/seaofnodes/simple/FuzzerWrap.java +++ b/chapter13/src/test/java/com/seaofnodes/simple/FuzzerWrap.java @@ -8,15 +8,30 @@ import org.junit.Ignore; import static org.junit.Assert.assertTrue; /** - * To use the fuzzer run the fuzzPeeps methods. - * This can be done from IntelliJ Gui or remove the `@Ignore` annotation and start the test case from the command line - * via mvn clean test -Dtest=com.seaofnodes.simple.Fuzzer08Test#fuzzPeeps + * 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); diff --git a/chapter13/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java b/chapter13/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java index 51e39cd0..a82a7517 100644 --- a/chapter13/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java +++ b/chapter13/src/test/java/com/seaofnodes/simple/fuzzer/Fuzzer.java @@ -182,4 +182,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; + } + } } -- cgit v1.2.3