diff --git a/poincare/include/poincare.h b/poincare/include/poincare.h index 9fd9495dc..6b6564474 100644 --- a/poincare/include/poincare.h +++ b/poincare/include/poincare.h @@ -1,6 +1,8 @@ #ifndef POINCARE_H #define POINCARE_H +#define MATRICES_ARE_DEFINED 1 + #include #include #include diff --git a/poincare/test/parser.cpp b/poincare/test/parser.cpp index 5e46e6505..f5d0d3f81 100644 --- a/poincare/test/parser.cpp +++ b/poincare/test/parser.cpp @@ -6,36 +6,40 @@ using namespace Poincare; +constexpr Expression::AngleUnit Degree = Expression::AngleUnit::Degree; +constexpr Expression::AngleUnit Radian = Expression::AngleUnit::Radian; + +void assert_expression_parses_to(const char * text, float result, Context * context, Expression::AngleUnit angleUnit = Degree) { + char buffer_text[100] = {}; + for (int i=0; iapproximate(*context, angleUnit) - result) < 0.0001f); +} + QUIZ_CASE(poincare_parser) { GlobalContext globalContext; - char text0[10] = {'1', '.', '2', '*', Ion::Charset::Exponential, '^', '(', '1', ')', 0}; - Expression * a = Expression::parse(text0); - float f =1.2f*M_E; - assert(a->approximate(globalContext) == f); - - char text1[10] = {Ion::Charset::Exponential, '^', '2', '*', Ion::Charset::Exponential, '^', '(', '1', ')', 0}; - a = Expression::parse(text1); - f = powf(M_E, 2.0f)*M_E; - assert(a->approximate(globalContext) == f); - - a = Expression::parse("2*3^4+2"); - f = 2.0f*powf(3.0f, 4.0f)+2.0f; - assert(a->approximate(globalContext) == f); - - a = Expression::parse("-2*3^4+2"); - f = -2.0f*powf(3.0f, 4.0f)+2.0f; - assert(a->approximate(globalContext) == f); - - a = Expression::parse("-sin(3)*2-3"); - f = -sinf(3.0f)*2.0f-3.0f; - assert(a->approximate(globalContext, Expression::AngleUnit::Radian) == f); - - a = Expression::parse("-.003"); - f = -0.003f; - assert(a->approximate(globalContext) == f); - - char text2[10] = {'.', '0', '2', Ion::Charset::Exponent, '2', 0}; - a = Expression::parse(text2); - f = 2.0f; - assert(a->approximate(globalContext) == f); -} \ No newline at end of file + assert_expression_parses_to("1.2*e^(1)", 1.2*M_E, &globalContext); + assert_expression_parses_to("e^2*e^(1)", powf(M_E, 2.0f)*M_E, &globalContext); + assert_expression_parses_to("2*3^4+2", 2.0f*powf(3.0f, 4.0f)+2.0f, &globalContext); + assert_expression_parses_to("-2*3^4+2", -2.0f*powf(3.0f, 4.0f)+2.0f, &globalContext); + assert_expression_parses_to("-sin(3)*2-3", -sinf(3.0f)*2.0f-3.0f, &globalContext, Radian); + assert_expression_parses_to("-.003", -0.003f, &globalContext); + assert_expression_parses_to(".02E2", 2.0f, &globalContext); + assert_expression_parses_to("5-2/3", 5.0f-2.0f/3.0f, &globalContext); + assert_expression_parses_to("2/3-5", 2.0f/3.0f-5.0f, &globalContext); + assert_expression_parses_to("-2/3-5", -2.0f/3.0f-5.0f, &globalContext); + assert_expression_parses_to("sin(3)2(4+2)", sinf(3.0f)*2.0f*(4.0f+2.0f), &globalContext, Radian); + assert_expression_parses_to("4/2*(2+3)", 4.0f/2.0f*(2.0f+3.0f), &globalContext, Radian); + assert_expression_parses_to("4/2*(2+3)", 4.0f/2.0f*(2.0f+3.0f), &globalContext, Radian); +}