From 04ece57b279274006f49caf87a44adf787144bb2 Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Fri, 21 Feb 2025 11:45:32 +0100 Subject: [PATCH] Added more tests --- examples/shell/const.q | 7 ++++++ examples/shell/shell.q | 8 ------- src/ast/ast_test.go | 47 ++++++++++++++++++++++++++------------ src/ast/eachInstruction.go | 10 ++++---- 4 files changed, 44 insertions(+), 28 deletions(-) create mode 100644 examples/shell/const.q diff --git a/examples/shell/const.q b/examples/shell/const.q new file mode 100644 index 0000000..4f7eed7 --- /dev/null +++ b/examples/shell/const.q @@ -0,0 +1,7 @@ +const idtype { + pid 1 +} + +const state { + exited 0x4 +} \ No newline at end of file diff --git a/examples/shell/shell.q b/examples/shell/shell.q index f484486..f5680d6 100644 --- a/examples/shell/shell.q +++ b/examples/shell/shell.q @@ -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) diff --git a/src/ast/ast_test.go b/src/ast/ast_test.go index c7307a4..621ab6e 100644 --- a/src/ast/ast_test.go +++ b/src/ast/ast_test.go @@ -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) diff --git a/src/ast/eachInstruction.go b/src/ast/eachInstruction.go index e4df0e2..b593ebc 100644 --- a/src/ast/eachInstruction.go +++ b/src/ast/eachInstruction.go @@ -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 { - start = i + 1 - continue - } - switch t.Kind { case token.NewLine: + if start == i { + start = i + 1 + continue + } + if groupLevel > 0 || blockLevel > 0 { continue }