diff --git a/pkg/util/size.go b/pkg/util/size.go index dfc88c614..33b7b60fc 100644 --- a/pkg/util/size.go +++ b/pkg/util/size.go @@ -43,7 +43,7 @@ func GetVarStringSize(value string) int { // GetVarSize return the size om bytes of a variable. This implementation is not exactly like the C# // (reference: GetVarSize(this T[] value), https://github.com/neo-project/neo/blob/master/neo/IO/Helper.cs#L53) as in the C# variable -// like Uint160, Uint256 are not supported. @TODO: make sure to have full unit tests coverage. +// like Uint160, Uint256 are not supported. func GetVarSize(value interface{}) int { v := reflect.ValueOf(value) switch v.Kind() { diff --git a/pkg/util/size_test.go b/pkg/util/size_test.go index f4c57b475..15eb77523 100644 --- a/pkg/util/size_test.go +++ b/pkg/util/size_test.go @@ -2,11 +2,28 @@ package util import ( "fmt" + "io" "testing" "github.com/stretchr/testify/assert" ) +// Mock structure to test getting size of an array of serializable things +type smthSerializable struct { +} + +func (*smthSerializable) DecodeBinary(io.Reader) error { + return nil +} + +func (*smthSerializable) EncodeBinary(io.Writer) error { + return nil +} + +func (*smthSerializable) Size() int { + return 42 +} + func TestVarSize(t *testing.T) { testCases := []struct { variable interface{} @@ -38,6 +55,31 @@ func TestVarSize(t *testing.T) { "test_int_5", 5, }, + { + uint(252), + "test_uint_1", + 1, + }, + { + uint(253), + "test_uint_2", + 3, + }, + { + uint(65535), + "test_uint_3", + 3, + }, + { + uint(65536), + "test_uint_4", + 5, + }, + { + uint(4294967295), + "test_uint_5", + 5, + }, { []byte{1, 2, 4, 5, 6}, "test_[]byte_1", @@ -128,6 +170,10 @@ func TestVarSize(t *testing.T) { "test_string_3", 41, }, + {[]*smthSerializable{&smthSerializable{}, &smthSerializable{}}, + "test_Serializable", + 2 * 42 + 1, + }, } for _, tc := range testCases { @@ -137,3 +183,12 @@ func TestVarSize(t *testing.T) { }) } } + +func TestVarSizePanic(t *testing.T) { + defer func() { + r := recover() + assert.NotNil(t, r) + }() + + _ = GetVarSize(t) +}