forked from TrueCloudLab/neoneo-go
233307aca5
Turns out C# VM doesn't have it since preview2, so our limiting of MaxArraySize in incompatible with it. Removing this limit shouldn't be a problem with the reference counter we have, both APPEND and SETITEM add things to reference counter and we can't exceed MaxStackSize. PACK on the other hand can't get more than MaxStackSize-1 of input elements. Unify NEWSTRUCT with NEWARRAY* and use better integer checks at the same time. Multisig limit is still 1024.
160 lines
1.8 KiB
Go
160 lines
1.8 KiB
Go
package compiler_test
|
|
|
|
import (
|
|
"math/big"
|
|
"testing"
|
|
)
|
|
|
|
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 < 1024; i++ {
|
|
src1 += "a += 1\n"
|
|
}
|
|
|
|
eval(t, src1+src2, big.NewInt(1024))
|
|
}
|