Revert "simplify init"
This reverts commit 743220aa1d050f523effd97a2330d8f1ee3a25d3.
This commit is contained in:
parent
743220aa1d
commit
433c2fb339
2
dist/helpers.js
vendored
2
dist/helpers.js
vendored
@ -152,6 +152,6 @@ var flatten = (function (_flatten) {
|
|||||||
|
|
||||||
exports.flatten = flatten;
|
exports.flatten = flatten;
|
||||||
var removeSymbols = function removeSymbols(string) {
|
var removeSymbols = function removeSymbols(string) {
|
||||||
return string.toString().replace(/\W/g, '');
|
return string.replace(/\W/g, '');
|
||||||
};
|
};
|
||||||
exports.removeSymbols = removeSymbols;
|
exports.removeSymbols = removeSymbols;
|
34
dist/index.js
vendored
34
dist/index.js
vendored
@ -53,7 +53,6 @@ var Equation = {
|
|||||||
|
|
||||||
return stack;
|
return stack;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an equation function which replaces variables
|
* Creates an equation function which replaces variables
|
||||||
* in the given expression with the values specified in order,
|
* in the given expression with the values specified in order,
|
||||||
@ -73,7 +72,8 @@ var Equation = {
|
|||||||
var variables = [];
|
var variables = [];
|
||||||
|
|
||||||
stack.forEach(function (a) {
|
stack.forEach(function (a) {
|
||||||
if (isVariable(a)) {
|
if (typeof a === 'string' && !_.isNumber(a) && !_operators2['default'][a] && a === a.toLowerCase()) {
|
||||||
|
// grouped variables like (y) need to have their parantheses removed
|
||||||
variables.push(_.removeSymbols(a));
|
variables.push(_.removeSymbols(a));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -95,31 +95,6 @@ var Equation = {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
* Simplifies a math expression
|
|
||||||
*
|
|
||||||
* Example:
|
|
||||||
* 2*x^2 + x - 2*x - x^2
|
|
||||||
* becomes
|
|
||||||
* x^2 - x
|
|
||||||
*
|
|
||||||
* @param {String} expression
|
|
||||||
* The expression to create an equation for (containing variables)
|
|
||||||
* @return {String}
|
|
||||||
* The simplified expression
|
|
||||||
*/
|
|
||||||
simplify: function simplify(expression) {
|
|
||||||
var stack = parseExpression(expression);
|
|
||||||
stack = sortStack(stack);
|
|
||||||
stack = _.parseNumbers(stack);
|
|
||||||
|
|
||||||
console.dir(stack, {
|
|
||||||
depth: null
|
|
||||||
});
|
|
||||||
|
|
||||||
return expression;
|
|
||||||
},
|
|
||||||
|
|
||||||
registerOperator: function registerOperator(key, options) {
|
registerOperator: function registerOperator(key, options) {
|
||||||
_operators2['default'][key] = options;
|
_operators2['default'][key] = options;
|
||||||
},
|
},
|
||||||
@ -202,11 +177,6 @@ var parseExpression = function parseExpression(expression) {
|
|||||||
return parseGroups(stack);
|
return parseGroups(stack);
|
||||||
};
|
};
|
||||||
|
|
||||||
var isVariable = function isVariable(char) {
|
|
||||||
var ch = _.removeSymbols(char);
|
|
||||||
return typeof ch === 'string' && !_.isNumber(ch) && !_operators2['default'][ch] && char === ch.toLowerCase();
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Takes the parsed array from parseExpression and
|
* Takes the parsed array from parseExpression and
|
||||||
* groups up expressions in parantheses in deep arrays
|
* groups up expressions in parantheses in deep arrays
|
||||||
|
73
dist/tests/basic.js
vendored
Normal file
73
dist/tests/basic.js
vendored
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; };
|
||||||
|
|
||||||
|
var _expect = require('chai');
|
||||||
|
|
||||||
|
var _M = require('../index.js');
|
||||||
|
|
||||||
|
var _M2 = _interopRequireWildcard(_M);
|
||||||
|
|
||||||
|
describe('Basic math operators', function () {
|
||||||
|
it('should work for add +', function () {
|
||||||
|
_expect.expect(_M2['default'].solve('2+2')).to.equal(4);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work for minus -', function () {
|
||||||
|
_expect.expect(_M2['default'].solve('15-3')).to.equal(12);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work for divison /', function () {
|
||||||
|
_expect.expect(_M2['default'].solve('20/2')).to.equal(10);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work for multiplication *', function () {
|
||||||
|
_expect.expect(_M2['default'].solve('6*3')).to.equal(18);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work for power ^', function () {
|
||||||
|
_expect.expect(_M2['default'].solve('5^2')).to.equal(25);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work for multi-digit numbers', function () {
|
||||||
|
_expect.expect(_M2['default'].solve('12+15')).to.equal(27);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Precedence', function () {
|
||||||
|
it('Test case 1', function () {
|
||||||
|
_expect.expect(_M2['default'].solve('2+(2+1)*(1+1)^2')).to.equal(14);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Test case 2', function () {
|
||||||
|
_expect.expect(_M2['default'].solve('2+5*4/2-2')).to.equal(10);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Test case 3', function () {
|
||||||
|
_expect.expect(_M2['default'].solve('2+(5*4/2)-2')).to.equal(10);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Test case 4', function () {
|
||||||
|
_expect.expect(_M2['default'].solve('(2+2)^2+(5+1)*4+(2+(4/2)/2)')).to.equal(16 + 24 + 3);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Functions', function () {
|
||||||
|
it('should work for with parantheses', function () {
|
||||||
|
_expect.expect(_M2['default'].solve('lg(4) * 5')).to.equal(10);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work for without parantheses', function () {
|
||||||
|
_expect.expect(_M2['default'].solve('lg4 * 5')).to.equal(10);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('Constats', function () {
|
||||||
|
it('should work for constant values', function () {
|
||||||
|
_expect.expect(_M2['default'].solve('sin(PI/2)')).to.equal(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should work for functions as constants', function () {
|
||||||
|
_expect.expect(_M2['default'].solve('RAND')).to.not.equal(_M2['default'].solve('RAND'));
|
||||||
|
});
|
||||||
|
});
|
35
dist/tests/simplify.js
vendored
35
dist/tests/simplify.js
vendored
@ -1,35 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; };
|
|
||||||
|
|
||||||
var _expect = require('chai');
|
|
||||||
|
|
||||||
var _M = require('../index.js');
|
|
||||||
|
|
||||||
var _M2 = _interopRequireWildcard(_M);
|
|
||||||
|
|
||||||
describe('Simplify simple math expressions', function () {
|
|
||||||
it('should work for add +', function () {
|
|
||||||
_expect.expect(_M2['default'].simplify('2+2-1')).to.equal('3');
|
|
||||||
});
|
|
||||||
//
|
|
||||||
// it('should work for minus -', () => {
|
|
||||||
// expect(M.solve('15-3')).to.equal(12);
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// it('should work for divison /', () => {
|
|
||||||
// expect(M.solve('20/2')).to.equal(10);
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// it('should work for multiplication *', () => {
|
|
||||||
// expect(M.solve('6*3')).to.equal(18);
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// it('should work for power ^', () => {
|
|
||||||
// expect(M.solve('5^2')).to.equal(25);
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// it('should work for multi-digit numbers', () => {
|
|
||||||
// expect(M.solve('12+15')).to.equal(27);
|
|
||||||
// });
|
|
||||||
});
|
|
@ -74,5 +74,5 @@ export const flatten = (arr) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const removeSymbols = string => {
|
export const removeSymbols = string => {
|
||||||
return string.toString().replace(/\W/g, '');
|
return string.replace(/\W/g, '');
|
||||||
};
|
};
|
||||||
|
36
lib/index.js
36
lib/index.js
@ -30,7 +30,6 @@ let Equation = {
|
|||||||
|
|
||||||
return stack;
|
return stack;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an equation function which replaces variables
|
* Creates an equation function which replaces variables
|
||||||
* in the given expression with the values specified in order,
|
* in the given expression with the values specified in order,
|
||||||
@ -50,7 +49,9 @@ let Equation = {
|
|||||||
let variables = [];
|
let variables = [];
|
||||||
|
|
||||||
stack.forEach(a => {
|
stack.forEach(a => {
|
||||||
if (isVariable(a)) {
|
if (typeof a === 'string' && !_.isNumber(a) &&
|
||||||
|
!operators[a] && a === a.toLowerCase()) {
|
||||||
|
// grouped variables like (y) need to have their parantheses removed
|
||||||
variables.push(_.removeSymbols(a));
|
variables.push(_.removeSymbols(a));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -68,31 +69,6 @@ let Equation = {
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
* Simplifies a math expression
|
|
||||||
*
|
|
||||||
* Example:
|
|
||||||
* 2*x^2 + x - 2*x - x^2
|
|
||||||
* becomes
|
|
||||||
* x^2 - x
|
|
||||||
*
|
|
||||||
* @param {String} expression
|
|
||||||
* The expression to create an equation for (containing variables)
|
|
||||||
* @return {String}
|
|
||||||
* The simplified expression
|
|
||||||
*/
|
|
||||||
simplify(expression) {
|
|
||||||
let stack = parseExpression(expression);
|
|
||||||
stack = sortStack(stack);
|
|
||||||
stack = _.parseNumbers(stack);
|
|
||||||
|
|
||||||
console.dir(stack, {
|
|
||||||
depth: null
|
|
||||||
});
|
|
||||||
|
|
||||||
return expression;
|
|
||||||
},
|
|
||||||
|
|
||||||
registerOperator(key, options) {
|
registerOperator(key, options) {
|
||||||
operators[key] = options;
|
operators[key] = options;
|
||||||
},
|
},
|
||||||
@ -166,12 +142,6 @@ const parseExpression = expression => {
|
|||||||
return parseGroups(stack);
|
return parseGroups(stack);
|
||||||
};
|
};
|
||||||
|
|
||||||
const isVariable = char => {
|
|
||||||
let ch = _.removeSymbols(char);
|
|
||||||
return typeof ch === 'string' && !_.isNumber(ch) &&
|
|
||||||
!operators[ch] && char === ch.toLowerCase();
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Takes the parsed array from parseExpression and
|
* Takes the parsed array from parseExpression and
|
||||||
* groups up expressions in parantheses in deep arrays
|
* groups up expressions in parantheses in deep arrays
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
import {expect} from 'chai';
|
|
||||||
import M from '../index.js';
|
|
||||||
|
|
||||||
describe('Simplify simple math expressions', () => {
|
|
||||||
it('should work for add +', () => {
|
|
||||||
expect(M.simplify('2+2-1')).to.equal('3');
|
|
||||||
});
|
|
||||||
//
|
|
||||||
// it('should work for minus -', () => {
|
|
||||||
// expect(M.solve('15-3')).to.equal(12);
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// it('should work for divison /', () => {
|
|
||||||
// expect(M.solve('20/2')).to.equal(10);
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// it('should work for multiplication *', () => {
|
|
||||||
// expect(M.solve('6*3')).to.equal(18);
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// it('should work for power ^', () => {
|
|
||||||
// expect(M.solve('5^2')).to.equal(25);
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// it('should work for multi-digit numbers', () => {
|
|
||||||
// expect(M.solve('12+15')).to.equal(27);
|
|
||||||
// });
|
|
||||||
});
|
|
Loading…
x
Reference in New Issue
Block a user