mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-11-10 18:15:19 +00:00
116 lines
2.0 KiB
Go
116 lines
2.0 KiB
Go
package keeper
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
)
|
|
|
|
func TestSplitIntIntoWeightedBuckets(t *testing.T) {
|
|
testCases := []struct {
|
|
name string
|
|
amount sdk.Int
|
|
buckets []sdk.Int
|
|
want []sdk.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 []sdk.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) sdk.Int { return sdk.NewInt(n) }
|
|
func is(ns ...int64) (is []sdk.Int) {
|
|
for _, n := range ns {
|
|
is = append(is, sdk.NewInt(n))
|
|
}
|
|
return
|
|
}
|