neoneo-go/pkg/compiler/assign_test.go
2020-08-24 09:44:44 +03:00

162 lines
1.9 KiB
Go

package compiler_test
import (
"math/big"
"testing"
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
)
var assignTestCases = []testCase{
{
"chain define",
`
package foo
func Main() int {
x := 4
y := x
z := y
foo := z
bar := foo
return bar
}
`,
big.NewInt(4),
},
{
"simple assign",
`
package foo
func Main() int {
x := 4
x = 8
return x
}
`,
big.NewInt(8),
},
{
"add assign",
`
package foo
func Main() int {
x := 4
x += 8
return x
}
`,
big.NewInt(12),
},
{
"sub assign",
`
package foo
func Main() int {
x := 4
x -= 2
return x
}
`,
big.NewInt(2),
},
{
"mul assign",
`
package foo
func Main() int {
x := 4
x *= 2
return x
}
`,
big.NewInt(8),
},
{
"div assign",
`
package foo
func Main() int {
x := 4
x /= 2
return x
}
`,
big.NewInt(2),
},
{
"add assign binary expr",
`
package foo
func Main() int {
x := 4
x += 6 + 2
return x
}
`,
big.NewInt(12),
},
{
"add assign binary expr ident",
`
package foo
func Main() int {
x := 4
y := 5
x += 6 + y
return x
}
`,
big.NewInt(15),
},
{
"add assign for string",
`package foo
func Main() string {
s := "Hello, "
s += "world!"
return s
}`,
[]byte("Hello, world!"),
},
{
"decl assign",
`
package foo
func Main() int {
var x int = 4
return x
}
`,
big.NewInt(4),
},
{
"multi assign",
`
package foo
func Main() int {
x, y := 1, 2
return x + y
}
`,
big.NewInt(3),
},
}
func TestAssignments(t *testing.T) {
runTestCases(t, assignTestCases)
}
func TestManyAssignments(t *testing.T) {
src1 := `package foo
func Main() int {
a := 0
`
src2 := `return a
}`
for i := 0; i < stackitem.MaxArraySize; i++ {
src1 += "a += 1\n"
}
eval(t, src1+src2, big.NewInt(stackitem.MaxArraySize))
}