Skip to content

Commit

Permalink
Add strange unary test
Browse files Browse the repository at this point in the history
  • Loading branch information
antonmedv committed Jul 28, 2023
1 parent 1a01050 commit 9ad5953
Showing 1 changed file with 31 additions and 27 deletions.
58 changes: 31 additions & 27 deletions parser/parser.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
Percentage,
Unary,
Value,
Variable
Variable,
} from '../nodes'
import {lex, Token} from './lex'
import {parse} from './parser'
Expand Down Expand Up @@ -47,31 +47,31 @@ 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',
new Binary(op('+'),
new Binary(op('-'),
new Value(n(1)),
new Value(n(2))),
new Value(n(3)))
new Value(n(3))),
],
[
'1+2*3',
new Binary(op('+'),
new Value(n(1)),
new Binary(op('*'),
new Value(n(2)),
new Value(n(3))))
new Value(n(3)))),
],
[
'1/2+3*4',
Expand All @@ -81,27 +81,31 @@ 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',
new Binary(op('*'),
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 - ',
Expand All @@ -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',
Expand All @@ -165,15 +169,15 @@ 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',
new Binary(op('/'),
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',
Expand All @@ -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',
Expand All @@ -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),
)
})
}
Expand Down

0 comments on commit 9ad5953

Please sign in to comment.