#include #include #include #include #include "helper.h" using namespace Poincare; QUIZ_CASE(poincare_power_evaluate) { assert_parsed_expression_evaluates_to("2^3", "8"); assert_parsed_expression_evaluates_to("(3+𝐒)^4", "28+96×𝐒"); assert_parsed_expression_evaluates_to("4^(3+𝐒)", "11.74125+62.91378×𝐒"); assert_parsed_expression_evaluates_to("(3+𝐒)^(3+𝐒)", "-11.898191759852+19.592921596609×𝐒"); assert_parsed_expression_evaluates_to("0^0", Undefined::Name()); assert_parsed_expression_evaluates_to("0^2", "0"); assert_parsed_expression_evaluates_to("0^(-2)", Undefined::Name()); assert_parsed_expression_evaluates_to("(-2)^4.2", "14.8690638497+10.8030072384×𝐒", System, Radian, Cartesian, 12); assert_parsed_expression_evaluates_to("(-0.1)^4", "0.0001", System, Radian, Cartesian, 12); #if MATRICES_ARE_DEFINED assert_parsed_expression_evaluates_to("[[1,2][3,4]]^(-3)", "[[-14.75,6.75][10.125,-4.625]]", System, Degree, Cartesian, 6); assert_parsed_expression_evaluates_to("[[1,2][3,4]]^3", "[[37,54][81,118]]"); #endif assert_parsed_expression_evaluates_to("0^2", "0"); assert_parsed_expression_evaluates_to("𝐒^𝐒", "2.0787957635076ᴇ-1"); assert_parsed_expression_evaluates_to("1.0066666666667^60", "1.48985", System, Radian, Cartesian, 6); assert_parsed_expression_evaluates_to("1.0066666666667^60", "1.4898457083046"); assert_parsed_expression_evaluates_to("β„―^(𝐒×π)", "-1"); assert_parsed_expression_evaluates_to("β„―^(𝐒×π)", "-1"); assert_parsed_expression_evaluates_to("β„―^(𝐒×π+2)", "-7.38906", System, Radian, Cartesian, 6); assert_parsed_expression_evaluates_to("β„―^(𝐒×π+2)", "-7.3890560989307"); assert_parsed_expression_evaluates_to("(-1)^(1/3)", "0.5+0.8660254×𝐒"); assert_parsed_expression_evaluates_to("(-1)^(1/3)", "0.5+8.6602540378444ᴇ-1×𝐒"); assert_parsed_expression_evaluates_to("β„―^(𝐒×π/3)", "0.5+0.8660254×𝐒"); assert_parsed_expression_evaluates_to("β„―^(𝐒×π/3)", "0.5+8.6602540378444ᴇ-1×𝐒"); assert_parsed_expression_evaluates_to("𝐒^(2/3)", "0.5+0.8660254×𝐒"); assert_parsed_expression_evaluates_to("𝐒^(2/3)", "0.5+8.6602540378444ᴇ-1×𝐒"); } QUIZ_CASE(poincare_power_simplify) { assert_parsed_expression_simplify_to("3^4", "81"); assert_parsed_expression_simplify_to("3^(-4)", "1/81"); assert_parsed_expression_simplify_to("(-3)^3", "-27"); assert_parsed_expression_simplify_to("1256^(1/3)Γ—x", "2Γ—root(157,3)Γ—x"); assert_parsed_expression_simplify_to("1256^(-1/3)", "1/(2Γ—root(157,3))"); assert_parsed_expression_simplify_to("32^(-1/5)", "1/2"); assert_parsed_expression_simplify_to("(2+3-4)^(x)", "1"); 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", 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Γ—βˆš(2)"); assert_parsed_expression_simplify_to("(12^4Γ—3)^(0.5)", "144Γ—βˆš(3)"); assert_parsed_expression_simplify_to("(2^A)^B", "2^(AΓ—B)"); assert_parsed_expression_simplify_to("(2Γ—A)^B", "2^BΓ—A^B"); assert_parsed_expression_simplify_to("(12^4Γ—x)^(0.5)", "144Γ—βˆš(x)"); assert_parsed_expression_simplify_to("√(32)", "4Γ—βˆš(2)"); assert_parsed_expression_simplify_to("√(-1)", "𝐒"); assert_parsed_expression_simplify_to("√(-1Γ—βˆš(-1))", "√(2)/2-√(2)/2×𝐒"); assert_parsed_expression_simplify_to("√(3^2)", "3"); assert_parsed_expression_simplify_to("2^(2+Ο€)", "4Γ—2^Ο€"); assert_parsed_expression_simplify_to("√(5513219850886344455940081)", "2348024669991"); assert_parsed_expression_simplify_to("√(154355776)", "12424"); assert_parsed_expression_simplify_to("√(Ο€)^2", "Ο€"); assert_parsed_expression_simplify_to("√(Ο€^2)", "Ο€"); assert_parsed_expression_simplify_to("√((-Ο€)^2)", "Ο€"); assert_parsed_expression_simplify_to("√(xΓ—144)", "12Γ—βˆš(x)"); assert_parsed_expression_simplify_to("√(xΓ—144Γ—Ο€^2)", "12Γ—Ο€Γ—βˆš(x)"); assert_parsed_expression_simplify_to("√(xΓ—144Γ—Ο€)", "12Γ—βˆš(Ο€)Γ—βˆš(x)"); assert_parsed_expression_simplify_to("(-1)Γ—(2+(-4Γ—βˆš(2)))", "4Γ—βˆš(2)-2"); assert_parsed_expression_simplify_to("x^(1/2)", "√(x)"); assert_parsed_expression_simplify_to("x^(-1/2)", "1/√(x)"); assert_parsed_expression_simplify_to("x^(1/7)", "root(x,7)"); assert_parsed_expression_simplify_to("x^(-1/7)", "1/root(x,7)"); assert_parsed_expression_simplify_to("1/(3√(2))", "√(2)/6"); assert_parsed_expression_simplify_to("β„―^ln(3)", "3"); assert_parsed_expression_simplify_to("β„―^ln(√(3))", "√(3)"); assert_parsed_expression_simplify_to("Ο€^log(√(3),Ο€)", "√(3)"); assert_parsed_expression_simplify_to("10^log(Ο€)", "Ο€"); assert_parsed_expression_simplify_to("β„―^ln(65)", "65"); assert_parsed_expression_simplify_to("β„―^ln(Ο€β„―)", "π×ℯ"); assert_parsed_expression_simplify_to("β„―^log(Ο€β„―)", "β„―^(log(β„―)+log(Ο€))"); assert_parsed_expression_simplify_to("√(β„―^2)", "β„―"); assert_parsed_expression_simplify_to("999^(10000/3)", "999^(10000/3)"); /* This does not reduce but should not as the integer is above * k_maxNumberOfPrimeFactors and thus it prime decomposition might overflow * 32 factors. */ assert_parsed_expression_simplify_to("1881676377434183981909562699940347954480361860897069^(1/3)", "root(1881676377434183981909562699940347954480361860897069,3)"); /* This does not reduce but should not as the prime decomposition involves * factors above k_maxNumberOfPrimeFactors. */ assert_parsed_expression_simplify_to("1002101470343^(1/3)", "root(1002101470343,3)"); assert_parsed_expression_simplify_to("π×π×π", "Ο€^3"); assert_parsed_expression_simplify_to("(x+Ο€)^(3)", "x^3+3×π×x^2+3Γ—Ο€^2Γ—x+Ο€^3"); assert_parsed_expression_simplify_to("(5+√(2))^(-8)", "(-1003320Γ—βˆš(2)+1446241)/78310985281"); assert_parsed_expression_simplify_to("(5Γ—Ο€+√(2))^(-5)", "1/(3125Γ—Ο€^5+3125Γ—βˆš(2)Γ—Ο€^4+2500Γ—Ο€^3+500Γ—βˆš(2)Γ—Ο€^2+100Γ—Ο€+4Γ—βˆš(2))"); assert_parsed_expression_simplify_to("(1+√(2)+√(3))^5", "120Γ—βˆš(6)+184Γ—βˆš(3)+224Γ—βˆš(2)+296"); assert_parsed_expression_simplify_to("(Ο€+√(2)+√(3)+x)^(-3)", "1/(x^3+3×π×x^2+3Γ—βˆš(3)Γ—x^2+3Γ—βˆš(2)Γ—x^2+3Γ—Ο€^2Γ—x+6Γ—βˆš(3)×π×x+6Γ—βˆš(2)×π×x+6Γ—βˆš(6)Γ—x+15Γ—x+Ο€^3+3Γ—βˆš(3)Γ—Ο€^2+3Γ—βˆš(2)Γ—Ο€^2+6Γ—βˆš(6)Γ—Ο€+15Γ—Ο€+9Γ—βˆš(3)+11Γ—βˆš(2))"); assert_parsed_expression_simplify_to("1.0066666666667^60", "(10066666666667/10000000000000)^60"); assert_parsed_expression_simplify_to("2^(6+Ο€+x)", "64Γ—2^(x+Ο€)"); assert_parsed_expression_simplify_to("𝐒^(2/3)", "1/2+√(3)/2×𝐒"); assert_parsed_expression_simplify_to("β„―^(𝐒×π/3)", "1/2+√(3)/2×𝐒"); assert_parsed_expression_simplify_to("(-1)^(1/3)", "1/2+√(3)/2×𝐒"); assert_parsed_expression_simplify_to("R(-x)", "R(-x)"); assert_parsed_expression_simplify_to("√(x)^2", "x", User, Radian, Cartesian); assert_parsed_expression_simplify_to("√(x)^2", "√(x)^2", User, Radian, Real); }