Files
Upsilon/poincare/test/trigo.cpp
Émilie Feral e5e9f7cc41 [poincare][apps] Make preferences a const object accessible from
anywhere (poincare and apps)

Change-Id: I49cc6bf940d1efeb6b153daac949ffcb23999a8d
2017-02-20 09:39:24 +01:00

164 lines
6.0 KiB
C++

#include <quiz.h>
#include <poincare.h>
#include <ion.h>
#include <assert.h>
using namespace Poincare;
QUIZ_CASE(poincare_parse_trigo) {
{
Expression * e = Expression::parse("sin(0)");
Expression * e2 = e->simplify();
assert(e2->type() == Expression::Type::Sine);
delete e;
delete e2;
}
{
Expression * e = Expression::parse("cos(0)");
Expression * e2 = e->simplify();
assert(e2->type() == Expression::Type::Cosine);
delete e;
delete e2;
}
{
Expression * e = Expression::parse("tan(0)");
Expression * e2 = e->simplify();
assert(e2->type() == Expression::Type::Tangent);
delete e;
delete e2;
}
}
QUIZ_CASE(poincare_trigo_approximate) {
Expression * e = Expression::parse("cos(3)");
GlobalContext globalContext;
assert(e->approximate(globalContext, Expression::AngleUnit::Radian) == -0.9899924966f);
delete e;
e = Expression::parse("sin(3)");
assert(e->approximate(globalContext, Expression::AngleUnit::Radian) == 0.1411200081f);
delete e;
e = Expression::parse("tan(3)");
assert(e->approximate(globalContext, Expression::AngleUnit::Radian) == -0.1425465431f);
delete e;
e = Expression::parse("cosh(3)");
assert(e->approximate(globalContext, Expression::AngleUnit::Radian) == 10.067662f);
delete e;
e = Expression::parse("sinh(3)");
assert(e->approximate(globalContext, Expression::AngleUnit::Radian) == 10.01787493f);
delete e;
e = Expression::parse("tanh(3)");
assert(0.9950547537f - 0.0000001f <= e->approximate(globalContext) &&
e->approximate(globalContext) <= 0.9950547537f + 0.0000001f);
delete e;
}
QUIZ_CASE(poincare_trigo_evaluate) {
GlobalContext globalContext;
Expression * a = Expression::parse("cos(2)");
Expression * e = a->evaluate(globalContext, Expression::AngleUnit::Radian);
assert((-0.4161468365f - 0.000001f) <= (((Complex *)e)->a()) &&
(((Complex *)e)->a()) <= (-0.4161468365f + 0.000001f) && ((Complex *)e)->b() == 0.0f);
delete a;
delete e;
char expText1[10] ={'c','o', 's', '(', Ion::Charset::IComplex, '-', '4',')', 0};
a = Expression::parse(expText1);
e = a->evaluate(globalContext, Expression::AngleUnit::Radian);
assert((-1.0086248134f - 0.000001f) <= (((Complex *)e)->a()) &&
(((Complex *)e)->a()) <= (-1.0086248134f + 0.000001f) &&
-0.8893951958f - 0.000001f <= (((Complex *)e)->b()) &&
(((Complex *)e)->b()) <= -0.8893951958f + 0.000001f);
delete a;
delete e;
a = Expression::parse("sin(2)");
e = a->evaluate(globalContext, Expression::AngleUnit::Radian);
assert((0.9092974268f - 0.000001f) <= (((Complex *)e)->a()) &&
(((Complex *)e)->a()) <= (0.9092974268f + 0.000001f) && ((Complex *)e)->b() == 0.0f);
delete a;
delete e;
char expText2[10] ={'s','i', 'n', '(', Ion::Charset::IComplex, '-', '4',')', 0};
a = Expression::parse(expText2);
e = a->evaluate(globalContext, Expression::AngleUnit::Radian);
assert((1.16780727488f - 0.000001f) <= (((Complex *)e)->a()) &&
(((Complex *)e)->a()) <= (1.16780727488f + 0.000001f) &&
-0.768162763456f - 0.000001f <= (((Complex *)e)->b()) &&
(((Complex *)e)->b()) <= -0.768162763456f + 0.000001f);
delete a;
delete e;
a = Expression::parse("tan(2)");
e = a->evaluate(globalContext, Expression::AngleUnit::Radian);
assert((-2.185039863f - 0.000001f) <= (((Complex *)e)->a()) &&
(((Complex *)e)->a()) <= (-2.185039863f + 0.000001f) && ((Complex *)e)->b() == 0.0f);
delete a;
delete e;
char expText3[10] ={'t','a', 'n', '(', Ion::Charset::IComplex, '-', '4',')', 0};
a = Expression::parse(expText3);
e = a->evaluate(globalContext, Expression::AngleUnit::Radian);
assert(-0.27355308280f - 0.000001f <= (((Complex *)e)->a()) &&
(((Complex *)e)->a()) <= -0.27355308280f + 0.000001f &&
1.00281050758f - 0.000001f <= (((Complex *)e)->b()) &&
(((Complex *)e)->b()) <= 1.00281050758f + 0.000001f);
delete a;
delete e;
a = Expression::parse("cosh(2)");
e = a->evaluate(globalContext, Expression::AngleUnit::Radian);
assert((3.762195691f - 0.000001f) <= (((Complex *)e)->a()) &&
(((Complex *)e)->a()) <= (3.762195691f + 0.000001f) && ((Complex *)e)->b() == 0.0f);
delete a;
delete e;
char expText4[10] ={'c','o', 's', 'h','(', Ion::Charset::IComplex, '-', '4',')', 0};
a = Expression::parse(expText4);
e = a->evaluate(globalContext, Expression::AngleUnit::Radian);
assert((14.754701170f - 0.000001f) <= (((Complex *)e)->a()) &&
(((Complex *)e)->a()) <= (14.754701170f + 0.000001f) &&
-22.963673499f - 0.000001f <= (((Complex *)e)->b()) &&
(((Complex *)e)->b()) <= -22.963673499f + 0.000001f);
delete a;
delete e;
a = Expression::parse("sinh(2)");
e = a->evaluate(globalContext, Expression::AngleUnit::Radian);
assert((3.626860408f - 0.000001f) <= (((Complex *)e)->a()) &&
(((Complex *)e)->a()) <= (3.626860408f + 0.000001f) && ((Complex *)e)->b() == 0.0f);
delete a;
delete e;
char expText5[10] ={'s','i', 'n', 'h', '(', Ion::Charset::IComplex, '-', '4',')', 0};
a = Expression::parse(expText5);
e = a->evaluate(globalContext, Expression::AngleUnit::Radian);
assert((-14.74480518855f - 0.000001f) <= (((Complex *)e)->a()) &&
(((Complex *)e)->a()) <= (-14.74480518855f + 0.000001f) &&
22.97908557788f - 0.00001f <= (((Complex *)e)->b()) &&
(((Complex *)e)->b()) <= 22.97908557788f + 0.00001f);
delete a;
delete e;
a = Expression::parse("tanh(2)");
e = a->evaluate(globalContext, Expression::AngleUnit::Radian);
assert((0.9640275801f - 0.000001f) <= (((Complex *)e)->a()) &&
(((Complex *)e)->a()) <= (0.9640275801f + 0.000001f) && ((Complex *)e)->b() == 0.0f);
delete a;
delete e;
char expText6[10] ={'t','a', 'n', 'h','(', Ion::Charset::IComplex, '-', '4',')', 0};
a = Expression::parse(expText6);
e = a->evaluate(globalContext, Expression::AngleUnit::Radian);
assert(-1.0002790562f - 0.000001f <= (((Complex *)e)->a()) &&
(((Complex *)e)->a()) <= -1.0002790562f + 0.000001f &&
0.000610240921f - 0.000001f <= (((Complex *)e)->b()) &&
(((Complex *)e)->b()) <= 0.000610240921f + 0.000001f);
delete a;
delete e;
}