diff --git a/poincare/test/helper.cpp b/poincare/test/helper.cpp index 90e0af046..45d237681 100644 --- a/poincare/test/helper.cpp +++ b/poincare/test/helper.cpp @@ -118,6 +118,7 @@ typedef Expression (*ProcessExpression)(Expression, Context & context, Preferenc void assert_parsed_expression_process_to(const char * expression, const char * result, Preferences::AngleUnit angleUnit, Preferences::ComplexFormat complexFormat, ProcessExpression process, int numberOfSignifiantDigits = PrintFloat::k_numberOfStoredSignificantDigits) { Shared::GlobalContext globalContext; Expression e = parse_expression(expression); + #if POINCARE_TESTS_PRINT_EXPRESSIONS cout << " Entry expression: " << expression << "----" << endl; print_expression(e, 0); @@ -149,6 +150,13 @@ void assert_parsed_expression_evaluates_to(const char * expression, const char * }, numberOfDigits); } +template +void assert_parsed_expression_approximates_with_value_for_symbol(Expression expression, const char * symbol, T value, T approximation, Poincare::Preferences::AngleUnit angleUnit) { + Shared::GlobalContext globalContext; + T result = expression.approximateWithValueForSymbol(symbol, value, globalContext, angleUnit); + quiz_assert(std::fabs(result - approximation) < 10.0*Expression::epsilon()); +} + void assert_parsed_expression_simplify_to(const char * expression, const char * simplifiedExpression, Preferences::AngleUnit angleUnit) { #if POINCARE_TESTS_PRINT_EXPRESSIONS cout << "--------- Simplification ---------" << endl; @@ -199,3 +207,5 @@ void assert_expression_layout_serialize_to(Poincare::Layout layout, const char * template void assert_parsed_expression_evaluates_to(char const*, char const *, Poincare::Preferences::AngleUnit, Poincare::Preferences::ComplexFormat, int); template void assert_parsed_expression_evaluates_to(char const*, char const *, Poincare::Preferences::AngleUnit, Poincare::Preferences::ComplexFormat, int); +template void assert_parsed_expression_approximates_with_value_for_symbol(Poincare::Expression, const char *, float, float, Poincare::Preferences::AngleUnit); +template void assert_parsed_expression_approximates_with_value_for_symbol(Poincare::Expression, const char *, double, double, Poincare::Preferences::AngleUnit); diff --git a/poincare/test/helper.h b/poincare/test/helper.h index e1c04315b..1792f36bf 100644 --- a/poincare/test/helper.h +++ b/poincare/test/helper.h @@ -26,6 +26,10 @@ void assert_simplify(const char * expression); template void assert_parsed_expression_evaluates_to(const char * expression, const char * approximation, Poincare::Preferences::AngleUnit angleUnit = Degree, Poincare::Preferences::ComplexFormat complexFormat = Cartesian, int numberOfSignificantDigits = -1); + +template +void assert_parsed_expression_approximates_with_value_for_symbol(Poincare::Expression expression, const char * symbol, T value, T approximation, Poincare::Preferences::AngleUnit angleUnit = Degree); + void assert_parsed_expression_simplify_to(const char * expression, const char * simplifiedExpression, Poincare::Preferences::AngleUnit angleUnit = Poincare::Preferences::AngleUnit::Radian); void assert_parsed_expression_serialize_to(Poincare::Expression expression, const char * serializedExpression, Poincare::Preferences::PrintFloatMode mode = DecimalMode, int numberOfSignifiantDigits = -1);