114 lines
2.2 KiB
TypeScript
114 lines
2.2 KiB
TypeScript
import { calc, tokenize } from './solution';
|
|
import { expect } from "chai";
|
|
|
|
var tests: [string, number][] = [
|
|
['1+1', 2],
|
|
['1 - 1', 0],
|
|
['1* 1', 1],
|
|
['1 /1', 1],
|
|
['-123', -123],
|
|
['123', 123],
|
|
['2 /2+3 * 4.75- -6', 21.25],
|
|
['12* 123', 1476],
|
|
['2 / (2 + 3) * 4.33 - -6', 7.732],
|
|
];
|
|
|
|
describe("calc", function () {
|
|
it("should evaluate correctly", () => {
|
|
tests.forEach(function (m) {
|
|
var x = calc(m[0]);
|
|
var y = m[1];
|
|
expect(x).to.equal(y, 'Expected: "' + m[0] + '" to be ' + y + ' but got ' + x);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("tokenize", function () {
|
|
it("should tokenize correctly", () => {
|
|
expect(tokenize('1 + 1')).to.deep.equal([{
|
|
type: 'number',
|
|
value: '1'
|
|
}, {
|
|
type: 'operator',
|
|
value: '+'
|
|
}, {
|
|
type: 'number',
|
|
value: '1'
|
|
}]);
|
|
expect(tokenize('1 - 1')).to.deep.equal([{
|
|
type: 'number',
|
|
value: '1'
|
|
}, {
|
|
type: 'operator',
|
|
value: '-'
|
|
}, {
|
|
type: 'number',
|
|
value: '1'
|
|
}]);
|
|
expect(tokenize('1 * 1')).to.deep.equal([{
|
|
type: 'number',
|
|
value: '1'
|
|
}, {
|
|
type: 'operator',
|
|
value: '*'
|
|
}, {
|
|
type: 'number',
|
|
value: '1'
|
|
}]);
|
|
expect(tokenize('1 / 1')).to.deep.equal([{
|
|
type: 'number',
|
|
value: '1'
|
|
}, {
|
|
type: 'operator',
|
|
value: '/'
|
|
}, {
|
|
type: 'number',
|
|
value: '1'
|
|
}]);
|
|
expect(tokenize('-3.1415')).to.deep.equal([{
|
|
type: 'operator',
|
|
value: '-'
|
|
}, {
|
|
type: 'number',
|
|
value: '3'
|
|
}, {
|
|
type: 'decimal',
|
|
value: '.'
|
|
}, {
|
|
type: 'number',
|
|
value: '1415'
|
|
}]);
|
|
expect(tokenize('3.1415')).to.deep.equal([{
|
|
type: 'number',
|
|
value: '3'
|
|
}, {
|
|
type: 'decimal',
|
|
value: '.'
|
|
}, {
|
|
type: 'number',
|
|
value: '1415'
|
|
}]);
|
|
expect(tokenize('(3 + 5) / 3')).to.deep.equal([{
|
|
type: 'parenthesis',
|
|
value: '('
|
|
}, {
|
|
type: 'number',
|
|
value: '3'
|
|
}, {
|
|
type: 'operator',
|
|
value: '+'
|
|
}, {
|
|
type: 'number',
|
|
value: '5'
|
|
}, {
|
|
type: 'parenthesis',
|
|
value: ')'
|
|
}, {
|
|
type: 'operator',
|
|
value: '/'
|
|
}, {
|
|
type: 'number',
|
|
value: '3'
|
|
}]);
|
|
});
|
|
}); |