mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-19 00:37:25 +01:00
[poincare] NAryExpressionNode: fix sortChildrenInPlace to put
expressions involving matrices as last children
This commit is contained in:
committed by
LeaNumworks
parent
984d1ff924
commit
a515160470
@@ -32,7 +32,12 @@ void NAryExpressionNode::sortChildrenInPlace(ExpressionOrder order, Context * co
|
||||
* multiplication) so we never swap 2 matrices. */
|
||||
ExpressionNode * cj = childAtIndex(j);
|
||||
ExpressionNode * cj1 = childAtIndex(j+1);
|
||||
if (order(cj, cj1, canBeInterrupted) > 0 && (canSwapMatrices || !(Expression(cj).deepIsMatrix(context) && Expression(cj1).deepIsMatrix(context)))) {
|
||||
bool cjIsMatrix = Expression(cj).deepIsMatrix(context);
|
||||
bool cj1IsMatrix = Expression(cj1).deepIsMatrix(context);
|
||||
bool cj1GreaterThanCj = order(cj, cj1, canBeInterrupted) > 0;
|
||||
if ((cjIsMatrix && !cj1IsMatrix) || // we always put matrices at the end of expressions
|
||||
(cjIsMatrix && cj1IsMatrix && canSwapMatrices && cj1GreaterThanCj) ||
|
||||
(!cjIsMatrix && !cj1IsMatrix && cj1GreaterThanCj)) {
|
||||
reference.swapChildrenInPlace(j, j+1);
|
||||
isSorted = false;
|
||||
}
|
||||
|
||||
@@ -216,4 +216,14 @@ QUIZ_CASE(poincare_expression_order_addition_multiplication) {
|
||||
assert_multiplication_or_addition_is_ordered_as(e1, e2);
|
||||
}
|
||||
|
||||
{
|
||||
// ∑Matrix + 𝐢 -> 𝐢 + ∑Matrix
|
||||
Expression childMatrix = Matrix::Builder();
|
||||
static_cast<Matrix &>(childMatrix).addChildAtIndexInPlace(Rational::Builder(0), 0, 0);
|
||||
Expression child1 = Sum::Builder(childMatrix, Symbol::Builder('n'), Rational::Builder(0), Rational::Builder(0));
|
||||
Expression child2 = Symbol::Builder(UCodePointMathematicalBoldSmallI);
|
||||
Expression e1 = Addition::Builder(child1.clone(), child2.clone());
|
||||
Expression e2 = Addition::Builder(child2, child1);
|
||||
assert_multiplication_or_addition_is_ordered_as(e1, e2);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user