package basic

import (
	"math/big"
	"testing"

	"github.com/stretchr/testify/require"
)

type normalizedValueCase struct {
	name            string
	n, total, limit uint64
	expected        uint64
}

func TestNormalizedValues(t *testing.T) {
	testCases := []normalizedValueCase{
		{
			name:     "zero limit",
			n:        50,
			total:    100,
			limit:    0,
			expected: 0,
		},
		{
			name:     "scale down",
			n:        50,
			total:    100,
			limit:    10,
			expected: 5,
		},
		{
			name:     "scale up",
			n:        50,
			total:    100,
			limit:    1000,
			expected: 500,
		},
	}

	for _, testCase := range testCases {
		testNormalizedValues(t, testCase)
	}
}

func testNormalizedValues(t *testing.T, c normalizedValueCase) {
	n := big.NewInt(0).SetUint64(c.n)
	total := big.NewInt(0).SetUint64(c.total)
	limit := big.NewInt(0).SetUint64(c.limit)
	exp := big.NewInt(0).SetUint64(c.expected)

	got := normalizedValue(n, total, limit)
	require.Zero(t, exp.Cmp(got), c.name)
}