use dag_compute::ComputationGraph; #[test] fn test_add_basic() { let mut graph = ComputationGraph::::new(); let mut add_handle = graph.insert_node( "add".to_owned(), Box::new(|x| { let mut sum = 0; for item in x.iter() { sum += *item; } sum }) ); let handle_a = graph.insert_node( "a".to_owned(), Box::new(|_| { 2 }) ); let handle_b = graph.insert_node( "b".to_owned(), Box::new(|_| { 4 }) ); graph.set_inputs(&mut add_handle, &[&handle_a, &handle_b]); graph.designate_output(&add_handle); assert_eq!(graph.compute(), 6); } #[test] fn test_incl_sweep() { let mut graph = ComputationGraph::::new(); let src = graph.insert_node( "const".to_owned(), Box::new(|_| "a".to_owned()) ); let mut incr_keep = graph.insert_node( "+1_out".to_owned(), Box::new(|s| s[0].clone()+"b") ); graph.set_inputs(&mut incr_keep, &[&src]); let mut incr_toss = graph.insert_node( "+1_toss".to_owned(), Box::new(|s| s[0].clone()+"c") ); graph.set_inputs(&mut incr_toss, &[&incr_keep]); graph.designate_output(&incr_keep); assert_eq!(graph.compute(), "ab") } #[test] #[should_panic] fn cycle_loop() { let mut graph = ComputationGraph::new(); let mut handle_1 = graph.insert_node( "loopy_1".to_owned(), Box::new(|_| 5) ); let mut handle_2 = graph.insert_node( "loopy_2".to_owned(), Box::new(|_| 5) ); graph.set_inputs(&mut handle_1, &[&handle_2]); graph.set_inputs(&mut handle_2, &[&handle_1]); graph.designate_output(&handle_1); graph.compute(); }