diff --git a/lib/Symbols.js b/lib/Symbols.js index 874c1585..1129e5be 100644 --- a/lib/Symbols.js +++ b/lib/Symbols.js @@ -39,6 +39,10 @@ Symbols.getLastSymbolTerm = function(node, symbolName) { } } } + else if (Node.Type.isParenthesis(node)) { + return Symbols.getLastSymbolTerm(node.content, symbolName); + } + return null; }; diff --git a/lib/solveEquation/EquationOperations.js b/lib/solveEquation/EquationOperations.js index 7349e171..e1431ea7 100644 --- a/lib/solveEquation/EquationOperations.js +++ b/lib/solveEquation/EquationOperations.js @@ -128,10 +128,16 @@ EquationOperations.removeSymbolFromRightSide = function(equation, symbolName) { // or dividing all other symbols and constants from both sides appropriately // TODO: support inverting functions e.g. sqrt, ^, log etc. EquationOperations.isolateSymbolOnLeftSide = function(equation, symbolName) { - const leftNode = equation.leftNode; - let nonSymbolTerm = Symbols.getLastNonSymbolTerm(leftNode, symbolName); + let leftNode = equation.leftNode; + + if (Node.Type.isParenthesis(leftNode)) { + // if entire left node is a parenthesis, we can ignore the parenthesis + leftNode = leftNode.content; + } + let nonSymbolTerm = Symbols.getLastNonSymbolTerm(leftNode, symbolName); let inverseOp, inverseTerm, changeType; + if (!nonSymbolTerm) { return EquationStatus.noChange(equation); } diff --git a/test/solveEquation/solveEquation.test.js b/test/solveEquation/solveEquation.test.js index 96216830..c92d304a 100644 --- a/test/solveEquation/solveEquation.test.js +++ b/test/solveEquation/solveEquation.test.js @@ -95,6 +95,8 @@ describe('solveEquation for =', function () { ['2/(1 + 1 + 4x) = 1/3', 'x = 1'], ['(3 + x) / (x^2 + 3) = 1', 'x = [0, 1]'], ['6/x + 8/(2x) = 10', 'x = 1'], + ['(x+1)=4', 'x = 3'], + ['((x)/(4))=4', 'x = 16'] // TODO: fix these cases, fail because lack of factoring support, for complex #s, // for taking the sqrt of both sides, etc // ['(x + y) (y + 2) = 0', 'y = -y'],