neo-go/pkg/util/size_test.go
dauTT 19201dcf52 Implemented rpc server method GetRawTransaction (#135)
* Added utility function GetVarSize

* 1) Added Size method: this implied that Fixed8 implements now the serializable interface. 2) Added few arithmetic operation (Add, Sub, div): this will be used to calculated networkfeeand feePerByte. Changed return value of the Value() method to int instead of int64. Modified fixed8_test accordingly.

* Implemented Size or MarshalJSON method.
- Structs accepting the Size method implement the serializable interface.
- Structs accepting the MarshalJSON method implements the customized json marshaller interface.

* Added fee calculation

* Implemented rcp server method GetRawTransaction

* Updated Tests

* Fixed:
1) NewFixed8 will accept as input int64
2) race condition affecting configDeafault, blockchainDefault

* Simplified Size calculation

* 1) Removed global variable blockchainDefault, configDefault
2) Extended Blockchainer interface to include the methods: References, FeePerByte, SystemFee, NetworkFee
3) Deleted fee_test.go, fee.go. Moved corresponding methods to blockchain_test.go and blockchain.go respectively
4) Amended tx_raw_output.go

* Simplified GetVarSize Method

* Replaced ValueAtAndType with ValueWithType

* Cosmetic changes + Added test case getrawtransaction_7

* Clean up Print statement

* Filled up keys

* Aligned verbose logic with the C#-neo implementation

* Implemented @Kim requests
Refactor server_test.go

* Small fixes

* Fixed verbose logic
Added more tests
Cosmetic changes

* Replaced assert.NoError with require.NoError

* Fixed tests by adding context.Background() as argument

* Fixed tests
2019-02-20 18:39:32 +01:00

139 lines
2 KiB
Go

package util
import (
"fmt"
"testing"
"github.com/stretchr/testify/assert"
)
func TestVarSize(t *testing.T) {
testCases := []struct {
variable interface{}
name string
expected int
}{
{
252,
"test_int_1",
1,
},
{
253,
"test_int_2",
3,
},
{
65535,
"test_int_3",
3,
},
{
65536,
"test_int_4",
5,
},
{
4294967295,
"test_int_5",
5,
},
{
[]byte{1, 2, 4, 5, 6},
"test_[]byte_1",
6,
},
{
// The neo C# implementation doe not allowed this!
Uint160{1, 2, 4, 5, 6},
"test_Uint160_1",
21,
},
{[20]uint8{1, 2, 3, 4, 5, 6},
"test_uint8_1",
21,
},
{[20]uint8{1, 2, 3, 4, 5, 6, 8, 9},
"test_uint8_2",
21,
},
{[32]uint8{1, 2, 3, 4, 5, 6},
"test_uint8_3",
33,
},
{[10]uint16{1, 2, 3, 4, 5, 6},
"test_uint16_1",
21,
},
{[10]uint16{1, 2, 3, 4, 5, 6, 10, 21},
"test_uint16_2",
21,
},
{[30]uint32{1, 2, 3, 4, 5, 6, 10, 21},
"test_uint32_2",
121,
},
{[30]uint64{1, 2, 3, 4, 5, 6, 10, 21},
"test_uint64_2",
241,
},
{[20]int8{1, 2, 3, 4, 5, 6},
"test_int8_1",
21,
},
{[20]int8{-1, 2, 3, 4, 5, 6, 8, 9},
"test_int8_2",
21,
},
{[32]int8{-1, 2, 3, 4, 5, 6},
"test_int8_3",
33,
},
{[10]int16{-1, 2, 3, 4, 5, 6},
"test_int16_1",
21,
},
{[10]int16{-1, 2, 3, 4, 5, 6, 10, 21},
"test_int16_2",
21,
},
{[30]int32{-1, 2, 3, 4, 5, 6, 10, 21},
"test_int32_2",
121,
},
{[30]int64{-1, 2, 3, 4, 5, 6, 10, 21},
"test_int64_2",
241,
},
// The neo C# implementation doe not allowed this!
{Uint256{1, 2, 3, 4, 5, 6},
"test_Uint256_1",
33,
},
{"abc",
"test_string_1",
4,
},
{"abcà",
"test_string_2",
6,
},
{"2d3b96ae1bcc5a585e075e3b81920210dec16302",
"test_string_3",
41,
},
}
for _, tc := range testCases {
t.Run(fmt.Sprintf("run: %s", tc.name), func(t *testing.T) {
result := GetVarSize(tc.variable)
assert.Equal(t, tc.expected, result)
})
}
}