simple/
simple.rs

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}