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:
@ -88,6 +88,7 @@ criterion = "0.3"
|
|||||||
|
|
||||||
#test
|
#test
|
||||||
tracing-subscriber = { version = "0.3.2", default-features = false, features = ["fmt", "time", "ansi", "smallvec", "env-filter"] }
|
tracing-subscriber = { version = "0.3.2", default-features = false, features = ["fmt", "time", "ansi", "smallvec", "env-filter"] }
|
||||||
|
petgraph = "0.5.1"
|
||||||
|
|
||||||
[[bench]]
|
[[bench]]
|
||||||
name = "chonk_benchmark"
|
name = "chonk_benchmark"
|
||||||
|
@ -16,6 +16,8 @@ use tracing::{trace, warn};
|
|||||||
|
|
||||||
pub mod skills;
|
pub mod skills;
|
||||||
|
|
||||||
|
#[cfg(test)] mod test;
|
||||||
|
|
||||||
/// BTreeSet is used here to ensure that skills are ordered. This is important
|
/// 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
|
/// to ensure that the hash created from it is consistent so that we don't
|
||||||
/// needlessly force a respec when loading skills from persistence.
|
/// 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));
|
||||||
|
}
|
Reference in New Issue
Block a user