Skip to main content

uor_addr/composition/g2/
verbs.rs

1//! CS-G2 ψ-chain content-address derivation verbs, one per σ-axis.
2
3#![cfg(feature = "alloc")]
4
5use crate::composition::g2::value::G2Carrier;
6use crate::label::{
7    CompositionLabelG2Blake3, CompositionLabelG2Keccak256, CompositionLabelG2Sha256,
8    CompositionLabelG2Sha3_256, CompositionLabelG2Sha512,
9};
10
11addr_verbs! {
12    input: G2Carrier<'_>,
13    { shape: CompositionLabelG2Sha256, verb: compose_g2_inference },
14    { shape: CompositionLabelG2Blake3, verb: compose_g2_inference_blake3 },
15    { shape: CompositionLabelG2Sha3_256, verb: compose_g2_inference_sha3_256 },
16    { shape: CompositionLabelG2Keccak256, verb: compose_g2_inference_keccak256 },
17    { shape: CompositionLabelG2Sha512, verb: compose_g2_inference_sha512 },
18}
19
20#[cfg(test)]
21mod tests {
22    use super::*;
23    use prism::operation::Term;
24
25    #[test]
26    fn verb_term_arena_is_emitted_and_nonempty() {
27        let arena = compose_g2_inference_term_arena::<{ crate::ADDR_INLINE_BYTES }>();
28        assert!(!arena.is_empty());
29    }
30
31    #[test]
32    fn verb_arena_contains_no_sigma_residuals() {
33        let arena = compose_g2_inference_term_arena::<{ crate::ADDR_INLINE_BYTES }>();
34        assert!(!arena.iter().any(|t| matches!(t, Term::FirstAdmit { .. })));
35        assert!(!arena
36            .iter()
37            .any(|t| matches!(t, Term::AxisInvocation { .. })));
38        assert!(arena.iter().any(|t| matches!(t, Term::Nerve { .. })));
39        assert!(arena.iter().any(|t| matches!(t, Term::KInvariants { .. })));
40    }
41}