github.com/lino-network/lino@v0.6.11/x/reputation/repv2/int_test.go (about)

     1  package repv2
     2  
     3  import (
     4  	"math/big"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/suite"
     8  )
     9  
    10  type IntTestSuite struct {
    11  	suite.Suite
    12  }
    13  
    14  func (suite *IntTestSuite) TestNewInt() {
    15  	suite.Equal(big.NewInt(334124), NewInt(334124).Int)
    16  }
    17  
    18  func (suite *IntTestSuite) TestClone() {
    19  	a := NewInt(333)
    20  	b := a.Clone()
    21  	b.Add(NewInt(123))
    22  	suite.Equal(NewInt(456), b)
    23  	suite.Equal(NewInt(333), a)
    24  }
    25  
    26  func (suite *IntTestSuite) TestMisc() {
    27  	a := NewInt(33)
    28  	a.Add(NewInt(44))
    29  	suite.Equal(NewInt(77), a)
    30  
    31  	b := NewInt(44)
    32  	b.Sub(NewInt(33))
    33  	suite.Equal(NewInt(11), b)
    34  
    35  	c := NewInt(55)
    36  	c.Mul(NewInt(100))
    37  	suite.Equal(NewInt(5500), c)
    38  
    39  	d := NewInt(55)
    40  	d.Div(NewInt(11))
    41  	suite.Equal(NewInt(5), d)
    42  
    43  	suite.Equal(NewInt(444), IntMax(NewInt(333), NewInt(444)))
    44  	suite.Equal(NewInt(333), IntMin(NewInt(333), NewInt(444)))
    45  	suite.Equal(NewInt(777), IntAdd(NewInt(333), NewInt(444)))
    46  	suite.Equal(NewInt(-111), IntSub(NewInt(333), NewInt(444)))
    47  	suite.Equal(NewInt(8547), IntMul(NewInt(111), NewInt(77)))
    48  	suite.Equal(NewInt(3), IntDiv(NewInt(333), NewInt(111)))
    49  	suite.Equal(true, IntGreater(NewInt(444), NewInt(111)))
    50  	suite.Equal(false, IntGreater(NewInt(1), NewInt(111)))
    51  	suite.Equal(true, IntGTE(NewInt(333), NewInt(111)))
    52  	suite.Equal(true, IntGTE(NewInt(333), NewInt(333)))
    53  	suite.Equal(false, IntGTE(NewInt(111), NewInt(333)))
    54  	suite.Equal(true, IntLess(NewInt(111), NewInt(333)))
    55  	suite.Equal(false, IntLess(NewInt(444), NewInt(333)))
    56  	suite.Equal(NewInt(3), IntDiv(NewInt(333), NewInt(111)))
    57  	suite.Equal(NewInt(3), IntDiv(NewInt(333), NewInt(111)))
    58  }
    59  
    60  func (suite *IntTestSuite) TestIntDivFrac() {
    61  	suite.Panics(func() { IntDivFrac(NewInt(1000), 1, 0) })
    62  	suite.Panics(func() { IntDivFrac(NewInt(1000), 0, 1) })
    63  	suite.Panics(func() { IntDivFrac(NewInt(1000), 0, 0) })
    64  	cases := []struct {
    65  		v        Int
    66  		num      int64
    67  		denum    int64
    68  		expected Int
    69  	}{
    70  		{
    71  			v:        NewInt(80),
    72  			num:      8,
    73  			denum:    10,
    74  			expected: NewInt(100),
    75  		},
    76  		{
    77  			v:        NewInt(100),
    78  			num:      1,
    79  			denum:    3,
    80  			expected: NewInt(300),
    81  		},
    82  		{
    83  			v:        NewInt(77),
    84  			num:      11,
    85  			denum:    7,
    86  			expected: NewInt(49),
    87  		},
    88  	}
    89  
    90  	for i, v := range cases {
    91  		suite.Equal(v.expected, IntDivFrac(v.v, v.num, v.denum), "case: %d", i)
    92  	}
    93  }
    94  
    95  func (suite *IntTestSuite) TestIntMulFrac() {
    96  	suite.Panics(func() { IntMulFrac(NewInt(1000), 1, 0) })
    97  	cases := []struct {
    98  		v        Int
    99  		num      int64
   100  		denum    int64
   101  		expected Int
   102  	}{
   103  		{
   104  			v:        NewInt(80),
   105  			num:      8,
   106  			denum:    10,
   107  			expected: NewInt(64),
   108  		},
   109  		{
   110  			v:        NewInt(100),
   111  			num:      1,
   112  			denum:    3,
   113  			expected: NewInt(33),
   114  		},
   115  		{
   116  			v:        NewInt(77),
   117  			num:      11,
   118  			denum:    7,
   119  			expected: NewInt(121),
   120  		},
   121  	}
   122  
   123  	for i, v := range cases {
   124  		suite.Equal(v.expected, IntMulFrac(v.v, v.num, v.denum), "case: %d", i)
   125  	}
   126  }
   127  
   128  func TestIntTestSuite(t *testing.T) {
   129  	suite.Run(t, new(IntTestSuite))
   130  }