Commit 06d5799
perf: default pool admission to featureOwnership (culling), not everyDiscovery
The library default for `MutationScheduler.weightedPool(admission:)` was
`everyDiscovery` — every strategy-accepted input joins the pool and nothing
ever leaves. On stlc that floods the pool with ~2400 entries whose median
wire size is 421 chars (max 1469); mutating one of those giants rarely lands
on the relevant node.
Flip the default to `featureOwnership` (libFuzzer-style REDUCE): each feature
is owned by the smallest witness, larger owners are evicted. Measured on the
clean stlc baseline this collapses the live pool to ~20 entries of median
size 49, and the mean *executed* term shrinks 5x (323 -> 65 chars).
On the hard de Bruijn mutant shift_var_leq the flip finds the bug 20/20 at
median 4.0s vs everyDiscovery's 17/20 at 6.7s — better detection AND speed,
the direct payoff of smaller, better-targeted mutation parents.
Callers that want the old keep-everything behavior still pass
`admission: .everyDiscovery` explicitly.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>1 parent 4a71968 commit 06d5799
2 files changed
Lines changed: 18 additions & 1 deletion
File tree
- Sources/PropertyTestingKit/Fuzzing/Scheduler
- Tests/PropertyTestingKitTests/Fuzzing
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
49 | 49 | | |
50 | 50 | | |
51 | 51 | | |
52 | | - | |
| 52 | + | |
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
| |||
Lines changed: 17 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
98 | 115 | | |
99 | 116 | | |
100 | 117 | | |
| |||
0 commit comments