neoneo-go/pkg/core/interop/iterator/interop_test.go

52 lines
1.2 KiB
Go
Raw Normal View History

package iterator
import (
"math/big"
"testing"
"github.com/nspcc-dev/neo-go/pkg/core/interop"
"github.com/nspcc-dev/neo-go/pkg/vm"
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
"github.com/stretchr/testify/require"
)
type testIter struct {
index int
arr []int
}
func (t *testIter) Next() bool {
if t.index < len(t.arr) {
t.index++
}
return t.index < len(t.arr)
}
func (t testIter) Value() stackitem.Item {
return stackitem.NewBigInteger(big.NewInt(int64(t.arr[t.index])))
}
// Iterator is thoroughly tested in VM package, these are smoke tests.
func TestIterator(t *testing.T) {
ic := &interop.Context{VM: vm.New()}
full := []int{4, 8, 15}
ic.VM.Estack().PushVal(stackitem.NewInterop(&testIter{index: -1, arr: full}))
res := ic.VM.Estack().Pop().Item()
for i := range full {
ic.VM.Estack().PushVal(res)
require.NoError(t, Next(ic))
require.True(t, ic.VM.Estack().Pop().Bool())
ic.VM.Estack().PushVal(res)
require.NoError(t, Value(ic))
value := ic.VM.Estack().Pop().Item().Value()
require.Equal(t, big.NewInt(int64(full[i])), value)
}
ic.VM.Estack().PushVal(res)
require.NoError(t, Next(ic))
require.False(t, false, ic.VM.Estack().Pop().Bool())
}