mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
59 lines
2.2 KiB
C++
59 lines
2.2 KiB
C++
#include <quiz.h>
|
|
#include <poincare.h>
|
|
#include <poincare/exception_checkpoint.h>
|
|
#include <ion.h>
|
|
#include <cmath>
|
|
#include <assert.h>
|
|
#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);
|
|
#if 0
|
|
assert_parsed_expression_evaluates_to<float>("-2-3", "-5");
|
|
assert_parsed_expression_evaluates_to<float>("1.2*X^(1)", "3.261938");
|
|
assert_parsed_expression_evaluates_to<float>("X^2*X^(1)", "20.0855", Radian, Cartesian, 6); // WARNING: the 7th significant digits is wrong on simulator
|
|
assert_parsed_expression_evaluates_to<double>("X^2*X^(1)", "20.085536923188");
|
|
assert_parsed_expression_evaluates_to<double>("2*3^4+2", "164");
|
|
assert_parsed_expression_evaluates_to<float>("-2*3^4+2", "-160");
|
|
assert_parsed_expression_evaluates_to<double>("-sin(3)*2-3", "-3.2822400161197", Radian);
|
|
assert_parsed_expression_evaluates_to<float>("-.003", "-0.003");
|
|
assert_parsed_expression_evaluates_to<double>(".02E2", "2");
|
|
assert_parsed_expression_evaluates_to<float>("5-2/3", "4.333333");
|
|
assert_parsed_expression_evaluates_to<double>("2/3-5", "-4.3333333333333");
|
|
assert_parsed_expression_evaluates_to<float>("-2/3-5", "-5.666667");
|
|
assert_parsed_expression_evaluates_to<double>("sin(3)2(4+2)", "1.6934400967184", Radian);
|
|
assert_parsed_expression_evaluates_to<float>("4/2*(2+3)", "10");
|
|
assert_parsed_expression_evaluates_to<double>("4/2*(2+3)", "10");
|
|
#endif
|
|
}
|
|
|
|
|
|
|
|
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 */
|
|
}
|