| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- const calculator = require('./calculator.js');
- const tests = require('./test_cases.js');
- const {handlePrecision} = require('./utils.js');
- const parser = new calculator.Parser();
- function calc(exp, isDeg = false) {
- exp = exp.replace(/E/g, 'e');
- exp = exp.replace(/\be\b/g, 'Math.E');
- parser.parse(`isDeg(${isDeg * 1})`);
- const stack = [];
- let res = [];
- for (let i = 0; i < exp.length; i++) {
- const val = exp[i];
- if (val !== ')') {
- stack.push(val);
- } else {
- let v = stack.pop();
- while (v !== '(') {
- res.unshift(v);
- v = stack.pop();
- }
- stack.push(' ');
- const resNum = res.join('');
- if (res.length === 1 || !isNaN(resNum)) {
- stack.push(resNum);
- } else {
- stack.push(parser.parse(resNum) + '');
- }
- res = [];
- }
- }
- return handlePrecision(parser.parse(stack.join('')));
- }
- tests.forEach(v => {
- test(`isDeg=${v.isDeg ? 1: 0} ${v.value} = ${v.result}`, () => {
- expect(calc(v.value, v.isDeg)).toBe(String(v.result));
- });
- });
|