#include #include #include #include #include #include #include "tree/helpers.h" #include "helper.h" using namespace Poincare; QUIZ_CASE(poincare_parser) { int initialPoolSize = pool_size(); assert_parsed_expression_type("2+3", ExpressionNode::Type::Addition); assert_pool_size(initialPoolSize); assert_parsed_expression_evaluates_to("-2-3", "-5"); assert_parsed_expression_evaluates_to("1.2*X^(1)", "3.261938"); assert_parsed_expression_evaluates_to("X^2*X^(1)", "20.0855", Radian, Cartesian, 6); // WARNING: the 7th significant digits is wrong on simulator assert_parsed_expression_evaluates_to("X^2*X^(1)", "20.085536923188"); assert_parsed_expression_evaluates_to("2*3^4+2", "164"); assert_parsed_expression_evaluates_to("-2*3^4+2", "-160"); assert_parsed_expression_evaluates_to("-sin(3)*2-3", "-3.2822400161197", Radian); assert_parsed_expression_evaluates_to("-.003", "-0.003"); assert_parsed_expression_evaluates_to(".02E2", "2"); assert_parsed_expression_evaluates_to("5-2/3", "4.333333"); assert_parsed_expression_evaluates_to("2/3-5", "-4.3333333333333"); assert_parsed_expression_evaluates_to("-2/3-5", "-5.666667"); assert_parsed_expression_evaluates_to("sin(3)2(4+2)", "1.6934400967184", Radian); assert_parsed_expression_evaluates_to("4/2*(2+3)", "10"); assert_parsed_expression_evaluates_to("4/2*(2+3)", "10"); } QUIZ_CASE(poincare_parser_memory_exhaustion) { int initialPoolSize = pool_size(); int memoryFailureHasBeenHandled = false; { Poincare::ExceptionCheckpoint ecp; if (ExceptionRun(ecp)) { Addition a = Addition(); while (true) { Expression e = Expression::parse("1+2+3+4+5+6+7+8+9+10"); a.addChildAtIndexInPlace(e, 0, a.numberOfChildren()); } } else { memoryFailureHasBeenHandled = true; } } assert(memoryFailureHasBeenHandled); assert_pool_size(initialPoolSize); Expression e = Expression::parse("1+1"); /* Stupid check to make sure the global variable generated by Bison is not * ruining everything */ }