From 99a4c2cb23a85ce42b02c960578e6f431a29b35c Mon Sep 17 00:00:00 2001
From: David Wehr <dawehr@iastate.edu>
Date: Sun, 5 Feb 2017 23:51:48 -0600
Subject: [PATCH] Fixed bug with populating the exec_input_vals array.

---
 quad/computation_graph/src/computation_graph.c | 10 +++++++---
 quad/computation_graph/src/main.c              |  8 ++++----
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/quad/computation_graph/src/computation_graph.c b/quad/computation_graph/src/computation_graph.c
index ac02dc324..ad122600a 100644
--- a/quad/computation_graph/src/computation_graph.c
+++ b/quad/computation_graph/src/computation_graph.c
@@ -103,10 +103,14 @@ void graph_compute_node_rec(struct computation_graph *graph, int node_id, int de
             if (graph->nodes[src_cntl_id].processed_state == UNPROCESSED) {
                 graph_compute_node_rec(graph, src_cntl_id, depth + 1);
             }
-            int src_output_id = node->input_srcs[input_id].controller_output;
-            exec_input_vals[input_id] = graph->nodes[src_cntl_id].output_values[src_output_id];
         }
     }
+    // Populate the exec_input_vals array for computation
+    for (input_id = 0; input_id < node->type->n_inputs; input_id++) {
+        int src_cntl_id = node->input_srcs[input_id].controller_id;
+        int src_output_id = node->input_srcs[input_id].controller_output;
+        exec_input_vals[input_id] = graph->nodes[src_cntl_id].output_values[src_output_id];
+    }
     (*node->type->execute)(node->state, node->param_values, exec_input_vals, node->output_values);
     node->processed_state = PROCESSED;
 }
@@ -140,7 +144,7 @@ int export_dot(const struct computation_graph* graph, FILE* of) {
             fprintf(of, "|<f%d> [%s=%.3f]\n", j+1+node->type->n_inputs, node->type->param_names[j],node->param_values[j]);
         }
         fprintf(of, "\"]\n"); // Close label bracket
-        //
+        // Make connections from
         for (j = 0; j < node->type->n_inputs; j++) {
             struct graph_node* src_node = &graph->nodes[node->input_srcs[j].controller_id];
             int output_id = node->input_srcs[j].controller_output;
diff --git a/quad/computation_graph/src/main.c b/quad/computation_graph/src/main.c
index 8be7d30ec..025781d9a 100644
--- a/quad/computation_graph/src/main.c
+++ b/quad/computation_graph/src/main.c
@@ -8,9 +8,9 @@
 int main() {
     struct computation_graph *graph = create_graph();
 
-    int const1 = graph_add_node_const(graph, "Const 1");
+    int const1 = graph_add_node_const(graph, "Const 2");
     graph_set_param_val(graph, const1, CONST_SET, 2);
-    int const2 = graph_add_node_const(graph, "Const 2");
+    int const2 = graph_add_node_const(graph, "Const 1");
     graph_set_param_val(graph, const2, CONST_SET, 3);
 
     int add1_id = graph_add_node_add(graph, "Add");
@@ -22,8 +22,8 @@ int main() {
     graph_set_source(graph, gain1_id, GAIN_INPUT, add1_id, ADD_SUM);
 
     int mult1_id = graph_add_node_mult(graph, "Mult");
-    graph_set_source(graph, mult1_id, MULT_MULTIPLICAND1, gain1_id, GAIN_RESULT);
-    graph_set_source(graph, mult1_id, MULT_MULTIPLICAND2, const1, CONST_VAL);
+    graph_set_source(graph, mult1_id, MULT_MULTIPLICAND2, gain1_id, GAIN_RESULT);
+    graph_set_source(graph, mult1_id, MULT_MULTIPLICAND1, const1, CONST_VAL);
 
     graph_compute_node(graph, mult1_id);
 
-- 
GitLab