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  }