1extern crate rgraph;
2
3use rgraph::*;
4use std::vec::Vec;
5
6fn main() {
7 let mut g = Graph::new();
8
9 g.add_node(create_node!(
10 gen_one () -> (one: u32) {
11 println!(" gen one");
12 one = 1u32;
13 }
14 )).unwrap();
15
16 g.add_node(create_node!(
17 plus_one (one: u32) -> (plusone : u32) {
18 println!(" plusone");
19 plusone = one + 1u32;
20 }
21 )).unwrap();
22
23 g.add_node(create_node!(
24 the_one_task (one: u32, plusone : u32) ->
25 (last_value: f32) {
26 println!(" the one task");
27 last_value = (one + plusone) as f32;
28 }
29 )).unwrap();
30
31 g.add_node(create_node!(
32 list (list : Vec<u32>) -> () {
33 println!(" list");
34 }
35 )).unwrap();
36
37 g.bind_asset("gen_one::one", "plus_one::one")
38 .expect("binding must be doable");
39 g.bind_asset("gen_one::one", "the_one_task::one")
40 .expect("binding must be doable");
41 g.bind_asset("plus_one::plusone", "the_one_task::plusone")
42 .expect("binding must be doable");
43
44 let mut cache = ValuesCache::new();
45
46 for _ in 0..10 {
47 {
48 let mut solver = GraphSolver::new(&g, &mut cache);
49 assert!(solver.execute("nop").is_err());
50
51 solver.execute("the_one_task").expect("could not execute");
52
53 println!("{:?}", solver.get_values());
54
55 assert!(
56 solver
57 .get_value::<u32>("gen_one::one")
58 .expect("never created?") == 1
59 );
60 assert!(
61 solver
62 .get_value::<u32>("plus_one::plusone")
63 .expect("never created?") == 2
64 );
65 assert!(
66 (solver
67 .get_value::<f32>("the_one_task::last_value")
68 .expect("not cached?") - 3.0)
69 .abs() < 0.01
70 );
71 }
72
73 assert!(cache.get_value::<u32>("gen_one::one").expect("not cached?") == 1);
74 assert!(
75 cache
76 .get_value::<u32>("plus_one::plusone")
77 .expect("not cached?") == 2
78 );
79 assert!(
80 (cache
81 .get_value::<f32>("the_one_task::last_value")
82 .expect("not cached?") - 3.0)
83 .abs() < 0.01
84 );
85 }
86}