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