github.com/wfusion/gofusion@v1.1.14/test/common/utils/cases/cmp_test.go (about)

     1  package cases
     2  
     3  import (
     4  	"context"
     5  	"math"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/suite"
     9  
    10  	"github.com/wfusion/gofusion/common/utils"
    11  	"github.com/wfusion/gofusion/common/utils/clone"
    12  	"github.com/wfusion/gofusion/common/utils/cmp"
    13  	"github.com/wfusion/gofusion/log"
    14  
    15  	testUtl "github.com/wfusion/gofusion/test/common/utils"
    16  )
    17  
    18  func TestCmp(t *testing.T) {
    19  	t.Parallel()
    20  	testingSuite := &Cmp{Test: new(testUtl.Test)}
    21  	suite.Run(t, testingSuite)
    22  }
    23  
    24  type Cmp struct {
    25  	*testUtl.Test
    26  }
    27  
    28  func (t *Cmp) BeforeTest(suiteName, testName string) {
    29  	t.Catch(func() {
    30  		log.Info(context.Background(), "right before %s %s", suiteName, testName)
    31  	})
    32  }
    33  
    34  func (t *Cmp) AfterTest(suiteName, testName string) {
    35  	t.Catch(func() {
    36  		log.Info(context.Background(), "right after %s %s", suiteName, testName)
    37  	})
    38  }
    39  
    40  func (t *Cmp) TestComparable() {
    41  	t.Catch(func() {
    42  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(1), utils.AnyPtr(1)))
    43  		t.Equal(false, cmp.ComparablePtr(utils.AnyPtr(1), utils.AnyPtr(2)))
    44  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(math.MaxInt), utils.AnyPtr(math.MaxInt)))
    45  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(math.MinInt), utils.AnyPtr(math.MinInt)))
    46  
    47  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(int8(1)), utils.AnyPtr(int8(1))))
    48  		t.Equal(false, cmp.ComparablePtr(utils.AnyPtr(int8(1)), utils.AnyPtr(int8(2))))
    49  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(int8(math.MaxInt8)), utils.AnyPtr(int8(math.MaxInt8))))
    50  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(int8(math.MinInt8)), utils.AnyPtr(int8(math.MinInt8))))
    51  
    52  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(int16(1)), utils.AnyPtr(int16(1))))
    53  		t.Equal(false, cmp.ComparablePtr(utils.AnyPtr(int16(1)), utils.AnyPtr(int16(2))))
    54  		t.Equal(true,
    55  			cmp.ComparablePtr(utils.AnyPtr(int16(math.MaxInt16)), utils.AnyPtr(int16(math.MaxInt16))))
    56  		t.Equal(true,
    57  			cmp.ComparablePtr(utils.AnyPtr(int16(math.MinInt16)), utils.AnyPtr(int16(math.MinInt16))))
    58  
    59  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(int32(1)), utils.AnyPtr(int32(1))))
    60  		t.Equal(false, cmp.ComparablePtr(utils.AnyPtr(int32(1)), utils.AnyPtr(int32(2))))
    61  		t.Equal(true,
    62  			cmp.ComparablePtr(utils.AnyPtr(int32(math.MaxInt32)), utils.AnyPtr(int32(math.MaxInt32))))
    63  		t.Equal(true,
    64  			cmp.ComparablePtr(utils.AnyPtr(int32(math.MinInt32)), utils.AnyPtr(int32(math.MinInt32))))
    65  
    66  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(int64(1)), utils.AnyPtr(int64(1))))
    67  		t.Equal(false, cmp.ComparablePtr(utils.AnyPtr(int64(1)), utils.AnyPtr(int64(2))))
    68  		t.Equal(true,
    69  			cmp.ComparablePtr(utils.AnyPtr(int64(math.MaxInt64)), utils.AnyPtr(int64(math.MaxInt64))))
    70  		t.Equal(true,
    71  			cmp.ComparablePtr(utils.AnyPtr(int64(math.MinInt64)), utils.AnyPtr(int64(math.MinInt64))))
    72  
    73  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(uint(1)), utils.AnyPtr(uint(1))))
    74  		t.Equal(false, cmp.ComparablePtr(utils.AnyPtr(uint(1)), utils.AnyPtr(uint(2))))
    75  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(uint(math.MaxUint)), utils.AnyPtr(uint(math.MaxUint))))
    76  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(uint(0)), utils.AnyPtr(uint(0))))
    77  
    78  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(uint8(1)), utils.AnyPtr(uint8(1))))
    79  		t.Equal(false, cmp.ComparablePtr(utils.AnyPtr(uint8(1)), utils.AnyPtr(uint8(2))))
    80  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(uint8(0)), utils.AnyPtr(uint8(0))))
    81  		t.Equal(true,
    82  			cmp.ComparablePtr(utils.AnyPtr(uint8(math.MaxUint8)), utils.AnyPtr(uint8(math.MaxUint8))))
    83  
    84  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(uint16(1)), utils.AnyPtr(uint16(1))))
    85  		t.Equal(false, cmp.ComparablePtr(utils.AnyPtr(uint16(1)), utils.AnyPtr(uint16(2))))
    86  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(uint16(0)), utils.AnyPtr(uint16(0))))
    87  		t.Equal(true,
    88  			cmp.ComparablePtr(utils.AnyPtr(uint16(math.MaxUint16)), utils.AnyPtr(uint16(math.MaxUint16))))
    89  
    90  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(uint32(1)), utils.AnyPtr(uint32(1))))
    91  		t.Equal(false, cmp.ComparablePtr(utils.AnyPtr(uint32(1)), utils.AnyPtr(uint32(2))))
    92  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(uint32(0)), utils.AnyPtr(uint32(0))))
    93  		t.Equal(true,
    94  			cmp.ComparablePtr(utils.AnyPtr(uint32(math.MaxUint32)), utils.AnyPtr(uint32(math.MaxUint32))))
    95  
    96  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(uint64(1)), utils.AnyPtr(uint64(1))))
    97  		t.Equal(false, cmp.ComparablePtr(utils.AnyPtr(uint64(1)), utils.AnyPtr(uint64(2))))
    98  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(uint64(0)), utils.AnyPtr(uint64(0))))
    99  		t.Equal(true,
   100  			cmp.ComparablePtr(utils.AnyPtr(uint64(math.MaxUint64)), utils.AnyPtr(uint64(math.MaxUint64))))
   101  
   102  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr("1"), utils.AnyPtr("1")))
   103  		t.Equal(false, cmp.ComparablePtr(utils.AnyPtr("1"), utils.AnyPtr("12")))
   104  
   105  		t.Equal(true, cmp.ComparablePtr(utils.AnyPtr(true), utils.AnyPtr(true)))
   106  		t.Equal(false, cmp.ComparablePtr(utils.AnyPtr(true), utils.AnyPtr(false)))
   107  
   108  	})
   109  }
   110  
   111  func (t *Cmp) TestMapAny() {
   112  	t.Catch(func() {
   113  		base := map[string]any{
   114  			"1": map[string]any{
   115  				"2": []int{1, 2, 3},
   116  				"3": utils.AnyPtr("3"),
   117  				"4": []byte("123"),
   118  				"5": map[string]any{
   119  					"6": 1e2,
   120  				},
   121  			},
   122  			"2": 2,
   123  			"3": []any{1, complex(1, 2), 1.0, uint(2)},
   124  		}
   125  		a := clone.Slowly(base)
   126  		b := clone.Slowly(base)
   127  		t.True(cmp.MapAny(a, b))
   128  
   129  		(b["1"].(map[string]any))["5"].(map[string]any)["6"] = 1e3
   130  		t.False(cmp.MapAny(a, b))
   131  	})
   132  }