multilinear-parser 0.5.4

A parser for the multilinear story systems
Documentation
#![allow(clippy::unwrap_used, clippy::expect_used)]

use multilinear_parser::parse_multilinear;

const NET: &str = "mood: calm\n\
                   \n\
                   # Intro\n\
                   \n\
                   mood: calm > tense\n\
                   \n\
                   # Fight\n\
                   \n\
                   mood: tense\n\
                   \n\
                   # Epilogue\n\
                   \n\
                   mood: tense > calm\n";

#[test]
fn iter_size_hint_counts_down_with_every_step() {
    let info = parse_multilinear(NET.as_bytes()).expect("net should parse");

    let mut remaining = info.events.iter().len();
    assert_eq!(remaining, 3);

    let mut iter = info.events.iter();
    while iter.next().is_some() {
        remaining -= 1;
        assert_eq!(iter.size_hint(), (remaining, Some(remaining)));
        assert_eq!(iter.len(), remaining);
    }

    assert_eq!(remaining, 0);
}

#[test]
fn into_iter_size_hint_matches_the_yielded_count() {
    let info = parse_multilinear(NET.as_bytes()).expect("net should parse");

    let mut iter = info.events.into_iter();
    let announced = iter.len();
    let mut yielded = 0;
    while iter.next().is_some() {
        yielded += 1;
    }

    assert_eq!(announced, yielded);
    assert_eq!(iter.size_hint(), (0, Some(0)));
}