minerva 0.2.0

Causal ordering for distributed systems
//! Maintained-collation agreement, replay, and stress assurance.

extern crate alloc;

mod cases;
mod properties;
mod stress;

use alloc::vec::Vec;

use crate::metis::{Anchor, Dot, DotSet, Locus, Metatheses, Metathesis, Retired, Rhapsody};

use super::{Moves, Text, clock, d, locus_at, move_to, type_after};
use crate::metis::dot::RawDot;

/// Builds a woven chain and returns its dots in typing order.
fn typed_chain(
    text: &mut Rhapsody,
    clk: &crate::kairos::Clock<crate::kairos::TickCounter>,
    station: u32,
    first_index: u64,
    len: u64,
) -> Vec<Dot> {
    let mut dots = Vec::new();
    let mut caret: Option<RawDot> = None;
    for index in first_index..first_index + len {
        let anchor = text.anchor_for_visual_insert(caret);
        let dot = d(station, index);
        assert!(text.weave(
            dot,
            Locus {
                anchor,
                rank: clk.now(0u16)
            }
        ));
        caret = Some(dot.into());
        dots.push(dot);
    }
    dots
}