mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-18 16:27:34 +01:00
[poincare] MultiplicationImplicit: MultiplicationImplicit(2^3,4)
seriliazes to [2^3]4. Add tests about expression serialization
This commit is contained in:
@@ -29,6 +29,14 @@ bool MultiplicationImplicitNode::childNeedsSystemParenthesesAtSerialization(cons
|
||||
if (static_cast<const ExpressionNode *>(child)->type() == Type::Rational && !static_cast<const RationalNode *>(child)->isInteger()) {
|
||||
return true;
|
||||
}
|
||||
if (childAtIndex(0) == child && static_cast<const ExpressionNode *>(child)->type() == Type::Power) {
|
||||
// 2^{3}2 --> [2^3]2
|
||||
return true;
|
||||
}
|
||||
/* 2
|
||||
* ---i --> [2/π]i
|
||||
* π
|
||||
*/
|
||||
return static_cast<const ExpressionNode *>(child)->type() == Type::Division;
|
||||
}
|
||||
|
||||
|
||||
@@ -117,3 +117,28 @@ QUIZ_CASE(poincare_serialization_float) {
|
||||
assert_expression_serialize_to(Float<float>::Builder(0.0f), "0", DecimalMode);
|
||||
assert_expression_serialize_to(Float<float>::Builder(NAN), Undefined::Name(), DecimalMode);
|
||||
}
|
||||
|
||||
QUIZ_CASE(poincare_serialization_division) {
|
||||
assert_expression_serialize_to(Division::Builder(Rational::Builder(-2), Constant::Builder(UCodePointGreekSmallLetterPi)), "\u0012-2\u0013/π");
|
||||
assert_expression_serialize_to(Division::Builder(Constant::Builder(UCodePointGreekSmallLetterPi), Rational::Builder(-2)), "π/\u0012-2\u0013");
|
||||
assert_expression_serialize_to(Division::Builder(Rational::Builder(2,3), Constant::Builder(UCodePointGreekSmallLetterPi)), "\u00122/3\u0013/π");
|
||||
assert_expression_serialize_to(Division::Builder(Addition::Builder(Rational::Builder(2),Rational::Builder(1)), Constant::Builder(UCodePointGreekSmallLetterPi)), "\u00122+1\u0013/π");
|
||||
assert_expression_serialize_to(Division::Builder(Subtraction::Builder(Rational::Builder(2),Rational::Builder(1)), Constant::Builder(UCodePointGreekSmallLetterPi)), "\u00122-1\u0013/π");
|
||||
assert_expression_serialize_to(Division::Builder(MultiplicationExplicit::Builder(Rational::Builder(2),Rational::Builder(1)), Constant::Builder(UCodePointGreekSmallLetterPi)), "\u00122×1\u0013/π");
|
||||
assert_expression_serialize_to(Division::Builder(Division::Builder(Rational::Builder(2),Rational::Builder(1)), Constant::Builder(UCodePointGreekSmallLetterPi)), "\u00122/1\u0013/π");
|
||||
assert_expression_serialize_to(Division::Builder(Opposite::Builder(Rational::Builder(2)), Constant::Builder(UCodePointGreekSmallLetterPi)), "\u0012-2\u0013/π");
|
||||
}
|
||||
|
||||
QUIZ_CASE(poincare_serialization_factorial) {
|
||||
assert_expression_serialize_to(Factorial::Builder(Rational::Builder(2,3)), "\u00122/3\u0013!");
|
||||
assert_expression_serialize_to(Factorial::Builder(Division::Builder(Constant::Builder(UCodePointGreekSmallLetterPi),Rational::Builder(3))), "\u0012π/3\u0013!");
|
||||
assert_expression_serialize_to(Factorial::Builder(Power::Builder(Constant::Builder(UCodePointGreekSmallLetterPi),Rational::Builder(3))), "\u0012π^3\u0013!");
|
||||
}
|
||||
|
||||
QUIZ_CASE(poincare_serialization_mutiplication_implicite) {
|
||||
assert_expression_serialize_to(MultiplicationImplicit::Builder(Division::Builder(Rational::Builder(2), Constant::Builder(UCodePointGreekSmallLetterPi)),Rational::Builder(3)), "\u00122/π\u00133");
|
||||
assert_expression_serialize_to(MultiplicationImplicit::Builder(Power::Builder(Rational::Builder(2), Constant::Builder(UCodePointGreekSmallLetterPi)),Rational::Builder(3)), "\u00122^π\u00133");
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -420,6 +420,7 @@ QUIZ_CASE(poincare_parsing_implicit_multiplication) {
|
||||
assert_parsed_expression_is("1cos(2)", MultiplicationImplicit::Builder(Rational::Builder(1),Cosine::Builder(Rational::Builder(2))));
|
||||
assert_parsed_expression_is("1!2", MultiplicationImplicit::Builder(Factorial::Builder(Rational::Builder(1)),Rational::Builder(2)));
|
||||
assert_parsed_expression_is("2ℯ^(3)", MultiplicationImplicit::Builder(Rational::Builder(2),Power::Builder(Constant::Builder(UCodePointScriptSmallE),Parenthesis::Builder(Rational::Builder(3)))));
|
||||
assert_parsed_expression_is("\u00122^3\u00133", MultiplicationImplicit::Builder(Power::Builder(Rational::Builder(2),Rational::Builder(3)), Rational::Builder(3)));
|
||||
Expression m1[] = {Rational::Builder(1)}; Matrix M1 = BuildMatrix(1,1,m1);
|
||||
Expression m2[] = {Rational::Builder(2)}; Matrix M2 = BuildMatrix(1,1,m2);
|
||||
assert_parsed_expression_is("[[1]][[2]]", MultiplicationImplicit::Builder(M1,M2));
|
||||
|
||||
@@ -134,7 +134,7 @@ QUIZ_CASE(poincare_simplification_addition) {
|
||||
assert_parsed_expression_simplify_to("1/x^2+1/(x^2×π)", "\u0012π+1\u0013/\u0012π×x^2\u0013");
|
||||
assert_parsed_expression_simplify_to("1/x^2+1/(x^3×π)", "\u0012π×x+1\u0013/\u0012π×x^3\u0013");
|
||||
assert_parsed_expression_simplify_to("4x/x^2+3π/(x^3×π)", "\u00124×x^2+3\u0013/x^3");
|
||||
assert_parsed_expression_simplify_to("3^(1/2)+2^(-2×3^(1/2)×ℯ^π)/2", "\u00122×2^\u00122√(3)ℯ^π\u0013√(3)+1\u0013/\u00122×2^\u00122√(3)ℯ^π\u0013\u0013");
|
||||
assert_parsed_expression_simplify_to("3^(1/2)+2^(-2×3^(1/2)×ℯ^π)/2", "\u00122×\u00122^\u00122√(3)ℯ^π\u0013\u0013√(3)+1\u0013/\u00122×2^\u00122√(3)ℯ^π\u0013\u0013");
|
||||
assert_parsed_expression_simplify_to("[[1,2+𝐢][3,4][5,6]]+[[1,2+𝐢][3,4][5,6]]", "[[2,4+2𝐢][6,8][10,12]]");
|
||||
assert_parsed_expression_simplify_to("3+[[1,2][3,4]]", "undef");
|
||||
assert_parsed_expression_simplify_to("[[1][3][5]]+[[1,2+𝐢][3,4][5,6]]", "undef");
|
||||
@@ -984,7 +984,7 @@ QUIZ_CASE(poincare_simplification_mix) {
|
||||
assert_parsed_expression_simplify_to("root(5^((-𝐢)3^9),𝐢)", "1/ℯ^atan(tan(19683×ln(5)))");
|
||||
assert_parsed_expression_simplify_to("𝐢^𝐢", "1/ℯ^\u0012π/2\u0013");
|
||||
assert_parsed_expression_simplify_to("𝐢/(1+𝐢×√(x))", "𝐢/\u0012√(x)𝐢+1\u0013");
|
||||
assert_parsed_expression_simplify_to("x+𝐢/(1+𝐢×√(x))", "\u0012x^\u00123/2\u0013𝐢+𝐢+x\u0013/\u0012√(x)𝐢+1\u0013");
|
||||
assert_parsed_expression_simplify_to("x+𝐢/(1+𝐢×√(x))", "\u0012\u0012x^\u00123/2\u0013\u0013𝐢+𝐢+x\u0013/\u0012√(x)𝐢+1\u0013");
|
||||
|
||||
//assert_parsed_expression_simplify_to("log(cos(9)^ln(6), cos(9))", "ln(2)+ln(3)"); // TODO: for this to work, we must know the sign of cos(9)
|
||||
//assert_parsed_expression_simplify_to("log(cos(9)^ln(6), 9)", "ln(6)×log(cos(9), 9)"); // TODO: for this to work, we must know the sign of cos(9)
|
||||
|
||||
Reference in New Issue
Block a user