diff --git a/apps/calculation/test/calculation_store.cpp b/apps/calculation/test/calculation_store.cpp index fd253853a..b5f424b17 100644 --- a/apps/calculation/test/calculation_store.cpp +++ b/apps/calculation/test/calculation_store.cpp @@ -63,10 +63,10 @@ void assertCalculationDisplay(const char * input, ::Calculation::Calculation::Di quiz_assert(lastCalculation->exactAndApproximateDisplayedOutputsAreEqual(context) == sign); } if (exactOutput) { - quiz_assert(strcmpWithSystemParentheses(lastCalculation->exactOutputText(), exactOutput) == 0); + quiz_assert(strcmp(lastCalculation->exactOutputText(), exactOutput) == 0); } if (approximateOutput) { - quiz_assert(strcmpWithSystemParentheses(lastCalculation->approximateOutputText(), approximateOutput) == 0); + quiz_assert(strcmp(lastCalculation->approximateOutputText(), approximateOutput) == 0); } store->deleteAll(); } @@ -135,6 +135,9 @@ QUIZ_CASE(calculation_symbolic_computation_and_parametered_expressions) { QUIZ_CASE(calculation_complex_format) { + assert(UCodePointLeftSystemParenthesis == '\u0012'); + assert(UCodePointRightSystemParenthesis == '\u0013'); + Shared::GlobalContext globalContext; CalculationStore store; @@ -152,18 +155,18 @@ QUIZ_CASE(calculation_complex_format) { assertCalculationDisplay("√(-1)", ::Calculation::Calculation::DisplayOutput::ApproximateOnly, ::Calculation::Calculation::EqualSign::Unknown, nullptr, "𝐢", &globalContext, &store); assertCalculationDisplay("ln(-2)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "ln(-2)", nullptr, &globalContext, &store); assertCalculationDisplay("√(-1)×√(-1)", ::Calculation::Calculation::DisplayOutput::ApproximateOnly, ::Calculation::Calculation::EqualSign::Unknown, nullptr, "-1", &globalContext, &store); - assertCalculationDisplay("(-8)^(1/3)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "1+√(3)×𝐢", nullptr, &globalContext, &store); - assertCalculationDisplay("(-8)^(2/3)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "-2+2×√(3)×𝐢", nullptr, &globalContext, &store); - assertCalculationDisplay("(-2)^(1/4)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "root(8,4)/2+root(8,4)/2×𝐢", nullptr, &globalContext, &store); + assertCalculationDisplay("(-8)^(1/3)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "1+√(3)𝐢", nullptr, &globalContext, &store); + assertCalculationDisplay("(-8)^(2/3)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "-2+2√(3)𝐢", nullptr, &globalContext, &store); + assertCalculationDisplay("(-2)^(1/4)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "root(8,4)/2+\u0012root(8,4)/2\u0013𝐢", nullptr, &globalContext, &store); Poincare::Preferences::sharedPreferences()->setComplexFormat(Poincare::Preferences::ComplexFormat::Polar); - assertCalculationDisplay("1+𝐢", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "√(2)×ℯ^(π/4×𝐢)", nullptr, &globalContext, &store); - assertCalculationDisplay("√(-1)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "ℯ^(π/2×𝐢)", nullptr, &globalContext, &store); + assertCalculationDisplay("1+𝐢", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "√(2)ℯ^\u0012\u0012π/4\u0013𝐢\u0013", nullptr, &globalContext, &store); + assertCalculationDisplay("√(-1)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "ℯ^\u0012\u0012π/2\u0013𝐢\u0013", nullptr, &globalContext, &store); assertCalculationDisplay("ln(-2)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "ln(-2)", nullptr, &globalContext, &store); - assertCalculationDisplay("√(-1)×√(-1)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Unknown, nullptr, "ℯ^(3.1415926535898×𝐢)", &globalContext, &store); - assertCalculationDisplay("(-8)^(1/3)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "2×ℯ^(π/3×𝐢)", nullptr, &globalContext, &store); - assertCalculationDisplay("(-8)^(2/3)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "4×ℯ^((2×π)/3×𝐢)", nullptr, &globalContext, &store); - assertCalculationDisplay("(-2)^(1/4)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "root(2,4)×ℯ^(π/4×𝐢)", nullptr, &globalContext, &store); + assertCalculationDisplay("√(-1)×√(-1)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Unknown, nullptr, "ℯ^\u00123.1415926535898𝐢\u0013", &globalContext, &store); + assertCalculationDisplay("(-8)^(1/3)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "2ℯ^\u0012\u0012π/3\u0013𝐢\u0013", nullptr, &globalContext, &store); + assertCalculationDisplay("(-8)^(2/3)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "4ℯ^\u0012\u00122π/3\u0013𝐢\u0013", nullptr, &globalContext, &store); + assertCalculationDisplay("(-2)^(1/4)", ::Calculation::Calculation::DisplayOutput::ExactAndApproximate, ::Calculation::Calculation::EqualSign::Approximation, "root(2,4)ℯ^\u0012\u0012π/4\u0013𝐢\u0013", nullptr, &globalContext, &store); Poincare::Preferences::sharedPreferences()->setComplexFormat(Poincare::Preferences::ComplexFormat::Cartesian); } diff --git a/apps/solver/test/equation_store.cpp b/apps/solver/test/equation_store.cpp index 81fce031b..f2e3334b5 100644 --- a/apps/solver/test/equation_store.cpp +++ b/apps/solver/test/equation_store.cpp @@ -41,16 +41,16 @@ void assert_equation_system_exact_solve_to(const char * equations[], EquationSto } if (type == EquationStore::Type::LinearSystem) { for (int i = 0; i < numberOfSolutions; i++) { - quiz_assert(strcmpWithSystemParentheses(equationStore.variableAtIndex(i),variables[i]) == 0); + quiz_assert(strcmp(equationStore.variableAtIndex(i),variables[i]) == 0); } } else { - quiz_assert(strcmpWithSystemParentheses(equationStore.variableAtIndex(0), variables[0]) == 0); + quiz_assert(strcmp(equationStore.variableAtIndex(0), variables[0]) == 0); } constexpr int bufferSize = 200; char buffer[bufferSize]; for (int i = 0; i < numberOfSolutions; i++) { equationStore.exactSolutionLayoutAtIndex(i, true).serializeForParsing(buffer, bufferSize); - quiz_assert(strcmpWithSystemParentheses(buffer, solutions[i]) == 0); + quiz_assert(strcmp(buffer, solutions[i]) == 0); } equationStore.removeAll(); } @@ -102,20 +102,23 @@ QUIZ_CASE(equation_solve) { const char * equations6[] = {"x-x=0", 0}; assert_equation_system_exact_solve_to(equations6, EquationStore::Error::NoError, EquationStore::Type::LinearSystem, (const char **)variables1, nullptr, INT_MAX); + quiz_assert(UCodePointLeftSystemParenthesis == '\022'); + quiz_assert(UCodePointLeftSystemParenthesis == '\x12'); + const char * variablesx[] = {"x", ""}; // 2x+3=4 const char * equations7[] = {"2x+3=4", 0}; - const char * solutions7[] = {"(1)/(2)"}; + const char * solutions7[] = {"\u0012\u00121\u0013/\u00122\u0013\u0013"}; // 1/2 assert_equation_system_exact_solve_to(equations7, EquationStore::Error::NoError, EquationStore::Type::LinearSystem, (const char **)variablesx, solutions7, 1); // 3x^2-4x+4=2 const char * equations8[] = {"3×x^2-4x+4=2", 0}; - const char * solutions8[] = {"(2)/(3)-(√(2))/(3)×𝐢","(2)/(3)+(√(2))/(3)×𝐢", "-8"}; + const char * solutions8[] = {"\u0012\u00122\u0013/\u00123\u0013\u0013-\u0012\u0012√\u00122\u0013\u0013/\u00123\u0013\u0013𝐢","\u0012\u00122\u0013/\u00123\u0013\u0013+\u0012\u0012√\u00122\u0013\u0013/\u00123\u0013\u0013𝐢", "-8"}; // 2/3-(√(2)/3)𝐢, 2/3+(√(2)/3)𝐢 assert_equation_system_exact_solve_to(equations8, EquationStore::Error::NoError, EquationStore::Type::PolynomialMonovariable, (const char **)variablesx, solutions8, 3); // 2×x^2-4×x+4=3 const char * equations9[] = {"2×x^2-4×x+4=3", 0}; - const char * solutions9[] = {"(-√(2)+2)/(2)","(√(2)+2)/(2)", "8"}; + const char * solutions9[] = {"\u0012\u0012-√\u00122\u0013+2\u0013/\u00122\u0013\u0013","\u0012\u0012√\u00122\u0013+2\u0013/\u00122\u0013\u0013", "8"}; // (-√(2)+2)/2, (√(2)+2)/2, 8 assert_equation_system_exact_solve_to(equations9, EquationStore::Error::NoError, EquationStore::Type::PolynomialMonovariable, (const char **)variablesx, solutions9, 3); // 2×x^2-4×x+2=0 @@ -123,14 +126,9 @@ QUIZ_CASE(equation_solve) { const char * solutions10[] = {"1", "0"}; assert_equation_system_exact_solve_to(equations10, EquationStore::Error::NoError, EquationStore::Type::PolynomialMonovariable, (const char **)variablesx, solutions10, 2); - quiz_assert(UCodePointLeftSystemParenthesis == '\022'); - quiz_assert(UCodePointLeftSystemParenthesis == '\x12'); - quiz_assert(UCodePointRightSystemParenthesis == '\023'); - quiz_assert(UCodePointRightSystemParenthesis == '\x13'); - // x^2+x+1=3×x^2+pi×x-√(5) const char * equations11[] = {"x^2+x+1=3×x^2+π×x-√(5)", 0}; - const char * solutions11[] = {"(√(π^\0222\023-2×π+8×√(5)+9)-π+1)/(4)", "(-√(π^\0222\023-2×π+8×√(5)+9)-π+1)/(4)", "π^\0222\023-2×π+8×√(5)+9"}; + const char * solutions11[] = {"\u0012\u0012√\u0012π^\u00122\u0013-2π+8√\u00125\u0013+9\u0013-π+1\u0013/\u00124\u0013\u0013", "\u0012\u0012-√\u0012π^\u00122\u0013-2π+8√\u00125\u0013+9\u0013-π+1\u0013/\u00124\u0013\u0013", "π^\u00122\u0013-2π+8√\u00125\u0013+9"}; // (√(π^2-2π+8√(5)+9)-π+1)/4, (-√(π^2-2π+8×√(5)+9)-π+1)/4, π^2-2π+8√(5)+9 assert_equation_system_exact_solve_to(equations11, EquationStore::Error::NoError, EquationStore::Type::PolynomialMonovariable, (const char **)variablesx, solutions11, 3); // TODO @@ -148,13 +146,13 @@ QUIZ_CASE(equation_solve) { const char * variablesxy[] = {"x", "y", ""}; const char * equations13[] = {"x+y=0", "3x+y=-5", 0}; - const char * solutions13[] = {"-(5)/(2)", "(5)/(2)"}; + const char * solutions13[] = {"-\u0012\u00125\u0013/\u00122\u0013\u0013", "\u0012\u00125\u0013/\u00122\u0013\u0013"}; // -5/2; 5/2 assert_equation_system_exact_solve_to(equations13, EquationStore::Error::NoError, EquationStore::Type::LinearSystem, (const char **)variablesxy, solutions13, 2); const char * variablesxyz[] = {"x", "y", "z", ""}; const char * equations14[] = {"x+y=0", "3x+y+z=-5", "4z-π=0", 0}; - const char * solutions14[] = {"(-π-20)/(8)", "(π+20)/(8)", "(π)/(4)"}; + const char * solutions14[] = {"\u0012\u0012-π-20\u0013/\u00128\u0013\u0013", "\u0012\u0012π+20\u0013/\u00128\u0013\u0013", "\u0012\u0012π\u0013/\u00124\u0013\u0013"}; // (-π-20)/8, (π+20)/8, π/4 assert_equation_system_exact_solve_to(equations14, EquationStore::Error::NoError, EquationStore::Type::LinearSystem, (const char **)variablesxyz, solutions14, 3); // Monovariable non-polynomial equation @@ -170,12 +168,12 @@ QUIZ_CASE(equation_solve) { // Long variable names const char * variablesabcde[] = {"abcde", ""}; const char * equations18[] = {"2abcde+3=4", 0}; - const char * solutions18[] = {"(1)/(2)"}; + const char * solutions18[] = {"\u0012\u00121\u0013/\u00122\u0013\u0013"}; // 1/2 assert_equation_system_exact_solve_to(equations18, EquationStore::Error::NoError, EquationStore::Type::LinearSystem, (const char **)variablesabcde, solutions18, 1); const char * variablesBig1Big2[] = {"Big1", "Big2", ""}; const char * equations19[] = {"Big1+Big2=0", "3Big1+Big2=-5", 0}; - const char * solutions19[] = {"-(5)/(2)", "(5)/(2)"}; + const char * solutions19[] = {"-\u0012\u00125\u0013/\u00122\u0013\u0013", "\u0012\u00125\u0013/\u00122\u0013\u0013"}; // -5/2, 5/2 assert_equation_system_exact_solve_to(equations19, EquationStore::Error::NoError, EquationStore::Type::LinearSystem, (const char **)variablesBig1Big2, solutions19, 2); // conj(x)*x+1 = 0 @@ -218,11 +216,11 @@ QUIZ_CASE(equation_solve_complex_format) { assert_equation_system_exact_solve_to(equations1, EquationStore::Error::NoError, EquationStore::Type::LinearSystem, (const char **)variablesx, solutions0, 1); // x^2+x+1=0 - const char * solutions2[] = {"-(1)/(2)-(√(3))/(2)×𝐢","-(1)/(2)+(√(3))/(2)×𝐢", "-3"}; + const char * solutions2[] = {"-\u0012\u00121\u0013/\u00122\u0013\u0013-\u0012\u0012√\u00123\u0013\u0013/\u00122\u0013\u0013𝐢","-\u0012\u00121\u0013/\u00122\u0013\u0013+\u0012\u0012√\u00123\u0013\u0013/\u00122\u0013\u0013𝐢", "-3"}; // -1/2-((√(3))/2)𝐢, -1/2+((√(3))/2)𝐢, -3 assert_equation_system_exact_solve_to(equations2, EquationStore::Error::NoError, EquationStore::Type::PolynomialMonovariable, (const char **)variablesx, solutions2, 3); // x^2-√(-1)=0 - const char * solutions3[] = {"-(√(2))/(2)-(√(2))/(2)×𝐢", "(√(2))/(2)+(√(2))/(2)×𝐢","4×𝐢"}; + const char * solutions3[] = {"-\u0012\u0012√\u00122\u0013\u0013/\u00122\u0013\u0013-\u0012\u0012√\u00122\u0013\u0013/\u00122\u0013\u0013𝐢", "\u0012\u0012√\u00122\u0013\u0013/\u00122\u0013\u0013+\u0012\u0012√\u00122\u0013\u0013/\u00122\u0013\u0013𝐢","4𝐢"}; // -√(2)/2-(√(2)/2)𝐢, √(2)/2+(√(2)/2)𝐢, 4𝐢 assert_equation_system_exact_solve_to(equations3, EquationStore::Error::NoError, EquationStore::Type::PolynomialMonovariable, (const char **)variablesx, solutions3, 3); // x+√(-1)×√(-1) = 0 @@ -231,18 +229,18 @@ QUIZ_CASE(equation_solve_complex_format) { Poincare::Preferences::sharedPreferences()->setComplexFormat(Poincare::Preferences::ComplexFormat::Polar); // x+𝐢 = 0 --> x = e^(-π/2×i) - const char * solutions0Polar[] = {"ℯ^\x12-(π)/(2)×𝐢\x13"}; + const char * solutions0Polar[] = {"ℯ^\u0012-\u0012\u0012π\u0013/\u00122\u0013\u0013𝐢\u0013"}; // ℯ^(-(π/2)𝐢) assert_equation_system_exact_solve_to(equations0, EquationStore::Error::NoError, EquationStore::Type::LinearSystem, (const char **)variablesx, solutions0Polar, 1); - // x+√(-1) = 0 --> x = e^(-π/2×𝐢) + // x+√(-1) = 0 --> x = e^(-π/2𝐢) assert_equation_system_exact_solve_to(equations1, EquationStore::Error::NoError, EquationStore::Type::LinearSystem, (const char **)variablesx, solutions0Polar, 1); // x^2+x+1=0 - const char * solutions2Polar[] = {"ℯ^\x12-(2×π)/(3)×𝐢\x13","ℯ^\x12(2×π)/(3)×𝐢\x13", "3×ℯ^\x12π×𝐢\x13"}; + const char * solutions2Polar[] = {"ℯ^\u0012-\u0012\u00122π\u0013/\u00123\u0013\u0013𝐢\u0013","ℯ^\u0012\u0012\u00122π\u0013/\u00123\u0013\u0013𝐢\u0013", "3ℯ^\u0012π𝐢\u0013"}; // ℯ^(-(2π/3)𝐢), ℯ^((2π/3)𝐢), 3ℯ^(π𝐢) assert_equation_system_exact_solve_to(equations2, EquationStore::Error::NoError, EquationStore::Type::PolynomialMonovariable, (const char **)variablesx, solutions2Polar, 3); // x^2-√(-1)=0 - const char * solutions3Polar[] = {"ℯ^\x12-(3×π)/(4)×𝐢\x13", "ℯ^\x12(π)/(4)×𝐢\x13", "4×ℯ^\x12(π)/(2)×𝐢\x13"}; + const char * solutions3Polar[] = {"ℯ^\u0012-\u0012\u00123π\u0013/\u00124\u0013\u0013𝐢\u0013", "ℯ^\u0012\u0012\u0012π\u0013/\u00124\u0013\u0013𝐢\u0013", "4ℯ^\u0012\u0012\u0012π\u0013/\u00122\u0013\u0013𝐢\u0013"}; // ℯ^(-(3×π/4)𝐢)"‰, "ℯ^((π/4)𝐢)", "4ℯ^((π/2)𝐢) assert_equation_system_exact_solve_to(equations3, EquationStore::Error::NoError, EquationStore::Type::PolynomialMonovariable, (const char **)variablesx, solutions3Polar, 3); }