Skip to content

Commit

Permalink
chore: Rework Denoms.Sort() to sort by base denom and then trace (#6493)
Browse files Browse the repository at this point in the history
* rework compare function to sort by base denom and add tests

* add new test for Denoms.Sort()

* fix TestMigratorMigrateDenomTraceToDenom with new Denoms.Sort()

* fix typo

* fix lint

* fix logical bug

* nit: rename test case and add test case

---------

Co-authored-by: Carlos Rodriguez <carlos@interchain.io>
Co-authored-by: DimitrisJim <d.f.hilliard@gmail.com>
  • Loading branch information
3 people committed Jun 6, 2024
1 parent a16c549 commit 218af8d
Show file tree
Hide file tree
Showing 3 changed files with 161 additions and 2 deletions.
2 changes: 1 addition & 1 deletion modules/apps/transfer/keeper/migrations_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,8 @@ func (suite *KeeperTestSuite) TestMigratorMigrateDenomTraceToDenom() {
},
transfertypes.Denoms{
transfertypes.NewDenom("apple", transfertypes.NewTrace("transfer", "channel-0")),
transfertypes.NewDenom("pineapple", transfertypes.NewTrace("transfer", "channel-0")),
transfertypes.NewDenom("cucumber", transfertypes.NewTrace("transfer", "channel-102"), transfertypes.NewTrace("transfer", "channel-0")),
transfertypes.NewDenom("pineapple", transfertypes.NewTrace("transfer", "channel-0")),
transfertypes.NewDenom("uatom", transfertypes.NewTrace("transfer", "channel-49")),
},
},
Expand Down
12 changes: 11 additions & 1 deletion modules/apps/transfer/types/denom.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,17 @@ var _ sort.Interface = (*Denoms)(nil)
func (d Denoms) Len() int { return len(d) }

// Less implements sort.Interface for Denoms
func (d Denoms) Less(i, j int) bool { return d[i].Path() < d[j].Path() }
func (d Denoms) Less(i, j int) bool {
if d[i].Base != d[j].Base {
return d[i].Base < d[j].Base
}

if len(d[i].Trace) != len(d[j].Trace) {
return len(d[i].Trace) < len(d[j].Trace)
}

return d[i].Path() < d[j].Path()
}

// Swap implements sort.Interface for Denoms
func (d Denoms) Swap(i, j int) { d[i], d[j] = d[j], d[i] }
Expand Down
149 changes: 149 additions & 0 deletions modules/apps/transfer/types/denom_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,155 @@ func (suite *TypesTestSuite) TestPath() {
}
}

func (suite *TypesTestSuite) TestSort() {
testCases := []struct {
name string
denoms types.Denoms
expDenoms types.Denoms
}{
{
"only base denom",
types.Denoms{types.Denom{Base: "uosmo"}, types.Denom{Base: "gamm"}, types.Denom{Base: "uatom"}},
types.Denoms{types.Denom{Base: "gamm"}, types.Denom{Base: "uatom"}, types.Denom{Base: "uosmo"}},
},
{
"different base denom and same traces",
types.Denoms{
types.Denom{
Base: "uosmo",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0")},
},
types.Denom{
Base: "gamm",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0")},
},
types.Denom{
Base: "uatom",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0")},
},
},
types.Denoms{
types.Denom{
Base: "gamm",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0")},
},
types.Denom{
Base: "uatom",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0")},
},
types.Denom{
Base: "uosmo",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0")},
},
},
},
{
"same base denom and different traces",
types.Denoms{
types.Denom{
Base: "uatom",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0")},
},
types.Denom{
Base: "uatom",
Trace: []types.Trace{types.NewTrace("mountain", "channel-0")},
},
types.Denom{
Base: "uatom",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0"), types.NewTrace("transfer", "channel-52"), types.NewTrace("transfer", "channel-52")},
},
types.Denom{
Base: "uatom",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0"), types.NewTrace("transfer", "channel-52")},
},
types.Denom{
Base: "uatom",
},
},
types.Denoms{
types.Denom{
Base: "uatom",
},
types.Denom{
Base: "uatom",
Trace: []types.Trace{types.NewTrace("mountain", "channel-0")},
},
types.Denom{
Base: "uatom",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0")},
},
types.Denom{
Base: "uatom",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0"), types.NewTrace("transfer", "channel-52")},
},
types.Denom{
Base: "uatom",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0"), types.NewTrace("transfer", "channel-52"), types.NewTrace("transfer", "channel-52")},
},
},
},
{
"different base denoms and different traces",
types.Denoms{
types.Denom{
Base: "uatom",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0")},
},
types.Denom{
Base: "gamm",
Trace: []types.Trace{types.NewTrace("pool", "channel-0")},
},
types.Denom{
Base: "gamm",
Trace: []types.Trace{types.NewTrace("pool", "channel-0"), types.NewTrace("transfer", "channel-52")},
},
types.Denom{
Base: "uatom",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0"), types.NewTrace("transfer", "channel-52"), types.NewTrace("transfer", "channel-52")},
},
types.Denom{
Base: "utia",
},
types.Denom{
Base: "gamm",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0"), types.NewTrace("transfer", "channel-52")},
},
},
types.Denoms{
types.Denom{
Base: "gamm",
Trace: []types.Trace{types.NewTrace("pool", "channel-0")},
},
types.Denom{
Base: "gamm",
Trace: []types.Trace{types.NewTrace("pool", "channel-0"), types.NewTrace("transfer", "channel-52")},
},
types.Denom{
Base: "gamm",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0"), types.NewTrace("transfer", "channel-52")},
},
types.Denom{
Base: "uatom",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0")},
},
types.Denom{
Base: "uatom",
Trace: []types.Trace{types.NewTrace("transfer", "channel-0"), types.NewTrace("transfer", "channel-52"), types.NewTrace("transfer", "channel-52")},
},
types.Denom{
Base: "utia",
},
},
},
}
for _, tc := range testCases {
tc := tc
suite.Run(tc.name, func() {
suite.Require().Equal(tc.expDenoms, tc.denoms.Sort())
})
}
}

func (suite *TypesTestSuite) TestDenomChainSource() {
testCases := []struct {
name string
Expand Down

0 comments on commit 218af8d

Please sign in to comment.