diff --git a/poincare/test/addition.cpp b/poincare/test/addition.cpp index 8f1d5e9e6..762ead39b 100644 --- a/poincare/test/addition.cpp +++ b/poincare/test/addition.cpp @@ -1,5 +1,6 @@ #include #include +#include #include 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; } diff --git a/poincare/test/complex.cpp b/poincare/test/complex.cpp index 34fa52f5e..79b2f92f9 100644 --- a/poincare/test/complex.cpp +++ b/poincare/test/complex.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include 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; +} diff --git a/poincare/test/fraction.cpp b/poincare/test/fraction.cpp index fbf2b0fa9..433802586 100644 --- a/poincare/test/fraction.cpp +++ b/poincare/test/fraction.cpp @@ -1,5 +1,6 @@ #include #include +#include #include 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 } diff --git a/poincare/test/power.cpp b/poincare/test/power.cpp index 32c991c55..4ff0772d0 100644 --- a/poincare/test/power.cpp +++ b/poincare/test/power.cpp @@ -1,5 +1,6 @@ #include #include +#include #include 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); diff --git a/poincare/test/product.cpp b/poincare/test/product.cpp index 5b2dc2e72..8ed85b593 100644 --- a/poincare/test/product.cpp +++ b/poincare/test/product.cpp @@ -1,8 +1,9 @@ #include #include +#include #include -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; } diff --git a/poincare/test/subtraction.cpp b/poincare/test/subtraction.cpp index 656dd7a1d..2ae827419 100644 --- a/poincare/test/subtraction.cpp +++ b/poincare/test/subtraction.cpp @@ -1,5 +1,6 @@ #include #include +#include #include 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; } diff --git a/poincare/test/trigo.cpp b/poincare/test/trigo.cpp index 700ac5b64..7e6c07c84 100644 --- a/poincare/test/trigo.cpp +++ b/poincare/test/trigo.cpp @@ -1,5 +1,6 @@ #include #include +#include #include 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; +}