behavior-tree 0.0.3

Yet another behavior tree library for rust!
Documentation
use behavior_tree::*;

struct Blackboard {
    cond: bool,
}

#[test]
fn test_simple_while_positive() {
    let mut bb = Blackboard { cond: false };
    let mut bt: Node<Blackboard> = Node::while_single(|data| data.cond, NoTick::action());

    let (status, _) = bt.tick(1.0, &mut bb);
    assert_eq!(status, Status::Failure);
    let (status, _) = bt.tick(1.0, &mut bb);
    assert_eq!(status, Status::Failure);
    let (status, _) = bt.tick(1.0, &mut bb);
    assert_eq!(status, Status::Failure);
}

#[test]
fn test_simple_while_negative() {
    let mut bb = Blackboard { cond: true };
    let mut bt: Node<Blackboard> = Node::while_single(|data| data.cond, YesTick::action());

    let (status, _) = bt.tick(1.0, &mut bb);
    assert_eq!(status, Status::Success);
    let (status, _) = bt.tick(1.0, &mut bb);
    assert_eq!(status, Status::Success);
    let (status, _) = bt.tick(1.0, &mut bb);
    assert_eq!(status, Status::Success);
}

#[test]
fn test_simple_while_running() {
    let mut bb = Blackboard { cond: true };
    let mut bt: Node<Blackboard> = Node::while_single(|data| data.cond, AlwaysRunning::action());

    let (status, _) = bt.tick(1.0, &mut bb);
    assert_eq!(status, Status::Running);
    let (status, _) = bt.tick(1.0, &mut bb);
    assert_eq!(status, Status::Running);
    let (status, _) = bt.tick(1.0, &mut bb);
    assert_eq!(status, Status::Running);
}

#[test]
fn test_while_sequence() {
    let mut bb = Blackboard { cond: true };
    let mut bt: Node<Blackboard> = Node::sequence(vec![
        Node::while_single(|data| data.cond, AlwaysRunning::action()),
        NoTick::action(),
    ]);

    let (status, _) = bt.tick(1.0, &mut bb);
    assert_eq!(status, Status::Running);
    let (status, _) = bt.tick(1.0, &mut bb);
    assert_eq!(status, Status::Running);
    let (status, _) = bt.tick(1.0, &mut bb);
    assert_eq!(status, Status::Running);
}

#[test]
fn test_while_select() {
    let mut bb = Blackboard { cond: false };
    let mut bt: Node<Blackboard> = Node::select(vec![
        Node::while_single(|data| data.cond, NoTick::action()),
        YesTick::action(),
    ]);

    let (status, _) = bt.tick(1.0, &mut bb);
    assert_eq!(status, Status::Success);
    let (status, _) = bt.tick(1.0, &mut bb);
    assert_eq!(status, Status::Success);
    let (status, _) = bt.tick(1.0, &mut bb);
    assert_eq!(status, Status::Success);
}