mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-30 12:10:03 +02:00
[poincare] Fix tests convert_expression_to_text
This commit is contained in:
@@ -249,6 +249,7 @@ tests += $(addprefix poincare/test/,\
|
||||
arithmetic.cpp\
|
||||
binomial_coefficient_layout.cpp\
|
||||
complex_to_expression.cpp\
|
||||
convert_expression_to_text.cpp\
|
||||
division.cpp\
|
||||
expression.cpp\
|
||||
factorial.cpp\
|
||||
|
||||
@@ -95,12 +95,12 @@ public:
|
||||
Decimal(const char * integralPart, int integralPartLength, const char * fractionalPart, int fractionalPartLength, int exponent);
|
||||
Decimal(const DecimalNode * node) : Number(node) {}
|
||||
Decimal(Integer m, int e);
|
||||
template <typename T> Decimal(T f);
|
||||
constexpr static int k_maxExponentLength = 4;
|
||||
constexpr static int k_maxExponent = 1000;
|
||||
private:
|
||||
constexpr static int k_maxMantissaLength = 20;
|
||||
DecimalNode * node() const override { return static_cast<DecimalNode *>(Number::node()); }
|
||||
template <typename T> Decimal(T f);
|
||||
Decimal(size_t size, const Integer & m, int e);
|
||||
Expression setSign(ExpressionNode::Sign s, Context & context, Preferences::AngleUnit angleUnit) const;
|
||||
// Simplification
|
||||
|
||||
@@ -34,7 +34,7 @@ void assert_float_prints_to(T a, const char * result, Preferences::PrintFloatMod
|
||||
delete[] taggedBuffer;
|
||||
}
|
||||
|
||||
void assert_expression_prints_to(Expression * e, const char * result, Preferences::PrintFloatMode mode = ScientificMode, int numberOfSignificantDigits = 7, int bufferSize = 250) {
|
||||
void assert_expression_prints_to(Expression e, const char * result, Preferences::PrintFloatMode mode = ScientificMode, int numberOfSignificantDigits = 7, int bufferSize = 250) {
|
||||
quiz_print(result);
|
||||
|
||||
int tagSize = 8;
|
||||
@@ -43,7 +43,7 @@ void assert_expression_prints_to(Expression * e, const char * result, Preference
|
||||
memset(taggedBuffer, tag, bufferSize+2*tagSize);
|
||||
char * buffer = taggedBuffer + tagSize;
|
||||
|
||||
e->serialize(buffer, bufferSize, mode, numberOfSignificantDigits);
|
||||
e.serialize(buffer, bufferSize, mode, numberOfSignificantDigits);
|
||||
translate_in_ASCII_chars(buffer);
|
||||
|
||||
for (int i=0; i<tagSize; i++) {
|
||||
@@ -59,11 +59,10 @@ void assert_expression_prints_to(Expression * e, const char * result, Preference
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void assert_approximation_prints_to(Approximation<T> * e, const char * result, Preferences::ComplexFormat complexFormat = Cartesian) {
|
||||
void assert_approximation_prints_to(Float<T> e, const char * result) {
|
||||
GlobalContext globalContext;
|
||||
Expression * approximation = e->template approximate<T>(globalContext, Radian, complexFormat);
|
||||
Expression approximation = e.template approximate<T>(globalContext, Radian, Cartesian);
|
||||
assert_expression_prints_to(approximation, result, DecimalMode, (sizeof(T) == sizeof(float) ? 7 : 14));
|
||||
delete approximation;
|
||||
}
|
||||
|
||||
QUIZ_CASE(assert_float_prints_to) {
|
||||
@@ -103,158 +102,95 @@ QUIZ_CASE(assert_float_prints_to) {
|
||||
}
|
||||
|
||||
QUIZ_CASE(poincare_rational_to_text) {
|
||||
Rational r0(2,3);
|
||||
assert_expression_prints_to(&r0, "2/3");
|
||||
Rational r1("12345678910111213","123456789101112131");
|
||||
assert_expression_prints_to(&r1, "12345678910111213/123456789101112131");
|
||||
Rational r2("123456789112345678921234567893123456789412345678951234567896123456789612345678971234567898123456789912345678901234567891123456789212345678931234567894123456789512345678961234567896123456789712345678981234567899123456789","1");
|
||||
assert_expression_prints_to(&r2, "123456789112345678921234567893123456789412345678951234567896123456789612345678971234567898123456789912345678901234567891123456789212345678931234567894123456789512345678961234567896123456789712345678981234567899123456789");
|
||||
assert_expression_prints_to(Rational(2,3), "2/3");
|
||||
assert_expression_prints_to(Rational("12345678910111213","123456789101112131"), "12345678910111213/123456789101112131");
|
||||
assert_expression_prints_to(Rational("123456789112345678921234567893123456789412345678951234567896123456789612345678971234567898123456789912345678901234567891123456789212345678931234567894123456789512345678961234567896123456789712345678981234567899123456789","1"), "123456789112345678921234567893123456789412345678951234567896123456789612345678971234567898123456789912345678901234567891123456789212345678931234567894123456789512345678961234567896123456789712345678981234567899123456789");
|
||||
}
|
||||
|
||||
QUIZ_CASE(poincare_decimal_to_text) {
|
||||
Decimal d0(Integer("-123456789"),30);
|
||||
assert_expression_prints_to(&d0, "-1.23456789E30", ScientificMode, 14);
|
||||
assert_expression_prints_to(&d0, "-1.234568E30", DecimalMode, 7);
|
||||
assert_expression_prints_to(d0, "-1.23456789E30", ScientificMode, 14);
|
||||
assert_expression_prints_to(d0, "-1.234568E30", DecimalMode, 7);
|
||||
Decimal d1(Integer("123456789"),30);
|
||||
assert_expression_prints_to(&d1, "1.23456789E30", ScientificMode, 14);
|
||||
assert_expression_prints_to(&d1, "1.235E30", DecimalMode, 4);
|
||||
assert_expression_prints_to(d1, "1.23456789E30", ScientificMode, 14);
|
||||
assert_expression_prints_to(d1, "1.235E30", DecimalMode, 4);
|
||||
Decimal d2(Integer("-123456789"),-30);
|
||||
assert_expression_prints_to(&d2, "-1.23456789E-30", DecimalMode, 14);
|
||||
assert_expression_prints_to(&d2, "-1.235E-30", ScientificMode, 4);
|
||||
assert_expression_prints_to(d2, "-1.23456789E-30", DecimalMode, 14);
|
||||
assert_expression_prints_to(d2, "-1.235E-30", ScientificMode, 4);
|
||||
Decimal d3(Integer("-12345"),-3);
|
||||
assert_expression_prints_to(&d3, "-0.0012345", DecimalMode, 7);
|
||||
assert_expression_prints_to(&d3, "-0.00123", DecimalMode, 3);
|
||||
assert_expression_prints_to(&d3, "-0.001235", DecimalMode, 4);
|
||||
assert_expression_prints_to(&d3, "-1.23E-3", ScientificMode, 3);
|
||||
assert_expression_prints_to(d3, "-0.0012345", DecimalMode, 7);
|
||||
assert_expression_prints_to(d3, "-0.00123", DecimalMode, 3);
|
||||
assert_expression_prints_to(d3, "-0.001235", DecimalMode, 4);
|
||||
assert_expression_prints_to(d3, "-1.23E-3", ScientificMode, 3);
|
||||
Decimal d4(Integer("12345"),-3);
|
||||
assert_expression_prints_to(&d4, "0.0012345", DecimalMode, 7);
|
||||
assert_expression_prints_to(&d4, "1.2E-3", ScientificMode, 2);
|
||||
assert_expression_prints_to(d4, "0.0012345", DecimalMode, 7);
|
||||
assert_expression_prints_to(d4, "1.2E-3", ScientificMode, 2);
|
||||
Decimal d5(Integer("12345"),3);
|
||||
assert_expression_prints_to(&d5, "1234.5", DecimalMode, 7);
|
||||
assert_expression_prints_to(&d5, "1.23E3", DecimalMode, 3);
|
||||
assert_expression_prints_to(&d5, "1235", DecimalMode, 4);
|
||||
assert_expression_prints_to(&d5, "1.235E3", ScientificMode, 4);
|
||||
assert_expression_prints_to(d5, "1234.5", DecimalMode, 7);
|
||||
assert_expression_prints_to(d5, "1.23E3", DecimalMode, 3);
|
||||
assert_expression_prints_to(d5, "1235", DecimalMode, 4);
|
||||
assert_expression_prints_to(d5, "1.235E3", ScientificMode, 4);
|
||||
Decimal d6(Integer("-12345"),3);
|
||||
assert_expression_prints_to(&d6, "-1234.5", DecimalMode, 7);
|
||||
assert_expression_prints_to(&d6, "-1.2345E3", ScientificMode, 10);
|
||||
assert_expression_prints_to(d6, "-1234.5", DecimalMode, 7);
|
||||
assert_expression_prints_to(d6, "-1.2345E3", ScientificMode, 10);
|
||||
Decimal d7(Integer("12345"),6);
|
||||
assert_expression_prints_to(&d7, "1234500", DecimalMode, 7);
|
||||
assert_expression_prints_to(&d7, "1.2345E6", DecimalMode, 6);
|
||||
assert_expression_prints_to(&d7, "1.2345E6", ScientificMode);
|
||||
assert_expression_prints_to(d7, "1234500", DecimalMode, 7);
|
||||
assert_expression_prints_to(d7, "1.2345E6", DecimalMode, 6);
|
||||
assert_expression_prints_to(d7, "1.2345E6", ScientificMode);
|
||||
Decimal d8(Integer("-12345"),6);
|
||||
assert_expression_prints_to(&d8, "-1234500", DecimalMode, 7);
|
||||
assert_expression_prints_to(&d8, "-1.2345E6", DecimalMode, 5);
|
||||
assert_expression_prints_to(&d7, "1.235E6", ScientificMode, 4);
|
||||
assert_expression_prints_to(d8, "-1234500", DecimalMode, 7);
|
||||
assert_expression_prints_to(d8, "-1.2345E6", DecimalMode, 5);
|
||||
assert_expression_prints_to(d7, "1.235E6", ScientificMode, 4);
|
||||
Decimal d9(Integer("-12345"),-1);
|
||||
assert_expression_prints_to(&d9, "-0.12345", DecimalMode, 7);
|
||||
assert_expression_prints_to(&d9, "-0.1235", DecimalMode, 4);
|
||||
assert_expression_prints_to(&d9, "-1.235E-1", ScientificMode, 4);
|
||||
assert_expression_prints_to(d9, "-0.12345", DecimalMode, 7);
|
||||
assert_expression_prints_to(d9, "-0.1235", DecimalMode, 4);
|
||||
assert_expression_prints_to(d9, "-1.235E-1", ScientificMode, 4);
|
||||
Decimal d10(Integer("12345"),-1);
|
||||
assert_expression_prints_to(&d10, "1.2345E-1");
|
||||
assert_expression_prints_to(&d10, "0.12345", DecimalMode, 7);
|
||||
assert_expression_prints_to(&d10, "0.1235", DecimalMode, 4);
|
||||
assert_expression_prints_to(&d10, "1.235E-1", ScientificMode, 4);
|
||||
assert_expression_prints_to(d10, "1.2345E-1");
|
||||
assert_expression_prints_to(d10, "0.12345", DecimalMode, 7);
|
||||
assert_expression_prints_to(d10, "0.1235", DecimalMode, 4);
|
||||
assert_expression_prints_to(d10, "1.235E-1", ScientificMode, 4);
|
||||
|
||||
Decimal e0(-1.23456789E30);
|
||||
assert_expression_prints_to(&e0, "-1.23456789E30", ScientificMode, 14);
|
||||
Decimal e1(1.23456789E30);
|
||||
assert_expression_prints_to(&e1, "1.23456789E30", ScientificMode, 14);
|
||||
Decimal e2(-1.23456789E-30);
|
||||
assert_expression_prints_to(&e2, "-1.23456789E-30", ScientificMode, 14);
|
||||
Decimal e3(-1.2345E-3);
|
||||
assert_expression_prints_to(&e3, "-0.0012345", DecimalMode);
|
||||
Decimal e4(1.2345E-3);
|
||||
assert_expression_prints_to(&e4, "0.0012345", DecimalMode);
|
||||
Decimal e5(1.2345E3);
|
||||
assert_expression_prints_to(&e5, "1234.5", DecimalMode);
|
||||
Decimal e6(-1.2345E3);
|
||||
assert_expression_prints_to(&e6, "-1234.5", DecimalMode);
|
||||
Decimal e7(1.2345E6);
|
||||
assert_expression_prints_to(&e7, "1234500", DecimalMode);
|
||||
Decimal e8(-1.2345E6);
|
||||
assert_expression_prints_to(&e8, "-1234500", DecimalMode);
|
||||
Decimal e9(-1.2345E-1);
|
||||
assert_expression_prints_to(&e9, "-0.12345", DecimalMode);
|
||||
Decimal e10(1.2345E-1);
|
||||
assert_expression_prints_to(&e10, "0.12345", DecimalMode);
|
||||
Decimal e11(1.0);
|
||||
assert_expression_prints_to(&e11, "1");
|
||||
Decimal e12(0.9999999999999996);
|
||||
assert_expression_prints_to(&e12, "1");
|
||||
Decimal e13(0.99999999999995);
|
||||
assert_expression_prints_to(&e13, "9.9999999999995E-1", ScientificMode, 14);
|
||||
Decimal e14(0.00000099999999999995);
|
||||
assert_expression_prints_to(&e14, "9.9999999999995E-7", ScientificMode, 14);
|
||||
Decimal e15(0.000000999999999999995);
|
||||
assert_expression_prints_to(&e15, "0.000001", DecimalMode);
|
||||
Decimal e16(0.000000999999999901200121020102010201201201021099995);
|
||||
assert_expression_prints_to(&e16, "9.999999999012E-7", DecimalMode, 14);
|
||||
assert_expression_prints_to(Decimal(-1.23456789E30), "-1.23456789E30", ScientificMode, 14);
|
||||
assert_expression_prints_to(Decimal(1.23456789E30), "1.23456789E30", ScientificMode, 14);
|
||||
assert_expression_prints_to(Decimal(-1.23456789E-30), "-1.23456789E-30", ScientificMode, 14);
|
||||
assert_expression_prints_to(Decimal(-1.2345E-3), "-0.0012345", DecimalMode);
|
||||
assert_expression_prints_to(Decimal(1.2345E-3), "0.0012345", DecimalMode);
|
||||
assert_expression_prints_to(Decimal(1.2345E3), "1234.5", DecimalMode);
|
||||
assert_expression_prints_to(Decimal(-1.2345E3), "-1234.5", DecimalMode);
|
||||
assert_expression_prints_to(Decimal(1.2345E6), "1234500", DecimalMode);
|
||||
assert_expression_prints_to(Decimal(-1.2345E6), "-1234500", DecimalMode);
|
||||
assert_expression_prints_to(Decimal(-1.2345E-1), "-0.12345", DecimalMode);
|
||||
assert_expression_prints_to(Decimal(1.2345E-1), "0.12345", DecimalMode);
|
||||
assert_expression_prints_to(Decimal(1.0), "1");
|
||||
assert_expression_prints_to(Decimal(0.9999999999999996), "1");
|
||||
assert_expression_prints_to(Decimal(0.99999999999995), "9.9999999999995E-1", ScientificMode, 14);
|
||||
assert_expression_prints_to(Decimal(0.00000099999999999995), "9.9999999999995E-7", ScientificMode, 14);
|
||||
assert_expression_prints_to(Decimal(0.000000999999999999995), "0.000001", DecimalMode);
|
||||
assert_expression_prints_to(Decimal(0.000000999999999901200121020102010201201201021099995), "9.999999999012E-7", DecimalMode, 14);
|
||||
}
|
||||
|
||||
QUIZ_CASE(poincare_approximation_to_text) {
|
||||
Approximation<double> e0(-1.23456789E30);
|
||||
assert_approximation_prints_to<double>(&e0, "-1.23456789E30");
|
||||
Approximation<double> e1(1.23456789E30);
|
||||
assert_approximation_prints_to<double>(&e1, "1.23456789E30");
|
||||
Approximation<double> e2(-1.23456789E-30);
|
||||
assert_approximation_prints_to<double>(&e2, "-1.23456789E-30");
|
||||
Approximation<double> e3(-1.2345E-3);
|
||||
assert_approximation_prints_to<double>(&e3, "-0.0012345");
|
||||
Approximation<double> e4(1.2345E-3);
|
||||
assert_approximation_prints_to<double>(&e4, "0.0012345");
|
||||
Approximation<double> e5(1.2345E3);
|
||||
assert_approximation_prints_to<double>(&e5, "1234.5");
|
||||
Approximation<double> e6(-1.2345E3);
|
||||
assert_approximation_prints_to<double>(&e6, "-1234.5");
|
||||
Approximation<double> e7(0.99999999999995);
|
||||
assert_approximation_prints_to<double>(&e7, "9.9999999999995E-1");
|
||||
Approximation<double> e8(0.00000099999999999995);
|
||||
assert_approximation_prints_to<double>(&e8, "9.9999999999995E-7");
|
||||
Approximation<double> e9(0.0000009999999999901200121020102010201201201021099995);
|
||||
assert_approximation_prints_to<double>(&e9, "9.9999999999012E-7");
|
||||
Approximation<float> e10(1.2345E-1);
|
||||
assert_approximation_prints_to<float>(&e10, "0.12345");
|
||||
Approximation<float> e11(1);
|
||||
assert_approximation_prints_to<float>(&e11, "1");
|
||||
Approximation<float> e12(0.9999999999999995);
|
||||
assert_approximation_prints_to<float>(&e12, "1");
|
||||
Approximation<float> e13(1.2345E6);
|
||||
assert_approximation_prints_to<float>(&e13, "1234500");
|
||||
Approximation<float> e14(-1.2345E6);
|
||||
assert_approximation_prints_to<float>(&e14, "-1234500");
|
||||
Approximation<float> e15(0.0000009999999999999995);
|
||||
assert_approximation_prints_to<float>(&e15, "0.000001");
|
||||
Approximation<float> e16(-1.2345E-1);
|
||||
assert_approximation_prints_to<float>(&e16, "-0.12345");
|
||||
assert_approximation_prints_to(Float<double>(-1.23456789E30), "-1.23456789E30");
|
||||
assert_approximation_prints_to(Float<double>(1.23456789E30), "1.23456789E30");
|
||||
assert_approximation_prints_to(Float<double>(-1.23456789E-30), "-1.23456789E-30");
|
||||
assert_approximation_prints_to(Float<double>(-1.2345E-3), "-0.0012345");
|
||||
assert_approximation_prints_to(Float<double>(1.2345E-3), "0.0012345");
|
||||
assert_approximation_prints_to(Float<double>(1.2345E3), "1234.5");
|
||||
assert_approximation_prints_to(Float<double>(-1.2345E3), "-1234.5");
|
||||
assert_approximation_prints_to(Float<double>(0.99999999999995), "9.9999999999995E-1");
|
||||
assert_approximation_prints_to(Float<double>(0.00000099999999999995), "9.9999999999995E-7");
|
||||
assert_approximation_prints_to(Float<double>(0.0000009999999999901200121020102010201201201021099995), "9.9999999999012E-7");
|
||||
assert_approximation_prints_to(Float<float>(1.2345E-1), "0.12345");
|
||||
assert_approximation_prints_to(Float<float>(1), "1");
|
||||
assert_approximation_prints_to(Float<float>(0.9999999999999995), "1");
|
||||
assert_approximation_prints_to(Float<float>(1.2345E6), "1234500");
|
||||
assert_approximation_prints_to(Float<float>(-1.2345E6), "-1234500");
|
||||
assert_approximation_prints_to(Float<float>(0.0000009999999999999995), "0.000001");
|
||||
assert_approximation_prints_to(Float<float>(-1.2345E-1), "-0.12345");
|
||||
|
||||
Approximation<double> c0(1.0, 2.0);
|
||||
assert_approximation_prints_to<double>(&c0, "1+2*I", Cartesian);
|
||||
Approximation<double> c1(1.0, 2.0);
|
||||
assert_approximation_prints_to<double>(&c1, "2.2360679774998*X^(1.1071487177941*I)", Polar);
|
||||
Approximation<double> c2(-1.3, 2.444);
|
||||
assert_approximation_prints_to<double>(&c2, "(-1.3)+2.444*I", Cartesian); // TODO: get rid of parenthesis
|
||||
Approximation<double> c3(-1.3, 2.444);
|
||||
assert_approximation_prints_to<double>(&c3, "2.7682369840749*X^(2.0596486811226*I)", Polar);
|
||||
Approximation<double> c4(-1.3, -2.444);
|
||||
assert_approximation_prints_to<double>(&c4, "(-1.3)-2.444*I", Cartesian); // TODO: get rid of parenthesis
|
||||
Approximation<double> c5(64078208.0, 119229408.0);
|
||||
assert_approximation_prints_to<double>(&c5, "64078208+119229408*I", Cartesian);
|
||||
Approximation<double> c6(64078208.0, 119229408.0);
|
||||
assert_approximation_prints_to<double>(&c6, "135357557.86997*X^(1.0776501182461*I)", Polar);
|
||||
Approximation<double> c7(INFINITY, 119229408.0);
|
||||
assert_approximation_prints_to<double>(&c7, "undef", Polar);
|
||||
assert_approximation_prints_to<double>(&c7, "undef", Cartesian);
|
||||
Approximation<float> c8(0.0f, 0.0f);
|
||||
assert_approximation_prints_to<float>(&c8, "0", Polar);
|
||||
assert_approximation_prints_to<float>(&c8, "0", Cartesian);
|
||||
Approximation<float> c9(NAN, 0.0f);
|
||||
assert_approximation_prints_to<float>(&c9, "undef", Polar);
|
||||
assert_approximation_prints_to<float>(&c9, "undef", Cartesian);
|
||||
Approximation<float> c10(0.0f, NAN);
|
||||
assert_approximation_prints_to<float>(&c10, "undef", Polar);
|
||||
assert_approximation_prints_to<float>(&c10, "undef", Cartesian);
|
||||
Approximation<double> c11(NAN, NAN);
|
||||
assert_approximation_prints_to<double>(&c11, "undef", Polar);
|
||||
assert_approximation_prints_to<double>(&c11, "undef", Cartesian);
|
||||
assert_approximation_prints_to<double>(Float<double>(INFINITY), "inf");
|
||||
assert_approximation_prints_to<float>(Float<float>(0.0f), "0");
|
||||
assert_approximation_prints_to<float>(Float<float>(NAN), "undef");
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user