dcc-lsystem 0.6.3

An implementation of a Lindenmayer system together with some rendering tools
Documentation
use crate::*;

#[test]
fn basic_algae_test() {
    let mut builder = LSystemBuilder::new();

    let a = builder.token("A");
    let b = builder.token("B");

    builder.axiom(vec![a]);
    builder.transformation_rule(a, vec![a, b]);
    builder.transformation_rule(b, vec![a]);

    let mut system = builder.finish();

    system.step_by(7);

    assert_eq!(system.render(), "ABAABABAABAABABAABABAABAABABAABAAB");
}

#[test]
fn fractal_binary_tree() {
    let mut builder = LSystemBuilder::new();

    let zero = builder.token("0");
    let one = builder.token("1");
    let left_square_bracket = builder.token("[");
    let right_square_bracket = builder.token("]");

    builder.axiom(vec![zero]);
    builder.transformation_rule(one, vec![one, one]);
    builder.transformation_rule(
        zero,
        vec![one, left_square_bracket, zero, right_square_bracket, zero],
    );

    let mut system = builder.finish();

    assert_eq!(system.render(), "0");

    system.step();
    assert_eq!(system.render(), "1[0]0");

    system.step();
    assert_eq!(system.render(), "11[1[0]0]1[0]0");

    system.step();
    assert_eq!(system.render(), "1111[11[1[0]0]1[0]0]11[1[0]0]1[0]0");
}

#[test]
fn macro_usage() {
    let mut builder = LSystemBuilder::new();

    let x = builder.token("X");
    let y = builder.token("Y");

    assert_eq!(x, ArenaId(0));
    assert_eq!(y, ArenaId(1));
}