diff --git a/poincare/test/approximation.cpp b/poincare/test/approximation.cpp index 541198c8b..00b51a122 100644 --- a/poincare/test/approximation.cpp +++ b/poincare/test/approximation.cpp @@ -938,6 +938,9 @@ QUIZ_CASE(poincare_approximation_mix) { assert_expression_approximates_to("sin(3)2(4+2)", "1.6934400967184", Radian); assert_expression_approximates_to("4/2×(2+3)", "10"); assert_expression_approximates_to("4/2×(2+3)", "10"); + + assert_expression_simplifies_and_approximates_to("1.0092^(20)", "1.2010050593402"); + assert_expression_simplifies_and_approximates_to("1.0092^(50)×ln(3/2)", "6.4093734888993ᴇ-1"); } diff --git a/poincare/test/helper.cpp b/poincare/test/helper.cpp index 619881ef0..67d035b41 100644 --- a/poincare/test/helper.cpp +++ b/poincare/test/helper.cpp @@ -108,6 +108,16 @@ void assert_expression_approximates_to(const char * expression, const char * app }, numberOfDigits); } +void assert_expression_simplifies_and_approximates_to(const char * expression, const char * approximation, Preferences::AngleUnit angleUnit, Preferences::ComplexFormat complexFormat, int numberOfSignificantDigits) { + int numberOfDigits = numberOfSignificantDigits > 0 ? numberOfSignificantDigits : PrintFloat::k_numberOfStoredSignificantDigits; + assert_parsed_expression_process_to(expression, approximation, SystemForApproximation, complexFormat, angleUnit, ReplaceAllSymbolsWithDefinitionsOrUndefined, [](Expression e, ExpressionNode::ReductionContext reductionContext) { + Expression reduced; + Expression approximated; + e.simplifyAndApproximate(&reduced, &approximated, reductionContext.context(), reductionContext.complexFormat(), reductionContext.angleUnit(), reductionContext.symbolicComputation()); + return approximated; + }, numberOfDigits); +} + template void assert_expression_simplifies_approximates_to(const char * expression, const char * approximation, Preferences::AngleUnit angleUnit, Preferences::ComplexFormat complexFormat, int numberOfSignificantDigits) { int numberOfDigits = sizeof(T) == sizeof(double) ? PrintFloat::k_numberOfStoredSignificantDigits : PrintFloat::k_numberOfPrintedSignificantDigits; diff --git a/poincare/test/helper.h b/poincare/test/helper.h index 574adc81d..5e7f5942e 100644 --- a/poincare/test/helper.h +++ b/poincare/test/helper.h @@ -43,6 +43,7 @@ void assert_parsed_expression_simplify_to(const char * expression, const char * template void assert_expression_approximates_to(const char * expression, const char * approximation, Poincare::Preferences::AngleUnit angleUnit = Degree, Poincare::Preferences::ComplexFormat complexFormat = Cartesian, int numberOfSignificantDigits = -1); +void assert_expression_simplifies_and_approximates_to(const char * expression, const char * approximation, Poincare::Preferences::AngleUnit angleUnit = Degree, Poincare::Preferences::ComplexFormat complexFormat = Cartesian, int numberOfSignificantDigits = -1); template void assert_expression_simplifies_approximates_to(const char * expression, const char * approximation, Poincare::Preferences::AngleUnit angleUnit = Degree, Poincare::Preferences::ComplexFormat complexFormat = Cartesian, int numberOfSignificantDigits = -1);