Added more tests
This commit is contained in:
parent
a42115c0fb
commit
04ece57b27
7
examples/shell/const.q
Normal file
7
examples/shell/const.q
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
const idtype {
|
||||||
|
pid 1
|
||||||
|
}
|
||||||
|
|
||||||
|
const state {
|
||||||
|
exited 0x4
|
||||||
|
}
|
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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 {
|
|
||||||
start = i + 1
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
switch t.Kind {
|
switch t.Kind {
|
||||||
case token.NewLine:
|
case token.NewLine:
|
||||||
|
if start == i {
|
||||||
|
start = i + 1
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if groupLevel > 0 || blockLevel > 0 {
|
if groupLevel > 0 || blockLevel > 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user