[poincare] Fix tests: first operand of addition does not require

parentheses anymore
This commit is contained in:
Émilie Feral
2018-11-21 15:41:26 +01:00
parent c30f136fb3
commit 0e3d8514c5
9 changed files with 55 additions and 55 deletions

View File

@@ -63,7 +63,7 @@ QUIZ_CASE(poincare_addition_evaluate) {
QUIZ_CASE(poincare_addition_simplify) {
assert_parsed_expression_simplify_to("1+x", "1+x");
assert_parsed_expression_simplify_to("1/2+1/3+1/4+1/5+1/6+1/7", "223/140");
assert_parsed_expression_simplify_to("1+x+4-i-2x", "(5-i)-x");
assert_parsed_expression_simplify_to("1+x+4-i-2x", "5-i-x");
assert_parsed_expression_simplify_to("2+1", "3");
assert_parsed_expression_simplify_to("1+2", "3");
assert_parsed_expression_simplify_to("1+2+3+4+5+6+7", "28");
@@ -76,7 +76,7 @@ QUIZ_CASE(poincare_addition_simplify) {
assert_parsed_expression_simplify_to("-A", "-A");
assert_parsed_expression_simplify_to("A-A", "0");
assert_parsed_expression_simplify_to("-5P+3P", "-2*P");
assert_parsed_expression_simplify_to("1-3+A-5+2A-4A", "(-7)-A");
assert_parsed_expression_simplify_to("1-3+A-5+2A-4A", "-7-A");
assert_parsed_expression_simplify_to("A+B-A-B", "0");
assert_parsed_expression_simplify_to("A+B+(-1)*A+(-1)*B", "0");
assert_parsed_expression_simplify_to("2+13cos(2)-23cos(2)", "2-10*cos(2)");

View File

@@ -70,15 +70,15 @@ QUIZ_CASE(poincare_complex_to_expression) {
assert_parsed_expression_evaluates_to<double>("2+3*I", "3.60555127546*X^(0.982793723247*I)", Radian, Polar, 12);
assert_parsed_expression_evaluates_to<double>("3.60555127546*X^(0.982793723247*I)", "2+3*I", Radian, Cartesian, 12);
assert_parsed_expression_evaluates_to<float>("12.04159457879229548012824103*X^(1.4876550949*I)", "1+12*I", Radian, Cartesian, 5);
assert_parsed_expression_evaluates_to<float>("-2E20+2E20*I", "(-2E20)+2E20*I");
assert_parsed_expression_evaluates_to<float>("-2E20+2E20*I", "-2E20+2E20*I");
assert_parsed_expression_evaluates_to<float>("-2E20+2E20*I", "2.828427E20*X^(2.356194*I)", Radian, Polar);
assert_parsed_expression_evaluates_to<double>("1E155-1E155*I", "1E155-1E155*I");
assert_parsed_expression_evaluates_to<double>("1E155-1E155*I", "1.41421356237E155*X^(-0.785398163397*I)", Radian, Polar,12);
assert_parsed_expression_evaluates_to<float>("-2E100+2E100*I", Undefined::Name());
assert_parsed_expression_evaluates_to<double>("-2E360+2E360*I", Undefined::Name());
assert_parsed_expression_evaluates_to<float>("-2E100+2E10*I", "(-inf)+2E10*I");
assert_parsed_expression_evaluates_to<double>("-2E360+2*I", "(-inf)+2*I");
assert_parsed_expression_evaluates_to<float>("-2E100+2E10*I", "-inf+2E10*I");
assert_parsed_expression_evaluates_to<double>("-2E360+2*I", "-inf+2*I");
assert_parsed_expression_evaluates_to<float>("undef+2E100*I", Undefined::Name());
assert_parsed_expression_evaluates_to<double>("-2E360+undef*I", Undefined::Name());

View File

@@ -166,8 +166,8 @@ QUIZ_CASE(poincare_function_evaluate) {
#if MATRICES_ARE_DEFINED
assert_parsed_expression_evaluates_to<float>("inverse([[1,2,3][4,5,-6][7,8,9]])", "[[-1.2917,-0.083333,0.375][1.0833,0.16667,-0.25][0.041667,-0.083333,0.041667]]", Degree, Cartesian, 5); // inverse is not precise enough to display 7 significative digits
assert_parsed_expression_evaluates_to<double>("inverse([[1,2,3][4,5,-6][7,8,9]])", "[[-1.2916666666667,-8.3333333333333E-2,0.375][1.0833333333333,1.6666666666667E-1,-0.25][4.1666666666667E-2,-8.3333333333333E-2,4.1666666666667E-2]]");
assert_parsed_expression_evaluates_to<float>("inverse([[I,23-2I,3*I][4+I,5*I,6][7,8*I+2,9]])", "[[(-0.0118)-0.0455*I,(-0.5)-0.727*I,0.318+0.489*I][0.0409+0.00364*I,0.04-0.0218*I,(-0.0255)+0.00091*I][0.00334-0.00182*I,0.361+0.535*I,(-0.13)-0.358*I]]", Degree, Cartesian, 3); // inverse is not precise enough to display 7 significative digits
assert_parsed_expression_evaluates_to<double>("inverse([[I,23-2I,3*I][4+I,5*I,6][7,8*I+2,9]])", "[[(-0.0118289353958)-0.0454959053685*I,(-0.500454959054)-0.727024567789*I,0.31847133758+0.488626023658*I][0.0409463148317+3.63967242948E-3*I,0.0400363967243-0.0218380345769*I,(-0.0254777070064)+9.0991810737E-4*I][3.33636639369E-3-1.81983621474E-3*I,0.36093418259+0.534728541098*I,(-0.130118289354)-0.357597816197*I]]", Degree, Cartesian, 12); // FIXME: inverse is not precise enough to display 14 significative digits
assert_parsed_expression_evaluates_to<float>("inverse([[I,23-2I,3*I][4+I,5*I,6][7,8*I+2,9]])", "[[-0.0118-0.0455*I,-0.5-0.727*I,0.318+0.489*I][0.0409+0.00364*I,0.04-0.0218*I,-0.0255+0.00091*I][0.00334-0.00182*I,0.361+0.535*I,-0.13-0.358*I]]", Degree, Cartesian, 3); // inverse is not precise enough to display 7 significative digits
assert_parsed_expression_evaluates_to<double>("inverse([[I,23-2I,3*I][4+I,5*I,6][7,8*I+2,9]])", "[[-0.0118289353958-0.0454959053685*I,-0.500454959054-0.727024567789*I,0.31847133758+0.488626023658*I][0.0409463148317+3.63967242948E-3*I,0.0400363967243-0.0218380345769*I,-0.0254777070064+9.0991810737E-4*I][3.33636639369E-3-1.81983621474E-3*I,0.36093418259+0.534728541098*I,-0.130118289354-0.357597816197*I]]", Degree, Cartesian, 12); // FIXME: inverse is not precise enough to display 14 significative digits
#endif
assert_parsed_expression_evaluates_to<float>("prediction(0.1, 100)", "[[0,0.2]]");
@@ -176,8 +176,8 @@ QUIZ_CASE(poincare_function_evaluate) {
assert_parsed_expression_evaluates_to<float>("prediction95(0.1, 100)", "[[0.0412,0.1588]]");
assert_parsed_expression_evaluates_to<double>("prediction95(0.1, 100)", "[[0.0412,0.1588]]");
assert_parsed_expression_evaluates_to<float>("product(2+k*I,k, 1, 5)", "(-100)-540*I");
assert_parsed_expression_evaluates_to<double>("product(2+o*I,o, 1, 5)", "(-100)-540*I");
assert_parsed_expression_evaluates_to<float>("product(2+k*I,k, 1, 5)", "-100-540*I");
assert_parsed_expression_evaluates_to<double>("product(2+o*I,o, 1, 5)", "-100-540*I");
assert_parsed_expression_evaluates_to<float>("root(3+I, 3)", "1.459366+0.1571201*I");
assert_parsed_expression_evaluates_to<double>("root(3+I, 3)", "1.4593656008684+1.5712012294394E-1*I");

View File

@@ -34,7 +34,7 @@ QUIZ_CASE(poincare_logarithm_simplify) {
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)");
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)");
assert_parsed_expression_simplify_to("ln(2/3)", "ln(2)-ln(3)");
assert_parsed_expression_simplify_to("log(1742279/12925, -6)", "log(158389/1175,-6)");
assert_parsed_expression_simplify_to("ln(R(2))", "ln(2)/2");
@@ -58,6 +58,6 @@ QUIZ_CASE(poincare_logarithm_simplify) {
assert_parsed_expression_simplify_to("log(100)", "2");
assert_parsed_expression_simplify_to("log(1000000)", "6");
assert_parsed_expression_simplify_to("log(70992768,14)", "5+2*log(2,14)+log(3,14)+log(11,14)");
assert_parsed_expression_simplify_to("log(1/6991712,14)", "(-5)-log(13,14)");
assert_parsed_expression_simplify_to("log(1/6991712,14)", "-5-log(13,14)");
assert_parsed_expression_simplify_to("log(4,10)", "2*log(2)");
}

View File

@@ -53,7 +53,7 @@ QUIZ_CASE(poincare_multiplication_simplify) {
assert_parsed_expression_simplify_to("2^P*(1/2)^P", "1");
assert_parsed_expression_simplify_to("A^3*A^(-3)", "1");
assert_parsed_expression_simplify_to("(x+1)*(x+2)", "2+3*x+x^2");
assert_parsed_expression_simplify_to("(x+1)*(x-1)", "(-1)+x^2");
assert_parsed_expression_simplify_to("(x+1)*(x-1)", "-1+x^2");
assert_parsed_expression_simplify_to("11P/(22P+11P)", "1/3");
assert_parsed_expression_simplify_to("11/(22P+11P)", "1/(3*P)");
assert_parsed_expression_simplify_to("-11/(22P+11P)", "-1/(3*P)");

View File

@@ -10,7 +10,7 @@ QUIZ_CASE(poincare_power_evaluate) {
assert_parsed_expression_evaluates_to<float>("2^3", "8");
assert_parsed_expression_evaluates_to<double>("(3+I)^4", "28+96*I");
assert_parsed_expression_evaluates_to<float>("4^(3+I)", "11.74125+62.91378*I");
assert_parsed_expression_evaluates_to<double>("(3+I)^(3+I)", "(-11.898191759852)+19.592921596609*I");
assert_parsed_expression_evaluates_to<double>("(3+I)^(3+I)", "-11.898191759852+19.592921596609*I");
assert_parsed_expression_evaluates_to<double>("0^0", Undefined::Name());
assert_parsed_expression_evaluates_to<double>("0^2", "0");
@@ -61,8 +61,8 @@ QUIZ_CASE(poincare_power_simplify) {
assert_parsed_expression_simplify_to("R(x*144)", "12*R(x)");
assert_parsed_expression_simplify_to("R(x*144*P^2)", "12*R(x)*P");
assert_parsed_expression_simplify_to("R(x*144*P)", "12*R(x)*R(P)");
assert_parsed_expression_simplify_to("(-1)*(2+(-4*R(2)))", "(-2)+4*R(2)");
assert_parsed_expression_simplify_to("R(2-4*R(2))", "R((-2)+4*R(2))*I");
assert_parsed_expression_simplify_to("(-1)*(2+(-4*R(2)))", "-2+4*R(2)");
assert_parsed_expression_simplify_to("R(2-4*R(2))", "R(-2+4*R(2))*I");
assert_parsed_expression_simplify_to("x^(1/2)", "R(x)");
assert_parsed_expression_simplify_to("x^(-1/2)", "1/R(x)");
assert_parsed_expression_simplify_to("x^(1/7)", "root(x,7)");

View File

@@ -12,10 +12,10 @@ using namespace Poincare;
QUIZ_CASE(poincare_simplify_mix) {
// Root at denominator
assert_parsed_expression_simplify_to("1/(R(2)+R(3))", "(-R(2))+R(3)");
assert_parsed_expression_simplify_to("1/(R(2)+R(3))", "-R(2)+R(3)");
assert_parsed_expression_simplify_to("1/(5+R(3))", "(5-R(3))/22");
assert_parsed_expression_simplify_to("1/(R(2)+4)", "(4-R(2))/14");
assert_parsed_expression_simplify_to("1/(2R(2)-4)", "((-2)-R(2))/4");
assert_parsed_expression_simplify_to("1/(2R(2)-4)", "(-2-R(2))/4");
assert_parsed_expression_simplify_to("1/(-2R(2)+4)", "(2+R(2))/4");
assert_parsed_expression_simplify_to("45^2", "2025");
assert_parsed_expression_simplify_to("1/(R(2)ln(3))", "R(2)/(2*ln(3))");
@@ -25,14 +25,14 @@ QUIZ_CASE(poincare_simplify_mix) {
assert_parsed_expression_simplify_to("(R(2)*P + R(2)*X)/R(2)", "P+X");
assert_parsed_expression_simplify_to("P+(3R(2)-2R(3))/25", "(3*R(2)-2*R(3)+25*P)/25");
assert_parsed_expression_simplify_to("ln(2+3)", "ln(5)");
assert_parsed_expression_simplify_to("3*A*B*C+4*cos(2)-2*A*B*C+A*B*C+ln(3)+4*A*B-5*A*B*C+cos(3)*ln(5)+cos(2)-45*cos(2)", "(-40*cos(2))+ln(3)+cos(3)*ln(5)+4*A*B-3*A*B*C");
assert_parsed_expression_simplify_to("3*A*B*C+4*cos(2)-2*A*B*C+A*B*C+ln(3)+4*A*B-5*A*B*C+cos(3)*ln(5)+cos(2)-45*cos(2)", "-40*cos(2)+ln(3)+cos(3)*ln(5)+4*A*B-3*A*B*C");
assert_parsed_expression_simplify_to("2*A+3*cos(2)+3+4*ln(5)+5*A+2*ln(5)+1+0", "4+3*cos(2)+6*ln(5)+7*A");
assert_parsed_expression_simplify_to("2.3*A+3*cos(2)+3+4*ln(5)+5*A+2*ln(5)+1.2+0.235", "(887+600*cos(2)+1200*ln(5)+1460*A)/200");
assert_parsed_expression_simplify_to("2*A*B*C+2.3*A*B+3*A^2+5.2*A*B*C+4*A^2", "(70*A^2+23*A*B+72*A*B*C)/10");
assert_parsed_expression_simplify_to("(A*B)^2*A+4*A^3", "4*A^3+A^3*B^2");
assert_parsed_expression_simplify_to("(A*3)^2*A+4*A^3", "13*A^3");
assert_parsed_expression_simplify_to("A^2^2*A+4*A^3", "4*A^3+A^5");
assert_parsed_expression_simplify_to("0.5+4*A*B-2.3+2*A*B-2*B*A^C-cos(4)+2*A^C*B+A*B*C*D", "((-9)-5*cos(4)+30*A*B+5*A*B*C*D)/5");
assert_parsed_expression_simplify_to("0.5+4*A*B-2.3+2*A*B-2*B*A^C-cos(4)+2*A^C*B+A*B*C*D", "(-9-5*cos(4)+30*A*B+5*A*B*C*D)/5");
assert_parsed_expression_simplify_to("(1+R(2))/5", "(1+R(2))/5");
assert_parsed_expression_simplify_to("(2+R(6))^2", "10+4*R(6)");
assert_parsed_expression_simplify_to("tan(3)ln(2)+P", "tan(3)*ln(2)+P");

View File

@@ -11,9 +11,9 @@ QUIZ_CASE(poincare_subtraction_evaluate) {
#if MATRICES_ARE_DEFINED
assert_parsed_expression_evaluates_to<float>("[[1,2][3,4][5,6]]-3", "[[-2,-1][0,1][2,3]]");
assert_parsed_expression_evaluates_to<double>("[[1,2+I][3,4][5,6]]-(4+I)", "[[(-3)-I,-2][(-1)-I,-I][1-I,2-I]]");
assert_parsed_expression_evaluates_to<double>("[[1,2+I][3,4][5,6]]-(4+I)", "[[-3-I,-2][-1-I,-I][1-I,2-I]]");
assert_parsed_expression_evaluates_to<float>("3-[[1,2][3,4][5,6]]", "[[2,1][0,-1][-2,-3]]");
assert_parsed_expression_evaluates_to<double>("3+I-[[1,2+I][3,4][5,6]]", "[[2+I,1][I,(-1)+I][(-2)+I,(-3)+I]]");
assert_parsed_expression_evaluates_to<double>("3+I-[[1,2+I][3,4][5,6]]", "[[2+I,1][I,-1+I][-2+I,-3+I]]");
assert_parsed_expression_evaluates_to<float>("[[1,2][3,4][5,6]]-[[6,5][4,3][2,1]]", "[[-5,-3][-1,1][3,5]]");
assert_parsed_expression_evaluates_to<double>("[[1,2+I][3,4][5,6]]-[[1,2+I][3,4][5,6]]", "[[0,0][0,0][0,0]]");
#endif

View File

@@ -40,7 +40,7 @@ QUIZ_CASE(poincare_trigo_evaluate) {
assert_parsed_expression_evaluates_to<double>("cos(2*I)", "3.7621956910836", Radian);
assert_parsed_expression_evaluates_to<double>("cos(2*I)", "1.0006092967033", Degree);
// On C
assert_parsed_expression_evaluates_to<float>("cos(I-4)", "(-1.008625)-0.8893952*I", Radian);
assert_parsed_expression_evaluates_to<float>("cos(I-4)", "-1.008625-0.8893952*I", Radian);
assert_parsed_expression_evaluates_to<float>("cos(I-4)", "0.997716+0.00121754*I", Degree, Cartesian, 6);
/* sin: R -> R (oscillator)
@@ -62,7 +62,7 @@ QUIZ_CASE(poincare_trigo_evaluate) {
assert_parsed_expression_evaluates_to<float>("sin(-3*I)", "-0.05238381*I", Degree);
// On: C
assert_parsed_expression_evaluates_to<float>("sin(I-4)", "1.16781-0.768163*I", Radian, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("sin(I-4)", "(-0.0697671)+0.0174117*I", Degree, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("sin(I-4)", "-0.0697671+0.0174117*I", Degree, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("sin(1.234567890123456E-15)", "1.23457E-15", Radian, Cartesian, 6);
/* tan: R -> R (tangent-style)
@@ -83,8 +83,8 @@ QUIZ_CASE(poincare_trigo_evaluate) {
assert_parsed_expression_evaluates_to<double>("tan(2*I)", "9.6402758007582E-1*I", Radian);
assert_parsed_expression_evaluates_to<float>("tan(2*I)", "0.03489241*I", Degree);
// On C
assert_parsed_expression_evaluates_to<float>("tan(I-4)", "(-0.273553)+1.00281*I", Radian, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("tan(I-4)", "(-0.0699054)+0.0175368*I", Degree, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("tan(I-4)", "-0.273553+1.00281*I", Radian, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("tan(I-4)", "-0.0699054+0.0175368*I", Degree, Cartesian, 6);
/* acos: [-1,1] -> R
* ]-inf,-1[ -> Pi+R*i (odd imaginary)
@@ -129,18 +129,18 @@ QUIZ_CASE(poincare_trigo_evaluate) {
assert_parsed_expression_evaluates_to<double>("asin(2)", "1.5707963267949-1.3169578969248*I", Radian);
assert_parsed_expression_evaluates_to<double>("asin(2)", "90-75.456129290217*I", Degree);
// Symmetry: odd
assert_parsed_expression_evaluates_to<double>("asin(-2)", "(-1.5707963267949)+1.3169578969248*I", Radian);
assert_parsed_expression_evaluates_to<double>("asin(-2)", "(-90)+75.456129290217*I", Degree);
assert_parsed_expression_evaluates_to<double>("asin(-2)", "-1.5707963267949+1.3169578969248*I", Radian);
assert_parsed_expression_evaluates_to<double>("asin(-2)", "-90+75.456129290217*I", Degree);
// On ]-inf, -1[
assert_parsed_expression_evaluates_to<float>("asin(-32)", "(-1.571)+4.159*I", Radian, Cartesian, 4);
assert_parsed_expression_evaluates_to<float>("asin(-32)", "(-90)+238*I", Degree, Cartesian, 3);
assert_parsed_expression_evaluates_to<float>("asin(-32)", "-1.571+4.159*I", Radian, Cartesian, 4);
assert_parsed_expression_evaluates_to<float>("asin(-32)", "-90+238*I", Degree, Cartesian, 3);
// On R*i
assert_parsed_expression_evaluates_to<double>("asin(3*I)", "1.8184464592321*I", Radian);
// Symmetry: odd
assert_parsed_expression_evaluates_to<double>("asin(-3*I)", "-1.8184464592321*I", Radian);
// On C
assert_parsed_expression_evaluates_to<float>("asin(I-4)", "(-1.3186)+2.0966*I", Radian, Cartesian, 5);
assert_parsed_expression_evaluates_to<float>("asin(I-4)", "(-75.551)+120.13*I", Degree, Cartesian, 5);
assert_parsed_expression_evaluates_to<float>("asin(I-4)", "-1.3186+2.0966*I", Radian, Cartesian, 5);
assert_parsed_expression_evaluates_to<float>("asin(I-4)", "-75.551+120.13*I", Degree, Cartesian, 5);
// Key values
assert_parsed_expression_evaluates_to<double>("asin(0)", "0", Degree);
assert_parsed_expression_evaluates_to<float>("asin(-1)", "-90", Degree);
@@ -165,13 +165,13 @@ QUIZ_CASE(poincare_trigo_evaluate) {
assert_parsed_expression_evaluates_to<double>("atan(26*I)", "1.5707963267949+3.8480520568064E-2*I", Radian);
assert_parsed_expression_evaluates_to<double>("atan(26*I)", "90+2.2047714220164*I", Degree);
// Symmetry: odd
assert_parsed_expression_evaluates_to<double>("atan(-26*I)", "(-1.5707963267949)-3.8480520568064E-2*I", Radian);
assert_parsed_expression_evaluates_to<double>("atan(-26*I)", "-1.5707963267949-3.8480520568064E-2*I", Radian);
// On ]-inf*i, -i[
assert_parsed_expression_evaluates_to<float>("atan(-3.4*I)", "(-1.570796)-0.3030679*I", Radian);
assert_parsed_expression_evaluates_to<float>("atan(-3.4*I)", "(-90)-17.3645*I", Degree, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("atan(-3.4*I)", "-1.570796-0.3030679*I", Radian);
assert_parsed_expression_evaluates_to<float>("atan(-3.4*I)", "-90-17.3645*I", Degree, Cartesian, 6);
// On C
assert_parsed_expression_evaluates_to<float>("atan(I-4)", "(-1.338973)+0.05578589*I", Radian);
assert_parsed_expression_evaluates_to<float>("atan(I-4)", "(-76.7175)+3.1963*I", Degree, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("atan(I-4)", "-1.338973+0.05578589*I", Radian);
assert_parsed_expression_evaluates_to<float>("atan(I-4)", "-76.7175+3.1963*I", Degree, Cartesian, 6);
// Key values
assert_parsed_expression_evaluates_to<float>("atan(0)", "0", Degree);
assert_parsed_expression_evaluates_to<double>("atan(-I)", "-inf*I", Radian);
@@ -214,8 +214,8 @@ QUIZ_CASE(poincare_trigo_evaluate) {
assert_parsed_expression_evaluates_to<float>("sinh(8*P*I/2)", "0", Radian);
assert_parsed_expression_evaluates_to<float>("sinh(9*P*I/2)", "I", Radian);
// On C
assert_parsed_expression_evaluates_to<float>("sinh(I-4)", "(-14.7448)+22.9791*I", Radian, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("sinh(I-4)", "(-14.7448)+22.9791*I", Degree, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("sinh(I-4)", "-14.7448+22.9791*I", Radian, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("sinh(I-4)", "-14.7448+22.9791*I", Degree, Cartesian, 6);
/* tanh: R -> R (odd)
* R*i -> R*i (tangent-style)
@@ -234,8 +234,8 @@ QUIZ_CASE(poincare_trigo_evaluate) {
assert_parsed_expression_evaluates_to<float>("tanh(8*P*I/2)", "0", Radian);
assert_parsed_expression_evaluates_to<float>("tanh(9*P*I/2)", Undefined::Name(), Radian);*/
// On C
assert_parsed_expression_evaluates_to<float>("tanh(I-4)", "(-1.00028)+0.000610241*I", Radian, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("tanh(I-4)", "(-1.00028)+0.000610241*I", Degree, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("tanh(I-4)", "-1.00028+0.000610241*I", Radian, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("tanh(I-4)", "-1.00028+0.000610241*I", Degree, Cartesian, 6);
/* acosh: [-1,1] -> R*i
* ]-inf,-1[ -> Pi*i+R (even on real)
@@ -284,14 +284,14 @@ QUIZ_CASE(poincare_trigo_evaluate) {
assert_parsed_expression_evaluates_to<double>("asinh(-0.2*I)", "-2.0135792079033E-1*I", Radian);
assert_parsed_expression_evaluates_to<float>("asinh(-0.2*I)", "-0.2013579*I", Degree);
// On ]-inf*i, -i[
assert_parsed_expression_evaluates_to<double>("asinh(-22*I)", "(-3.7836727043295)-1.5707963267949*I", Radian);
assert_parsed_expression_evaluates_to<float>("asinh(-22*I)", "(-3.784)-1.571*I", Degree, Cartesian, 4);
assert_parsed_expression_evaluates_to<double>("asinh(-22*I)", "-3.7836727043295-1.5707963267949*I", Radian);
assert_parsed_expression_evaluates_to<float>("asinh(-22*I)", "-3.784-1.571*I", Degree, Cartesian, 4);
// On ]i, inf*i[, Symmetry: odd
assert_parsed_expression_evaluates_to<double>("asinh(22*I)", "3.7836727043295+1.5707963267949*I", Radian);
assert_parsed_expression_evaluates_to<float>("asinh(22*I)", "3.784+1.571*I", Degree, Cartesian, 4);
// On C
assert_parsed_expression_evaluates_to<float>("asinh(I-4)", "(-2.123)+0.2383*I", Radian, Cartesian, 4);
assert_parsed_expression_evaluates_to<float>("asinh(I-4)", "(-2.123)+0.2383*I", Degree, Cartesian, 4);
assert_parsed_expression_evaluates_to<float>("asinh(I-4)", "-2.123+0.2383*I", Radian, Cartesian, 4);
assert_parsed_expression_evaluates_to<float>("asinh(I-4)", "-2.123+0.2383*I", Degree, Cartesian, 4);
/* atanh: [-1,1] -> R (odd)
* ]-inf,-1[ -> Pi/2*i+R (odd)
@@ -308,8 +308,8 @@ QUIZ_CASE(poincare_trigo_evaluate) {
assert_parsed_expression_evaluates_to<double>("atanh(4)", "0.255412811883-1.5707963267949*I", Radian);
assert_parsed_expression_evaluates_to<float>("atanh(4)", "0.2554128-1.570796*I", Degree);
// On ]-inf,-1[, Symmetry: odd
assert_parsed_expression_evaluates_to<double>("atanh(-4)", "(-0.255412811883)+1.5707963267949*I", Radian);
assert_parsed_expression_evaluates_to<float>("atanh(-4)", "(-0.2554128)+1.570796*I", Degree);
assert_parsed_expression_evaluates_to<double>("atanh(-4)", "-0.255412811883+1.5707963267949*I", Radian);
assert_parsed_expression_evaluates_to<float>("atanh(-4)", "-0.2554128+1.570796*I", Degree);
// On R*i
assert_parsed_expression_evaluates_to<double>("atanh(4*I)", "1.325817663668*I", Radian);
assert_parsed_expression_evaluates_to<float>("atanh(4*I)", "1.325818*I", Radian);
@@ -317,8 +317,8 @@ QUIZ_CASE(poincare_trigo_evaluate) {
assert_parsed_expression_evaluates_to<double>("atanh(-4*I)", "-1.325817663668*I", Radian);
assert_parsed_expression_evaluates_to<float>("atanh(-4*I)", "-1.325818*I", Radian);
// On C
assert_parsed_expression_evaluates_to<float>("atanh(I-4)", "(-0.238878)+1.50862*I", Radian, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("atanh(I-4)", "(-0.238878)+1.50862*I", Degree, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("atanh(I-4)", "-0.238878+1.50862*I", Radian, Cartesian, 6);
assert_parsed_expression_evaluates_to<float>("atanh(I-4)", "-0.238878+1.50862*I", Degree, Cartesian, 6);
// WARNING: evaluate on branch cut can be multivalued
assert_parsed_expression_evaluates_to<double>("acos(2)", "1.3169578969248*I", Radian);
@@ -390,13 +390,13 @@ QUIZ_CASE(poincare_trigo_simplify) {
assert_parsed_expression_simplify_to("sin(P*340000)", "0");
assert_parsed_expression_simplify_to("sin(P*340001)", "0");
assert_parsed_expression_simplify_to("sin(-P*340001)", "0");
assert_parsed_expression_simplify_to("sin(P/12)", "((-R(2))+R(6))/4");
assert_parsed_expression_simplify_to("sin(P/12)", "(-R(2)+R(6))/4");
assert_parsed_expression_simplify_to("sin(-P/12)", "(R(2)-R(6))/4");
assert_parsed_expression_simplify_to("sin(-P*R(2))", "-sin(R(2)*P)");
assert_parsed_expression_simplify_to("sin(1311P/6)", "1");
assert_parsed_expression_simplify_to("sin(-P17/8)", "-R(2-R(2))/2");
assert_parsed_expression_simplify_to("sin(41P/6)", "1/2");
assert_parsed_expression_simplify_to("sin(-3P/10)", "((-1)-R(5))/4");
assert_parsed_expression_simplify_to("sin(-3P/10)", "(-1-R(5))/4");
assert_parsed_expression_simplify_to("sin(P/4+1000P)", "R(2)/2");
assert_parsed_expression_simplify_to("sin(-P/3)", "-R(3)/2");
assert_parsed_expression_simplify_to("sin(17P/5)", "-(R(2)*R(5+R(5)))/4");
@@ -408,7 +408,7 @@ QUIZ_CASE(poincare_trigo_simplify) {
assert_parsed_expression_simplify_to("sin(61200000)", "0", Preferences::AngleUnit::Degree);
assert_parsed_expression_simplify_to("sin(61200180)", "0", Preferences::AngleUnit::Degree);
assert_parsed_expression_simplify_to("sin(-61200180)", "0", Preferences::AngleUnit::Degree);
assert_parsed_expression_simplify_to("sin(15)", "((-R(2))+R(6))/4", Preferences::AngleUnit::Degree);
assert_parsed_expression_simplify_to("sin(15)", "(-R(2)+R(6))/4", Preferences::AngleUnit::Degree);
assert_parsed_expression_simplify_to("sin(-15)", "(R(2)-R(6))/4", Preferences::AngleUnit::Degree);
assert_parsed_expression_simplify_to("sin(-180*R(2))", "-sin(180*R(2))", Preferences::AngleUnit::Degree);
assert_parsed_expression_simplify_to("sin(39330)", "1", Preferences::AngleUnit::Degree);
@@ -427,7 +427,7 @@ QUIZ_CASE(poincare_trigo_simplify) {
assert_parsed_expression_simplify_to("tan(P*340001)", "0");
assert_parsed_expression_simplify_to("tan(-P*340001)", "0");
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/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)", Undefined::Name());
assert_parsed_expression_simplify_to("tan(-P17/8)", "1-R(2)");
@@ -443,7 +443,7 @@ QUIZ_CASE(poincare_trigo_simplify) {
assert_parsed_expression_simplify_to("tan(61200180)", "0", Preferences::AngleUnit::Degree);
assert_parsed_expression_simplify_to("tan(-61200180)", "0", Preferences::AngleUnit::Degree);
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(-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)", Undefined::Name(), Preferences::AngleUnit::Degree);
assert_parsed_expression_simplify_to("tan(-382.5)", "1-R(2)", Preferences::AngleUnit::Degree);
@@ -453,14 +453,14 @@ QUIZ_CASE(poincare_trigo_simplify) {
assert_parsed_expression_simplify_to("tan(tan(tan(tan(9))))", "tan(tan(tan(tan(9))))");
// -- acos
assert_parsed_expression_simplify_to("acos(-1/2)", "(2*P)/3");
assert_parsed_expression_simplify_to("acos(-1.2)", "(-acos(6/5))+P");
assert_parsed_expression_simplify_to("acos(-1.2)", "-acos(6/5)+P");
assert_parsed_expression_simplify_to("acos(cos(2/3))", "2/3");
assert_parsed_expression_simplify_to("acos(cos(3/2))", "3/2");
assert_parsed_expression_simplify_to("cos(acos(3/2))", "3/2");
assert_parsed_expression_simplify_to("cos(acos(2/3))", "2/3");
assert_parsed_expression_simplify_to("acos(cos(12))", "acos(cos(12))");
assert_parsed_expression_simplify_to("acos(cos(4P/7))", "(4*P)/7");
assert_parsed_expression_simplify_to("acos(-cos(2))", "(-2)+P");
assert_parsed_expression_simplify_to("acos(-cos(2))", "-2+P");
assert_parsed_expression_simplify_to("acos(-1/2)", "120", Preferences::AngleUnit::Degree);
assert_parsed_expression_simplify_to("acos(-1.2)", "180-acos(6/5)", Preferences::AngleUnit::Degree);
assert_parsed_expression_simplify_to("acos(cos(2/3))", "2/3", Preferences::AngleUnit::Degree);