compiler: support for-range loops
This commit is contained in:
parent
bcff9faac4
commit
310f7449d7
2 changed files with 122 additions and 0 deletions
|
@ -2,9 +2,13 @@ package compiler_test
|
|||
|
||||
import (
|
||||
"math/big"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/CityOfZion/neo-go/pkg/compiler"
|
||||
|
||||
"github.com/CityOfZion/neo-go/pkg/vm"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestEntryPointWithMethod(t *testing.T) {
|
||||
|
@ -397,3 +401,82 @@ func TestForLoopNoPost(t *testing.T) {
|
|||
`
|
||||
eval(t, src, big.NewInt(10))
|
||||
}
|
||||
|
||||
func TestForLoopRange(t *testing.T) {
|
||||
src := `
|
||||
package foo
|
||||
func Main() int {
|
||||
sum := 0
|
||||
arr := []int{1, 2, 3}
|
||||
for i := range arr {
|
||||
sum += arr[i]
|
||||
}
|
||||
return sum
|
||||
}`
|
||||
|
||||
eval(t, src, big.NewInt(6))
|
||||
}
|
||||
|
||||
func TestForLoopRangeGlobalIndex(t *testing.T) {
|
||||
src := `
|
||||
package foo
|
||||
func Main() int {
|
||||
sum := 0
|
||||
i := 0
|
||||
arr := []int{1, 2, 3}
|
||||
for i = range arr {
|
||||
sum += arr[i]
|
||||
}
|
||||
return sum + i
|
||||
}`
|
||||
|
||||
eval(t, src, big.NewInt(8))
|
||||
}
|
||||
|
||||
func TestForLoopRangeChangeVariable(t *testing.T) {
|
||||
src := `
|
||||
package foo
|
||||
func Main() int {
|
||||
sum := 0
|
||||
arr := []int{1, 2, 3}
|
||||
for i := range arr {
|
||||
sum += arr[i]
|
||||
i++
|
||||
sum += i
|
||||
}
|
||||
return sum
|
||||
}`
|
||||
|
||||
eval(t, src, big.NewInt(12))
|
||||
}
|
||||
|
||||
func TestForLoopRangeNoVariable(t *testing.T) {
|
||||
src := `
|
||||
package foo
|
||||
func Main() int {
|
||||
sum := 0
|
||||
arr := []int{1, 2, 3}
|
||||
for range arr {
|
||||
sum += 1
|
||||
}
|
||||
return sum
|
||||
}`
|
||||
|
||||
eval(t, src, big.NewInt(3))
|
||||
}
|
||||
|
||||
func TestForLoopRangeCompilerError(t *testing.T) {
|
||||
src := `
|
||||
package foo
|
||||
func f(a int) int { return 0 }
|
||||
func Main() int {
|
||||
arr := []int{1, 2, 3}
|
||||
for _, v := range arr {
|
||||
f(v)
|
||||
}
|
||||
return 0
|
||||
}`
|
||||
|
||||
_, err := compiler.Compile(strings.NewReader(src))
|
||||
require.Error(t, err)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue