perty 0.0.1

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

fn main() {
    let csv = include_str!("../graphs/wiki_example.csv");
    // TODO: Update with csv reader crate.
    let mut lines = csv.lines();
    // ignore the first line -> header.
    lines.next();
    let mut tasks: Vec<Task> = Vec::new();
    for line in lines {
        let mut cols = line.split(r#"",""#);
        let id = cols.next().unwrap().replace('"', "");
        let o: f32 = cols.next().unwrap().parse().unwrap();
        let m: f32 = cols.next().unwrap().parse().unwrap();
        let p: f32 = cols.next().unwrap().parse().unwrap();
        let duration = Duration::Pert {
            optimistic: o,
            most_likely: m,
            pessimistic: p,
        };
        let deps: Vec<String> = cols
            .next()
            .unwrap()
            .replace('"', "")
            .split(",")
            .map(|v| v.to_owned())
            .filter(|v| !v.is_empty())
            .collect();
        let task = Task::new(id, deps, duration);
        tasks.push(task);
    }

    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());
    }
}