use uor_foundation_sdk::verb;
use crate::model::{AddressLabel, JsonInput};
verb! {
pub fn address_inference(input: JsonInput) -> AddressLabel {
k_invariants(homotopy_groups(postnikov_tower(nerve(input))))
}
}
#[cfg(test)]
mod tests {
use super::*;
use uor_foundation::enforcement::Term;
#[test]
fn verb_term_arena_is_emitted_and_nonempty() {
let arena = address_inference_term_arena();
assert!(!arena.is_empty());
}
#[test]
fn verb_arena_contains_psi_1_nerve() {
let arena = address_inference_term_arena();
assert!(arena.iter().any(|t| matches!(t, Term::Nerve { .. })));
}
#[test]
fn verb_arena_contains_psi_7_postnikov_tower() {
let arena = address_inference_term_arena();
assert!(arena
.iter()
.any(|t| matches!(t, Term::PostnikovTower { .. })));
}
#[test]
fn verb_arena_contains_psi_8_homotopy_groups() {
let arena = address_inference_term_arena();
assert!(arena
.iter()
.any(|t| matches!(t, Term::HomotopyGroups { .. })));
}
#[test]
fn verb_arena_contains_psi_9_k_invariants() {
let arena = address_inference_term_arena();
assert!(arena.iter().any(|t| matches!(t, Term::KInvariants { .. })));
}
#[test]
fn verb_arena_contains_no_sigma_residuals() {
let arena = address_inference_term_arena();
let has_first_admit = arena.iter().any(|t| matches!(t, Term::FirstAdmit { .. }));
let has_axis_invocation = arena
.iter()
.any(|t| matches!(t, Term::AxisInvocation { .. }));
let has_le_or_concat = arena.iter().any(|t| {
matches!(
t,
Term::Application {
operator: uor_foundation::PrimitiveOp::Le
| uor_foundation::PrimitiveOp::Concat
| uor_foundation::PrimitiveOp::Lt
| uor_foundation::PrimitiveOp::Ge
| uor_foundation::PrimitiveOp::Gt,
..
}
)
});
assert!(
!has_first_admit,
"FirstAdmit is a σ-enumeration residual — must not appear in the pure-prism verb body"
);
assert!(
!has_axis_invocation,
"AxisInvocation belongs in resolvers, not in the verb body's composition"
);
assert!(
!has_le_or_concat,
"byte-comparison/concat ops are σ-residuals — admission is structural"
);
}
}