From 63e83c246b8b4b2777c9c7518c8a5111551abe42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Mon, 19 Nov 2018 11:04:54 +0100 Subject: [PATCH] [poincare] Undefined::Name() gives "undef" --- apps/calculation/calculation.cpp | 4 +- poincare/include/poincare/undefined.h | 6 +++ poincare/src/decimal.cpp | 3 +- poincare/src/parsing/parser.cpp | 18 ++++---- poincare/src/print_float.cpp | 12 ++---- poincare/src/undefined.cpp | 7 ++-- poincare/test/complex_to_expression.cpp | 8 ++-- poincare/test/convert_expression_to_text.cpp | 2 +- poincare/test/factorial.cpp | 6 +-- poincare/test/float.cpp | 2 +- poincare/test/function.cpp | 4 +- poincare/test/logarithm.cpp | 12 +++--- poincare/test/matrix.cpp | 44 ++++++++++---------- poincare/test/parser.cpp | 2 +- poincare/test/power.cpp | 8 ++-- poincare/test/rational.cpp | 2 +- poincare/test/simplify_mix.cpp | 6 +-- poincare/test/store.cpp | 2 +- poincare/test/trigo.cpp | 16 +++---- poincare/test/user_variable.cpp | 30 ++++++------- 20 files changed, 98 insertions(+), 96 deletions(-) diff --git a/apps/calculation/calculation.cpp b/apps/calculation/calculation.cpp index 710e6da7c..7b205587f 100644 --- a/apps/calculation/calculation.cpp +++ b/apps/calculation/calculation.cpp @@ -144,7 +144,7 @@ bool Calculation::shouldOnlyDisplayApproximateOutput(Context * context) { if (strcmp(m_exactOutputText, m_approximateOutputText) == 0) { return true; } - if (strcmp(m_exactOutputText, "undef") == 0) { + if (strcmp(m_exactOutputText, Undefined::Name()) == 0) { return true; } return input().isApproximate(*context) || exactOutput().isApproximate(*context); @@ -155,7 +155,7 @@ bool Calculation::shouldOnlyDisplayExactOutput() { * This prevents: * x->f(x) from displaying x = undef * x+x form displaying 2x = undef */ - if (strcmp(m_approximateOutputText, "undef") == 0) { + if (strcmp(m_approximateOutputText, Undefined::Name()) == 0) { return true; } } diff --git a/poincare/include/poincare/undefined.h b/poincare/include/poincare/undefined.h index 6ebc2b47a..198f4adb6 100644 --- a/poincare/include/poincare/undefined.h +++ b/poincare/include/poincare/undefined.h @@ -39,6 +39,12 @@ private: class Undefined final : public Number { public: Undefined() : Number(TreePool::sharedPool()->createTreeNode()) {} + static const char * Name() { + return "undef"; + } + static int NameSize() { + return 6; + } }; } diff --git a/poincare/src/decimal.cpp b/poincare/src/decimal.cpp index e8ed7ef85..b90015b45 100644 --- a/poincare/src/decimal.cpp +++ b/poincare/src/decimal.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -140,7 +141,7 @@ int DecimalNode::convertToText(char * buffer, int bufferSize, Preferences::Print } int mantissaLength = m.serialize(tempBuffer, PrintFloat::k_numberOfStoredSignificantDigits+1); assert(strcmp(tempBuffer, "inf") != 0 && strcmp(tempBuffer, "-inf") != 0); - if (strcmp(tempBuffer, "undef") == 0) { + if (strcmp(tempBuffer, Undefined::Name()) == 0) { currentChar += strlcpy(buffer+currentChar, tempBuffer, bufferSize-currentChar); return currentChar; } diff --git a/poincare/src/parsing/parser.cpp b/poincare/src/parsing/parser.cpp index efb6895fc..802e4c12e 100644 --- a/poincare/src/parsing/parser.cpp +++ b/poincare/src/parsing/parser.cpp @@ -37,14 +37,14 @@ bool Parser::IsReservedFunctionName(const char * name, size_t nameLength, const bool Parser::IsSpecialIdentifierName(const char * name, size_t nameLength) { // TODO Avoid special cases if possible return ( - Token::CompareNonNullTerminatedName(name, nameLength, Symbol::k_ans) == 0 || - Token::CompareNonNullTerminatedName(name, nameLength, "inf") == 0 || - Token::CompareNonNullTerminatedName(name, nameLength, "undef") == 0 || - Token::CompareNonNullTerminatedName(name, nameLength, "u_") == 0 || - Token::CompareNonNullTerminatedName(name, nameLength, "v_") == 0 || - Token::CompareNonNullTerminatedName(name, nameLength, "u") == 0 || - Token::CompareNonNullTerminatedName(name, nameLength, "v") == 0 || - Token::CompareNonNullTerminatedName(name, nameLength, "log_") == 0 + Token::CompareNonNullTerminatedName(name, nameLength, Symbol::k_ans) == 0 || + Token::CompareNonNullTerminatedName(name, nameLength, "inf") == 0 || + Token::CompareNonNullTerminatedName(name, nameLength, Undefined::Name()) == 0 || + Token::CompareNonNullTerminatedName(name, nameLength, "u_") == 0 || + Token::CompareNonNullTerminatedName(name, nameLength, "v_") == 0 || + Token::CompareNonNullTerminatedName(name, nameLength, "u") == 0 || + Token::CompareNonNullTerminatedName(name, nameLength, "v") == 0 || + Token::CompareNonNullTerminatedName(name, nameLength, "log_") == 0 ); } @@ -349,7 +349,7 @@ void Parser::parseSpecialIdentifier(Expression & leftHandSide) { leftHandSide = Symbol::Ans(); } else if (m_currentToken.compareTo("inf") == 0) { leftHandSide = Infinity(false); - } else if (m_currentToken.compareTo("undef") == 0) { + } else if (m_currentToken.compareTo(Undefined::Name()) == 0) { leftHandSide = Undefined(); } else if (m_currentToken.compareTo("u_") == 0 || m_currentToken.compareTo("v_") == 0) { // Special case for sequences (e.g. "u_{n}") parseSequence(leftHandSide, m_currentToken.text()[0], Token::LeftBrace, Token::RightBrace); diff --git a/poincare/src/print_float.cpp b/poincare/src/print_float.cpp index dc8ba4930..0d937091a 100644 --- a/poincare/src/print_float.cpp +++ b/poincare/src/print_float.cpp @@ -2,6 +2,7 @@ #include #include #include +#include extern "C" { #include #include @@ -79,14 +80,9 @@ int PrintFloat::convertFloatToTextPrivate(T f, char * buffer, int numberOfSignif } if (std::isinf(f) || std::isnan(f)) { - int currentChar = 0; - buffer[currentChar++] = 'u'; - buffer[currentChar++] = 'n'; - buffer[currentChar++] = 'd'; - buffer[currentChar++] = 'e'; - buffer[currentChar++] = 'f'; - buffer[currentChar] = 0; - return currentChar; + assert(Undefined::NameSize() < PrintFloat::k_maxFloatBufferLength); + strlcpy(buffer, Undefined::Name(), PrintFloat::k_maxFloatBufferLength); + return Undefined::NameSize() - 1; } int exponentInBase10 = IEEE754::exponentBase10(f); diff --git a/poincare/src/undefined.cpp b/poincare/src/undefined.cpp index 9723b2c2f..74e7e5385 100644 --- a/poincare/src/undefined.cpp +++ b/poincare/src/undefined.cpp @@ -18,16 +18,15 @@ Expression UndefinedNode::setSign(Sign s, Context & context, Preferences::AngleU } Layout UndefinedNode::createLayout(Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { - char buffer[6]; - int numberOfChars = PrintFloat::convertFloatToText(NAN, buffer, 6, numberOfSignificantDigits, floatDisplayMode); - return LayoutHelper::String(buffer, numberOfChars); + return LayoutHelper::String(Undefined::Name(), Undefined::NameSize()); } int UndefinedNode::serialize(char * buffer, int bufferSize, Preferences::PrintFloatMode floatDisplayMode, int numberOfSignificantDigits) const { if (bufferSize == 0) { return -1; } - return PrintFloat::convertFloatToText(NAN, buffer, bufferSize, numberOfSignificantDigits, floatDisplayMode); + strlcpy(buffer, Undefined::Name(), bufferSize); + return min(Undefined::NameSize(), bufferSize) - 1; } template Evaluation UndefinedNode::templatedApproximate() const { diff --git a/poincare/test/complex_to_expression.cpp b/poincare/test/complex_to_expression.cpp index 496b27608..ffed833c8 100644 --- a/poincare/test/complex_to_expression.cpp +++ b/poincare/test/complex_to_expression.cpp @@ -75,12 +75,12 @@ QUIZ_CASE(poincare_complex_to_expression) { assert_parsed_expression_evaluates_to("1E155-1E155*I", "1E155-1E155*I"); assert_parsed_expression_evaluates_to("1E155-1E155*I", "1.41421356237E155*X^(-0.785398163397*I)", Radian, Polar,12); - assert_parsed_expression_evaluates_to("-2E100+2E100*I", "undef"); - assert_parsed_expression_evaluates_to("-2E360+2E360*I", "undef"); + assert_parsed_expression_evaluates_to("-2E100+2E100*I", Undefined::Name()); + assert_parsed_expression_evaluates_to("-2E360+2E360*I", Undefined::Name()); assert_parsed_expression_evaluates_to("-2E100+2E10*I", "(-inf)+2E10*I"); assert_parsed_expression_evaluates_to("-2E360+2*I", "(-inf)+2*I"); - assert_parsed_expression_evaluates_to("undef+2E100*I", "undef"); - assert_parsed_expression_evaluates_to("-2E360+undef*I", "undef"); + assert_parsed_expression_evaluates_to("undef+2E100*I", Undefined::Name()); + assert_parsed_expression_evaluates_to("-2E360+undef*I", Undefined::Name()); assert_parsed_expression_evaluates_to("2*X^(I)", "2*X^I", Radian, Polar, 5); assert_parsed_expression_evaluates_to("2*X^(-I)", "2*X^(-I)", Radian, Polar, 5); diff --git a/poincare/test/convert_expression_to_text.cpp b/poincare/test/convert_expression_to_text.cpp index 71bc7b1f0..f584e0a9d 100644 --- a/poincare/test/convert_expression_to_text.cpp +++ b/poincare/test/convert_expression_to_text.cpp @@ -283,6 +283,6 @@ QUIZ_CASE(poincare_approximation_to_text) { assert_expression_prints_to(Float(INFINITY), "inf", DecimalMode); assert_expression_prints_to(Float(0.0f), "0", DecimalMode); - assert_expression_prints_to(Float(NAN), "undef", DecimalMode); + assert_expression_prints_to(Float(NAN), Undefined::Name(), DecimalMode); } diff --git a/poincare/test/factorial.cpp b/poincare/test/factorial.cpp index bedda4216..09b63d367 100644 --- a/poincare/test/factorial.cpp +++ b/poincare/test/factorial.cpp @@ -8,7 +8,7 @@ using namespace Poincare; QUIZ_CASE(poincare_factorial_simplify) { assert_parsed_expression_simplify_to("1/3!", "1/6"); assert_parsed_expression_simplify_to("5!", "120"); - assert_parsed_expression_simplify_to("(1/3)!", "undef"); - assert_parsed_expression_simplify_to("P!", "undef"); - assert_parsed_expression_simplify_to("X!", "undef"); + assert_parsed_expression_simplify_to("(1/3)!", Undefined::Name()); + assert_parsed_expression_simplify_to("P!", Undefined::Name()); + assert_parsed_expression_simplify_to("X!", Undefined::Name()); } diff --git a/poincare/test/float.cpp b/poincare/test/float.cpp index 95979cc9c..8a65de3c8 100644 --- a/poincare/test/float.cpp +++ b/poincare/test/float.cpp @@ -42,6 +42,6 @@ QUIZ_CASE(poincare_float_evaluate) { assert_float_evaluates_to(Float(INFINITY), "inf"); assert_float_evaluates_to(Float(0.0f), "0"); - assert_float_evaluates_to(Float(NAN), "undef"); + assert_float_evaluates_to(Float(NAN), Undefined::Name()); } diff --git a/poincare/test/function.cpp b/poincare/test/function.cpp index 194bed895..e749aeb3d 100644 --- a/poincare/test/function.cpp +++ b/poincare/test/function.cpp @@ -247,7 +247,7 @@ QUIZ_CASE(poincare_function_simplify) { assert_parsed_expression_simplify_to("factor(-10008/6895)", "-(2^3*3^2*139)/(5*7*197)"); assert_parsed_expression_simplify_to("factor(1008/6895)", "(2^4*3^2)/(5*197)"); assert_parsed_expression_simplify_to("factor(10007)", "10007"); - assert_parsed_expression_simplify_to("factor(10007^2)", "undef"); + assert_parsed_expression_simplify_to("factor(10007^2)", Undefined::Name()); assert_parsed_expression_simplify_to("floor(-1.3)", "-2"); assert_parsed_expression_simplify_to("frac(-1.3)", "7/10"); assert_parsed_expression_simplify_to("gcd(123,278)", "1"); @@ -264,6 +264,6 @@ QUIZ_CASE(poincare_function_simplify) { assert_parsed_expression_simplify_to("round(12.9,-1)", "10"); assert_parsed_expression_simplify_to("round(12.9,-2)", "0"); assert_parsed_expression_simplify_to("permute(99,4)", "90345024"); - assert_parsed_expression_simplify_to("permute(20,-10)", "undef"); + assert_parsed_expression_simplify_to("permute(20,-10)", Undefined::Name()); assert_parsed_expression_simplify_to("re(1/2)", "1/2"); } diff --git a/poincare/test/logarithm.cpp b/poincare/test/logarithm.cpp index ffbe86f1b..2cc1c192f 100644 --- a/poincare/test/logarithm.cpp +++ b/poincare/test/logarithm.cpp @@ -14,7 +14,7 @@ QUIZ_CASE(poincare_logarithm_evaluate) { assert_parsed_expression_evaluates_to("log(6,7+4*I)", "8.0843880717528E-1-2.0108238082167E-1*I"); assert_parsed_expression_evaluates_to("log(5+2*I)", "0.731199+0.1652518*I"); assert_parsed_expression_evaluates_to("ln(5+2*I)", "1.6836479149932+3.8050637711236E-1*I"); - assert_parsed_expression_evaluates_to("log(0,0)", "undef"); + assert_parsed_expression_evaluates_to("log(0,0)", Undefined::Name()); assert_parsed_expression_evaluates_to("log(0)", "-inf"); assert_parsed_expression_evaluates_to("log(2,0)", "0"); @@ -23,15 +23,15 @@ QUIZ_CASE(poincare_logarithm_evaluate) { } QUIZ_CASE(poincare_logarithm_simplify) { - assert_parsed_expression_simplify_to("log(0,0)", "undef"); - assert_parsed_expression_simplify_to("log(0,1)", "undef"); + assert_parsed_expression_simplify_to("log(0,0)", Undefined::Name()); + assert_parsed_expression_simplify_to("log(0,1)", Undefined::Name()); assert_parsed_expression_simplify_to("log(1,0)", "0"); assert_parsed_expression_simplify_to("log(2,0)", "0"); assert_parsed_expression_simplify_to("log(0,14)", "-inf"); assert_parsed_expression_simplify_to("log(0,0.14)", "inf"); - assert_parsed_expression_simplify_to("log(0,0.14+I)", "undef"); - assert_parsed_expression_simplify_to("log(2,1)", "undef"); - assert_parsed_expression_simplify_to("log(x,1)", "undef"); + assert_parsed_expression_simplify_to("log(0,0.14+I)", Undefined::Name()); + assert_parsed_expression_simplify_to("log(2,1)", Undefined::Name()); + assert_parsed_expression_simplify_to("log(x,1)", Undefined::Name()); assert_parsed_expression_simplify_to("log(12925)", "2*log(5)+log(11)+log(47)"); assert_parsed_expression_simplify_to("ln(12925)", "2*ln(5)+ln(11)+ln(47)"); assert_parsed_expression_simplify_to("log(1742279/12925, 6)", "(-2*log(5,6))+log(7,6)+3*log(11,6)+log(17,6)-log(47,6)"); diff --git a/poincare/test/matrix.cpp b/poincare/test/matrix.cpp index cec1318a6..66eb798ef 100644 --- a/poincare/test/matrix.cpp +++ b/poincare/test/matrix.cpp @@ -17,7 +17,7 @@ QUIZ_CASE(poincare_matrix_simplify) { // Addition Matrix assert_parsed_expression_simplify_to("1+[[1,2,3][4,5,6]]", "[[2,3,4][5,6,7]]"); assert_parsed_expression_simplify_to("[[1,2,3][4,5,6]]+1", "[[2,3,4][5,6,7]]"); - assert_parsed_expression_simplify_to("[[1,2][3,4]]+[[1,2,3][4,5,6]]", "undef"); + assert_parsed_expression_simplify_to("[[1,2][3,4]]+[[1,2,3][4,5,6]]", Undefined::Name()); assert_parsed_expression_simplify_to("[[1,2,3][4,5,6]]+[[1,2,3][4,5,6]]", "[[2,4,6][8,10,12]]"); assert_parsed_expression_simplify_to("2+[[1,2,3][4,5,6]]+[[1,2,3][4,5,6]]", "[[4,6,8][10,12,14]]"); assert_parsed_expression_simplify_to("[[1,2,3][4,5,6]]+cos(2)+[[1,2,3][4,5,6]]", "[[2+cos(2),4+cos(2),6+cos(2)][8+cos(2),10+cos(2),12+cos(2)]]"); @@ -32,14 +32,14 @@ QUIZ_CASE(poincare_matrix_simplify) { assert_parsed_expression_simplify_to("[[1,2,3][4,5,6]]*R(2)", "[[R(2),2R(2),3R(2)][4R(2),5R(2),6R(2)]]"); assert_parsed_expression_simplify_to("[[1,2][3,4]]*[[1,2,3][4,5,6]]", "[[9, 12, 15][19, 26, 33]]"); assert_parsed_expression_simplify_to("[[1,2,3][4,5,6]]*[[1,2][2,3][5,6]]", "[[20, 26][44, 59]]"); - assert_parsed_expression_simplify_to("[[1,2,3,4][4,5,6,5]]*[[1,2][2,3][5,6]]", "undef"); + assert_parsed_expression_simplify_to("[[1,2,3,4][4,5,6,5]]*[[1,2][2,3][5,6]]", Undefined::Name()); assert_parsed_expression_simplify_to("[[1,2][3,4]]^(-3)*[[1,2][3,4]]", "[[1,2][3,4]]^(-3)*[[1,2][3,4]]"); assert_parsed_expression_simplify_to("[[1,2][3,4]]^(-3)*[[1,2,3][3,4,5]]*[[1,2][3,2][4,5]]*4", "[[37,54][81,118]]^(-1)*[[76,84][140,156]]"); assert_parsed_expression_simplify_to("[[1,2][3,4]]^(-3)*[[1,2][3,4]]", "[[1,2][3,4]]^(-3)*[[1,2][3,4]]"); // Power Matrix assert_parsed_expression_simplify_to("[[1,2,3][4,5,6][7,8,9]]^3", "[[468,576,684][1062,1305,1548][1656,2034,2412]]"); - assert_parsed_expression_simplify_to("[[1,2,3][4,5,6]]^(-1)", "undef"); + assert_parsed_expression_simplify_to("[[1,2,3][4,5,6]]^(-1)", Undefined::Name()); assert_parsed_expression_simplify_to("[[1,2][3,4]]^(-1)", "[[1,2][3,4]]^(-1)"); // TODO: Implement matrix inverse for dim < 3 // Function on matrix @@ -48,23 +48,23 @@ QUIZ_CASE(poincare_matrix_simplify) { assert_parsed_expression_simplify_to("asin([[1/R(2),1/2][1,-1]])", "[[P/4,P/6][P/2,-P/2]]"); assert_parsed_expression_simplify_to("atan([[R(3),1][1/R(3),-1]])", "[[P/3,P/4][P/6,-P/4]]"); assert_parsed_expression_simplify_to("acos([[1/R(2),1/2][1,-1]])", "[[P/4,P/3][0,P]]"); - assert_parsed_expression_simplify_to("binomial([[1,-2][3,4]], 2)", "undef"); + assert_parsed_expression_simplify_to("binomial([[1,-2][3,4]], 2)", Undefined::Name()); assert_parsed_expression_simplify_to("ceil([[1/R(2),1/2][1,-1.3]])", "[[ceil(R(2)/2),1][1,-1]]"); assert_parsed_expression_simplify_to("confidence(1/3, 25)", "[[2/15,8/15]]"); - assert_parsed_expression_simplify_to("confidence(45, 25)", "undef"); - assert_parsed_expression_simplify_to("confidence(1/3, -34)", "undef"); + assert_parsed_expression_simplify_to("confidence(45, 25)", Undefined::Name()); + assert_parsed_expression_simplify_to("confidence(1/3, -34)", Undefined::Name()); assert_parsed_expression_simplify_to("conj([[1/R(2),1/2][1,-1]])", "[[conj(1/R(2)),1/2][1,-1]]"); assert_parsed_expression_simplify_to("cos([[P/3,0][P/7,P/2]])", "[[1/2,1][cos(P/7),0]]"); - assert_parsed_expression_simplify_to("diff([[P/3,0][P/7,P/2]],x,3)", "undef"); + assert_parsed_expression_simplify_to("diff([[P/3,0][P/7,P/2]],x,3)", Undefined::Name()); assert_parsed_expression_simplify_to("det([[1,2][3,4]])", "det([[1,2][3,4]])"); // TODO: implement determinant if dim < 3 assert_parsed_expression_simplify_to("det([[2,2][3,4]])", "det([[2,2][3,4]])"); assert_parsed_expression_simplify_to("det([[2,2][3,3]])", "det([[2,2][3,3]])"); - assert_parsed_expression_simplify_to("quo([[2,2][3,3]],2)", "undef"); - assert_parsed_expression_simplify_to("rem([[2,2][3,3]],2)", "undef"); + assert_parsed_expression_simplify_to("quo([[2,2][3,3]],2)", Undefined::Name()); + assert_parsed_expression_simplify_to("rem([[2,2][3,3]],2)", Undefined::Name()); assert_parsed_expression_simplify_to("[[1,2][3,4]]!", "[[1,2][6,24]]"); assert_parsed_expression_simplify_to("floor([[1/R(2),1/2][1,-1.3]])", "[[floor(R(2)/2),0][1,-2]]"); assert_parsed_expression_simplify_to("frac([[1/R(2),1/2][1,-1.3]])", "[[frac(R(2)/2),1/2][0,0.7]]"); - assert_parsed_expression_simplify_to("gcd([[1/R(2),1/2][1,-1.3]], [[1]])", "undef"); + assert_parsed_expression_simplify_to("gcd([[1/R(2),1/2][1,-1.3]], [[1]])", Undefined::Name()); assert_parsed_expression_simplify_to("asinh([[1/R(2),1/2][1,-1]])", "[[asinh(1/R(2)),asinh(1/2)][asinh(1),asinh(-1)]]"); assert_parsed_expression_simplify_to("atanh([[R(3),1][1/R(3),-1]])", "[[atanh(R(3)),atanh(1)][atanh(1/R(3)),atanh(-1)]]"); assert_parsed_expression_simplify_to("acosh([[1/R(2),1/2][1,-1]])", "[[acosh(1/R(2)),acosh(1/2)][acosh(1),acosh(-1)]]"); @@ -72,32 +72,32 @@ QUIZ_CASE(poincare_matrix_simplify) { assert_parsed_expression_simplify_to("tanh([[R(3),1][1/R(3),-1]])", "[[tanh(R(3)),tanh(1)][tanh(1/R(3)),tanh(-1)]]"); assert_parsed_expression_simplify_to("cosh([[1/R(2),1/2][1,-1]])", "[[cosh(1/R(2)),cosh(1/2)][cosh(1),cosh(-1)]]"); assert_parsed_expression_simplify_to("im([[1/R(2),1/2][1,-1]])", "[[im(1/R(2)),0][0,0]]"); - assert_parsed_expression_simplify_to("int([[P/3,0][P/7,P/2]],3,2)", "undef"); - assert_parsed_expression_simplify_to("lcm(2, [[1]])", "undef"); + assert_parsed_expression_simplify_to("int([[P/3,0][P/7,P/2]],3,2)", Undefined::Name()); + assert_parsed_expression_simplify_to("lcm(2, [[1]])", Undefined::Name()); assert_parsed_expression_simplify_to("log([[R(2),1/2][1,3]])", "[[(1/2)*log(2),-log(2)][0,log(3)]]"); - assert_parsed_expression_simplify_to("log([[1/R(2),1/2][1,-3]])", "undef"); - assert_parsed_expression_simplify_to("log([[1/R(2),1/2][1,-3]],3)", "undef"); + assert_parsed_expression_simplify_to("log([[1/R(2),1/2][1,-3]])", Undefined::Name()); + assert_parsed_expression_simplify_to("log([[1/R(2),1/2][1,-3]],3)", Undefined::Name()); assert_parsed_expression_simplify_to("ln([[R(2),1/2][1,3]])", "[[(1/2)*ln(2),-ln(2)][0,ln(3)]]"); - assert_parsed_expression_simplify_to("log([[1/R(2),1/2][1,-3]])", "undef"); + assert_parsed_expression_simplify_to("log([[1/R(2),1/2][1,-3]])", Undefined::Name()); assert_parsed_expression_simplify_to("dim([[1/R(2),1/2,3][2,1,-3]])", "[[2,3]]"); - assert_parsed_expression_simplify_to("inverse([[1/R(2),1/2,3][2,1,-3]])", "undef"); + assert_parsed_expression_simplify_to("inverse([[1/R(2),1/2,3][2,1,-3]])", Undefined::Name()); assert_parsed_expression_simplify_to("inverse([[1,2][3,4]])", "inverse([[1,2][3,4]])"); // TODO: implement matrix inverse if dim < 3 - assert_parsed_expression_simplify_to("trace([[1/R(2),1/2,3][2,1,-3]])", "undef"); + assert_parsed_expression_simplify_to("trace([[1/R(2),1/2,3][2,1,-3]])", Undefined::Name()); assert_parsed_expression_simplify_to("trace([[R(2),2][4,3+log(3)]])", "R(2)+3+log(3)"); assert_parsed_expression_simplify_to("trace(R(2)+log(3))", "R(2)+log(3)"); assert_parsed_expression_simplify_to("transpose([[1/R(2),1/2,3][2,1,-3]])", "[[1/R(2),2][1/2, 1][3,-3]]"); assert_parsed_expression_simplify_to("transpose(R(4))", "2"); - assert_parsed_expression_simplify_to("root([[R(4)]],2)", "undef"); + assert_parsed_expression_simplify_to("root([[R(4)]],2)", Undefined::Name()); assert_parsed_expression_simplify_to("root(4,3)", "4^(1/3)"); assert_parsed_expression_simplify_to("-[[1/R(2),1/2,3][2,1,-3]]", "[[-1/R(2),-1/2,-3][-2,-1,3]]"); - assert_parsed_expression_simplify_to("permute([[1,-2][3,4]], 2)", "undef"); + assert_parsed_expression_simplify_to("permute([[1,-2][3,4]], 2)", Undefined::Name()); assert_parsed_expression_simplify_to("prediction95(1/3, 25)", "[[1/3-49R(2)/375,1/3+49R(2)/375]]"); - assert_parsed_expression_simplify_to("prediction95(45, 25)", "undef"); - assert_parsed_expression_simplify_to("prediction95(1/3, -34)", "undef"); + assert_parsed_expression_simplify_to("prediction95(45, 25)", Undefined::Name()); + assert_parsed_expression_simplify_to("prediction95(1/3, -34)", Undefined::Name()); assert_parsed_expression_simplify_to("product([[1,2][3,4]], 1/3, -34)", "product([[1,2][3,4]], 1/3, -34)"); assert_parsed_expression_simplify_to("sum([[1,2][3,4]], 1/3, -34)", "sum([[1,2][3,4]], 1/3, -34)"); assert_parsed_expression_simplify_to("re([[1/R(2),1/2][1,-1]])", "[[re(1/R(2)),1/2][1,-1]]"); - assert_parsed_expression_simplify_to("round([[1/R(2),1/2][1,-1]],2)", "undef"); + assert_parsed_expression_simplify_to("round([[1/R(2),1/2][1,-1]],2)", Undefined::Name()); assert_parsed_expression_simplify_to("sin([[P/3,0][P/7,P/2]])", "[[R(3)/2,0][sin(P/7),1]]"); assert_parsed_expression_simplify_to("R([[4,2][P/7,1]])", "[[2,R(2)][R(P/7),1]]"); assert_parsed_expression_simplify_to("tan([[P/3,0][P/7,P/6]])", "[[R(3),0][tan(P/7),R(3)/3]]"); diff --git a/poincare/test/parser.cpp b/poincare/test/parser.cpp index 8fd928b9e..e9ea40e27 100644 --- a/poincare/test/parser.cpp +++ b/poincare/test/parser.cpp @@ -268,7 +268,7 @@ QUIZ_CASE(poincare_parser_symbols_and_functions) { assert_parsed_expression_is("P", Constant(Ion::Charset::SmallPi)); assert_parsed_expression_is("X", Constant(Ion::Charset::Exponential)); assert_parsed_expression_is("inf", Infinity(false)); - assert_parsed_expression_is("undef", Undefined()); + assert_parsed_expression_is(Undefined::Name(), Undefined()); assert_raises_parsing_error("u"); assert_raises_parsing_error("v"); diff --git a/poincare/test/power.cpp b/poincare/test/power.cpp index 9cf6ab30f..26ff90d38 100644 --- a/poincare/test/power.cpp +++ b/poincare/test/power.cpp @@ -12,9 +12,9 @@ QUIZ_CASE(poincare_power_evaluate) { assert_parsed_expression_evaluates_to("4^(3+I)", "11.74125+62.91378*I"); assert_parsed_expression_evaluates_to("(3+I)^(3+I)", "(-11.898191759852)+19.592921596609*I"); - assert_parsed_expression_evaluates_to("0^0", "undef"); + assert_parsed_expression_evaluates_to("0^0", Undefined::Name()); assert_parsed_expression_evaluates_to("0^2", "0"); - assert_parsed_expression_evaluates_to("0^(-2)", "undef"); + assert_parsed_expression_evaluates_to("0^(-2)", Undefined::Name()); assert_parsed_expression_evaluates_to("(-2)^4.2", "14.8690638497+10.8030072384*I", Radian, Cartesian, 12); assert_parsed_expression_evaluates_to("(-0.1)^4", "0.0001", Radian, Cartesian, 12); #if MATRICES_ARE_DEFINED @@ -42,8 +42,8 @@ QUIZ_CASE(poincare_power_simplify) { assert_parsed_expression_simplify_to("1^x", "1"); assert_parsed_expression_simplify_to("x^1", "x"); assert_parsed_expression_simplify_to("0^3", "0"); - assert_parsed_expression_simplify_to("0^0", "undef"); - assert_parsed_expression_simplify_to("0^(-3)", "undef"); + assert_parsed_expression_simplify_to("0^0", Undefined::Name()); + assert_parsed_expression_simplify_to("0^(-3)", Undefined::Name()); assert_parsed_expression_simplify_to("4^0.5", "2"); assert_parsed_expression_simplify_to("8^0.5", "2*R(2)"); assert_parsed_expression_simplify_to("(12^4*3)^(0.5)", "144*R(3)"); diff --git a/poincare/test/rational.cpp b/poincare/test/rational.cpp index f23285603..933cde0fb 100644 --- a/poincare/test/rational.cpp +++ b/poincare/test/rational.cpp @@ -120,7 +120,7 @@ QUIZ_CASE(poincare_rational_simplify) { assert_parsed_expression_simplify_to("56^56", "79164324866862966607842406018063254671922245312646690223362402918484170424104310169552592050323456"); assert_parsed_expression_simplify_to("999^999", "999^999"); assert_parsed_expression_simplify_to("999^-999", "1/999^999"); - assert_parsed_expression_simplify_to("0^0", "undef"); + assert_parsed_expression_simplify_to("0^0", Undefined::Name()); assert_parsed_expression_simplify_to("x^0", "1"); assert_parsed_expression_simplify_to("P^0", "1"); assert_parsed_expression_simplify_to("A^0", "1"); diff --git a/poincare/test/simplify_mix.cpp b/poincare/test/simplify_mix.cpp index c48330387..50170460f 100644 --- a/poincare/test/simplify_mix.cpp +++ b/poincare/test/simplify_mix.cpp @@ -13,10 +13,10 @@ using namespace Poincare; QUIZ_CASE(poincare_simplify_mix) { // 0 and infinity - assert_parsed_expression_simplify_to("0/0", "undef"); + assert_parsed_expression_simplify_to("0/0", Undefined::Name()); assert_parsed_expression_simplify_to("0/inf", "0"); - assert_parsed_expression_simplify_to("inf/0", "undef"); - assert_parsed_expression_simplify_to("0*inf", "undef"); + assert_parsed_expression_simplify_to("inf/0", Undefined::Name()); + assert_parsed_expression_simplify_to("0*inf", Undefined::Name()); assert_parsed_expression_simplify_to("3*inf/inf", "inf/inf"); //TODO undef would be better // Root at denominator diff --git a/poincare/test/store.cpp b/poincare/test/store.cpp index 54883dc3b..bcd170f76 100644 --- a/poincare/test/store.cpp +++ b/poincare/test/store.cpp @@ -55,7 +55,7 @@ QUIZ_CASE(poincare_store_overwrite) { QUIZ_CASE(poincare_store_do_not_overwrite) { assert_parsed_expression_simplify_to("-1>g(x)", "-1"); assert_parsed_expression_simplify_to("1+g(x)>f(x)", "1+g(x)"); - assert_parsed_expression_simplify_to("2>g", "undef"); + assert_parsed_expression_simplify_to("2>g", Undefined::Name()); assert_parsed_expression_evaluates_to("g(4)", "-1"); assert_parsed_expression_evaluates_to("f(4)", "0"); diff --git a/poincare/test/trigo.cpp b/poincare/test/trigo.cpp index 3f1e2eb20..58ce6b143 100644 --- a/poincare/test/trigo.cpp +++ b/poincare/test/trigo.cpp @@ -72,8 +72,8 @@ QUIZ_CASE(poincare_trigo_evaluate) { assert_parsed_expression_evaluates_to("tan(2)", "-2.1850398632615", Radian); assert_parsed_expression_evaluates_to("tan(2)", "3.4920769491748E-2", Degree); // Tangent-style - assert_parsed_expression_evaluates_to("tan(P/2)", "undef", Radian); - assert_parsed_expression_evaluates_to("tan(3*P/2)", "undef", Radian); + assert_parsed_expression_evaluates_to("tan(P/2)", Undefined::Name(), Radian); + assert_parsed_expression_evaluates_to("tan(3*P/2)", Undefined::Name(), Radian); assert_parsed_expression_evaluates_to("tan(3*P)", "0", Radian); assert_parsed_expression_evaluates_to("tan(-540)", "0", Degree); // On R*i @@ -228,11 +228,11 @@ QUIZ_CASE(poincare_trigo_evaluate) { assert_parsed_expression_evaluates_to("tanh(43*I)", "-1.4983873388552*I", Radian); // Tangent-style // FIXME: this depends on the libm implementation and does not work on travis/appveyor servers - /*assert_parsed_expression_evaluates_to("tanh(P*I/2)", "undef", Radian); - assert_parsed_expression_evaluates_to("tanh(5*P*I/2)", "undef", Radian); - assert_parsed_expression_evaluates_to("tanh(7*P*I/2)", "undef", Radian); + /*assert_parsed_expression_evaluates_to("tanh(P*I/2)", Undefined::Name(), Radian); + assert_parsed_expression_evaluates_to("tanh(5*P*I/2)", Undefined::Name(), Radian); + assert_parsed_expression_evaluates_to("tanh(7*P*I/2)", Undefined::Name(), Radian); assert_parsed_expression_evaluates_to("tanh(8*P*I/2)", "0", Radian); - assert_parsed_expression_evaluates_to("tanh(9*P*I/2)", "undef", Radian);*/ + assert_parsed_expression_evaluates_to("tanh(9*P*I/2)", Undefined::Name(), Radian);*/ // On C assert_parsed_expression_evaluates_to("tanh(I-4)", "(-1.00028)+0.000610241*I", Radian, Cartesian, 6); assert_parsed_expression_evaluates_to("tanh(I-4)", "(-1.00028)+0.000610241*I", Degree, Cartesian, 6); @@ -429,7 +429,7 @@ QUIZ_CASE(poincare_trigo_simplify) { assert_parsed_expression_simplify_to("tan(P/12)", "2-R(3)"); assert_parsed_expression_simplify_to("tan(-P/12)", "(-2)+R(3)"); assert_parsed_expression_simplify_to("tan(-P*R(2))", "-tan(R(2)*P)"); - assert_parsed_expression_simplify_to("tan(1311P/6)", "undef"); + assert_parsed_expression_simplify_to("tan(1311P/6)", Undefined::Name()); assert_parsed_expression_simplify_to("tan(-P17/8)", "1-R(2)"); assert_parsed_expression_simplify_to("tan(41P/6)", "-R(3)/3"); assert_parsed_expression_simplify_to("tan(P/4+1000P)", "1"); @@ -445,7 +445,7 @@ QUIZ_CASE(poincare_trigo_simplify) { assert_parsed_expression_simplify_to("tan(15)", "2-R(3)", Preferences::AngleUnit::Degree); assert_parsed_expression_simplify_to("tan(-15)", "(-2)+R(3)", Preferences::AngleUnit::Degree); assert_parsed_expression_simplify_to("tan(-180*R(2))", "-tan(180*R(2))", Preferences::AngleUnit::Degree); - assert_parsed_expression_simplify_to("tan(39330)", "undef", Preferences::AngleUnit::Degree); + assert_parsed_expression_simplify_to("tan(39330)", Undefined::Name(), Preferences::AngleUnit::Degree); assert_parsed_expression_simplify_to("tan(-382.5)", "1-R(2)", Preferences::AngleUnit::Degree); assert_parsed_expression_simplify_to("tan(1230)", "-R(3)/3", Preferences::AngleUnit::Degree); assert_parsed_expression_simplify_to("tan(180045)", "1", Preferences::AngleUnit::Degree); diff --git a/poincare/test/user_variable.cpp b/poincare/test/user_variable.cpp index 9a5509034..5ac0ce40c 100644 --- a/poincare/test/user_variable.cpp +++ b/poincare/test/user_variable.cpp @@ -45,8 +45,8 @@ QUIZ_CASE(poincare_user_variable_simple) { QUIZ_CASE(poincare_user_variable_2_circular_variables) { assert_simplify("a>b"); assert_simplify("b>a"); - assert_parsed_expression_evaluates_to("a", "undef"); - assert_parsed_expression_evaluates_to("b", "undef"); + assert_parsed_expression_evaluates_to("a", Undefined::Name()); + assert_parsed_expression_evaluates_to("b", Undefined::Name()); // Clean the storage for other tests Ion::Storage::sharedStorage()->recordNamed("a.exp").destroy(); @@ -57,9 +57,9 @@ QUIZ_CASE(poincare_user_variable_3_circular_variables) { assert_simplify("a>b"); assert_simplify("b>c"); assert_simplify("c>a"); - assert_parsed_expression_evaluates_to("a", "undef"); - assert_parsed_expression_evaluates_to("b", "undef"); - assert_parsed_expression_evaluates_to("c", "undef"); + assert_parsed_expression_evaluates_to("a", Undefined::Name()); + assert_parsed_expression_evaluates_to("b", Undefined::Name()); + assert_parsed_expression_evaluates_to("c", Undefined::Name()); // Clean the storage for other tests Ion::Storage::sharedStorage()->recordNamed("a.exp").destroy(); @@ -70,7 +70,7 @@ QUIZ_CASE(poincare_user_variable_3_circular_variables) { QUIZ_CASE(poincare_user_variable_1_circular_function) { // g: x -> f(x)+1 assert_simplify("f(x)+1>g(x)"); - assert_parsed_expression_evaluates_to("g(1)", "undef"); + assert_parsed_expression_evaluates_to("g(1)", Undefined::Name()); // f: x -> x+1 assert_simplify("x+1>f(x)"); assert_parsed_expression_evaluates_to("g(1)", "3"); @@ -79,7 +79,7 @@ QUIZ_CASE(poincare_user_variable_1_circular_function) { assert_simplify("h(x)>h(x)"); assert_parsed_expression_evaluates_to("f(1)", "2"); assert_parsed_expression_evaluates_to("g(1)", "3"); - assert_parsed_expression_evaluates_to("h(1)", "undef"); + assert_parsed_expression_evaluates_to("h(1)", Undefined::Name()); // Clean the storage for other tests Ion::Storage::sharedStorage()->recordNamed("f.func").destroy(); @@ -90,8 +90,8 @@ QUIZ_CASE(poincare_user_variable_1_circular_function) { QUIZ_CASE(poincare_user_variable_2_circular_functions) { assert_simplify("f(x)>g(x)"); assert_simplify("g(x)>f(x)"); - assert_parsed_expression_evaluates_to("f(1)", "undef"); - assert_parsed_expression_evaluates_to("g(1)", "undef"); + assert_parsed_expression_evaluates_to("f(1)", Undefined::Name()); + assert_parsed_expression_evaluates_to("g(1)", Undefined::Name()); // Clean the storage for other tests Ion::Storage::sharedStorage()->recordNamed("f.func").destroy(); @@ -102,9 +102,9 @@ QUIZ_CASE(poincare_user_variable_3_circular_functions) { assert_simplify("f(x)>g(x)"); assert_simplify("g(x)>h(x)"); assert_simplify("h(x)>f(x)"); - assert_parsed_expression_evaluates_to("f(1)", "undef"); - assert_parsed_expression_evaluates_to("g(1)", "undef"); - assert_parsed_expression_evaluates_to("h(1)", "undef"); + assert_parsed_expression_evaluates_to("f(1)", Undefined::Name()); + assert_parsed_expression_evaluates_to("g(1)", Undefined::Name()); + assert_parsed_expression_evaluates_to("h(1)", Undefined::Name()); // Clean the storage for other tests Ion::Storage::sharedStorage()->recordNamed("f.func").destroy(); @@ -116,9 +116,9 @@ QUIZ_CASE(poincare_user_variable_circular_variables_and_functions) { assert_simplify("a>b"); assert_simplify("b>a"); assert_simplify("a>f(x)"); - assert_parsed_expression_evaluates_to("f(1)", "undef"); - assert_parsed_expression_evaluates_to("a", "undef"); - assert_parsed_expression_evaluates_to("b", "undef"); + assert_parsed_expression_evaluates_to("f(1)", Undefined::Name()); + assert_parsed_expression_evaluates_to("a", Undefined::Name()); + assert_parsed_expression_evaluates_to("b", Undefined::Name()); // Clean the storage for other tests Ion::Storage::sharedStorage()->recordNamed("f.func").destroy();