Added more tests

This commit is contained in:
Eduard Urbach 2025-02-20 15:06:22 +01:00
parent b655950516
commit 9779476fe7
Signed by: akyoto
GPG Key ID: C874F672B1AF20C0
2 changed files with 72 additions and 1 deletions

64
src/ast/ast_test.go Normal file
View File

@ -0,0 +1,64 @@
package ast_test
import (
"testing"
"git.akyoto.dev/cli/q/src/ast"
"git.akyoto.dev/cli/q/src/fs"
"git.akyoto.dev/cli/q/src/token"
"git.akyoto.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 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 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 parse(code string) (ast.AST, error) {
src := []byte(code)
tokens := token.Tokenize(src)
file := &fs.File{Bytes: src, Tokens: tokens}
return ast.Parse(tokens, file)
}

View File

@ -51,10 +51,17 @@ func eachInstruction(tokens token.List, call func(token.List) error) error {
}
start = i + 1
case token.EOF:
if start < i {
return call(tokens[start:i])
}
return nil
}
}
if start != len(tokens) {
if start < len(tokens) {
return call(tokens[start:])
}