mirror of
https://github.com/nspcc-dev/neo-go.git
synced 2024-12-29 09:27:36 +00:00
146 lines
2 KiB
Go
146 lines
2 KiB
Go
package compiler_test
|
|
|
|
import (
|
|
"math/big"
|
|
"testing"
|
|
)
|
|
|
|
var sliceTestCases = []testCase{
|
|
{
|
|
"constant index",
|
|
`
|
|
package foo
|
|
func Main() int {
|
|
a := []int{0,0}
|
|
a[1] = 42
|
|
return a[1]+0
|
|
}
|
|
`,
|
|
big.NewInt(42),
|
|
},
|
|
{
|
|
"variable index",
|
|
`
|
|
package foo
|
|
func Main() int {
|
|
a := []int{0,0}
|
|
i := 1
|
|
a[i] = 42
|
|
return a[1]+0
|
|
}
|
|
`,
|
|
big.NewInt(42),
|
|
},
|
|
{
|
|
"complex test",
|
|
`
|
|
package foo
|
|
func Main() int {
|
|
a := []int{1,2,3}
|
|
x := a[0]
|
|
a[x] = a[x] + 4
|
|
a[x] = a[x] + a[2]
|
|
return a[1]
|
|
}
|
|
`,
|
|
big.NewInt(9),
|
|
},
|
|
{
|
|
"slice literals with variables",
|
|
`
|
|
package foo
|
|
func Main() int {
|
|
elem := 7
|
|
a := []int{6, elem, 8}
|
|
return a[1]
|
|
}
|
|
`,
|
|
big.NewInt(7),
|
|
},
|
|
{
|
|
"slice literals with expressions",
|
|
`
|
|
package foo
|
|
func Main() int {
|
|
elem := []int{3, 7}
|
|
a := []int{6, elem[1]*2+1, 24}
|
|
return a[1]
|
|
}
|
|
`,
|
|
big.NewInt(15),
|
|
},
|
|
{
|
|
"sub-slice with literal bounds",
|
|
`
|
|
package foo
|
|
func Main() []byte {
|
|
a := []byte{0, 1, 2, 3}
|
|
b := a[1:3]
|
|
return b
|
|
}`,
|
|
[]byte{1, 2},
|
|
},
|
|
{
|
|
"sub-slice with constant bounds",
|
|
`
|
|
package foo
|
|
const x = 1
|
|
const y = 3
|
|
func Main() []byte {
|
|
a := []byte{0, 1, 2, 3}
|
|
b := a[x:y]
|
|
return b
|
|
}`,
|
|
[]byte{1, 2},
|
|
},
|
|
{
|
|
"sub-slice with variable bounds",
|
|
`
|
|
package foo
|
|
func Main() []byte {
|
|
a := []byte{0, 1, 2, 3}
|
|
x := 1
|
|
y := 3
|
|
b := a[x:y]
|
|
return b
|
|
}`,
|
|
[]byte{1, 2},
|
|
},
|
|
{
|
|
"sub-slice with no lower bound",
|
|
`
|
|
package foo
|
|
func Main() []byte {
|
|
a := []byte{0, 1, 2, 3}
|
|
b := a[:3]
|
|
return b
|
|
}`,
|
|
[]byte{0, 1, 2},
|
|
},
|
|
{
|
|
"sub-slice with no upper bound",
|
|
`
|
|
package foo
|
|
func Main() []byte {
|
|
a := []byte{0, 1, 2, 3}
|
|
b := a[2:]
|
|
return b
|
|
}`,
|
|
[]byte{2, 3},
|
|
},
|
|
}
|
|
|
|
func TestSliceOperations(t *testing.T) {
|
|
runTestCases(t, sliceTestCases)
|
|
}
|
|
|
|
func TestJumps(t *testing.T) {
|
|
src := `
|
|
package foo
|
|
func Main() []byte {
|
|
buf := []byte{0x62, 0x01, 0x00}
|
|
return buf
|
|
}
|
|
`
|
|
eval(t, src, []byte{0x62, 0x01, 0x00})
|
|
}
|