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 }