mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-11-04 10:37:26 +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
 | 
						|
}
 |