github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/util/uint160_test.go (about) 1 package util_test 2 3 import ( 4 "encoding/hex" 5 "testing" 6 7 "github.com/nspcc-dev/neo-go/internal/testserdes" 8 "github.com/nspcc-dev/neo-go/pkg/util" 9 "github.com/stretchr/testify/assert" 10 "github.com/stretchr/testify/require" 11 "gopkg.in/yaml.v3" 12 ) 13 14 func TestUint160UnmarshalJSON(t *testing.T) { 15 str := "0263c1de100292813b5e075e585acc1bae963b2d" 16 expected, err := util.Uint160DecodeStringLE(str) 17 assert.NoError(t, err) 18 19 // UnmarshalJSON decodes hex-strings 20 var u1, u2 util.Uint160 21 22 assert.NoError(t, u1.UnmarshalJSON([]byte(`"`+str+`"`))) 23 assert.True(t, expected.Equals(u1)) 24 25 testserdes.MarshalUnmarshalJSON(t, &expected, &u2) 26 27 assert.Error(t, u2.UnmarshalJSON([]byte(`123`))) 28 } 29 30 func TestUint160UnmarshalYAML(t *testing.T) { 31 str := "0263c1de100292813b5e075e585acc1bae963b2d" 32 expected, err := util.Uint160DecodeStringLE(str) 33 assert.NoError(t, err) 34 35 var u1, u2 util.Uint160 36 require.NoError(t, yaml.Unmarshal([]byte(`"`+str+`"`), &u1)) 37 require.Equal(t, expected, u1) 38 39 data, err := yaml.Marshal(u1) 40 require.NoError(t, err) 41 require.NoError(t, yaml.Unmarshal(data, &u2)) 42 require.Equal(t, expected, u2) 43 44 require.Error(t, yaml.Unmarshal([]byte(`[]`), &u1)) 45 } 46 47 func TestUInt160DecodeString(t *testing.T) { 48 hexStr := "2d3b96ae1bcc5a585e075e3b81920210dec16302" 49 val, err := util.Uint160DecodeStringBE(hexStr) 50 assert.NoError(t, err) 51 assert.Equal(t, hexStr, val.String()) 52 53 valLE, err := util.Uint160DecodeStringLE(hexStr) 54 assert.NoError(t, err) 55 assert.Equal(t, val, valLE.Reverse()) 56 57 _, err = util.Uint160DecodeStringBE(hexStr[1:]) 58 assert.Error(t, err) 59 60 _, err = util.Uint160DecodeStringLE(hexStr[1:]) 61 assert.Error(t, err) 62 63 hexStr = "zz3b96ae1bcc5a585e075e3b81920210dec16302" 64 _, err = util.Uint160DecodeStringBE(hexStr) 65 assert.Error(t, err) 66 67 _, err = util.Uint160DecodeStringLE(hexStr) 68 assert.Error(t, err) 69 } 70 71 func TestUint160DecodeBytes(t *testing.T) { 72 hexStr := "2d3b96ae1bcc5a585e075e3b81920210dec16302" 73 b, err := hex.DecodeString(hexStr) 74 require.NoError(t, err) 75 76 val, err := util.Uint160DecodeBytesBE(b) 77 assert.NoError(t, err) 78 assert.Equal(t, hexStr, val.String()) 79 80 valLE, err := util.Uint160DecodeBytesLE(b) 81 assert.NoError(t, err) 82 assert.Equal(t, val, valLE.Reverse()) 83 84 _, err = util.Uint160DecodeBytesLE(b[1:]) 85 assert.Error(t, err) 86 87 _, err = util.Uint160DecodeBytesBE(b[1:]) 88 assert.Error(t, err) 89 } 90 91 func TestUInt160Equals(t *testing.T) { 92 a := "2d3b96ae1bcc5a585e075e3b81920210dec16302" 93 b := "4d3b96ae1bcc5a585e075e3b81920210dec16302" 94 95 ua, err := util.Uint160DecodeStringBE(a) 96 require.NoError(t, err) 97 98 ub, err := util.Uint160DecodeStringBE(b) 99 require.NoError(t, err) 100 assert.False(t, ua.Equals(ub), "%s and %s cannot be equal", ua, ub) 101 assert.True(t, ua.Equals(ua), "%s and %s must be equal", ua, ua) 102 } 103 104 func TestUInt160Less(t *testing.T) { 105 a := "2d3b96ae1bcc5a585e075e3b81920210dec16302" 106 b := "2d3b96ae1bcc5a585e075e3b81920210dec16303" 107 108 ua, err := util.Uint160DecodeStringBE(a) 109 assert.Nil(t, err) 110 ua2, err := util.Uint160DecodeStringBE(a) 111 assert.Nil(t, err) 112 ub, err := util.Uint160DecodeStringBE(b) 113 assert.Nil(t, err) 114 assert.Equal(t, true, ua.Less(ub)) 115 assert.Equal(t, false, ua.Less(ua2)) 116 assert.Equal(t, false, ub.Less(ua)) 117 } 118 119 func TestUInt160String(t *testing.T) { 120 hexStr := "b28427088a3729b2536d10122960394e8be6721f" 121 hexRevStr := "1f72e68b4e39602912106d53b229378a082784b2" 122 123 val, err := util.Uint160DecodeStringBE(hexStr) 124 assert.Nil(t, err) 125 126 assert.Equal(t, hexStr, val.String()) 127 assert.Equal(t, hexRevStr, val.StringLE()) 128 } 129 130 func TestUint160_Reverse(t *testing.T) { 131 hexStr := "b28427088a3729b2536d10122960394e8be6721f" 132 val, err := util.Uint160DecodeStringBE(hexStr) 133 134 require.NoError(t, err) 135 assert.Equal(t, hexStr, val.Reverse().StringLE()) 136 assert.Equal(t, val, val.Reverse().Reverse()) 137 }