perty 0.0.1

A implementation of the Programme Evaluation and Review Technique (PERT).
Documentation
use perty::{Duration, Pert, PostProcess, Task};

fn main() {
    let a = Task::new(
        "A".to_string(),
        vec![],
        Duration::Pert {
            optimistic: 2.,
            most_likely: 4.,
            pessimistic: 6.,
        },
    );
    let b = Task::new(
        "B".to_string(),
        vec![],
        Duration::Pert {
            optimistic: 3.,
            most_likely: 5.,
            pessimistic: 9.,
        },
    );
    let c = Task::new(
        "C".to_string(),
        vec!["A".to_string()],
        Duration::Pert {
            optimistic: 4.,
            most_likely: 5.,
            pessimistic: 7.,
        },
    );
    let d = Task::new(
        "D".to_string(),
        vec!["A".to_string()],
        Duration::Pert {
            optimistic: 4.,
            most_likely: 5.,
            pessimistic: 10.,
        },
    );
    let e = Task::new(
        "E".to_string(),
        vec!["B".to_string(), "C".to_string()],
        Duration::Pert {
            optimistic: 4.,
            most_likely: 5.,
            pessimistic: 7.,
        },
    );
    let f = Task::new(
        "F".to_string(),
        vec!["D".to_string()],
        Duration::Pert {
            optimistic: 3.,
            most_likely: 4.,
            pessimistic: 8.,
        },
    );
    let g = Task::new(
        "G".to_string(),
        vec!["E".to_string()],
        Duration::Pert {
            optimistic: 3.,
            most_likely: 5.,
            pessimistic: 8.,
        },
    );

    let tasks = vec![a, b, c, d, e, f, g];

    for t in tasks.iter() {
        println!("{}: {:?}", t.id, t.duration);
    }

    let nodes = tasks.solve_pert(1_000).unwrap();

    for n in nodes.iter() {
        println!("{}: {:.2} {}", n.id, n.slack(), n.is_critical());
    }

    println!("Total Duration: {:.2}", nodes.project_duration());
}