github.com/cosmos/cosmos-sdk@v0.50.10/types/mapcoins_test.go (about)

     1  package types_test
     2  
     3  import (
     4  	"github.com/stretchr/testify/require"
     5  
     6  	sdk "github.com/cosmos/cosmos-sdk/types"
     7  )
     8  
     9  func (s *coinTestSuite) TestMapCoinsAdd() {
    10  	cA0M0 := sdk.Coins{s.ca0, s.cm0}
    11  	cA0M1 := sdk.Coins{s.ca0, s.cm1}
    12  	cA1M1 := sdk.Coins{s.ca1, s.cm1}
    13  	cases := []struct {
    14  		name     string
    15  		inputOne sdk.Coins
    16  		inputTwo sdk.Coins
    17  		expected sdk.Coins
    18  		msg      string
    19  	}{
    20  		{"adding two empty lists", s.emptyCoins, s.emptyCoins, s.emptyCoins, "empty, non list should be returned"},
    21  		{"empty list + set", s.emptyCoins, cA0M1, sdk.Coins{s.cm1}, "zero coins should be removed"},
    22  		{"empty list + set", s.emptyCoins, cA1M1, cA1M1, "zero + a_non_zero = a_non_zero"},
    23  		{"set + empty list", cA0M1, s.emptyCoins, sdk.Coins{s.cm1}, "zero coins should be removed"},
    24  		{"set + empty list", cA1M1, s.emptyCoins, cA1M1, "a_non_zero + zero  = a_non_zero"},
    25  		{
    26  			"{1atom,1muon}+{1atom,1muon}", cA1M1, cA1M1,
    27  			sdk.Coins{s.ca2, s.cm2},
    28  			"a + a = 2a",
    29  		},
    30  		{
    31  			"{0atom,1muon}+{0atom,0muon}", cA0M1, cA0M0,
    32  			sdk.Coins{s.cm1},
    33  			"zero coins should be removed",
    34  		},
    35  		{
    36  			"{2atom}+{0muon}",
    37  			sdk.Coins{s.ca2},
    38  			sdk.Coins{s.cm0},
    39  			sdk.Coins{s.ca2},
    40  			"zero coins should be removed",
    41  		},
    42  		{
    43  			"{1atom}+{1atom,2muon}",
    44  			sdk.Coins{s.ca1},
    45  			sdk.Coins{s.ca1, s.cm2},
    46  			sdk.Coins{s.ca2, s.cm2},
    47  			"should be correctly added",
    48  		},
    49  		{
    50  			"{0atom,0muon}+{0atom,0muon}", cA0M0, cA0M0, s.emptyCoins,
    51  			"sets with zero coins should return empty set",
    52  		},
    53  	}
    54  
    55  	for _, tc := range cases {
    56  		expected := tc.inputOne.Add(tc.inputTwo...)
    57  		m := sdk.NewMapCoins(tc.inputOne)
    58  		m.Add(tc.inputTwo...)
    59  		res := m.ToCoins()
    60  		s.Require().True(res.IsValid())
    61  		require.Equal(s.T(), expected, res, tc.msg)
    62  	}
    63  }