Skip to content

Commit

Permalink
* Fixed bug in KnowledgeRecord for operator-
Browse files Browse the repository at this point in the history
* Added logging to CompositeSubtractNode::evaluate
* Added a couple of tests to Travis CI to be executed with each commit
  • Loading branch information
jredmondson committed Jun 13, 2018
1 parent a60599d commit 55381ba
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 11 deletions.
5 changes: 4 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,5 +140,8 @@ before_script:
script:
- echo $GAMS_ROOT/scripts/$OS/base_build.sh prereqs $CLANG madara tests $SSL $JAVA $ZMQ $SIMTIME
- $GAMS_ROOT/scripts/$OS/base_build.sh prereqs $CLANG madara tests $SSL $JAVA $ZMQ $SIMTIME

# now run a couple of tests
- $MADARA_ROOT/bin/test_basic_reasoning
- $MADARA_ROOT/bin/test_karl_exceptions


11 changes: 9 additions & 2 deletions include/madara/expression/CompositeSubtractNode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,10 +89,17 @@ madara::knowledge::KnowledgeRecord
madara::expression::CompositeSubtractNode::evaluate (
const madara::knowledge::KnowledgeUpdateSettings & settings)
{
knowledge::KnowledgeRecord left = left_->evaluate (settings);
knowledge::KnowledgeRecord right = right_->evaluate (settings);

madara_logger_ptr_log (logger_, logger::LOG_ERROR,
"madara::expression::CompositeSubtractNode:evaluate: "
"%s - %s\n", left.to_string ().c_str (),
right.to_string ().c_str ());

// note we do not check if left or right are null. This should be checked
// during prune or an earlier phase. Evaluate is all about speed.
return knowledge::KnowledgeRecord (
left_->evaluate (settings) - right_->evaluate (settings));
return left - right;
}

// accept a visitor
Expand Down
21 changes: 16 additions & 5 deletions include/madara/expression/Interpreter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5824,18 +5824,29 @@ bool build_argument_list)
}
++i;
}
// is this a number literal? Handling this way allows for INT64_MIN
else if (i + 1 < input.size () && is_number (input[i + 1]))
{
handled = true;
// leaf node
number_insert (context, input, i, accumulated_precedence,
list, lastValidInput);
}
// Negate
else if (!lastValidInput)
op = new Negate (context.get_logger ());
// Subtract
else
op = new Subtract (context.get_logger ());

// insert the op according to left-to-right relationships
lastValidInput = 0;
op->add_precedence (accumulated_precedence);
precedence_insert (context, op, list);
++i;
if (op)
{
// insert the op according to left-to-right relationships
lastValidInput = 0;
op->add_precedence (accumulated_precedence);
precedence_insert (context, op, list);
++i;
}
}
else if (input[i] == '*')
{
Expand Down
4 changes: 2 additions & 2 deletions include/madara/knowledge/KnowledgeRecord.inl
Original file line number Diff line number Diff line change
Expand Up @@ -328,11 +328,11 @@ inline KnowledgeRecord

if (type_ == INTEGER)
{
record.set_value (int_value_);
record.set_value (-int_value_);
}
else if (type_ == DOUBLE)
{
record.set_value (double_value_);
record.set_value (-double_value_);
}

return record;
Expand Down
4 changes: 3 additions & 1 deletion tests/test_basic_reasoning.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1196,9 +1196,11 @@ void test_mathops (madara::knowledge::KnowledgeBase & knowledge)
knowledge.evaluate (".var3 = .var1 - .var2");
assert (knowledge.get (".var3").to_integer () == 5);

knowledge.evaluate (".var3 = .var1 -(- .var2)");
knowledge.evaluate (".var3 = .var1 -(-.var2)");
assert (knowledge.get (".var3").to_integer () == 11);

knowledge.print ();

knowledge.evaluate (".var3 = .var1 * .var2");
assert (knowledge.get (".var3").to_integer () == 24);

Expand Down

0 comments on commit 55381ba

Please sign in to comment.