diff --git a/src/function/algebra/simplify.js b/src/function/algebra/simplify.js index f6f0320a3..a5f33b54c 100644 --- a/src/function/algebra/simplify.js +++ b/src/function/algebra/simplify.js @@ -327,7 +327,9 @@ export const createSimplify = /* #__PURE__ */ factory(name, dependencies, ( { l: '1*n', r: 'n' }, // this pattern can be produced by simplifyConstant - { l: 'n1/(n2/n3)', r: '(n1*n3)/n2' } + { l: 'n1/(n2/n3)', r: '(n1*n3)/n2' }, + + { l: 'n1/(-n2)', r: '-n1/n2' } ] diff --git a/test/unit-tests/function/algebra/simplify.test.js b/test/unit-tests/function/algebra/simplify.test.js index fb8a471e5..a964f57b7 100644 --- a/test/unit-tests/function/algebra/simplify.test.js +++ b/test/unit-tests/function/algebra/simplify.test.js @@ -388,4 +388,44 @@ describe('simplify', function () { simplifyAndCompareEval('log(3,5)', 'log(3,5)') simplifyAndCompareEval('log(e,9)', 'log(e,9)') }) + + describe('should simplify fraction where denominator has a minus', function () { + it('unary numerator and unary denominator', function () { + simplifyAndCompare('1/(-y)', '-(1/y)') + simplifyAndCompare('x/(-y)', '-(x/y)') + simplifyAndCompare('(-1)/(-y)', '1/y') + simplifyAndCompare('(-x)/(-y)', 'x/y') + }) + + it('binary numerator and unary denominator', function () { + simplifyAndCompare('(1+x)/(-y)', '-((x+1)/y)') + simplifyAndCompare('(w+x)/(-y)', '-((w+x)/y)') + simplifyAndCompare('(1-x)/(-y)', '(x-1)/y') + simplifyAndCompare('(w-x)/(-y)', '(x-w)/y') + }) + + it('unary numerator and binary denominator', function () { + simplifyAndCompare('1/(-(y+z))', '-(1/(y+z))') + simplifyAndCompare('x/(-(y+z))', '-(x/(y+z))') + simplifyAndCompare('(-1)/(-(y+z))', '1/(y+z)') + simplifyAndCompare('(-x)/(-(y+z))', 'x/(y+z)') + + simplifyAndCompare('1/(-(y-z))', '1/(z-y)') + simplifyAndCompare('x/(-(y-z))', 'x/(z-y)') + simplifyAndCompare('(-1)/(-(y-z))', '-(1/(z-y))') + simplifyAndCompare('(-x)/(-(y-z))', '-(x/(z-y))') + }) + + it('binary numerator and binary denominator', function () { + simplifyAndCompare('(1+x)/(-(y+z))', '-((x+1)/(y+z))') + simplifyAndCompare('(w+x)/(-(y+z))', '-((w+x)/(y+z))') + simplifyAndCompare('(1-x)/(-(y+z))', '(x-1)/(y+z)') + simplifyAndCompare('(w-x)/(-(y+z))', '(x-w)/(y+z)') + + simplifyAndCompare('(1+x)/(-(y-z))', '(x+1)/(z-y)') + simplifyAndCompare('(w+x)/(-(y-z))', '(w+x)/(z-y)') + simplifyAndCompare('(1-x)/(-(y-z))', '(1-x)/(z-y)') + simplifyAndCompare('(w-x)/(-(y-z))', '(w-x)/(z-y)') + }) + }) })