github.com/MetalBlockchain/metalgo@v1.11.9/utils/maybe/maybe_test.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package maybe
     5  
     6  import (
     7  	"slices"
     8  	"testing"
     9  
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestMaybeClone(t *testing.T) {
    14  	require := require.New(t)
    15  
    16  	// Case: Value is maybe
    17  	{
    18  		val := []byte{1, 2, 3}
    19  		originalVal := slices.Clone(val)
    20  		m := Some(val)
    21  		mClone := Bind(m, slices.Clone[[]byte])
    22  		m.value[0] = 0
    23  		require.NotEqual(mClone.value, m.value)
    24  		require.Equal(originalVal, mClone.value)
    25  	}
    26  
    27  	// Case: Value is nothing
    28  	{
    29  		m := Nothing[[]byte]()
    30  		mClone := Bind(m, slices.Clone[[]byte])
    31  		require.True(mClone.IsNothing())
    32  	}
    33  }
    34  
    35  func TestMaybeString(t *testing.T) {
    36  	require := require.New(t)
    37  
    38  	// Case: Value is maybe
    39  	{
    40  		val := []int{1, 2, 3}
    41  		m := Some(val)
    42  		require.Equal("Some[[]int]{[1 2 3]}", m.String())
    43  	}
    44  
    45  	// Case: Value is nothing
    46  	{
    47  		m := Nothing[int]()
    48  		require.Equal("Nothing[int]", m.String())
    49  	}
    50  }
    51  
    52  func TestMaybeEquality(t *testing.T) {
    53  	require := require.New(t)
    54  	require.True(Equal(Nothing[int](), Nothing[int](), func(i int, i2 int) bool {
    55  		return i == i2
    56  	}))
    57  	require.False(Equal(Nothing[int](), Some(1), func(i int, i2 int) bool {
    58  		return i == i2
    59  	}))
    60  	require.False(Equal(Some(1), Nothing[int](), func(i int, i2 int) bool {
    61  		return i == i2
    62  	}))
    63  	require.True(Equal(Some(1), Some(1), func(i int, i2 int) bool {
    64  		return i == i2
    65  	}))
    66  }