Avoid repeated plan generation and unused diagnostics in layout fuzzers
This commit is contained in:
1 parent
add6774980
commit
84dad211f5
2 files changed
+14
-10
No files matched your search
+8
-4
@@ -14,7 +14,7 @@
|
|||||||
#[path = "scenario/mod.rs"]
|
#[path = "scenario/mod.rs"]
|
||||||
mod scenario;
|
mod scenario;
|
||||||
|
|
||||||
use iris::random::{Edits, plan};
|
use iris::random::{Edits, Plan, plan};
|
||||||
use scenario::{ALL, Case, diverges, env, over_seeds};
|
use scenario::{ALL, Case, diverges, env, over_seeds};
|
||||||
|
|
||||||
/// How deep the generator branches. The generator widens two to four ways per
|
/// How deep the generator branches. The generator widens two to four ways per
|
||||||
@@ -32,8 +32,11 @@ fn depth() -> usize {
|
|||||||
const SEEDS: [u64; 10] = [1, 2, 3, 5, 8, 10, 13, 20, 86, 98];
|
const SEEDS: [u64; 10] = [1, 2, 3, 5, 8, 10, 13, 20, 86, 98];
|
||||||
|
|
||||||
fn check(seed: u64, depth: usize, case: Case) {
|
fn check(seed: u64, depth: usize, case: Case) {
|
||||||
let grown = plan(seed, depth, &Edits::default());
|
check_plan(&plan(seed, depth, &Edits::default()), seed, depth, case);
|
||||||
if let Some(how) = diverges(&grown, case, seed) {
|
}
|
||||||
|
|
||||||
|
fn check_plan(grown: &Plan, seed: u64, depth: usize, case: Case) {
|
||||||
|
if let Some(how) = diverges(grown, case, seed) {
|
||||||
panic!(
|
panic!(
|
||||||
"seed {seed} at depth {depth} differs after {}: {how}\n\
|
"seed {seed} at depth {depth} differs after {}: {how}\n\
|
||||||
reduce it with SHRINK_SEED={seed} SHRINK_DEPTH={depth} \
|
reduce it with SHRINK_SEED={seed} SHRINK_DEPTH={depth} \
|
||||||
@@ -119,8 +122,9 @@ fn a_long_run_of_seeds_agrees() {
|
|||||||
None => (1..=env("IRIS_GENERATED_SEEDS", 100_u64)).collect(),
|
None => (1..=env("IRIS_GENERATED_SEEDS", 100_u64)).collect(),
|
||||||
};
|
};
|
||||||
over_seeds(seeds, |seed| {
|
over_seeds(seeds, |seed| {
|
||||||
|
let grown = plan(seed, depth, &Edits::default());
|
||||||
for case in ALL {
|
for case in ALL {
|
||||||
check(seed, depth, case);
|
check_plan(&grown, seed, depth, case);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -444,12 +444,6 @@ pub fn diverges(plan: &Plan, case: Case, seed: u64) -> Option<String> {
|
|||||||
cold.state.root = Some(root);
|
cold.state.root = Some(root);
|
||||||
cold.frame();
|
cold.frame();
|
||||||
|
|
||||||
let places: HashMap<WidgetId, usize> = tree
|
|
||||||
.ids
|
|
||||||
.iter()
|
|
||||||
.enumerate()
|
|
||||||
.map(|(i, &id)| (id, i))
|
|
||||||
.collect();
|
|
||||||
let mut drawn = 0;
|
let mut drawn = 0;
|
||||||
for (i, (&w, &c)) in tree.ids.iter().zip(&cold_tree.ids).enumerate() {
|
for (i, (&w, &c)) in tree.ids.iter().zip(&cold_tree.ids).enumerate() {
|
||||||
let (got, want) = (warm.region(&w), cold.region(&c));
|
let (got, want) = (warm.region(&w), cold.region(&c));
|
||||||
@@ -457,6 +451,12 @@ pub fn diverges(plan: &Plan, case: Case, seed: u64) -> Option<String> {
|
|||||||
if got == want {
|
if got == want {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
let places: HashMap<WidgetId, usize> = tree
|
||||||
|
.ids
|
||||||
|
.iter()
|
||||||
|
.enumerate()
|
||||||
|
.map(|(i, &id)| (id, i))
|
||||||
|
.collect();
|
||||||
// Where two trees disagree is rarely where the cause is, so the
|
// Where two trees disagree is rarely where the cause is, so the
|
||||||
// ancestry comes with it, marking the widgets that own a region.
|
// ancestry comes with it, marking the widgets that own a region.
|
||||||
let mut chain = Vec::new();
|
let mut chain = Vec::new();
|
||||||
|
|||||||
Reference in new issue
Block a user