Merge branch 'maveth/skill-improvements' into 'master'

Test for cyclic skill dependencies

See merge request veloren/veloren!3098
This commit is contained in:
Forest Anderson 2022-01-23 18:35:58 +00:00
commit 1bcda9da7b
3 changed files with 31 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,28 @@
use super::*;
use crate::comp::{skillset::SkillPrerequisitesMap, Skill};
use hashbrown::HashMap;
// Unneeded cfg(test) here keeps rust-analyzer happy
#[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).or_insert_with(|| graph.add_node(node))
};
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));
}