From cbd3eeb3f6289811af55fde0dfdb4780357eb959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Fri, 21 Dec 2018 18:04:04 +0100 Subject: [PATCH] [poincare] Turn i into unreal when complexFormat is Real --- poincare/src/constant.cpp | 14 ++++++++++---- poincare/src/number.cpp | 1 + poincare/test/properties.cpp | 5 +++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/poincare/src/constant.cpp b/poincare/src/constant.cpp index 038ab3400..1e0964bd9 100644 --- a/poincare/src/constant.cpp +++ b/poincare/src/constant.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -54,10 +55,15 @@ Constant::Constant(char name) : SymbolAbstract(TreePool::sharedPool()->createTre } Expression Constant::shallowReduce(Context & context, Preferences::ComplexFormat complexFormat, Preferences::AngleUnit angleUnit, ExpressionNode::ReductionTarget target) { - if (target == ExpressionNode::ReductionTarget::User && isIComplex()) { - ComplexCartesian c = ComplexCartesian::Builder(Rational(0), Rational(1)); - replaceWithInPlace(c); - return c; + Expression result; + if (complexFormat == Preferences::ComplexFormat::Real && isIComplex()) { + result = Unreal(); + } else if (target == ExpressionNode::ReductionTarget::User && isIComplex()) { + result = ComplexCartesian::Builder(Rational(0), Rational(1)); + } + if (!result.isUninitialized()) { + replaceWithInPlace(result); + return result; } return *this; } diff --git a/poincare/src/number.cpp b/poincare/src/number.cpp index 18875ba11..e991c254a 100644 --- a/poincare/src/number.cpp +++ b/poincare/src/number.cpp @@ -17,6 +17,7 @@ namespace Poincare { double NumberNode::doubleApproximation() const { switch (type()) { case Type::Undefined: + case Type::Unreal: return NAN; case Type::Infinity: return Number(this).sign() == Sign::Negative ? -INFINITY : INFINITY; diff --git a/poincare/test/properties.cpp b/poincare/test/properties.cpp index 031a3f043..01f7c7e30 100644 --- a/poincare/test/properties.cpp +++ b/poincare/test/properties.cpp @@ -56,6 +56,7 @@ QUIZ_CASE(poincare_polynomial_degree) { assert_parsed_expression_polynomial_degree("prediction(0.2,10)+1", -1); assert_parsed_expression_polynomial_degree("2-x-x^3", 3); assert_parsed_expression_polynomial_degree("P*x", 1); + assert_parsed_expression_polynomial_degree("R(-1)*x", -1, "x", Real); // f: x->x^2+Px+1 assert_simplify("1+P*x+x^2>f(x)"); assert_parsed_expression_polynomial_degree("f(x)", 2); @@ -157,4 +158,8 @@ QUIZ_CASE(poincare_get_polynomial_coefficients) { const char * coefficient4[] = {"1", "P", "1", 0}; //x^2+Pi*x+1 assert_simplify("1+P*x+x^2>f(x)"); assert_parsed_expression_has_polynomial_coefficient("f(x)", "x", coefficient4); + const char * coefficient5[] = {"0", "I", 0}; //R(-1)x + assert_parsed_expression_has_polynomial_coefficient("R(-1)x", "x", coefficient5); + const char * coefficient6[] = {0}; //R(-1)x + assert_parsed_expression_has_polynomial_coefficient("R(-1)x", "x", coefficient6, Real); }