mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Test for cyclic skill dependencies
This commit is contained in:
parent
87769e7e55
commit
167c9b2113
@ -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"
|
||||
|
@ -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.
|
||||
|
29
common/src/comp/skillset/test.rs
Normal file
29
common/src/comp/skillset/test.rs
Normal 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));
|
||||
}
|
Loading…
Reference in New Issue
Block a user