Test for cyclic skill dependencies

This commit is contained in:
Maveth 2022-01-13 11:51:17 -06:00
parent 87769e7e55
commit 167c9b2113
3 changed files with 32 additions and 0 deletions

View File

@ -88,6 +88,7 @@ criterion = "0.3"
#test
tracing-subscriber = { version = "0.3.2", default-features = false, features = ["fmt", "time", "ansi", "smallvec", "env-filter"] }
petgraph = "0.5.1"
[[bench]]
name = "chonk_benchmark"

View File

@ -16,6 +16,8 @@ use tracing::{trace, warn};
pub mod skills;
#[cfg(test)] mod test;
/// BTreeSet is used here to ensure that skills are ordered. This is important
/// to ensure that the hash created from it is consistent so that we don't
/// needlessly force a respec when loading skills from persistence.

View File

@ -0,0 +1,29 @@
use super::*;
use crate::comp::{skillset::SkillPrerequisitesMap, Skill};
use hashbrown::HashMap;
#[cfg(test)]
use petgraph::{algo::is_cyclic_undirected, graph::UnGraph};
#[test]
fn check_cyclic_skill_deps() {
let skill_prereqs =
SkillPrerequisitesMap::load_expect_cloned("common.skill_trees.skill_prerequisites").0;
let mut graph = UnGraph::new_undirected();
let mut nodes = HashMap::<Skill, _>::new();
let mut add_node = |graph: &mut UnGraph<Skill, _>, node: Skill| {
*nodes
.entry(node.clone())
.or_insert_with(|| graph.add_node(node.clone()))
};
for (skill, prereqs) in skill_prereqs.iter() {
let skill_node = add_node(&mut graph, *skill);
for (prereq, _) in prereqs.iter() {
let prereq_node = add_node(&mut graph, *prereq);
graph.add_edge(prereq_node, skill_node, ());
}
}
assert!(!is_cyclic_undirected(&graph));
}