1use crate::gguf::value::GgufCarrier;
6use crate::label::{
7 AddressLabelBlake3, AddressLabelKeccak256, AddressLabelSha256, AddressLabelSha3_256,
8 AddressLabelSha512,
9};
10
11addr_verbs! {
12 input: GgufCarrier<'_>,
13 { shape: AddressLabelSha256, verb: address_inference },
14 { shape: AddressLabelBlake3, verb: address_inference_blake3 },
15 { shape: AddressLabelSha3_256, verb: address_inference_sha3_256 },
16 { shape: AddressLabelKeccak256, verb: address_inference_keccak256 },
17 { shape: AddressLabelSha512, verb: address_inference_sha512 },
18}
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23 use prism::operation::Term;
24
25 #[test]
26 fn verb_arena_is_canonical_k_invariants_branch() {
27 let arena = address_inference_term_arena::<{ crate::ADDR_INLINE_BYTES }>();
28 assert!(!arena.is_empty());
29 assert!(arena.iter().any(|t| matches!(t, Term::Nerve { .. })));
30 assert!(arena
31 .iter()
32 .any(|t| matches!(t, Term::PostnikovTower { .. })));
33 assert!(arena
34 .iter()
35 .any(|t| matches!(t, Term::HomotopyGroups { .. })));
36 assert!(arena.iter().any(|t| matches!(t, Term::KInvariants { .. })));
37 }
38
39 #[test]
40 fn verb_arena_contains_no_sigma_residuals() {
41 let arena = address_inference_term_arena::<{ crate::ADDR_INLINE_BYTES }>();
42 assert!(!arena.iter().any(|t| matches!(t, Term::FirstAdmit { .. })));
43 assert!(!arena
44 .iter()
45 .any(|t| matches!(t, Term::AxisInvocation { .. })));
46 }
47}