Merge pull request #371 from nspcc-dev/fix-some-todo-items

Fix some easy TODO items, refs. #244.
This commit is contained in:
Roman Khimov 2019-09-07 15:35:36 +03:00 committed by GitHub
commit 8fac66d4af
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 69 additions and 19 deletions

View file

@ -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# // GetVarSize return the size om bytes of a variable. This implementation is not exactly like the C#
// (reference: GetVarSize<T>(this T[] value), https://github.com/neo-project/neo/blob/master/neo/IO/Helper.cs#L53) as in the C# variable // (reference: GetVarSize<T>(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 { func GetVarSize(value interface{}) int {
v := reflect.ValueOf(value) v := reflect.ValueOf(value)
switch v.Kind() { switch v.Kind() {

View file

@ -2,11 +2,28 @@ package util
import ( import (
"fmt" "fmt"
"io"
"testing" "testing"
"github.com/stretchr/testify/assert" "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) { func TestVarSize(t *testing.T) {
testCases := []struct { testCases := []struct {
variable interface{} variable interface{}
@ -38,6 +55,31 @@ func TestVarSize(t *testing.T) {
"test_int_5", "test_int_5",
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}, []byte{1, 2, 4, 5, 6},
"test_[]byte_1", "test_[]byte_1",
@ -128,6 +170,10 @@ func TestVarSize(t *testing.T) {
"test_string_3", "test_string_3",
41, 41,
}, },
{[]*smthSerializable{&smthSerializable{}, &smthSerializable{}},
"test_Serializable",
2 * 42 + 1,
},
} }
for _, tc := range testCases { 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)
}

View file

@ -720,9 +720,6 @@ func (c *codegen) convertToken(tok token.Token) {
case token.GEQ: case token.GEQ:
emitOpcode(c.prog, vm.GTE) emitOpcode(c.prog, vm.GTE)
case token.EQL: case token.EQL:
// TODO: this is wrong (and the next one also is), see issue #294
// Changing it EQUAL is not that big of an improvement, so we're
// using NUMEQUAL for now
emitOpcode(c.prog, vm.NUMEQUAL) emitOpcode(c.prog, vm.NUMEQUAL)
case token.NEQ: case token.NEQ:
emitOpcode(c.prog, vm.NUMNOTEQUAL) emitOpcode(c.prog, vm.NUMNOTEQUAL)

View file

@ -357,18 +357,16 @@ func TestDec(t *testing.T) {
eval(t, src, big.NewInt(1)) eval(t, src, big.NewInt(1))
} }
// TODO: This could be a nasty bug. Output of the VM is 65695. func TestForLoopBigIter(t *testing.T) {
// Only happens above 100000, could be binary read issue. src := `
//func TestForLoopBigIter(t *testing.T) { package foo
// src := ` func Main() int {
// package foo x := 0
// func Main() int { for i := 0; i < 100000; i++ {
// x := 0 x = i
// for i := 0; i < 100000; i++ { }
// x = i return x
// } }
// return x `
// } eval(t, src, big.NewInt(99999))
// ` }
// eval(t, src, big.NewInt(99999))
//}