crate::ix!();
#[cfg(test)]
mod profile_tests {
use super::*;
#[traced_test]
fn builder_resolves_descriptors_correctly() {
let attrs = BTreeSet::from_iter([NuancedTransformAttribute::Innovation]);
let profile = TransformAbilityProfileBuilder::default()
.core_domain(CoreTransformDomain::ScientificProgress)
.nuanced_attributes(attrs.clone())
.build()
.expect("profile build should succeed");
assert!(
profile
.descriptors()
.contains(&TransformativeAbilityDescriptor::AdvancesInterdisciplinaryScientificApproaches),
"expected scientific innovation descriptor"
);
for d in profile.descriptors() {
let (_, got_attrs) = analyze_transformative_ability_descriptor(d);
assert!(attrs.is_subset(&got_attrs));
}
}
#[traced_test]
fn from_descriptor_round_trips() {
let original = TransformativeAbilityDescriptor::EncouragesAdaptationAndResilience;
let profile = TransformAbilityProfile::from(original.clone());
assert_eq!(profile.core_domain(), &CoreTransformDomain::AdaptationResilience);
assert!(profile
.nuanced_attributes()
.contains(&NuancedTransformAttribute::Resilience));
assert_eq!(profile.descriptors(), &[original]);
}
#[traced_test]
fn every_descriptor_is_reachable() {
for d in TransformativeAbilityDescriptor::iter() {
let (c, a) = analyze_transformative_ability_descriptor(&d);
let profile = TransformAbilityProfileBuilder::default()
.core_domain(c.clone())
.nuanced_attributes(a.clone())
.build()
.unwrap();
assert!(
profile.descriptors().contains(&d),
"{d:?} should be part of the resolved set"
);
}
}
#[traced_test]
fn subset_matching_works() {
let descriptor = TransformativeAbilityDescriptor::TransformsDecayIntoNourishment;
let (_, full_attrs) = analyze_transformative_ability_descriptor(&descriptor);
assert!(full_attrs.contains(&NuancedTransformAttribute::Renewal));
let subset = BTreeSet::from_iter([NuancedTransformAttribute::Renewal]);
let profile = TransformAbilityProfileBuilder::default()
.core_domain(CoreTransformDomain::EcologicalRenewal)
.nuanced_attributes(subset)
.build()
.unwrap();
assert!(
profile.descriptors().contains(&descriptor),
"descriptor should appear under subset attribute query"
);
let disjoint = BTreeSet::from_iter([NuancedTransformAttribute::Strategy]);
let empty_profile = TransformAbilityProfileBuilder::default()
.core_domain(CoreTransformDomain::EcologicalRenewal)
.nuanced_attributes(disjoint)
.build()
.unwrap();
assert!(
!empty_profile.descriptors().contains(&descriptor),
"descriptor must not appear with disjoint attributes"
);
}
#[traced_test]
fn earliest_token_precedence() {
let original = TransformativeAbilityDescriptor::TransformsSituationsThroughStrategicManipulation;
let profile = TransformAbilityProfile::from(original);
assert_eq!(
profile.core_domain(),
&CoreTransformDomain::StrategicMastery,
"earliest keyword should win when multiple core signals exist"
);
}
}