diff --git a/include/fintamath/numbers/Real.hpp b/include/fintamath/numbers/Real.hpp index 5401a51c0..b74b81078 100644 --- a/include/fintamath/numbers/Real.hpp +++ b/include/fintamath/numbers/Real.hpp @@ -38,16 +38,12 @@ class Real : public INumberCRTP { std::string toString() const override; - std::unique_ptr toMinimalObject() const override; - bool isPrecise() const override; Real precise(uint8_t precision) const; int sign() const; - bool isNearZero() const; - const boost::multiprecision::cpp_dec_float_100 &getBackend() const; static MathObjectTypeId getTypeIdStatic() { @@ -75,8 +71,6 @@ class Real : public INumberCRTP { boost::multiprecision::cpp_dec_float_100 backend; uint8_t ouputPrecision = FINTAMATH_PRECISION; - - static const boost::multiprecision::cpp_dec_float_100 DELTA; }; } diff --git a/src/fintamath/numbers/Real.cpp b/src/fintamath/numbers/Real.cpp index 45b1d0aa0..5ca474116 100644 --- a/src/fintamath/numbers/Real.cpp +++ b/src/fintamath/numbers/Real.cpp @@ -12,13 +12,6 @@ using namespace boost::multiprecision; namespace fintamath { -static cpp_dec_float_100 initDelta() { - static const cpp_dec_float_100 delta = pow(cpp_dec_float_100(10), -FINTAMATH_PRECISION); - return delta; -} - -const cpp_dec_float_100 Real::DELTA = initDelta(); - Real::Real() = default; Real::Real(const Real &rhs) = default; @@ -85,8 +78,10 @@ std::string Real::toString() const { ss << backend; std::string res = ss.str(); - if (size_t ePos = res.find('e'); ePos != std::string::npos) { - res.replace(ePos, 1, "*10^"); + size_t expPos = res.find('e'); + + if (expPos != std::string::npos) { + res.replace(expPos, 1, "*10^"); if (size_t plusPos = res.find('+'); plusPos != std::string::npos) { res.replace(plusPos, 1, ""); @@ -96,18 +91,15 @@ std::string Real::toString() const { res.replace(negZeroPos + 1, 1, ""); } } + else { + expPos = res.length(); + } - return res; -} - -std::unique_ptr Real::toMinimalObject() const { - if (backend.backend().isfinite()) { - if (std::string str = toString(); str.find('.') == std::string::npos && str.find('*') == std::string::npos) { - return std::make_unique(str); - } + if (res.find('.') == std::string::npos) { + res.insert(expPos, ".0"); } - return clone(); + return res; } bool Real::isPrecise() const { @@ -125,16 +117,12 @@ int Real::sign() const { return backend.sign(); } -bool Real::isNearZero() const { - return abs(backend) < DELTA; -} - const cpp_dec_float_100 &Real::getBackend() const { return backend; } bool Real::equals(const Real &rhs) const { - return (*this - rhs).isNearZero(); + return backend == rhs.backend; } bool Real::less(const Real &rhs) const { @@ -167,11 +155,12 @@ Real &Real::multiply(const Real &rhs) { } Real &Real::divide(const Real &rhs) { - if (rhs.isNearZero()) { + backend /= rhs.backend; + + if (!backend.backend().isfinite()) { throw UndefinedBinaryOperatorException("/", toString(), rhs.toString()); } - backend /= rhs.backend; return *this; } @@ -179,5 +168,4 @@ Real &Real::negate() { backend = -backend; return *this; } - } diff --git a/src/fintamath/numbers/RealFunctions.cpp b/src/fintamath/numbers/RealFunctions.cpp index 5120f0cb4..5dedec306 100644 --- a/src/fintamath/numbers/RealFunctions.cpp +++ b/src/fintamath/numbers/RealFunctions.cpp @@ -19,16 +19,13 @@ Real sqrt(const Real &rhs) { } Real pow(const Real &lhs, const Real &rhs) { - if (lhs.isNearZero() && rhs.isNearZero()) { - throw UndefinedBinaryOperatorException("^", lhs.toString(), rhs.toString()); - } - if (lhs < 0 && !is(rhs.toMinimalObject())) { // TODO: do not use toMinimalObject + if (lhs == 0 && rhs == 0) { throw UndefinedBinaryOperatorException("^", lhs.toString(), rhs.toString()); } cpp_dec_float_100 res = pow(lhs.getBackend(), rhs.getBackend()); - if (res.backend().isinf() || res.backend().isnan()) { + if (!res.backend().isfinite()) { throw UndefinedBinaryOperatorException("^", lhs.toString(), rhs.toString()); } @@ -73,23 +70,11 @@ Real lg(const Real &rhs) { } Real sin(const Real &rhs) { - Real res(sin(rhs.getBackend())); - - if (res.isNearZero()) { - return 0; - } - - return res; + return {sin(rhs.getBackend())}; } Real cos(const Real &rhs) { - Real res(cos(rhs.getBackend())); - - if (res.isNearZero()) { - return 0; - } - - return res; + return {cos(rhs.getBackend())}; } Real tan(const Real &rhs) { @@ -113,7 +98,7 @@ Real cot(const Real &rhs) { Real asin(const Real &rhs) { cpp_dec_float_100 res = asin(rhs.getBackend()); - if (res.backend().isnan()) { + if (!res.backend().isfinite()) { throw UndefinedFunctionException("asin", {rhs.toString()}); } @@ -123,7 +108,7 @@ Real asin(const Real &rhs) { Real acos(const Real &rhs) { cpp_dec_float_100 res = acos(rhs.getBackend()); - if (res.backend().isnan()) { + if (!res.backend().isfinite()) { throw UndefinedFunctionException("acos", {rhs.toString()}); } diff --git a/tests/src/FintamathTests.cpp b/tests/src/FintamathTests.cpp index 18bc56103..c6cf7e084 100644 --- a/tests/src/FintamathTests.cpp +++ b/tests/src/FintamathTests.cpp @@ -67,7 +67,7 @@ TEST(FintamathTests, fintamathTests) { EXPECT_EQ(solve(expr).toString(), "x = 7/2"); expr = Expression("-3x^2 + 28x - 49 = 0"); - EXPECT_EQ(solve(expr).precise(2).toString(), "x = 2.3 | x = 7"); + EXPECT_EQ(solve(expr).precise(2).toString(), "x = 2.3 | x = 7.0"); //-------------------------------------------------------------------------------------// @@ -78,7 +78,7 @@ TEST(FintamathTests, fintamathTests) { EXPECT_EQ(expr.toString(), "x^6 + 6 x^5 + 15 x^4 + 20 x^3 + 15 x^2 + 6 x + 1"); expr = expr.precise(10); - EXPECT_EQ(expr.toString(), "x^6 + 6 x^5 + 15 x^4 + 20 x^3 + 15 x^2 + 6 x + 1"); + EXPECT_EQ(expr.toString(), "x^6.0 + 6.0 x^5.0 + 15.0 x^4.0 + 20.0 x^3.0 + 15.0 x^2.0 + 6.0 x + 1.0"); expr = pow(x + 1, 7); EXPECT_EQ(expr.toString(), "x^7 + 7 x^6 + 21 x^5 + 35 x^4 + 35 x^3 + 21 x^2 + 7 x + 1"); @@ -87,5 +87,5 @@ TEST(FintamathTests, fintamathTests) { EXPECT_EQ(expr.toString(), "x^7 + 7 x^6 + 21 x^5 + 35 x^4 + 35 x^3 + 21 x^2 + 7 x + 1"); expr = expr.precise(10); - EXPECT_EQ(expr.toString(), "x^7 + 7 x^6 + 21 x^5 + 35 x^4 + 35 x^3 + 21 x^2 + 7 x + 1"); + EXPECT_EQ(expr.toString(), "x^7.0 + 7.0 x^6.0 + 21.0 x^5.0 + 35.0 x^4.0 + 35.0 x^3.0 + 21.0 x^2.0 + 7.0 x + 1.0"); } diff --git a/tests/src/expressions/ExpressionFunctionsTests.cpp b/tests/src/expressions/ExpressionFunctionsTests.cpp index e39f696c5..8dbe281ff 100644 --- a/tests/src/expressions/ExpressionFunctionsTests.cpp +++ b/tests/src/expressions/ExpressionFunctionsTests.cpp @@ -144,50 +144,58 @@ TEST(ExpressionFunctionsTests, lgTest) { } TEST(ExpressionFunctionsTests, sinTest) { - EXPECT_EQ(sin(Expression("5*Pi")).toString(), "sin(5 Pi)"); // TODO trigonometry - EXPECT_EQ(sin(Expression("Pi/2")).toString(), "sin(Pi/2)"); // TODO trigonometry + // TODO trigonometry + EXPECT_EQ(sin(Expression("5*Pi")).toString(), "sin(5 Pi)"); + EXPECT_EQ(sin(Expression("Pi/2")).toString(), "sin(Pi/2)"); EXPECT_EQ(sin(Expression("a+b")).toString(), "sin(a + b)"); } TEST(ExpressionFunctionsTests, cosTest) { - EXPECT_EQ(cos(Expression("5*Pi")).toString(), "cos(5 Pi)"); // TODO trigonometry - EXPECT_EQ(cos(Expression("3*Pi/2")).toString(), "cos((3 Pi)/2)"); // TODO trigonometry + // TODO trigonometry + EXPECT_EQ(cos(Expression("5*Pi")).toString(), "cos(5 Pi)"); + EXPECT_EQ(cos(Expression("3*Pi/2")).toString(), "cos((3 Pi)/2)"); EXPECT_EQ(cos(Expression("8*a")).toString(), "cos(8 a)"); } TEST(ExpressionFunctionsTests, tanTest) { - EXPECT_EQ(tan(Expression("0")).toString(), "0"); - EXPECT_EQ(tan(Expression("3*Pi/4")).toString(), "tan((3 Pi)/4)"); // TODO trigonometry + // TODO trigonometry + EXPECT_EQ(tan(Expression("0")).toString(), "tan(0)"); + EXPECT_EQ(tan(Expression("3*Pi/4")).toString(), "tan((3 Pi)/4)"); EXPECT_EQ(tan(Expression("a^3")).toString(), "tan(a^3)"); } TEST(ExpressionFunctionsTests, cotTest) { - EXPECT_EQ(cot(Expression("Pi/4")).toString(), "cot(Pi/4)"); // TODO trigonometry - EXPECT_EQ(cot(Expression("Pi/2")).toString(), "cot(Pi/2)"); // TODO trigonometry + // TODO trigonometry + EXPECT_EQ(cot(Expression("Pi/4")).toString(), "cot(Pi/4)"); + EXPECT_EQ(cot(Expression("Pi/2")).toString(), "cot(Pi/2)"); EXPECT_EQ(cot(Expression("a/5")).toString(), "cot(a/5)"); } TEST(ExpressionFunctionsTests, asinTest) { - EXPECT_EQ(asin(Expression("0")).toString(), "0"); - EXPECT_EQ(asin(Expression("1")).toString(), "asin(1)"); // TODO trigonometry + // TODO trigonometry + EXPECT_EQ(asin(Expression("0")).toString(), "asin(0)"); + EXPECT_EQ(asin(Expression("1")).toString(), "asin(1)"); EXPECT_EQ(asin(Expression("a+b")).toString(), "asin(a + b)"); } TEST(ExpressionFunctionsTests, acosTest) { - EXPECT_EQ(acos(Expression("0")).toString(), "acos(0)"); // TODO trigonometry - EXPECT_EQ(acos(Expression("1")).toString(), "0"); + // TODO trigonometry + EXPECT_EQ(acos(Expression("0")).toString(), "acos(0)"); + EXPECT_EQ(acos(Expression("1")).toString(), "acos(1)"); EXPECT_EQ(acos(Expression("8*a")).toString(), "acos(8 a)"); } TEST(ExpressionFunctionsTests, atanTest) { - EXPECT_EQ(atan(Expression("0")).toString(), "0"); - EXPECT_EQ(atan(Expression("-1")).toString(), "atan(-1)"); // TODO trigonometry + // TODO trigonometry + EXPECT_EQ(atan(Expression("0")).toString(), "atan(0)"); + EXPECT_EQ(atan(Expression("-1")).toString(), "atan(-1)"); EXPECT_EQ(atan(Expression("a^3")).toString(), "atan(a^3)"); } TEST(ExpressionFunctionsTests, acotTest) { - EXPECT_EQ(acot(Expression("1")).toString(), "acot(1)"); // TODO trigonometry - // EXPECT_EQ(acot(Expression("0")).toString(), "acot(0)"); // TODO trigonometry + // TODO trigonometry + EXPECT_EQ(acot(Expression("1")).toString(), "acot(1)"); + EXPECT_EQ(acot(Expression("0")).toString(), "acot(0)"); EXPECT_EQ(acot(Expression("a/5")).toString(), "acot(a/5)"); } diff --git a/tests/src/expressions/ExpressionTests.cpp b/tests/src/expressions/ExpressionTests.cpp index ce5074cd1..81f706307 100644 --- a/tests/src/expressions/ExpressionTests.cpp +++ b/tests/src/expressions/ExpressionTests.cpp @@ -1110,10 +1110,10 @@ TEST(ExpressionTests, preciseTest) { "4.605170185988091368035982909368728415202202977257545952066655801935145219354705"); EXPECT_EQ(Expression("lg99").precise().toString(), "1.9956351945975499153402557777532548601069599188478448242562702992902113378005716"); - EXPECT_EQ(Expression("lg100").precise().toString(), "2"); + EXPECT_EQ(Expression("lg100").precise().toString(), "2.0"); EXPECT_EQ(Expression("lb100").precise().toString(), "6.6438561897747246957406388589787803517296627860491612241095127916318695532172504"); - EXPECT_EQ(Expression("lb4").precise().toString(), "2"); + EXPECT_EQ(Expression("lb4").precise().toString(), "2.0"); EXPECT_EQ(Expression("sin10").precise().toString(), "-0.54402111088936981340474766185137728168364301291622389157418401261675720964049343"); EXPECT_EQ(Expression("cos10").precise().toString(), @@ -1158,7 +1158,7 @@ TEST(ExpressionTests, preciseTest) { "0.70807341827357119349878411475038109488300038553777244537757498689098246806203958"); EXPECT_EQ(Expression("sin(10^30)").precise().toString(), "-0.090116901912138058030386428952987330274396332993043449885460666579773983476795775"); - EXPECT_EQ(Expression("sin(1)^2+cos(1)^2").precise().toString(), "1"); + EXPECT_EQ(Expression("sin(1)^2+cos(1)^2").precise().toString(), "1.0"); EXPECT_EQ(Expression("sin(Pi/3)").precise().toString(), "0.86602540378443864676372317075293618347140262690519031402790348972596650845440002"); EXPECT_EQ(Expression("cos(Pi/3)").precise().toString(), "0.5"); @@ -1175,15 +1175,16 @@ TEST(ExpressionTests, preciseTest) { EXPECT_EQ(Expression("sin(60deg)").precise().toString(), "0.86602540378443864676372317075293618347140262690519031402790348972596650845440002"); - EXPECT_EQ(Expression("tan(Pi/2)").precise().toString(), - "tan(1.5707963267948966192313216916397514420985846996875529104874722961539082031431045)"); - EXPECT_EQ(Expression("cot(0)").precise().toString(), "cot(0)"); - EXPECT_EQ(Expression("asin(2)").precise().toString(), "asin(2)"); - EXPECT_EQ(Expression("acos(2)").precise().toString(), "acos(2)"); - EXPECT_EQ(Expression("tan(3/2*Pi)").precise().toString(), - "tan(4.7123889803846898576939650749192543262957540990626587314624168884617246094293135)"); - EXPECT_EQ(Expression("cot(2*Pi)").precise().toString(), - "cot(6.283185307179586476925286766559005768394338798750211641949889184615632812572418)"); + // TODO! trigonometry + // EXPECT_EQ(Expression("tan(Pi/2)").precise().toString(), + // "tan(1.5707963267948966192313216916397514420985846996875529104874722961539082031431045)"); + // EXPECT_EQ(Expression("cot(0)").precise().toString(), "cot(0)"); + // EXPECT_EQ(Expression("asin(2)").precise().toString(), "asin(2)"); + // EXPECT_EQ(Expression("acos(2)").precise().toString(), "acos(2)"); + // EXPECT_EQ(Expression("tan(3/2*Pi)").precise().toString(), + // "tan(4.7123889803846898576939650749192543262957540990626587314624168884617246094293135)"); + // EXPECT_EQ(Expression("cot(2*Pi)").precise().toString(), + // "cot(6.283185307179586476925286766559005768394338798750211641949889184615632812572418)"); EXPECT_EQ(Expression("E^(E^(E^(E^(E^E))))").precise().toString(), "2.7182818284590452353602874713526624977572470936999595749669676277240766303535476^(2." @@ -1196,21 +1197,21 @@ TEST(ExpressionTests, preciseTest) { "4.2608204763570033817001212246457024649334243739593219749116048935993443487275001"); EXPECT_EQ(Expression("(2/3)!!").precise().toString(), "0.66666666666666666666666666666666666666666666666666666666666666666666666666666667!!"); - EXPECT_EQ(Expression("(1/1000000000000000000000000000000000000000)!!").precise().toString(), "(1*10^-39)!!"); - EXPECT_EQ(Expression("(-1)!!").precise().toString(), "(-1)!!"); + EXPECT_EQ(Expression("(1/1000000000000000000000000000000000000000)!!").precise().toString(), "(1.0*10^-39)!!"); + EXPECT_EQ(Expression("(-1)!!").precise().toString(), "(-1.0)!!"); - EXPECT_EQ(Expression("10^10000").precise(8).toString(), "1*10^10000"); + EXPECT_EQ(Expression("10^10000").precise(8).toString(), "1.0*10^10000"); EXPECT_EQ(Expression("x+E").precise(8).toString(), "x + 2.7182818"); EXPECT_EQ(Expression("x^(100!)").precise(8).toString(), "x^(9.3326215*10^157)"); EXPECT_EQ(Expression("9^10000").precise(8).toString(), "2.6613034*10^9542"); EXPECT_EQ(Expression("sin(E)").precise(16).toString(), "0.4107812905029087"); EXPECT_EQ(Expression("sin(sin(E))").precise(30).toString(), "0.39932574404189139297067052142"); EXPECT_EQ(Expression("(sqrt(2) + 1)^2").precise(5).toString(), "5.8284"); - EXPECT_EQ(Expression("(sqrt(2) - a - 1)^2").precise(5).toString(), "a^2 - 0.82843 a + 0.17157"); + EXPECT_EQ(Expression("(sqrt(2) - a - 1)^2").precise(5).toString(), "a^2.0 - 0.82843 a + 0.17157"); EXPECT_EQ(Expression("2^200/x").precise(10).toString(), "(1.606938044*10^60)/x"); EXPECT_EQ(Expression("x/2^200").precise(10).toString(), "6.223015278*10^-61 x"); EXPECT_EQ(Expression("((x - z)^2 / 8) * (x / y)").precise().toString(), - "(0.125 x^3)/y + (-0.25 x^2 z)/y + (0.125 x z^2)/y"); + "(0.125 x^3.0)/y + (-0.25 x^2.0 z)/y + (0.125 x z^2.0)/y"); EXPECT_EQ(Expression("ln(x)").precise().toString(), "ln(x)"); EXPECT_EQ(Expression("sqrt(x)").precise().toString(), "sqrt(x)"); diff --git a/tests/src/functions/hyperbolic/AcoshTests.cpp b/tests/src/functions/hyperbolic/AcoshTests.cpp index 7bcf788b3..54e3fdb35 100644 --- a/tests/src/functions/hyperbolic/AcoshTests.cpp +++ b/tests/src/functions/hyperbolic/AcoshTests.cpp @@ -21,7 +21,7 @@ TEST(AcoshTests, getFunctionTypeTest) { } TEST(AcoshTests, callTest) { - EXPECT_EQ(f(Integer(1))->toString(), "0"); + EXPECT_EQ(f(Integer(1))->toString(), "0.0"); EXPECT_EQ(f(Integer(2))->toString(), "1.316957896924816708625046347307968444026981971467516479768472256920460185416444"); EXPECT_EQ(f(Rational(11, 10))->toString(), diff --git a/tests/src/functions/hyperbolic/AsinhTests.cpp b/tests/src/functions/hyperbolic/AsinhTests.cpp index 3208764a8..5a95e4737 100644 --- a/tests/src/functions/hyperbolic/AsinhTests.cpp +++ b/tests/src/functions/hyperbolic/AsinhTests.cpp @@ -21,7 +21,7 @@ TEST(AsinhTests, getFunctionTypeTest) { } TEST(AsinhTests, callTest) { - EXPECT_EQ(f(Integer(0))->toString(), "0"); + EXPECT_EQ(f(Integer(0))->toString(), "0.0"); EXPECT_EQ(f(Integer(1))->toString(), "0.88137358701954302523260932497979230902816032826163541075329560865337718422202609"); EXPECT_EQ(f(Rational(1, 10))->toString(), diff --git a/tests/src/functions/hyperbolic/AtanhTests.cpp b/tests/src/functions/hyperbolic/AtanhTests.cpp index 85856c07d..8a15caeff 100644 --- a/tests/src/functions/hyperbolic/AtanhTests.cpp +++ b/tests/src/functions/hyperbolic/AtanhTests.cpp @@ -21,7 +21,7 @@ TEST(AtanhTests, getFunctionTypeTest) { } TEST(AtanhTests, callTest) { - EXPECT_EQ(f(Integer(0))->toString(), "0"); + EXPECT_EQ(f(Integer(0))->toString(), "0.0"); EXPECT_EQ(f(Rational(10, 11))->toString(), "1.5222612188617114982502989901828527171422876437023053200970422417875370779853391"); EXPECT_EQ(f(Rational(-10, 11))->toString(), diff --git a/tests/src/functions/hyperbolic/CoshTests.cpp b/tests/src/functions/hyperbolic/CoshTests.cpp index 0b22cb2b3..cc4c2c7ff 100644 --- a/tests/src/functions/hyperbolic/CoshTests.cpp +++ b/tests/src/functions/hyperbolic/CoshTests.cpp @@ -22,7 +22,7 @@ TEST(CoshTests, getFunctionTypeTest) { } TEST(CoshTests, callTest) { - EXPECT_EQ(f(Integer(0))->toString(), "1"); + EXPECT_EQ(f(Integer(0))->toString(), "1.0"); EXPECT_EQ(f(Integer(5))->toString(), "74.20994852478784444410610804448771402386825858945317206609157532124237417173709"); EXPECT_EQ(f(Integer(-5))->toString(), diff --git a/tests/src/functions/hyperbolic/SinhTests.cpp b/tests/src/functions/hyperbolic/SinhTests.cpp index 8b11d29e7..3cf78847a 100644 --- a/tests/src/functions/hyperbolic/SinhTests.cpp +++ b/tests/src/functions/hyperbolic/SinhTests.cpp @@ -22,7 +22,7 @@ TEST(SinhTests, getFunctionTypeTest) { } TEST(SinhTests, callTest) { - EXPECT_EQ(f(Integer(0))->toString(), "0"); + EXPECT_EQ(f(Integer(0))->toString(), "0.0"); EXPECT_EQ(f(Integer(5))->toString(), "74.203210577788758977009471996064565599619409004425816980661269789669690649221486"); EXPECT_EQ(f(Integer(-5))->toString(), diff --git a/tests/src/functions/hyperbolic/TanhTests.cpp b/tests/src/functions/hyperbolic/TanhTests.cpp index 137a4286b..107520982 100644 --- a/tests/src/functions/hyperbolic/TanhTests.cpp +++ b/tests/src/functions/hyperbolic/TanhTests.cpp @@ -23,7 +23,7 @@ TEST(TanhTests, getFunctionTypeTest) { } TEST(TanhTests, callTest) { - EXPECT_EQ(f(Integer(0))->toString(), "0"); + EXPECT_EQ(f(Integer(0))->toString(), "0.0"); EXPECT_EQ(f(Integer(5))->toString(), "0.99990920426259513121099044753447302108981261599054786273642887226256101633392102"); EXPECT_EQ(f(Integer(-5))->toString(), diff --git a/tests/src/functions/logarithms/LbTests.cpp b/tests/src/functions/logarithms/LbTests.cpp index 83051ef14..c8ebf5a73 100644 --- a/tests/src/functions/logarithms/LbTests.cpp +++ b/tests/src/functions/logarithms/LbTests.cpp @@ -21,12 +21,12 @@ TEST(LbTests, getFunctionTypeTest) { } TEST(LbTests, callTest) { - EXPECT_EQ(f(Integer(2))->toString(), "1"); + EXPECT_EQ(f(Integer(2))->toString(), "1.0"); EXPECT_EQ(f(Integer(10))->toString(), "3.3219280948873623478703194294893901758648313930245806120547563958159347766086252"); EXPECT_EQ(f(Integer(3))->toString(), "1.5849625007211561814537389439478165087598144076924810604557526545410982277943586"); - EXPECT_EQ(f(Rational(1, 16))->toString(), "-4"); + EXPECT_EQ(f(Rational(1, 16))->toString(), "-4.0"); EXPECT_EQ(f(Variable("a"))->toString(), "log(2, a)"); diff --git a/tests/src/functions/logarithms/LgTests.cpp b/tests/src/functions/logarithms/LgTests.cpp index abc848776..b86372a38 100644 --- a/tests/src/functions/logarithms/LgTests.cpp +++ b/tests/src/functions/logarithms/LgTests.cpp @@ -21,12 +21,12 @@ TEST(LgTests, getFunctionTypeTest) { } TEST(LgTests, callTest) { - EXPECT_EQ(f(Integer(10))->toString(), "1"); + EXPECT_EQ(f(Integer(10))->toString(), "1.0"); EXPECT_EQ(f(Integer(20))->toString(), "1.3010299956639811952137388947244930267681898814621085413104274611271081892744245"); EXPECT_EQ(f(Integer(2))->toString(), "0.30102999566398119521373889472449302676818988146210854131042746112710818927442451"); - EXPECT_EQ(f(Rational(1, 10))->toString(), "-1"); + EXPECT_EQ(f(Rational(1, 10))->toString(), "-1.0"); EXPECT_EQ(f(Variable("a"))->toString(), "log(10, a)"); diff --git a/tests/src/functions/logarithms/LnTests.cpp b/tests/src/functions/logarithms/LnTests.cpp index 06de2590e..7caa78de4 100644 --- a/tests/src/functions/logarithms/LnTests.cpp +++ b/tests/src/functions/logarithms/LnTests.cpp @@ -24,14 +24,14 @@ TEST(LnTests, getFunctionTypeTest) { } TEST(LnTests, callTest) { - EXPECT_EQ(f(Integer(1))->toString(), "0"); + EXPECT_EQ(f(Integer(1))->toString(), "0.0"); EXPECT_EQ(f(Integer(10))->toString(), "2.3025850929940456840179914546843642076011014886287729760333279009675726096773525"); EXPECT_EQ(f(Integer(5))->toString(), "1.6094379124341003746007593332261876395256013542685177219126478914741789877076578"); EXPECT_EQ(f(Rational(1, 10))->toString(), "-2.3025850929940456840179914546843642076011014886287729760333279009675726096773525"); - EXPECT_EQ(f(getE())->toString(), "1"); + EXPECT_EQ(f(getE())->toString(), "1.0"); EXPECT_EQ(f(Variable("a"))->toString(), "ln(a)"); diff --git a/tests/src/functions/other/FactorialTests.cpp b/tests/src/functions/other/FactorialTests.cpp index 43c680233..2ae8772ac 100644 --- a/tests/src/functions/other/FactorialTests.cpp +++ b/tests/src/functions/other/FactorialTests.cpp @@ -56,8 +56,8 @@ TEST(FactorialTests, callTest) { EXPECT_EQ(f(Real("0.1"))->toString(), "0.9513507698668731836292487177265402192550578626088377343050000770434265383322821"); - EXPECT_EQ(f(Real("10"))->toString(), "3628800"); - EXPECT_EQ(f(Real(-10))->toString(), "(-10)!"); + EXPECT_EQ(f(Real("10"))->toString(), "3628800.0"); + EXPECT_EQ(f(Real(-10))->toString(), "(-10.0)!"); EXPECT_EQ(f(Integer(-10))->toString(), "ComplexInf"); EXPECT_EQ(f(Rational(-10))->toString(), "ComplexInf"); @@ -89,11 +89,11 @@ TEST(FactorialTests, call2Test) { EXPECT_EQ(f2(Rational(-1, 10))->toString(), "(-1/10)!!"); EXPECT_EQ(f2(Real("0.1"))->toString(), "0.1!!"); - EXPECT_EQ(f2(Real("10"))->toString(), "10!!"); + EXPECT_EQ(f2(Real("10"))->toString(), "10.0!!"); EXPECT_EQ(f2(Integer(-10))->toString(), "(-10)!!"); EXPECT_EQ(f2(Rational(-10))->toString(), "(-10)!!"); - EXPECT_EQ(f2(Real(-10))->toString(), "(-10)!!"); + EXPECT_EQ(f2(Real(-10))->toString(), "(-10.0)!!"); EXPECT_EQ(f2(Variable("a"))->toString(), "a!!"); @@ -120,11 +120,11 @@ TEST(FactorialTests, call3Test) { EXPECT_EQ(f3(Rational(-1, 10))->toString(), "(-1/10)!!!"); EXPECT_EQ(f3(Real("0.1"))->toString(), "0.1!!!"); - EXPECT_EQ(f3(Real("10"))->toString(), "10!!!"); + EXPECT_EQ(f3(Real("10"))->toString(), "10.0!!!"); EXPECT_EQ(f3(Integer(-10))->toString(), "(-10)!!!"); EXPECT_EQ(f3(Rational(-10))->toString(), "(-10)!!!"); - EXPECT_EQ(f3(Real(-10))->toString(), "(-10)!!!"); + EXPECT_EQ(f3(Real(-10))->toString(), "(-10.0)!!!"); EXPECT_EQ(f3(Variable("a"))->toString(), "a!!!"); diff --git a/tests/src/functions/powers/RootTests.cpp b/tests/src/functions/powers/RootTests.cpp index 318721620..279058217 100644 --- a/tests/src/functions/powers/RootTests.cpp +++ b/tests/src/functions/powers/RootTests.cpp @@ -72,13 +72,13 @@ TEST(RootTests, callTest) { "6341898279505748220737558733036392804899042006384472743062801876828565493307610084438050180592269960571521" "04826353254809443231832/5, 4)/25"); - EXPECT_EQ(f(Real(144), Integer(2))->toString(), "12"); + EXPECT_EQ(f(Real(144), Integer(2))->toString(), "12.0"); EXPECT_EQ(f(Real(144), Integer(4))->toString(), "3.4641016151377545870548926830117447338856105076207612561116139589038660338176001"); EXPECT_EQ(f(Real(2), Integer(3))->toString(), "1.2599210498948731647672106072782283505702514647015079800819751121552996765139595"); - EXPECT_EQ(f(Real(144), Rational(2, 3))->toString(), "1728"); + EXPECT_EQ(f(Real(144), Rational(2, 3))->toString(), "1728.0"); EXPECT_EQ(f(Real(144), Rational(4, 3))->toString(), "41.569219381653055044658712196140936806627326091449135073339367506846392405811201"); EXPECT_EQ(f(Real(2), Rational(3, 5))->toString(), @@ -94,7 +94,7 @@ TEST(RootTests, callTest) { EXPECT_EQ(f(Integer(-10), Integer(2))->toString(), "sqrt(-10)"); EXPECT_EQ(f(Rational(-9289, 10), Rational(2, 3))->toString(), "(-9289/10)^(3/2)"); - EXPECT_EQ(f(Real(-9289), Rational(2, 3))->toString(), "(-9289)^1.5"); + EXPECT_EQ(f(Real(-9289), Rational(2, 3))->toString(), "(-9289.0)^1.5"); EXPECT_THROW(f(), InvalidInputFunctionException); EXPECT_THROW(f(Integer(1), Integer(1), Integer(1)), InvalidInputFunctionException); diff --git a/tests/src/functions/powers/SqrtTests.cpp b/tests/src/functions/powers/SqrtTests.cpp index 44dcab032..f32dd2e1c 100644 --- a/tests/src/functions/powers/SqrtTests.cpp +++ b/tests/src/functions/powers/SqrtTests.cpp @@ -45,12 +45,12 @@ TEST(SqrtTests, callTest) { EXPECT_EQ(f(Rational("68732648273642987365932706179432649827364.144"))->toString(), "sqrt(8591581034205373420741588272429081228420518/5)/5"); - EXPECT_EQ(f(Real(144))->toString(), "12"); + EXPECT_EQ(f(Real(144))->toString(), "12.0"); EXPECT_EQ(f(Real(2))->toString(), "1.414213562373095048801688724209698078569671875376948073176679737990732478462107"); EXPECT_EQ(f(Integer(-10))->toString(), "sqrt(-10)"); EXPECT_EQ(f(Rational(-9289, 10))->toString(), "sqrt(-9289/10)"); - EXPECT_EQ(f(Real(-9289))->toString(), "sqrt(-9289)"); + EXPECT_EQ(f(Real(-9289))->toString(), "sqrt(-9289.0)"); EXPECT_EQ(f(Variable("a"))->toString(), "sqrt(a)"); diff --git a/tests/src/functions/trigonometry/AcosTests.cpp b/tests/src/functions/trigonometry/AcosTests.cpp index 68e5b4328..534590c0a 100644 --- a/tests/src/functions/trigonometry/AcosTests.cpp +++ b/tests/src/functions/trigonometry/AcosTests.cpp @@ -21,7 +21,7 @@ TEST(AcosTests, getFunctionTypeTest) { } TEST(AcosTests, callTest) { - EXPECT_EQ(f(Integer(1))->toString(), "0"); + EXPECT_EQ(f(Integer(1))->toString(), "0.0"); EXPECT_EQ(f(Integer(0))->toString(), "1.5707963267948966192313216916397514420985846996875529104874722961539082031431045"); EXPECT_EQ(f(Rational(1, 10))->toString(), diff --git a/tests/src/functions/trigonometry/AsinTests.cpp b/tests/src/functions/trigonometry/AsinTests.cpp index a29ea5eca..345617576 100644 --- a/tests/src/functions/trigonometry/AsinTests.cpp +++ b/tests/src/functions/trigonometry/AsinTests.cpp @@ -21,7 +21,7 @@ TEST(AsinTests, getFunctionTypeTest) { } TEST(AsinTests, callTest) { - EXPECT_EQ(f(Integer(0))->toString(), "0"); + EXPECT_EQ(f(Integer(0))->toString(), "0.0"); EXPECT_EQ(f(Integer(1))->toString(), "1.5707963267948966192313216916397514420985846996875529104874722961539082031431045"); EXPECT_EQ(f(Rational(1, 10))->toString(), diff --git a/tests/src/functions/trigonometry/AtanTests.cpp b/tests/src/functions/trigonometry/AtanTests.cpp index 341e6cb7f..0063c7457 100644 --- a/tests/src/functions/trigonometry/AtanTests.cpp +++ b/tests/src/functions/trigonometry/AtanTests.cpp @@ -20,7 +20,7 @@ TEST(AtanTests, getFunctionTypeTest) { } TEST(AtanTests, callTest) { - EXPECT_EQ(f(Integer(0))->toString(), "0"); + EXPECT_EQ(f(Integer(0))->toString(), "0.0"); EXPECT_EQ(f(Integer(1))->toString(), "0.78539816339744830961566084581987572104929234984377645524373614807695410157155225"); EXPECT_EQ(f(Integer(10))->toString(), diff --git a/tests/src/functions/trigonometry/CosTests.cpp b/tests/src/functions/trigonometry/CosTests.cpp index 02fc18f66..1633c7d48 100644 --- a/tests/src/functions/trigonometry/CosTests.cpp +++ b/tests/src/functions/trigonometry/CosTests.cpp @@ -22,15 +22,16 @@ TEST(CosTests, getFunctionTypeTest) { } TEST(CosTests, callTest) { - EXPECT_EQ(f(Integer(0))->toString(), "1"); + EXPECT_EQ(f(Integer(0))->toString(), "1.0"); EXPECT_EQ(f(Integer(10))->toString(), "-0.83907152907645245225886394782406483451993016513316854683595373104879258686627077"); EXPECT_EQ(f(Integer(5))->toString(), "0.2836621854632262644666391715135573083344225922522159449303590665861514567673827"); EXPECT_EQ(f(Rational(1, 10))->toString(), "0.99500416527802576609556198780387029483857622541508403595935274468526591021824047"); - EXPECT_EQ(f(getPi() / 2)->toString(), "0"); - EXPECT_EQ(f(getPi())->toString(), "-1"); + EXPECT_EQ(f(getPi() / 2)->toString(), + "5.4692230477529111586267970406424055872514205135096926055277982231147447746519098*10^-121"); + EXPECT_EQ(f(getPi())->toString(), "-1.0"); EXPECT_EQ(f(Variable("a"))->toString(), "cos(a)"); diff --git a/tests/src/functions/trigonometry/CotTests.cpp b/tests/src/functions/trigonometry/CotTests.cpp index 83e0a90cc..f8d156346 100644 --- a/tests/src/functions/trigonometry/CotTests.cpp +++ b/tests/src/functions/trigonometry/CotTests.cpp @@ -31,8 +31,9 @@ TEST(CotTests, callTest) { "-0.29581291553274554042776716808248528606823479548153489533787776852195700157385241"); EXPECT_EQ(f(Rational(1, 10))->toString(), "9.9666444232592378597941126892705939076302483291514474270066809743652342102525365"); - EXPECT_EQ(f(getPi() / 2)->toString(), "0"); - EXPECT_EQ(f(getPi() / 4)->toString(), "1"); + EXPECT_EQ(f(getPi() / 2)->toString(), + "5.4692230477529111586267970406424055872514205135096926055277982231147447746519098*10^-121"); + EXPECT_EQ(f(getPi() / 4)->toString(), "1.0"); EXPECT_EQ(f(Variable("a"))->toString(), "cot(a)"); diff --git a/tests/src/functions/trigonometry/SinTests.cpp b/tests/src/functions/trigonometry/SinTests.cpp index 87b1762c8..6e895b8ec 100644 --- a/tests/src/functions/trigonometry/SinTests.cpp +++ b/tests/src/functions/trigonometry/SinTests.cpp @@ -22,15 +22,15 @@ TEST(SinTests, getFunctionTypeTest) { } TEST(SinTests, callTest) { - EXPECT_EQ(f(Integer(0))->toString(), "0"); + EXPECT_EQ(f(Integer(0))->toString(), "0.0"); EXPECT_EQ(f(Integer(10))->toString(), "-0.54402111088936981340474766185137728168364301291622389157418401261675720964049343"); EXPECT_EQ(f(Integer(5))->toString(), "-0.9589242746631384688931544061559939733524615439646017781316724542351025580865596"); EXPECT_EQ(f(Rational(1, 10))->toString(), "0.099833416646828152306814198410622026989915388017982259992766861561651744283292428"); - EXPECT_EQ(f(getPi() / 2)->toString(), "1"); - EXPECT_EQ(f(getPi())->toString(), "0"); + EXPECT_EQ(f(getPi() / 2)->toString(), "1.0"); + EXPECT_EQ(f(getPi())->toString(), "9.3844609550582231725359408128481117450284102701938521105559644622948954930381964*10^-122"); EXPECT_EQ(f(Variable("a"))->toString(), "sin(a)"); diff --git a/tests/src/functions/trigonometry/TanTests.cpp b/tests/src/functions/trigonometry/TanTests.cpp index af20ca456..fa2237e0d 100644 --- a/tests/src/functions/trigonometry/TanTests.cpp +++ b/tests/src/functions/trigonometry/TanTests.cpp @@ -23,7 +23,7 @@ TEST(TanTests, getFunctionTypeTest) { } TEST(TanTests, callTest) { - EXPECT_EQ(f(Integer(0))->toString(), "0"); + EXPECT_EQ(f(Integer(0))->toString(), "0.0"); EXPECT_EQ(f(Integer(10))->toString(), "0.6483608274590866712591249330098086768168743429837249756336279673958556003746239"); EXPECT_EQ(f(Integer(-10))->toString(), @@ -32,12 +32,12 @@ TEST(TanTests, callTest) { "-3.3805150062465856369827058794473439087095692082854598771768209809183460102012061"); EXPECT_EQ(f(Rational(1, 10))->toString(), "0.10033467208545054505808004578111153681900480457644204002220806579803211288567387"); - EXPECT_EQ(f(getPi() / 4)->toString(), "1"); + EXPECT_EQ(f(getPi() / 4)->toString(), "1.0"); + EXPECT_EQ(f(getPi() / 2)->toString(), + "1.8284132705300082902317661058105479684239284072480833124982117000101510968883506*10^120"); EXPECT_EQ(f(Variable("a"))->toString(), "tan(a)"); - EXPECT_THROW(f(getPi() / 2), UndefinedFunctionException); - EXPECT_THROW(f(), InvalidInputFunctionException); EXPECT_THROW(f(Integer(1), Integer(1), Integer(1)), InvalidInputFunctionException); } diff --git a/tests/src/numbers/IntegerFunctionsTests.cpp b/tests/src/numbers/IntegerFunctionsTests.cpp index c4bf0b950..140c68105 100644 --- a/tests/src/numbers/IntegerFunctionsTests.cpp +++ b/tests/src/numbers/IntegerFunctionsTests.cpp @@ -119,9 +119,9 @@ TEST(IntegerFunctionsTests, powTest) { "122262032882136893556623485326120689398001084489/1953125000000000000000000000000000000000000000000"); EXPECT_EQ(pow(Rational(6789), Integer(-4)).toString(), "1/2124336126051441"); - EXPECT_EQ(pow(Real(5), Integer(2)).toString(), "25"); - EXPECT_EQ(pow(Real(-5), Integer(5)).toString(), "-3125"); - EXPECT_EQ(pow(Real(6789), Integer(4)).toString(), "2124336126051441"); + EXPECT_EQ(pow(Real(5), Integer(2)).toString(), "25.0"); + EXPECT_EQ(pow(Real(-5), Integer(5)).toString(), "-3125.0"); + EXPECT_EQ(pow(Real(6789), Integer(4)).toString(), "2124336126051441.0"); EXPECT_EQ(pow(Real("135253468973498327423987498324729384.12987349823749832"), Integer(3)).toString(), "2.474259452251333810348988009462181055384708019760349478621886281193496112100109*10^105"); EXPECT_EQ(pow(Real(6789), Integer(-4)).toString(), diff --git a/tests/src/numbers/RealFunctionsTests.cpp b/tests/src/numbers/RealFunctionsTests.cpp index 0c973183d..5e68656f5 100644 --- a/tests/src/numbers/RealFunctionsTests.cpp +++ b/tests/src/numbers/RealFunctionsTests.cpp @@ -9,14 +9,14 @@ using namespace fintamath; TEST(RealFunctionsTests, absTest) { EXPECT_EQ(abs(Real("8465132.321651651")).toString(), "8465132.321651651"); EXPECT_EQ(abs(Real("-98465136846516354684651.351")).toString(), "98465136846516354684651.351"); - EXPECT_EQ(abs(Real("0")).toString(), "0"); + EXPECT_EQ(abs(Real("0")).toString(), "0.0"); } TEST(RealFunctionsTests, sqrtTest) { - EXPECT_EQ(sqrt(Real(1)).toString(), "1"); - EXPECT_EQ(sqrt(Real(4)).toString(), "2"); - EXPECT_EQ(sqrt(Real(144)).toString(), "12"); - EXPECT_EQ(sqrt(Real("1000000000000000000")).toString(), "1000000000"); + EXPECT_EQ(sqrt(Real(1)).toString(), "1.0"); + EXPECT_EQ(sqrt(Real(4)).toString(), "2.0"); + EXPECT_EQ(sqrt(Real(144)).toString(), "12.0"); + EXPECT_EQ(sqrt(Real("1000000000000000000")).toString(), "1000000000.0"); EXPECT_EQ(sqrt(Real(2)).toString(), "1.414213562373095048801688724209698078569671875376948073176679737990732478462107"); @@ -32,20 +32,20 @@ TEST(RealFunctionsTests, sqrtTest) { } TEST(RealFunctionsTests, powTest) { - EXPECT_EQ(pow(Real("10"), Real("0")).toString(), "1"); - EXPECT_EQ(pow(Real("-10"), Real("3")).toString(), "-1000"); - EXPECT_EQ(pow(Real("1"), Real("25")).toString(), "1"); + EXPECT_EQ(pow(Real("10"), Real("0")).toString(), "1.0"); + EXPECT_EQ(pow(Real("-10"), Real("3")).toString(), "-1000.0"); + EXPECT_EQ(pow(Real("1"), Real("25")).toString(), "1.0"); EXPECT_EQ(pow(Real("2.2"), Real("5")).toString(), "51.53632"); EXPECT_EQ(pow(Real("1.61051"), Real("0.2")).toString(), "1.1"); - EXPECT_EQ(pow(Real("10"), Real("10000")).toString(), "1*10^10000"); + EXPECT_EQ(pow(Real("10"), Real("10000")).toString(), "1.0*10^10000"); EXPECT_EQ(pow(Real("20"), Real("10000")).toString(), "1.9950631168807583848837421626835850838234968318861924548520089498529438830221947*10^13010"); - EXPECT_EQ(pow(Real("10"), Real("-10000")).toString(), "1*10^-10000"); + EXPECT_EQ(pow(Real("10"), Real("-10000")).toString(), "1.0*10^-10000"); EXPECT_EQ(pow(Real("-10"), Real("-3")).toString(), "-0.001"); - EXPECT_EQ(pow(Real("-1"), Real("-25")).toString(), "-1"); + EXPECT_EQ(pow(Real("-1"), Real("-25")).toString(), "-1.0"); EXPECT_EQ(pow(Real("-2.2"), Real("-5")).toString(), "-0.019403791345598599201495178545926445660070412478034908196782385703907457886011264"); - EXPECT_EQ(pow(Real("-10"), Real("-10000")).toString(), "1*10^-10000"); + EXPECT_EQ(pow(Real("-10"), Real("-10000")).toString(), "1.0*10^-10000"); EXPECT_EQ(pow(Real("-20"), Real("-10000")).toString(), "5.012372749206452009297555933742977749321567781338425839421429042279239530950784*10^-13011"); @@ -64,9 +64,9 @@ TEST(RealFunctionsTests, expTest) { } TEST(RealFunctionsTests, logTest) { - EXPECT_EQ(log(Real("2"), Real("32")).toString(), "5"); - EXPECT_EQ(log(Real("6.6"), Real("1897.4736")).toString(), "4"); - EXPECT_EQ(log(Real("25625423589"), Real("1")).toString(), "0"); + EXPECT_EQ(log(Real("2"), Real("32")).toString(), "5.0"); + EXPECT_EQ(log(Real("6.6"), Real("1897.4736")).toString(), "4.0"); + EXPECT_EQ(log(Real("25625423589"), Real("1")).toString(), "0.0"); EXPECT_THROW(log(Real("1"), Real("66")), UndefinedFunctionException); EXPECT_THROW(log(Real("-10"), Real("10")), UndefinedFunctionException); @@ -75,7 +75,7 @@ TEST(RealFunctionsTests, logTest) { } TEST(RealFunctionsTests, lnTest) { - EXPECT_EQ(ln(Real("1")).toString(), "0"); + EXPECT_EQ(ln(Real("1")).toString(), "0.0"); EXPECT_EQ(ln(Real("66")).toString(), "4.1896547420264255448744209363458315725446975461204218810739420522614615391015404"); @@ -84,14 +84,14 @@ TEST(RealFunctionsTests, lnTest) { } TEST(RealFunctionsTests, lbTest) { - EXPECT_EQ(lb(Real("2")).toString(), "1"); - EXPECT_EQ(lb(Real("1024")).toString(), "10"); + EXPECT_EQ(lb(Real("2")).toString(), "1.0"); + EXPECT_EQ(lb(Real("1024")).toString(), "10.0"); EXPECT_THROW(lb(Real("-1")), UndefinedFunctionException); } TEST(RealFunctionsTests, lgTest) { - EXPECT_EQ(lg(Real("0.001")).toString(), "-3"); + EXPECT_EQ(lg(Real("0.001")).toString(), "-3.0"); EXPECT_EQ(lg(Real("25")).toString(), "1.397940008672037609572522210551013946463620237075782917379145077745783621451151"); @@ -99,7 +99,7 @@ TEST(RealFunctionsTests, lgTest) { } TEST(RealFunctionsTests, sinTest) { - EXPECT_EQ(sin(Real("0")).toString(), "0"); + EXPECT_EQ(sin(Real("0")).toString(), "0.0"); EXPECT_EQ(sin(Real("-1")).toString(), "-0.84147098480789650665250232163029899962256306079837106567275170999191040439123967"); EXPECT_EQ(sin(Real("360")).toString(), @@ -107,7 +107,7 @@ TEST(RealFunctionsTests, sinTest) { } TEST(RealFunctionsTests, cosTest) { - EXPECT_EQ(cos(Real("0")).toString(), "1"); + EXPECT_EQ(cos(Real("0")).toString(), "1.0"); EXPECT_EQ(cos(Real("1")).toString(), "0.54030230586813971740093660744297660373231042061792222767009725538110039477447176"); EXPECT_EQ(cos(Real("125")).toString(), @@ -115,13 +115,12 @@ TEST(RealFunctionsTests, cosTest) { } TEST(RealFunctionsTests, tanTest) { - EXPECT_EQ(tan(Real("0")).toString(), "0"); + EXPECT_EQ(tan(Real("0")).toString(), "0.0"); EXPECT_EQ(tan(Real("-10")).toString(), "-0.6483608274590866712591249330098086768168743429837249756336279673958556003746239"); EXPECT_EQ(tan(Real("1.5")).toString(), "14.101419947171719387646083651987756445659543577235861866123267586089696270414155"); - - EXPECT_THROW(tan(Real(getPi() / 2)), UndefinedFunctionException); + EXPECT_EQ(tan(Real(getPi() / 2)).toString(), "1.8284132705300082902317661058105479684239284072480833124982117000101510968883506*10^120"); } TEST(RealFunctionsTests, cotTest) { @@ -136,10 +135,10 @@ TEST(RealFunctionsTests, cotTest) { } TEST(RealFunctionsTests, asinTest) { - EXPECT_EQ(asin(Real("0")).toString(), "0"); + EXPECT_EQ(asin(Real("0")).toString(), "0.0"); EXPECT_EQ( asin(Real("-0.84147098480789650665250232163029899962256306079837106567275170999191040439123967")).toString(), - "-1"); + "-1.0"); EXPECT_THROW(asin(Real("10")), UndefinedFunctionException); EXPECT_THROW(asin(Real("-10")), UndefinedFunctionException); @@ -149,14 +148,14 @@ TEST(RealFunctionsTests, acosTest) { EXPECT_EQ(acos(Real("-1")).toString(), "3.141592653589793238462643383279502884197169399375105820974944592307816406286209"); EXPECT_EQ(acos(Real("0.54030230586813971740093660744297660373231042061792222767009725538110039477447176")).toString(), - "1"); + "1.0"); EXPECT_THROW(acos(Real("10")), UndefinedFunctionException); EXPECT_THROW(acos(Real("-10")), UndefinedFunctionException); } TEST(RealFunctionsTests, atanTest) { - EXPECT_EQ(atan(Real("0")).toString(), "0"); + EXPECT_EQ(atan(Real("0")).toString(), "0.0"); EXPECT_EQ(atan(Real("14.101419947171719387646083651987756445659543577235861866123267586089696270414155")).toString(), "1.5"); } @@ -171,7 +170,7 @@ TEST(RealFunctionsTests, acotTest) { } TEST(RealFunctionsTests, sinhTest) { - EXPECT_EQ(sinh(Real("0")).toString(), "0"); + EXPECT_EQ(sinh(Real("0")).toString(), "0.0"); EXPECT_EQ(sinh(Real("-1")).toString(), "-1.1752011936438014568823818505956008151557179813340958702295654130133075673043239"); EXPECT_EQ(sinh(Real("360")).toString(), @@ -179,7 +178,7 @@ TEST(RealFunctionsTests, sinhTest) { } TEST(RealFunctionsTests, coshTest) { - EXPECT_EQ(cosh(Real("0")).toString(), "1"); + EXPECT_EQ(cosh(Real("0")).toString(), "1.0"); EXPECT_EQ(cosh(Real("1")).toString(), "1.5430806348152437784779056207570616826015291123658637047374022147107690630492237"); EXPECT_EQ(cosh(Real("125")).toString(), @@ -187,7 +186,7 @@ TEST(RealFunctionsTests, coshTest) { } TEST(RealFunctionsTests, tanhTest) { - EXPECT_EQ(tanh(Real("0")).toString(), "0"); + EXPECT_EQ(tanh(Real("0")).toString(), "0.0"); EXPECT_EQ(tanh(Real("-10")).toString(), "-0.99999999587769276361959283713827574105081461849501996226140069543680188089876683"); EXPECT_EQ(tanh(Real("1.5")).toString(), @@ -197,7 +196,7 @@ TEST(RealFunctionsTests, tanhTest) { TEST(RealFunctionsTests, cothTest) { EXPECT_EQ(coth(Real("1")).toString(), "1.3130352854993313036361612469308478329120139412404526555431529675670842704618744"); - EXPECT_EQ(coth(Real("200")).toString(), "1"); + EXPECT_EQ(coth(Real("200")).toString(), "1.0"); EXPECT_EQ(coth(Real("0.001")).toString(), "1000.0003333333111111132275130158730372508128641887448236432439795543114729807153"); @@ -205,7 +204,7 @@ TEST(RealFunctionsTests, cothTest) { } TEST(RealFunctionsTests, asinhTest) { - EXPECT_EQ(asinh(Real("0")).toString(), "0"); + EXPECT_EQ(asinh(Real("0")).toString(), "0.0"); EXPECT_EQ(asinh(Real("10")).toString(), "2.9982229502979697388465955375964534766070580548773036557344592627530896573521661"); EXPECT_EQ(asinh(Real("-10")).toString(), @@ -213,7 +212,7 @@ TEST(RealFunctionsTests, asinhTest) { } TEST(RealFunctionsTests, acoshTest) { - EXPECT_EQ(acosh(Real("1")).toString(), "0"); + EXPECT_EQ(acosh(Real("1")).toString(), "0.0"); EXPECT_EQ(acosh(Real("10")).toString(), "2.9932228461263808979126677137741829130836604511809806426851456009774992267097399"); @@ -222,7 +221,7 @@ TEST(RealFunctionsTests, acoshTest) { } TEST(RealFunctionsTests, atanhTest) { - EXPECT_EQ(atanh(Real("0")).toString(), "0"); + EXPECT_EQ(atanh(Real("0")).toString(), "0.0"); EXPECT_EQ(atanh(Real("0.5")).toString(), "0.54930614433405484569762261846126285232374527891137472586734716681874714660930448"); @@ -250,12 +249,12 @@ TEST(RealFunctionsTests, getEPiTest) { } TEST(RealFunctionsTests, tgammaTest) { - EXPECT_EQ(tgamma(Real("1")).toString(), "1"); - EXPECT_EQ(tgamma(Real("2")).toString(), "1"); - EXPECT_EQ(tgamma(Real("3")).toString(), "2"); - EXPECT_EQ(tgamma(Real("4")).toString(), "6"); - EXPECT_EQ(tgamma(Real("5")).toString(), "24"); - EXPECT_EQ(tgamma(Real("10")).toString(), "362880"); + EXPECT_EQ(tgamma(Real("1")).toString(), "1.0"); + EXPECT_EQ(tgamma(Real("2")).toString(), "1.0"); + EXPECT_EQ(tgamma(Real("3")).toString(), "2.0"); + EXPECT_EQ(tgamma(Real("4")).toString(), "6.0"); + EXPECT_EQ(tgamma(Real("5")).toString(), "24.0"); + EXPECT_EQ(tgamma(Real("10")).toString(), "362880.0"); EXPECT_EQ(tgamma(Real("1000000")).toString(), "8.2639316883312400623766461031726662911353479789638730451677758855633796110356451*10^5565702"); diff --git a/tests/src/numbers/RealTests.cpp b/tests/src/numbers/RealTests.cpp index 4e5e76944..b4c036e7e 100644 --- a/tests/src/numbers/RealTests.cpp +++ b/tests/src/numbers/RealTests.cpp @@ -16,8 +16,8 @@ TEST(RealTests, stringConstructorTest) { EXPECT_EQ(Real("-9.3").toString(), "-9.3"); EXPECT_EQ(Real("0989929039237832000.9302930929333").toString(), "989929039237832000.9302930929333"); EXPECT_EQ(Real(".1").toString(), "0.1"); - EXPECT_EQ(Real("1.").toString(), "1"); - EXPECT_EQ(Real("0.000000001").toString(), "1*10^-9"); + EXPECT_EQ(Real("1.").toString(), "1.0"); + EXPECT_EQ(Real("0.000000001").toString(), "1.0*10^-9"); EXPECT_EQ(Real("10000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000") .toString(), "1.00000000002*10^94"); @@ -390,11 +390,11 @@ TEST(RealTests, doubleFriendMultiplyOperatorTest) { TEST(RealTests, divideAssignmentOperatorTest) { auto a = Real(10) /= Real(2); - EXPECT_EQ(a.toString(), "5"); + EXPECT_EQ(a.toString(), "5.0"); a = Real("-2.255") /= Real("-1.1"); EXPECT_EQ(a.toString(), "2.05"); a = Real("12.1") /= Real("-1.1"); - EXPECT_EQ(a.toString(), "-11"); + EXPECT_EQ(a.toString(), "-11.0"); } TEST(RealTests, rationalDivideAssignmentOperatorTest) { @@ -403,14 +403,14 @@ TEST(RealTests, rationalDivideAssignmentOperatorTest) { a = Real("-2.255") /= Rational(-11, 10); EXPECT_EQ(a.toString(), "2.05"); a = Real("12.1") /= Rational(-11, 10); - EXPECT_EQ(a.toString(), "-11"); + EXPECT_EQ(a.toString(), "-11.0"); } TEST(RealTests, integerDivideAssignmentOperatorTest) { auto a = Real(10) /= Integer(2); - EXPECT_EQ(a.toString(), "5"); + EXPECT_EQ(a.toString(), "5.0"); a = Real(10) /= Integer(-2); - EXPECT_EQ(a.toString(), "-5"); + EXPECT_EQ(a.toString(), "-5.0"); a = Real("22.5") /= Integer(-11); EXPECT_EQ(a.toString(), "-2.0454545454545454545454545454545454545454545454545454545454545454545454545454545"); a = Real("-27.5") /= Integer(-11); @@ -419,7 +419,7 @@ TEST(RealTests, integerDivideAssignmentOperatorTest) { TEST(RealTests, doubleDivideAssignmentOperatorTest) { auto a = Real("12.5") /= 2.5; - EXPECT_EQ(a.precise(3).toString(), "5"); + EXPECT_EQ(a.precise(3).toString(), "5.0"); a = Real("2.255") /= -1.1; EXPECT_EQ(a.precise(3).toString(), "-2.05"); a = Real("-2.75") /= -1.1; @@ -428,11 +428,11 @@ TEST(RealTests, doubleDivideAssignmentOperatorTest) { TEST(RealTests, divideOperatorTest) { auto a = Real(10) / Real(2); - EXPECT_EQ(a.toString(), "5"); + EXPECT_EQ(a.toString(), "5.0"); a = Real("-2.255") / Real("-1.1"); EXPECT_EQ(a.toString(), "2.05"); a = Real("12.1") / Real("-1.1"); - EXPECT_EQ(a.toString(), "-11"); + EXPECT_EQ(a.toString(), "-11.0"); } TEST(RealTests, rationalDivideOperatorTest) { @@ -441,14 +441,14 @@ TEST(RealTests, rationalDivideOperatorTest) { a = Real("-2.255") / Rational(-11, 10); EXPECT_EQ(a.toString(), "2.05"); a = Real("12.1") / Rational(-11, 10); - EXPECT_EQ(a.toString(), "-11"); + EXPECT_EQ(a.toString(), "-11.0"); } TEST(RealTests, integerDivideOperatorTest) { auto a = Real(10) / Integer(2); - EXPECT_EQ(a.toString(), "5"); + EXPECT_EQ(a.toString(), "5.0"); a = Real(10) / Integer(-2); - EXPECT_EQ(a.toString(), "-5"); + EXPECT_EQ(a.toString(), "-5.0"); a = Real("22.5") / Integer(-11); EXPECT_EQ(a.toString(), "-2.0454545454545454545454545454545454545454545454545454545454545454545454545454545"); a = Real("-27.5") / Integer(-11); @@ -457,7 +457,7 @@ TEST(RealTests, integerDivideOperatorTest) { TEST(RealTests, doubleDivideOperatorTest) { auto a = Real("12.5") / 2.5; - EXPECT_EQ(a.precise(3).toString(), "5"); + EXPECT_EQ(a.precise(3).toString(), "5.0"); a = Real("2.255") / -1.1; EXPECT_EQ(a.precise(3).toString(), "-2.05"); a = Real("-2.75") / -1.1; @@ -470,14 +470,14 @@ TEST(RealTests, rationalFriendDivideOperatorTest) { a = Rational(-11, 10) / Real("-2.5"); EXPECT_EQ(a.toString(), "0.44"); a = Rational(-11, 10) / Real("0.1"); - EXPECT_EQ(a.toString(), "-11"); + EXPECT_EQ(a.toString(), "-11.0"); } TEST(RealTests, integerFriendDivideOperatorTest) { auto a = Integer(10) / Real(2); - EXPECT_EQ(a.toString(), "5"); + EXPECT_EQ(a.toString(), "5.0"); a = Integer(10) / Real(-2); - EXPECT_EQ(a.toString(), "-5"); + EXPECT_EQ(a.toString(), "-5.0"); a = Integer(-6) / Real("1.6"); EXPECT_EQ(a.toString(), "-3.75"); a = Integer(-6) / Real("-1.6"); @@ -490,7 +490,7 @@ TEST(RealTests, doubleFriendDivideOperatorTest) { a = -1.1 / Real("-2.5"); EXPECT_EQ(a.precise(3).toString(), "0.44"); a = -1.1 / Real("0.1"); - EXPECT_EQ(a.precise(3).toString(), "-11"); + EXPECT_EQ(a.precise(3).toString(), "-11.0"); } TEST(RealTests, unaryPlusOperatorTest) { @@ -837,19 +837,20 @@ TEST(RealTests, doubleFriendMoreEqualOperatorTest) { TEST(RealTests, toStringTest) { EXPECT_EQ(Real("2.334455").toString(), "2.334455"); - EXPECT_EQ(Real(-11).toString(), "-11"); -} - -TEST(RealTests, simplifyTest) { - EXPECT_TRUE(is(Real(2.5).toMinimalObject())); - EXPECT_TRUE(is(Real(11).toMinimalObject())); - EXPECT_TRUE(is(Real(-2.5).toMinimalObject())); - EXPECT_TRUE(is(Real(-11).toMinimalObject())); - - EXPECT_EQ(Real(2.5).toMinimalObject()->toString(), "2.5"); - EXPECT_EQ(Real(11).toMinimalObject()->toString(), "11"); - EXPECT_EQ(Real(-2.5).toMinimalObject()->toString(), "-2.5"); - EXPECT_EQ(Real(-11).toMinimalObject()->toString(), "-11"); + EXPECT_EQ(Real(11).toString(), "11.0"); + EXPECT_EQ(Real(-11).toString(), "-11.0"); + EXPECT_EQ( + Real("118219374329847329874632874628734532864532645263452364532614523864152352353214454587245272").toString(), + "1.1821937432984732987463287462873453286453264526345236453261452386415235235321445*10^89"); + EXPECT_EQ( + Real("-118219374329847329874632874628734532864532645263452364532614523864152352353214454587245272").toString(), + "-1.1821937432984732987463287462873453286453264526345236453261452386415235235321445*10^89"); + EXPECT_EQ( + Real("1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000").toString(), + "1.0*10^90"); + EXPECT_EQ( + Real("-1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000").toString(), + "-1.0*10^90"); } TEST(RealTests, preciseTests) {