mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-29 09:45:18 +00:00
3375484f79
* Use cosmossdk.io/errors for deprecated error methods * Update error registration with cosmossdk.io/errors * Use cosmossdk.io/math for deprecated sdk.Int alias * Fix modified proto file * Update sdk.Int usage in swap hooks * Update e2e test deprecated method usage
116 lines
2.1 KiB
Go
116 lines
2.1 KiB
Go
package keeper
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
sdkmath "cosmossdk.io/math"
|
|
)
|
|
|
|
func TestSplitIntIntoWeightedBuckets(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
amount sdkmath.Int
|
|
buckets []sdkmath.Int
|
|
want []sdkmath.Int
|
|
expectPanic bool
|
|
}{
|
|
{
|
|
name: "0split0",
|
|
amount: i(0),
|
|
buckets: is(0),
|
|
expectPanic: true,
|
|
},
|
|
{
|
|
name: "5splitnil",
|
|
amount: i(5),
|
|
buckets: is(),
|
|
expectPanic: true,
|
|
},
|
|
{
|
|
name: "-2split1,1",
|
|
amount: i(-2),
|
|
buckets: is(1, 1),
|
|
expectPanic: true,
|
|
},
|
|
{
|
|
name: "2split1,-1",
|
|
amount: i(2),
|
|
buckets: is(1, -1),
|
|
expectPanic: true,
|
|
},
|
|
{
|
|
name: "0split0,0,0,1",
|
|
amount: i(0),
|
|
buckets: is(0, 0, 0, 1),
|
|
want: is(0, 0, 0, 0),
|
|
},
|
|
{
|
|
name: "2split1,1",
|
|
amount: i(2),
|
|
buckets: is(1, 1),
|
|
want: is(1, 1),
|
|
},
|
|
{
|
|
name: "100split1,9",
|
|
amount: i(100),
|
|
buckets: is(1, 9),
|
|
want: is(10, 90),
|
|
},
|
|
{
|
|
name: "100split9,1",
|
|
amount: i(100),
|
|
buckets: is(9, 1),
|
|
want: is(90, 10),
|
|
},
|
|
{
|
|
name: "7split1,2",
|
|
amount: i(7),
|
|
buckets: is(1, 2),
|
|
want: is(2, 5),
|
|
},
|
|
{
|
|
name: "17split1,1,1",
|
|
amount: i(17),
|
|
buckets: is(1, 1, 1),
|
|
want: is(6, 6, 5),
|
|
},
|
|
{
|
|
name: "10split1000000,1",
|
|
amount: i(10),
|
|
buckets: is(1000000, 1),
|
|
want: is(10, 0),
|
|
},
|
|
{
|
|
name: "334733353split730777,31547",
|
|
amount: i(334733353),
|
|
buckets: is(730777, 31547),
|
|
want: is(320881194, 13852159),
|
|
},
|
|
}
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
var got []sdkmath.Int
|
|
run := func() {
|
|
got = splitIntIntoWeightedBuckets(tc.amount, tc.buckets)
|
|
}
|
|
if tc.expectPanic {
|
|
require.Panics(t, run)
|
|
} else {
|
|
require.NotPanics(t, run)
|
|
}
|
|
|
|
require.Equal(t, tc.want, got)
|
|
})
|
|
}
|
|
}
|
|
|
|
func i(n int64) sdkmath.Int { return sdkmath.NewInt(n) }
|
|
func is(ns ...int64) (is []sdkmath.Int) {
|
|
for _, n := range ns {
|
|
is = append(is, sdkmath.NewInt(n))
|
|
}
|
|
return
|
|
}
|