hibana 0.9.2

Session-typed choreographic programming for no_std Rust protocols, inspired by affine MPST
Documentation
// This capacity regression intentionally pushes const evaluation to prove the
// public projection budget does not collapse to a segment-marker shortcut.
#![allow(long_running_const_eval)]

use hibana::g::{self, Msg};
use hibana::runtime::program::{RoleProgram, project};

macro_rules! visible_route {
    ($left:literal, $right:literal) => {
        g::route(
            g::send::<0, 1, Msg<$left, ()>>(),
            g::send::<0, 1, Msg<$right, ()>>(),
        )
    };
}

macro_rules! seq_chain {
    ($single:expr $(,)?) => {
        $single
    };
    ($head:expr, $($tail:expr),+ $(,)?) => {
        g::seq($head, seq_chain!($($tail),+))
    };
}

#[test]
fn public_route_program_capacity_exceeds_segment_marker_shortcut() {
    let program = seq_chain!(
        visible_route!(1, 2),
        visible_route!(3, 4),
        visible_route!(5, 6),
        visible_route!(7, 8),
        visible_route!(9, 10),
        visible_route!(11, 12),
        visible_route!(13, 14),
        visible_route!(15, 16),
        visible_route!(17, 18),
        visible_route!(19, 20),
        visible_route!(21, 22),
        visible_route!(23, 24),
        visible_route!(25, 26),
        visible_route!(27, 28),
        visible_route!(29, 30),
        visible_route!(31, 32),
        visible_route!(33, 34),
        visible_route!(35, 36),
        visible_route!(37, 38),
        visible_route!(39, 40),
        visible_route!(41, 42),
        visible_route!(43, 44),
        visible_route!(45, 46),
        visible_route!(47, 48),
        visible_route!(49, 50),
        visible_route!(51, 52),
        visible_route!(53, 54),
        visible_route!(55, 56),
        visible_route!(57, 58),
        visible_route!(59, 60),
        visible_route!(61, 62),
        visible_route!(63, 64),
        visible_route!(65, 66),
    );

    let _: RoleProgram<0> = project(&program);
}