simplify edge counting

This commit is contained in:
Folkert 2021-11-14 19:49:02 +01:00
parent cb55f66b5b
commit d29265759b

View file

@ -419,7 +419,6 @@ fn gather_edges<'a>(
let check = guarded_tests_are_complete(&relevant_tests); let check = guarded_tests_are_complete(&relevant_tests);
// TODO remove clone
let all_edges = relevant_tests let all_edges = relevant_tests
.into_iter() .into_iter()
.map(|t| edges_for(path, &branches, t)) .map(|t| edges_for(path, &branches, t))
@ -1055,9 +1054,19 @@ fn small_defaults(branches: &[Branch], path: &[PathInstruction]) -> usize {
} }
fn small_branching_factor(branches: &[Branch], path: &[PathInstruction]) -> usize { fn small_branching_factor(branches: &[Branch], path: &[PathInstruction]) -> usize {
let (edges, fallback) = gather_edges(branches.to_vec(), path); // a specialized version of gather_edges that just counts the number of options
edges.len() + (if fallback.is_empty() { 0 } else { 1 }) let relevant_tests = tests_at_path(path, branches);
let check = guarded_tests_are_complete(&relevant_tests);
let fallbacks = if check {
false
} else {
branches.iter().any(|b| is_irrelevant_to(path, b))
};
relevant_tests.len() + (if !fallbacks { 0 } else { 1 })
} }
#[derive(Clone, Debug, PartialEq)] #[derive(Clone, Debug, PartialEq)]