62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
|
package tests
|
||
|
|
||
|
import (
|
||
|
"math"
|
||
|
"math/big"
|
||
|
"path"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/nspcc-dev/neo-go/pkg/neotest"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
const testdataPath = "./testdata"
|
||
|
|
||
|
func newTestdataInvoker(t *testing.T) *neotest.ContractInvoker {
|
||
|
e := newExecutor(t)
|
||
|
ctr := neotest.CompileFile(t, e.CommitteeHash, testdataPath, path.Join(testdataPath, "config.yml"))
|
||
|
e.DeployContract(t, ctr, nil)
|
||
|
return e.CommitteeInvoker(ctr.Hash)
|
||
|
}
|
||
|
|
||
|
func TestEncodeU64(t *testing.T) {
|
||
|
// Let's check boundary values for all bit sizes:
|
||
|
var nums []uint64
|
||
|
for i := 0; i < 64; i++ {
|
||
|
if i != 0 {
|
||
|
nums = append(nums, (1<<i)-1)
|
||
|
}
|
||
|
nums = append(nums, 1<<i)
|
||
|
if i != 63 {
|
||
|
nums = append(nums, (1<<i)+1)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
c := newTestdataInvoker(t)
|
||
|
for _, n := range nums {
|
||
|
v, err := c.TestInvoke(t, "encode", n)
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, 1, v.Len())
|
||
|
|
||
|
r := v.Pop().Bytes()
|
||
|
require.Equal(t, 9, len(r), "got: %x", r)
|
||
|
|
||
|
v, err = c.TestInvoke(t, "encodeDecode", n)
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, 1, v.Len())
|
||
|
require.Equal(t, n, v.Pop().BigInt().Uint64())
|
||
|
}
|
||
|
|
||
|
t.Run("bad cases should be handled", func(t *testing.T) {
|
||
|
x := new(big.Int).SetUint64(math.MaxUint64)
|
||
|
x.Add(x, big.NewInt(1))
|
||
|
|
||
|
nums := []*big.Int{x, big.NewInt(-1), big.NewInt(-128)}
|
||
|
for _, n := range nums {
|
||
|
v, err := c.TestInvoke(t, "encodeDecode", n)
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, 0, v.Pop().BigInt().Cmp(n))
|
||
|
}
|
||
|
})
|
||
|
}
|