[poincare] Add test on complex operations

Change-Id: I474e4a14273ac89775e0f7747222445cabbe2df8
This commit is contained in:
Émilie Feral
2017-02-03 15:53:24 +01:00
parent 5d93c7244b
commit 1d5d127cd8
7 changed files with 353 additions and 1 deletions

View File

@@ -1,5 +1,6 @@
#include <quiz.h>
#include <poincare.h>
#include <ion.h>
#include <assert.h>
QUIZ_CASE(poincare_addition_approximate) {
@@ -17,6 +18,13 @@ QUIZ_CASE(poincare_addition_evaluate) {
delete a;
delete e;
char expText1[8] ={'3','+',Ion::Charset::SmallIota, '+', '4', '+', Ion::Charset::SmallIota, 0};
a = Expression::parse(expText1);
e = a->evaluate(globalContext);
assert(((Complex *)e)->a() == 7.0f && ((Complex *)e)->b() == 2.0f);
delete a;
delete e;
a = Expression::parse("[[1,2][3,4][5,6]]+3");
e = a->evaluate(globalContext);
assert(e->operand(0)->approximate(globalContext) == 4.0f);
@@ -28,6 +36,41 @@ QUIZ_CASE(poincare_addition_evaluate) {
delete a;
delete e;
char expText2[100] ={'[','[','1',',','2','+', Ion::Charset::SmallIota,']','[','3',',','4',']','[','5',',','6',']',']','+','3','+',Ion::Charset::SmallIota, 0};
a = Expression::parse(expText2);
e = a->evaluate(globalContext);
assert(((Complex *)e->operand(0))->a() == 4.0f && ((Complex *)e->operand(0))->b() == 1.0f);
assert(((Complex *)e->operand(1))->a() == 5.0f && ((Complex *)e->operand(1))->b() == 2.0f);
assert(((Complex *)e->operand(2))->a() == 6.0f && ((Complex *)e->operand(2))->b() == 1.0f);
assert(((Complex *)e->operand(3))->a() == 7.0f && ((Complex *)e->operand(3))->b() == 1.0f);
assert(((Complex *)e->operand(4))->a() == 8.0f && ((Complex *)e->operand(4))->b() == 1.0f);
assert(((Complex *)e->operand(5))->a() == 9.0f && ((Complex *)e->operand(5))->b() == 1.0f);
delete a;
delete e;
a = Expression::parse("3+[[1,2][3,4][5,6]]");
e = a->evaluate(globalContext);
assert(e->operand(0)->approximate(globalContext) == 4.0f);
assert(e->operand(1)->approximate(globalContext) == 5.0f);
assert(e->operand(2)->approximate(globalContext) == 6.0f);
assert(e->operand(3)->approximate(globalContext) == 7.0f);
assert(e->operand(4)->approximate(globalContext) == 8.0f);
assert(e->operand(5)->approximate(globalContext) == 9.0f);
delete a;
delete e;
char expText3[100] ={'3','+',Ion::Charset::SmallIota, '+','[','[','1',',','2','+', Ion::Charset::SmallIota,']','[','3',',','4',']','[','5',',','6',']',']', 0};
a = Expression::parse(expText3);
e = a->evaluate(globalContext);
assert(((Complex *)e->operand(0))->a() == 4.0f && ((Complex *)e->operand(0))->b() == 1.0f);
assert(((Complex *)e->operand(1))->a() == 5.0f && ((Complex *)e->operand(1))->b() == 2.0f);
assert(((Complex *)e->operand(2))->a() == 6.0f && ((Complex *)e->operand(2))->b() == 1.0f);
assert(((Complex *)e->operand(3))->a() == 7.0f && ((Complex *)e->operand(3))->b() == 1.0f);
assert(((Complex *)e->operand(4))->a() == 8.0f && ((Complex *)e->operand(4))->b() == 1.0f);
assert(((Complex *)e->operand(5))->a() == 9.0f && ((Complex *)e->operand(5))->b() == 1.0f);
delete a;
delete e;
a = Expression::parse("[[1,2][3,4][5,6]]+[[1,2][3,4][5,6]]");
e = a->evaluate(globalContext);
assert(e->operand(0)->approximate(globalContext) == 2.0f);
@@ -38,4 +81,17 @@ QUIZ_CASE(poincare_addition_evaluate) {
assert(e->operand(5)->approximate(globalContext) == 12.0f);
delete a;
delete e;
char expText4[100] ={'[','[','1',',','2','+', Ion::Charset::SmallIota,']','[','3',',','4',']','[','5',',','6',']',']','+',
'[','[','1',',','2','+', Ion::Charset::SmallIota,']','[','3',',','4',']','[','5',',','6','+', Ion::Charset::SmallIota,']',']',0};
a = Expression::parse(expText4);
e = a->evaluate(globalContext);
assert(((Complex *)e->operand(0))->a() == 2.0f && ((Complex *)e->operand(0))->b() == 0.0f);
assert(((Complex *)e->operand(1))->a() == 4.0f && ((Complex *)e->operand(1))->b() == 2.0f);
assert(((Complex *)e->operand(2))->a() == 6.0f && ((Complex *)e->operand(2))->b() == 0.0f);
assert(((Complex *)e->operand(3))->a() == 8.0f && ((Complex *)e->operand(3))->b() == 0.0f);
assert(((Complex *)e->operand(4))->a() == 10.0f && ((Complex *)e->operand(4))->b() == 0.0f);
assert(((Complex *)e->operand(5))->a() == 12.0f && ((Complex *)e->operand(5))->b() == 1.0f);
delete a;
delete e;
}

View File

@@ -1,6 +1,7 @@
#include <quiz.h>
#include <poincare.h>
#include <string.h>
#include <ion.h>
#include <assert.h>
QUIZ_CASE(poincare_complex_to_text) {
@@ -41,6 +42,16 @@ QUIZ_CASE(poincare_complex_to_text) {
char buffer3[6];
Complex::convertFloatToText(123.421f, buffer3, 6, 5, Expression::DisplayMode::Auto);
assert(strcmp(buffer3, "1.2E2") == 0);
Complex(1, 2).writeTextInBuffer(buffer, 14);
char text1[14] = {'1','+', '2', '*', Ion::Charset::SmallIota, 0};
assert(strcmp(buffer, text1) == 0);
Complex(-1.3, 2.444).writeTextInBuffer(buffer, 14);
char text2[14] = {'-','1','.','3','+', '2','.','4','4','4', '*', Ion::Charset::SmallIota, 0};
assert(strcmp(buffer, text2) == 0);
Complex(-1.3, -2.444).writeTextInBuffer(buffer, 14);
char text3[14] = {'-','1','.','3','-', '2','.','4','4','4', '*', Ion::Charset::SmallIota, 0};
assert(strcmp(buffer, text3) == 0);
}
QUIZ_CASE(poincare_complex_approximate) {
@@ -58,3 +69,14 @@ QUIZ_CASE(poincare_complex_evaluate) {
delete a;
delete e;
}
QUIZ_CASE(poincare_complex_constructor) {
Complex * a = new Complex(2.0f, 3.0f, false);
assert(a->a() == 2.0f && a->b() == 3.0f);
assert(a->r() == 3.60555124f && a->th() == 0.982793748f);
delete a;
a = new Complex(3.60555124f, 0.982793748f, true);
assert(a->a() == 2.0f && a->b() == 3.0f);
delete a;
}

View File

@@ -1,5 +1,6 @@
#include <quiz.h>
#include <poincare.h>
#include <ion.h>
#include <assert.h>
QUIZ_CASE(poincare_fraction_approximate) {
@@ -17,6 +18,13 @@ QUIZ_CASE(poincare_fraction_evaluate) {
delete a;
delete e;
char expText1[50] ={'(','3','+',Ion::Charset::SmallIota,')', '/', '(','4', '+', Ion::Charset::SmallIota, ')',0};
a = Expression::parse(expText1);
e = a->evaluate(globalContext);
assert(((Complex *)e)->a() == 13.0f/17.0f && ((Complex *)e)->b() == 1.0f/17.0f);
delete a;
delete e;
a = Expression::parse("[[1,2][3,4][5,6]]/2");
e = a->evaluate(globalContext);
assert(e->operand(0)->approximate(globalContext) == 0.5f);
@@ -27,5 +35,18 @@ QUIZ_CASE(poincare_fraction_evaluate) {
assert(e->operand(5)->approximate(globalContext) == 3.0f);
delete a;
delete e;
char expText2[100] ={'[','[','1',',','2','+', Ion::Charset::SmallIota,']','[','3',',','4',']','[','5',',','6',']',']','/','(','4','+',Ion::Charset::SmallIota, ')',0};
a = Expression::parse(expText2);
e = a->evaluate(globalContext);
assert(((Complex *)e->operand(0))->a() == 4.0f/17.0f && ((Complex *)e->operand(0))->b() == -1.0f/17.0f);
assert(((Complex *)e->operand(1))->a() == 9.0f/17.0f && ((Complex *)e->operand(1))->b() == 2.0f/17.0f);
assert(((Complex *)e->operand(2))->a() == 12.0f/17.0f && ((Complex *)e->operand(2))->b() == -3.0f/17.0f);
assert(((Complex *)e->operand(3))->a() == 16.0f/17.0f && ((Complex *)e->operand(3))->b() == -4.0f/17.0f);
assert(((Complex *)e->operand(4))->a() == 20.0f/17.0f && ((Complex *)e->operand(4))->b() == -5.0f/17.0f);
assert(((Complex *)e->operand(5))->a() == 24.0f/17.0f && ((Complex *)e->operand(5))->b() == -6.0f/17.0f);
delete a;
delete e;
// TODO: test matrice fraction when implemented
}

View File

@@ -1,5 +1,6 @@
#include <quiz.h>
#include <poincare.h>
#include <ion.h>
#include <assert.h>
QUIZ_CASE(poincare_power_approximate) {
@@ -17,6 +18,21 @@ QUIZ_CASE(poincare_power_evaluate) {
delete a;
delete e;
char expText1[15] ={'(','3','+',Ion::Charset::SmallIota, ')', '^', '4', 0};
a = Expression::parse(expText1);
e = a->evaluate(globalContext);
assert(28.0f - 0.00001f <= (((Complex *)e)->a()) && (((Complex *)e)->a()) <= 28.0f + 0.00001f &&
96.0f - 0.00001f <= (((Complex *)e)->b()) && (((Complex *)e)->b()) <= 96.0f + 0.00001f);
delete a;
delete e;
char expText2[15] ={'4', '^','(','3','+',Ion::Charset::SmallIota, ')', 0};
a = Expression::parse(expText2);
e = a->evaluate(globalContext);
assert(((Complex *)e)->a() == 11.7412464f && ((Complex *)e)->b() == 62.9137754f);
delete a;
delete e;
a = Expression::parse("[[1,2][3,4]]^3");
e = a->evaluate(globalContext);
assert(e->operand(0)->approximate(globalContext) == 37.0f);

View File

@@ -1,8 +1,9 @@
#include <quiz.h>
#include <poincare.h>
#include <ion.h>
#include <assert.h>
QUIZ_CASE(poincare_procuct_approximate) {
QUIZ_CASE(poincare_product_approximate) {
GlobalContext globalContext;
Expression * p = Expression::parse("1*2");
assert(p->approximate(globalContext) == 2.0f);
@@ -17,6 +18,13 @@ QUIZ_CASE(poincare_product_evaluate) {
delete a;
delete e;
char expText1[15] ={'(','3','+',Ion::Charset::SmallIota, ')', '*', '(','4', '+', Ion::Charset::SmallIota, ')', 0};
a = Expression::parse(expText1);
e = a->evaluate(globalContext);
assert(((Complex *)e)->a() == 11.0f && ((Complex *)e)->b() == 7.0f);
delete a;
delete e;
a = Expression::parse("[[1,2][3,4][5,6]]*2");
e = a->evaluate(globalContext);
assert(e->operand(0)->approximate(globalContext) == 2.0f);
@@ -28,6 +36,19 @@ QUIZ_CASE(poincare_product_evaluate) {
delete a;
delete e;
char expText2[100] ={'[','[','1',',','2','+', Ion::Charset::SmallIota,']','[','3',',','4',']','[','5',',','6',']',']','*', '(','3','+',Ion::Charset::SmallIota, ')', 0};
a = Expression::parse(expText2);
e = a->evaluate(globalContext);
assert(((Complex *)e->operand(0))->a() == 3.0f && ((Complex *)e->operand(0))->b() == 1.0f);
assert(((Complex *)e->operand(1))->a() == 5.0f && ((Complex *)e->operand(1))->b() == 5.0f);
assert(((Complex *)e->operand(2))->a() == 9.0f && ((Complex *)e->operand(2))->b() == 3.0f);
assert(((Complex *)e->operand(3))->a() == 12.0f && ((Complex *)e->operand(3))->b() == 4.0f);
assert(((Complex *)e->operand(4))->a() == 15.0f && ((Complex *)e->operand(4))->b() == 5.0f);
assert(((Complex *)e->operand(5))->a() == 18.0f && ((Complex *)e->operand(5))->b() == 6.0f);
delete a;
delete e;
a = Expression::parse("3*[[1,2][3,4][5,6]]");
e = a->evaluate(globalContext);
assert(e->operand(0)->approximate(globalContext) == 3.0f);
@@ -39,6 +60,18 @@ QUIZ_CASE(poincare_product_evaluate) {
delete a;
delete e;
char expText3[100] ={'(','3','+',Ion::Charset::SmallIota, ')','*','[','[','1',',','2','+', Ion::Charset::SmallIota,']','[','3',',','4',']','[','5',',','6',']',']', 0};
a = Expression::parse(expText3);
e = a->evaluate(globalContext);
assert(((Complex *)e->operand(0))->a() == 3.0f && ((Complex *)e->operand(0))->b() == 1.0f);
assert(((Complex *)e->operand(1))->a() == 5.0f && ((Complex *)e->operand(1))->b() == 5.0f);
assert(((Complex *)e->operand(2))->a() == 9.0f && ((Complex *)e->operand(2))->b() == 3.0f);
assert(((Complex *)e->operand(3))->a() == 12.0f && ((Complex *)e->operand(3))->b() == 4.0f);
assert(((Complex *)e->operand(4))->a() == 15.0f && ((Complex *)e->operand(4))->b() == 5.0f);
assert(((Complex *)e->operand(5))->a() == 18.0f && ((Complex *)e->operand(5))->b() == 6.0f);
delete a;
delete e;
a = Expression::parse("[[1,2][3,4][5,6]]*[[1,2,3,4][5,6,7,8]]");
e = a->evaluate(globalContext);
assert(e->operand(0)->approximate(globalContext) == 11.0f);
@@ -55,4 +88,23 @@ QUIZ_CASE(poincare_product_evaluate) {
assert(e->operand(11)->approximate(globalContext) == 68.0f);
delete a;
delete e;
char expText4[100] ={'[','[','1',',','2','+', Ion::Charset::SmallIota,']','[','3',',','4',']','[','5',',','6',']',']','*',
'[','[','1',',','2','+', Ion::Charset::SmallIota,',','3',',','4',']','[','5',',','6','+', Ion::Charset::SmallIota,',', '7',',','8',']',']',0};
a = Expression::parse(expText4);
e = a->evaluate(globalContext);
assert(((Complex *)e->operand(0))->a() == 11.0f && ((Complex *)e->operand(0))->b() == 5.0f);
assert(((Complex *)e->operand(1))->a() == 13.0f && ((Complex *)e->operand(1))->b() == 9.0f);
assert(((Complex *)e->operand(2))->a() == 17.0f && ((Complex *)e->operand(2))->b() == 7.0f);
assert(((Complex *)e->operand(3))->a() == 20.0f && ((Complex *)e->operand(3))->b() == 8.0f);
assert(((Complex *)e->operand(4))->a() == 23.0f && ((Complex *)e->operand(4))->b() == 0.0f);
assert(((Complex *)e->operand(5))->a() == 30.0f && ((Complex *)e->operand(5))->b() == 7.0f);
assert(((Complex *)e->operand(6))->a() == 37.0f && ((Complex *)e->operand(6))->b() == 0.0f);
assert(((Complex *)e->operand(7))->a() == 44.0f && ((Complex *)e->operand(7))->b() == 0.0f);
assert(((Complex *)e->operand(8))->a() == 35.0f && ((Complex *)e->operand(8))->b() == 0.0f);
assert(((Complex *)e->operand(9))->a() == 46.0f && ((Complex *)e->operand(9))->b() == 11.0f);
assert(((Complex *)e->operand(10))->a() == 57.0f && ((Complex *)e->operand(10))->b() == 0.0f);
assert(((Complex *)e->operand(11))->a() == 68.0f && ((Complex *)e->operand(11))->b() == 0.0f);
delete a;
delete e;
}

View File

@@ -1,5 +1,6 @@
#include <quiz.h>
#include <poincare.h>
#include <ion.h>
#include <assert.h>
QUIZ_CASE(poincare_subtraction_approximate) {
@@ -17,6 +18,13 @@ QUIZ_CASE(poincare_substraction_evaluate) {
delete a;
delete e;
char expText1[10] ={'3','+',Ion::Charset::SmallIota, '-', '(', '4', '+', Ion::Charset::SmallIota, ')', 0};
a = Expression::parse(expText1);
e = a->evaluate(globalContext);
assert(((Complex *)e)->a() == -1.0f && ((Complex *)e)->b() == 0.0f);
delete a;
delete e;
a = Expression::parse("[[1,2][3,4][5,6]]-3");
e = a->evaluate(globalContext);
assert(e->operand(0)->approximate(globalContext) == -2.0f);
@@ -28,6 +36,18 @@ QUIZ_CASE(poincare_substraction_evaluate) {
delete a;
delete e;
char expText2[100] ={'[','[','1',',','2','+', Ion::Charset::SmallIota,']','[','3',',','4',']','[','5',',','6',']',']','-','(', '4', '+', Ion::Charset::SmallIota, ')', 0};
a = Expression::parse(expText2);
e = a->evaluate(globalContext);
assert(((Complex *)e->operand(0))->a() == -3.0f && ((Complex *)e->operand(0))->b() == -1.0f);
assert(((Complex *)e->operand(1))->a() == -2.0f && ((Complex *)e->operand(1))->b() == 0.0f);
assert(((Complex *)e->operand(2))->a() == -1.0f && ((Complex *)e->operand(2))->b() == -1.0f);
assert(((Complex *)e->operand(3))->a() == 0.0f && ((Complex *)e->operand(3))->b() == -1.0f);
assert(((Complex *)e->operand(4))->a() == 1.0f && ((Complex *)e->operand(4))->b() == -1.0f);
assert(((Complex *)e->operand(5))->a() == 2.0f && ((Complex *)e->operand(5))->b() == -1.0f);
delete a;
delete e;
a = Expression::parse("3-[[1,2][3,4][5,6]]");
e = a->evaluate(globalContext);
assert(e->operand(0)->approximate(globalContext) == 2.0f);
@@ -39,6 +59,18 @@ QUIZ_CASE(poincare_substraction_evaluate) {
delete a;
delete e;
char expText3[100] ={'3','+',Ion::Charset::SmallIota, '-','[','[','1',',','2','+', Ion::Charset::SmallIota,']','[','3',',','4',']','[','5',',','6',']',']', 0};
a = Expression::parse(expText3);
e = a->evaluate(globalContext);
assert(((Complex *)e->operand(0))->a() == 2.0f && ((Complex *)e->operand(0))->b() == 1.0f);
assert(((Complex *)e->operand(1))->a() == 1.0f && ((Complex *)e->operand(1))->b() == 0.0f);
assert(((Complex *)e->operand(2))->a() == 0.0f && ((Complex *)e->operand(2))->b() == 1.0f);
assert(((Complex *)e->operand(3))->a() == -1.0f && ((Complex *)e->operand(3))->b() == 1.0f);
assert(((Complex *)e->operand(4))->a() == -2.0f && ((Complex *)e->operand(4))->b() == 1.0f);
assert(((Complex *)e->operand(5))->a() == -3.0f && ((Complex *)e->operand(5))->b() == 1.0f);
delete a;
delete e;
a = Expression::parse("[[1,2][3,4][5,6]]-[[6,5][4,3][2,1]]");
e = a->evaluate(globalContext);
assert(e->operand(0)->approximate(globalContext) == -5.0f);
@@ -49,4 +81,17 @@ QUIZ_CASE(poincare_substraction_evaluate) {
assert(e->operand(5)->approximate(globalContext) == 5.0f);
delete a;
delete e;
char expText4[100] ={'[','[','1',',','2','+', Ion::Charset::SmallIota,']','[','3',',','4',']','[','5',',','6',']',']','-',
'[','[','1',',','2','+', Ion::Charset::SmallIota,']','[','3',',','4',']','[','5',',','6','+', Ion::Charset::SmallIota,']',']',0};
a = Expression::parse(expText4);
e = a->evaluate(globalContext);
assert(((Complex *)e->operand(0))->a() == 0.0f && ((Complex *)e->operand(0))->b() == 0.0f);
assert(((Complex *)e->operand(1))->a() == 0.0f && ((Complex *)e->operand(1))->b() == 0.0f);
assert(((Complex *)e->operand(2))->a() == 0.0f && ((Complex *)e->operand(2))->b() == 0.0f);
assert(((Complex *)e->operand(3))->a() == 0.0f && ((Complex *)e->operand(3))->b() == 0.0f);
assert(((Complex *)e->operand(4))->a() == 0.0f && ((Complex *)e->operand(4))->b() == 0.0f);
assert(((Complex *)e->operand(5))->a() == 0.0f && ((Complex *)e->operand(5))->b() == -1.0f);
delete a;
delete e;
}

View File

@@ -1,5 +1,6 @@
#include <quiz.h>
#include <poincare.h>
#include <ion.h>
#include <assert.h>
QUIZ_CASE(poincare_parse_trigo) {
@@ -7,15 +8,154 @@ 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) == -0.9899924966f);
delete e;
e = Expression::parse("sin(3)");
assert(e->approximate(globalContext) == 0.1411200081f);
delete e;
e = Expression::parse("tan(3)");
assert(e->approximate(globalContext) == -0.1425465431f);
delete e;
e = Expression::parse("cosh(3)");
assert(e->approximate(globalContext) == 10.067662f);
delete e;
e = Expression::parse("sinh(3)");
assert(e->approximate(globalContext) == 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);
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::SmallIota, '-', '4',')', 0};
a = Expression::parse(expText1);
e = a->evaluate(globalContext);
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);
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::SmallIota, '-', '4',')', 0};
a = Expression::parse(expText2);
e = a->evaluate(globalContext);
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);
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::SmallIota, '-', '4',')', 0};
a = Expression::parse(expText3);
e = a->evaluate(globalContext);
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);
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::SmallIota, '-', '4',')', 0};
a = Expression::parse(expText4);
e = a->evaluate(globalContext);
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);
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::SmallIota, '-', '4',')', 0};
a = Expression::parse(expText5);
e = a->evaluate(globalContext);
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);
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::SmallIota, '-', '4',')', 0};
a = Expression::parse(expText6);
e = a->evaluate(globalContext);
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;
}