#include #include #include #include #include #include using namespace Poincare; constexpr Expression::FloatDisplayMode Decimal = Expression::FloatDisplayMode::Decimal; constexpr Expression::FloatDisplayMode Scientific = Expression::FloatDisplayMode::Scientific; void assert_float_converts_to(float f, const char * result, Expression::FloatDisplayMode mode = Scientific, int significantDigits = 7, int bufferSize = 14) { int tagSize = 8; unsigned char tag = 'X'; char * taggedBuffer = (char *)malloc(bufferSize+2*tagSize); memset(taggedBuffer, tag, bufferSize+2*tagSize); char * buffer = taggedBuffer + tagSize; Complex::convertFloatToText(f, buffer, bufferSize, significantDigits, mode); for (int i=0; iapproximate(globalContext) == 123.456f); delete a; } QUIZ_CASE(poincare_complex_evaluate) { GlobalContext globalContext; Expression * a = new Complex(Complex::Float(123.456f)); Expression * e = a->evaluate(globalContext); assert(e->approximate(globalContext) == 123.456f); delete a; delete e; } QUIZ_CASE(poincare_complex_constructor) { Complex * a = new Complex(Complex::Cartesian(2.0f, 3.0f)); assert(fabsf(a->a() - 2.0f) < 0.00001f && fabsf(a->b()-3.0f) < 0.00001f); assert(a->r() == 3.60555124f && a->th() == 0.982793748f); delete a; a = new Complex(Complex::Polar(3.60555124f, 0.982793748f)); assert(fabsf(a->a() - 2.0f) < 0.00001f && fabsf(a->b()-3.0f) < 0.00001f); delete a; }