feat: Implement .IsLTE for types.Coin (#11441)
## Description Closes: #11366 Implement `.IsLTE` for `types.Coin`. --- ### Author Checklist *All items are required. Please add a note to the item if the item is not applicable and please add links to any relevant follow up issues.* I have... - [x] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] added `!` to the type prefix if API or client breaking change - [x] targeted the correct branch (see [PR Targeting](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#pr-targeting)) - [x] provided a link to the relevant issue or specification - [x] followed the guidelines for [building modules](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules) - [ ] included the necessary unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#testing) - [ ] added a changelog entry to `CHANGELOG.md` - [ ] included comments for [documenting Go code](https://blog.golang.org/godoc) - [ ] updated the relevant documentation or specification - [ ] reviewed "Files changed" and left comments if necessary - [ ] confirmed all CI checks have passed ### Reviewers Checklist *All items are required. Please add a note if the item is not applicable and please add your handle next to the items reviewed if you only reviewed selected items.* I have... - [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] confirmed `!` in the type prefix if API or client breaking change - [ ] confirmed all author checklist items have been addressed - [ ] reviewed state machine logic - [ ] reviewed API design and naming - [ ] reviewed documentation is accurate - [ ] reviewed tests and test coverage - [ ] manually tested (if applicable)
This commit is contained in:
parent
66ca3e88aa
commit
5033758954
|
@ -39,6 +39,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
|
* [\#11441](https://github.com/cosmos/cosmos-sdk/pull/11441) Added a new method, `IsLTE`, for `types.Coin`. This method is used to check if a `types.Coin` is less than or equal to another `types.Coin`.
|
||||||
* (x/upgrade) [\#11116](https://github.com/cosmos/cosmos-sdk/pull/11116) `MsgSoftwareUpgrade` and has been added to support v1beta2 msgs-based gov proposals.
|
* (x/upgrade) [\#11116](https://github.com/cosmos/cosmos-sdk/pull/11116) `MsgSoftwareUpgrade` and has been added to support v1beta2 msgs-based gov proposals.
|
||||||
* [\#11308](https://github.com/cosmos/cosmos-sdk/pull/11308) Added a mandatory metadata field to Vote in x/gov v1beta2.
|
* [\#11308](https://github.com/cosmos/cosmos-sdk/pull/11308) Added a mandatory metadata field to Vote in x/gov v1beta2.
|
||||||
* [\#10977](https://github.com/cosmos/cosmos-sdk/pull/10977) Now every cosmos message protobuf definition must be extended with a ``cosmos.msg.v1.signer`` option to signal the signer fields in a language agnostic way.
|
* [\#10977](https://github.com/cosmos/cosmos-sdk/pull/10977) Now every cosmos message protobuf definition must be extended with a ``cosmos.msg.v1.signer`` option to signal the signer fields in a language agnostic way.
|
||||||
|
|
|
@ -81,6 +81,16 @@ func (coin Coin) IsLT(other Coin) bool {
|
||||||
return coin.Amount.LT(other.Amount)
|
return coin.Amount.LT(other.Amount)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsLTE returns true if they are the same type and the receiver is
|
||||||
|
// an equal or smaller value
|
||||||
|
func (coin Coin) IsLTE(other Coin) bool {
|
||||||
|
if coin.Denom != other.Denom {
|
||||||
|
panic(fmt.Sprintf("invalid coin denominations; %s, %s", coin.Denom, other.Denom))
|
||||||
|
}
|
||||||
|
|
||||||
|
return !coin.Amount.GT(other.Amount)
|
||||||
|
}
|
||||||
|
|
||||||
// IsEqual returns true if the two sets of Coins have the same value
|
// IsEqual returns true if the two sets of Coins have the same value
|
||||||
func (coin Coin) IsEqual(other Coin) bool {
|
func (coin Coin) IsEqual(other Coin) bool {
|
||||||
if coin.Denom != other.Denom {
|
if coin.Denom != other.Denom {
|
||||||
|
|
|
@ -233,6 +233,7 @@ func (s *coinTestSuite) TestIsGTECoin() {
|
||||||
}{
|
}{
|
||||||
{sdk.NewInt64Coin(testDenom1, 1), sdk.NewInt64Coin(testDenom1, 1), true, false},
|
{sdk.NewInt64Coin(testDenom1, 1), sdk.NewInt64Coin(testDenom1, 1), true, false},
|
||||||
{sdk.NewInt64Coin(testDenom1, 2), sdk.NewInt64Coin(testDenom1, 1), true, false},
|
{sdk.NewInt64Coin(testDenom1, 2), sdk.NewInt64Coin(testDenom1, 1), true, false},
|
||||||
|
{sdk.NewInt64Coin(testDenom1, 1), sdk.NewInt64Coin(testDenom1, 2), false, false},
|
||||||
{sdk.NewInt64Coin(testDenom1, 1), sdk.NewInt64Coin(testDenom2, 1), false, true},
|
{sdk.NewInt64Coin(testDenom1, 1), sdk.NewInt64Coin(testDenom2, 1), false, true},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,6 +248,30 @@ func (s *coinTestSuite) TestIsGTECoin() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *coinTestSuite) TestIsLTECoin() {
|
||||||
|
cases := []struct {
|
||||||
|
inputOne sdk.Coin
|
||||||
|
inputTwo sdk.Coin
|
||||||
|
expected bool
|
||||||
|
panics bool
|
||||||
|
}{
|
||||||
|
{sdk.NewInt64Coin(testDenom1, 1), sdk.NewInt64Coin(testDenom1, 1), true, false},
|
||||||
|
{sdk.NewInt64Coin(testDenom1, 1), sdk.NewInt64Coin(testDenom1, 2), true, false},
|
||||||
|
{sdk.NewInt64Coin(testDenom1, 1), sdk.NewInt64Coin(testDenom2, 1), false, true},
|
||||||
|
{sdk.NewInt64Coin(testDenom1, 2), sdk.NewInt64Coin(testDenom1, 1), false, false},
|
||||||
|
}
|
||||||
|
|
||||||
|
for tcIndex, tc := range cases {
|
||||||
|
tc := tc
|
||||||
|
if tc.panics {
|
||||||
|
s.Require().Panics(func() { tc.inputOne.IsLTE(tc.inputTwo) })
|
||||||
|
} else {
|
||||||
|
res := tc.inputOne.IsLTE(tc.inputTwo)
|
||||||
|
s.Require().Equal(tc.expected, res, "coin LTE relation is incorrect, tc #%d", tcIndex)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (s *coinTestSuite) TestIsLTCoin() {
|
func (s *coinTestSuite) TestIsLTCoin() {
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
inputOne sdk.Coin
|
inputOne sdk.Coin
|
||||||
|
|
Loading…
Reference in New Issue