Added more tests

This commit is contained in:
Eduard Urbach 2025-02-21 11:45:32 +01:00
parent a42115c0fb
commit 04ece57b27
Signed by: akyoto
GPG Key ID: C874F672B1AF20C0
4 changed files with 44 additions and 28 deletions

7
examples/shell/const.q Normal file
View File

@ -0,0 +1,7 @@
const idtype {
pid 1
}
const state {
exited 0x4
}

View File

@ -2,14 +2,6 @@ import io
import mem
import sys
const idtype {
pid 1
}
const state {
exited 0x4
}
main() {
length := 256
command := mem.alloc(length)

View File

@ -20,23 +20,15 @@ func TestAssign(t *testing.T) {
assert.NotNil(t, assignment.Expression)
}
func TestReturn(t *testing.T) {
tree, err := parse("return")
func TestGroups(t *testing.T) {
tree, err := parse("f(\nx\n)\ng(\nx\n)")
assert.Nil(t, err)
assert.Equal(t, len(tree), 1)
assert.Equal(t, len(tree), 2)
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)
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) {
@ -56,6 +48,31 @@ func TestLoop(t *testing.T) {
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)
tokens := token.Tokenize(src)

View File

@ -9,13 +9,13 @@ func eachInstruction(tokens token.List, call func(token.List) error) error {
blockLevel := 0
for i, t := range tokens {
if start == i && t.Kind == token.NewLine {
switch t.Kind {
case token.NewLine:
if start == i {
start = i + 1
continue
}
switch t.Kind {
case token.NewLine:
if groupLevel > 0 || blockLevel > 0 {
continue
}