diff --git a/quad/computation_graph/test/test_computation_graph.c b/quad/computation_graph/test/test_computation_graph.c index e4155ec8fb90ade08d0cc9484a4ca99ea8d02dbf..1cf2b26d76e50fb2d5951ee1da5da800dbb9d768 100644 --- a/quad/computation_graph/test/test_computation_graph.c +++ b/quad/computation_graph/test/test_computation_graph.c @@ -145,6 +145,21 @@ int graph_test_self_loop() { return 0; } +int graph_test_update_rules() { + struct computation_graph *graph = create_graph(); + int cblock = graph_add_node_const(graph, "const"); + int acum_b = graph_add_node_accum(graph, "accumulator"); + graph_set_source(graph, acum_b, ACCUM_IN, cblock, CONST_VAL); + + graph_set_param_val(graph, cblock, CONST_SET, 3); + int to_compute_for[1] = {acum_b}; + graph_compute_nodes(graph, to_compute_for, 1); + graph_compute_nodes(graph, to_compute_for, 1); + + double result = graph_get_output(graph, acum_b, ACCUMULATED); + return nequal(result, 3); +} + int main() { int success = 0; @@ -155,5 +170,6 @@ int main() { test(graph_test_single_run, "Test that blocks only get executed once"); test(graph_test_reset_rules, "Tests that already connected blocks don't get reset"); test(graph_test_self_loop, "Tests that a self-loop computation terminates"); + test(graph_test_update_rules, "Tests that nodes only update when their inputs change"); test_summary(); }