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 mem
import sys import sys
const idtype {
pid 1
}
const state {
exited 0x4
}
main() { main() {
length := 256 length := 256
command := mem.alloc(length) command := mem.alloc(length)

View File

@ -20,23 +20,15 @@ func TestAssign(t *testing.T) {
assert.NotNil(t, assignment.Expression) assert.NotNil(t, assignment.Expression)
} }
func TestReturn(t *testing.T) { func TestGroups(t *testing.T) {
tree, err := parse("return") tree, err := parse("f(\nx\n)\ng(\nx\n)")
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, len(tree), 1) assert.Equal(t, len(tree), 2)
ret := tree[0].(*ast.Return) f := tree[0].(*ast.Call)
assert.Nil(t, ret.Values) assert.NotNil(t, f.Expression)
} g := tree[1].(*ast.Call)
assert.NotNil(t, g.Expression)
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) { func TestIfElse(t *testing.T) {
@ -56,6 +48,31 @@ func TestLoop(t *testing.T) {
assert.Equal(t, len(tree), 1) 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) { func parse(code string) (ast.AST, error) {
src := []byte(code) src := []byte(code)
tokens := token.Tokenize(src) tokens := token.Tokenize(src)

View File

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