73 lines
1.5 KiB
TypeScript
73 lines
1.5 KiB
TypeScript
import { expect, describe, test } from 'bun:test'
|
|
|
|
import '../shrimp.grammar' // Importing this so changes cause it to retest!
|
|
|
|
describe('bitwise operators - grammar', () => {
|
|
test('parses band (bitwise AND)', () => {
|
|
expect('5 band 3').toMatchTree(`
|
|
BinOp
|
|
Number 5
|
|
Band band
|
|
Number 3`)
|
|
})
|
|
|
|
test('parses bor (bitwise OR)', () => {
|
|
expect('5 bor 3').toMatchTree(`
|
|
BinOp
|
|
Number 5
|
|
Bor bor
|
|
Number 3`)
|
|
})
|
|
|
|
test('parses bxor (bitwise XOR)', () => {
|
|
expect('5 bxor 3').toMatchTree(`
|
|
BinOp
|
|
Number 5
|
|
Bxor bxor
|
|
Number 3`)
|
|
})
|
|
|
|
test('parses << (left shift)', () => {
|
|
expect('5 << 2').toMatchTree(`
|
|
BinOp
|
|
Number 5
|
|
Shl <<
|
|
Number 2`)
|
|
})
|
|
|
|
test('parses >> (signed right shift)', () => {
|
|
expect('20 >> 2').toMatchTree(`
|
|
BinOp
|
|
Number 20
|
|
Shr >>
|
|
Number 2`)
|
|
})
|
|
|
|
test('parses >>> (unsigned right shift)', () => {
|
|
expect('-1 >>> 1').toMatchTree(`
|
|
BinOp
|
|
Number -1
|
|
Ushr >>>
|
|
Number 1`)
|
|
})
|
|
|
|
test('parses bnot (bitwise NOT) as function call', () => {
|
|
expect('bnot 5').toMatchTree(`
|
|
FunctionCall
|
|
Identifier bnot
|
|
PositionalArg
|
|
Number 5`)
|
|
})
|
|
|
|
test('bitwise operators work in expressions', () => {
|
|
expect('x = 5 band 3').toMatchTree(`
|
|
Assign
|
|
AssignableIdentifier x
|
|
Eq =
|
|
BinOp
|
|
Number 5
|
|
Band band
|
|
Number 3`)
|
|
})
|
|
})
|