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`) }) })