rvs 0.5.0

A library for defining and evaluating random variables using a simple DSL
Documentation
mod util;
use crate::util::*;

#[test]
fn yields_a_repeating_pattern() {
    let a = expr_to_var("Pattern(0, 1, 2, 3)").unwrap();
    let mut a = a.borrow_mut();

    let expected: Vec<(u32, bool)> = (0..4)
        .zip(vec![false, false, false, true].into_iter())
        .cycle()
        .take(16)
        .collect();

    let actual: Vec<(u32, bool)> = (0..16).map(|_| (a.next(), a.done())).collect();

    assert_eq!(actual, expected);
}

#[test]
fn selects_another_subexpr_when_current_subexpr_done() {
    let a = expr_to_var("Pattern(Pattern(0, 1), Pattern(2, 3))").unwrap();
    let mut a = a.borrow_mut();

    assert_eq!(a.done(), false);

    let expected: Vec<(u32, bool)> = (0..4)
        .zip(vec![false, false, false, true].into_iter())
        .cycle()
        .take(16)
        .collect();

    let actual: Vec<(u32, bool)> = (0..16).map(|_| (a.next(), a.done())).collect();

    assert_eq!(actual, expected);
}