Add simplify rule (#2365)

* Add simplify rule (Fix #2156)

* Add some tests

* Add more tests

* Fix simplify rule
This commit is contained in:
Hyeonjong 2021-12-29 21:19:30 +09:00 committed by GitHub
parent 677be84b8a
commit 43e705e7f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 1 deletions

View File

@ -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' }
]

View File

@ -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)')
})
})
})