diff --git a/parser/parser.test.ts b/parser/parser.test.ts index f344129..b908f34 100644 --- a/parser/parser.test.ts +++ b/parser/parser.test.ts @@ -10,7 +10,7 @@ import { Percentage, Unary, Value, - Variable + Variable, } from '../nodes' import {lex, Token} from './lex' import {parse} from './parser' @@ -47,15 +47,15 @@ function cur(s: string): Currency { let cases: [string, Node, Varname[]?][] = [ [ '', - new Nil() + new Nil(), ], [ '1 + 2', - new Binary(op('+'), new Value(n(1)), new Value(n(2))) + new Binary(op('+'), new Value(n(1)), new Value(n(2))), ], [ '1 + - 2', - new Binary(op('+'), new Value(n(1)), new Unary(op('-'), new Value(n(2)))) + new Binary(op('+'), new Value(n(1)), new Unary(op('-'), new Value(n(2)))), ], [ '1-2+3', @@ -63,7 +63,7 @@ let cases: [string, Node, Varname[]?][] = [ new Binary(op('-'), new Value(n(1)), new Value(n(2))), - new Value(n(3))) + new Value(n(3))), ], [ '1+2*3', @@ -71,7 +71,7 @@ let cases: [string, Node, Varname[]?][] = [ new Value(n(1)), new Binary(op('*'), new Value(n(2)), - new Value(n(3)))) + new Value(n(3)))), ], [ '1/2+3*4', @@ -81,7 +81,7 @@ let cases: [string, Node, Varname[]?][] = [ new Value(n(2))), new Binary(op('*'), new Value(n(3)), - new Value(n(4)))) + new Value(n(4)))), ], [ '(1+2)*3', @@ -89,19 +89,23 @@ let cases: [string, Node, Varname[]?][] = [ new Binary(op('+'), new Value(n(1)), new Value(n(2))), - new Value(n(3))) + new Value(n(3))), ], [ '0.05', - new Value(n(0.05)) + new Value(n(0.05)), ], [ '-+0', - new Unary(op('-'), new Unary(op('+'), new Value(n(0)))) + new Unary(op('-'), new Unary(op('+'), new Value(n(0)))), + ], + [ + 'some-thing is -5', + new Unary(op('-'), new Unary(op('-'), new Value(n(5)))), ], [ '1 % 2%', - new Binary(op('%'), new Value(n(1)), new Percentage(p('2%'))) + new Binary(op('%'), new Value(n(1)), new Percentage(p('2%'))), ], [ '(1 - ', @@ -121,31 +125,31 @@ let cases: [string, Node, Varname[]?][] = [ ], [ '1 % ƒы2', - new Binary(op('%'), new Value(n(1)), new Variable(v('ƒы2'))) + new Binary(op('%'), new Value(n(1)), new Variable(v('ƒы2'))), ], [ '1 ^ 2', - new Binary(op('^'), new Value(n(1)), new Value(n(2))) + new Binary(op('^'), new Value(n(1)), new Value(n(2))), ], [ '1usd', - new Value(n(1), cur('usd')) + new Value(n(1), cur('usd')), ], [ '1 usd', - new Value(n(1), cur('usd')) + new Value(n(1), cur('usd')), ], [ 'USD 1', - new Value(n(1), cur('USD')) + new Value(n(1), cur('USD')), ], [ '$1', - new Value(n(1), cur('$')) + new Value(n(1), cur('$')), ], [ '1$', - new Value(n(1), cur('$')) + new Value(n(1), cur('$')), ], [ '1 usd in rub', @@ -165,7 +169,7 @@ let cases: [string, Node, Varname[]?][] = [ ], [ '7% of $1k 2019', - new Fraction(op('of'), new Percentage(p('7%')), new Value(n('1k'), cur('$'))) + new Fraction(op('of'), new Percentage(p('7%')), new Value(n('1k'), cur('$'))), ], [ '1 btc in usd / 10 users', @@ -173,7 +177,7 @@ let cases: [string, Node, Varname[]?][] = [ new Conversion(op('in'), new Value(n('1'), cur('btc')), cur('usd')), - new Value(n('10'))) + new Value(n('10'))), ], [ '1 + 1 btc in usd x 10 users', @@ -183,11 +187,11 @@ let cases: [string, Node, Varname[]?][] = [ new Value(n('1')), new Value(n('1'), cur('btc'))), cur('usd')), - new Value(n('10'))) + new Value(n('10'))), ], [ '2×2', - new Binary(op('×'), new Value(n(2)), new Value(n(2))) + new Binary(op('×'), new Value(n(2)), new Value(n(2))), ], [ 'var = 1', @@ -197,27 +201,27 @@ let cases: [string, Node, Varname[]?][] = [ ], [ 'Yearly price = 10k', - new Assignment(op('='), v('Yearly price'), new Value(n('10k'))) + new Assignment(op('='), v('Yearly price'), new Value(n('10k'))), ], [ 'soft_limit = 100M', - new Assignment(op('='), v('soft_limit'), new Value(n('100M'))) + new Assignment(op('='), v('soft_limit'), new Value(n('100M'))), ], [ 'a b + a b c', new Binary(op('+'), new Variable(v('a b')), new Variable(v('a b c'))), - ['a b' as Varname, 'a b c' as Varname] + ['a b' as Varname, 'a b c' as Varname], ], ] for (let [expr, ast, vars] of cases) { test('parse ' + expr, t => { - let [node,] = parse(lex(expr, vars)) + let [node] = parse(lex(expr, vars)) t.is( JSON.stringify(node, replacer, 4), - JSON.stringify(ast, replacer, 4) + JSON.stringify(ast, replacer, 4), ) }) }