Skip to main content

uor_addr/asn1/
verbs.rs

1//! ASN.1 realization's ψ-chain content-address derivation
2//! verb (wiki ADR-024 + ADR-035 + ADR-036 + ARCHITECTURE.md
3//! "Common verb arena").
4//!
5//! The verb body is **identical at the term-arena level** to the
6//! JSON realization's [`crate::json::address_inference`] — the
7//! canonical k-invariants branch (ψ_1 → ψ_7 → ψ_8 → ψ_9). Only the
8//! input type and (under instantiation) the resolver bodies vary;
9//! the structural shape of the term arena is the same across every
10//! UOR-ADDR realization.
11
12use crate::asn1::value::Asn1Carrier;
13use crate::label::{
14    AddressLabelBlake3, AddressLabelKeccak256, AddressLabelSha256, AddressLabelSha3_256,
15    AddressLabelSha512,
16};
17
18addr_verbs! {
19    input: Asn1Carrier<'_>,
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}