Something went wrong. Try again.
🌱 A minimal programming language and compiler. git.urbach.dev/cli/q
high-performance programming-language compiler
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980package ast_test
import ( "testing"
"git.urbach.dev/cli/q/src/ast" "git.urbach.dev/cli/q/src/fs" "git.urbach.dev/cli/q/src/token" "git.urbach.dev/go/assert")
func TestAssign(t *testing.T) { tree, err := parse("a := 0\na = 0") assert.Nil(t, err) assert.Equal(t, len(tree), 2)
definition := tree[0].(*ast.Define) assignment := tree[1].(*ast.Assign) assert.NotNil(t, definition.Expression) assert.NotNil(t, assignment.Expression)}
func TestGroups(t *testing.T) { tree, err := parse("f(\nx\n)\ng(\nx\n)") assert.Nil(t, err) assert.Equal(t, len(tree), 2)
f := tree[0].(*ast.Call) assert.NotNil(t, f.Expression) g := tree[1].(*ast.Call) assert.NotNil(t, g.Expression)}
func TestIfElse(t *testing.T) { tree, err := parse("if x == 0 {} else {}") assert.Nil(t, err) assert.Equal(t, len(tree), 1)
branch := tree[0].(*ast.If) assert.NotNil(t, branch.Condition) assert.NotNil(t, branch.Body) assert.NotNil(t, branch.Else)}
func TestLoop(t *testing.T) { tree, err := parse("loop{}") assert.Nil(t, err) assert.Equal(t, len(tree), 1)}
func TestNewLine(t *testing.T) { tree, err := parse("\n\n\n") assert.Nil(t, err) assert.Equal(t, len(tree), 0)}
func TestReturn(t *testing.T) { tree, err := parse("return") assert.Nil(t, err) assert.Equal(t, len(tree), 1)
ret := tree[0].(*ast.Return) assert.Nil(t, ret.Values)}
func TestReturnValues(t *testing.T) { tree, err := parse("return 42") assert.Nil(t, err) assert.Equal(t, len(tree), 1)
ret := tree[0].(*ast.Return) assert.Equal(t, len(ret.Values), 1) assert.Equal(t, ret.Values[0].Token.Kind, token.Number)}
func parse(code string) (ast.AST, error) { src := []byte(code) file := fs.NewFile("", "", src) return ast.Parse(file.Tokens, file)}