1use crate::label::{
13 AddressLabelBlake3, AddressLabelKeccak256, AddressLabelSha256, AddressLabelSha3_256,
14 AddressLabelSha512,
15};
16use crate::xml::value::XmlValue;
17
18addr_verbs! {
19 input: XmlValue<'_>,
20 { shape: AddressLabelSha256, verb: address_inference },
21 { shape: AddressLabelBlake3, verb: address_inference_blake3 },
22 { shape: AddressLabelSha3_256, verb: address_inference_sha3_256 },
23 { shape: AddressLabelKeccak256, verb: address_inference_keccak256 },
24 { shape: AddressLabelSha512, verb: address_inference_sha512 },
25}
26
27#[cfg(test)]
28mod tests {
29 use super::*;
30 use prism::operation::Term;
31
32 #[test]
33 fn verb_term_arena_is_emitted_and_nonempty() {
34 let arena = address_inference_term_arena::<{ crate::ADDR_INLINE_BYTES }>();
35 assert!(!arena.is_empty());
36 }
37
38 #[test]
39 fn verb_arena_contains_psi_1_nerve() {
40 let arena = address_inference_term_arena::<{ crate::ADDR_INLINE_BYTES }>();
41 assert!(arena.iter().any(|t| matches!(t, Term::Nerve { .. })));
42 }
43
44 #[test]
45 fn verb_arena_contains_psi_7_postnikov_tower() {
46 let arena = address_inference_term_arena::<{ crate::ADDR_INLINE_BYTES }>();
47 assert!(arena
48 .iter()
49 .any(|t| matches!(t, Term::PostnikovTower { .. })));
50 }
51
52 #[test]
53 fn verb_arena_contains_psi_8_homotopy_groups() {
54 let arena = address_inference_term_arena::<{ crate::ADDR_INLINE_BYTES }>();
55 assert!(arena
56 .iter()
57 .any(|t| matches!(t, Term::HomotopyGroups { .. })));
58 }
59
60 #[test]
61 fn verb_arena_contains_psi_9_k_invariants() {
62 let arena = address_inference_term_arena::<{ crate::ADDR_INLINE_BYTES }>();
63 assert!(arena.iter().any(|t| matches!(t, Term::KInvariants { .. })));
64 }
65
66 #[test]
67 fn verb_arena_contains_no_sigma_residuals() {
68 let arena = address_inference_term_arena::<{ crate::ADDR_INLINE_BYTES }>();
69 assert!(!arena.iter().any(|t| matches!(t, Term::FirstAdmit { .. })));
70 assert!(!arena
71 .iter()
72 .any(|t| matches!(t, Term::AxisInvocation { .. })));
73 }
74}