package strconv

import (
	"reflect"
	"testing"

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

var IntegerTypeToName = map[reflect.Type]string{
	reflect.TypeOf(uint64(0)): "uint64",
	reflect.TypeOf(uint32(0)): "uint32",
	reflect.TypeOf(uint16(0)): "uint16",
	reflect.TypeOf(uint8(0)):  "uint8",
	reflect.TypeOf(uint(0)):   "uint",
	reflect.TypeOf(int64(0)):  "int64",
	reflect.TypeOf(int32(0)):  "int32",
	reflect.TypeOf(int16(0)):  "int16",
	reflect.TypeOf(int8(0)):   "int8",
	reflect.TypeOf(int(0)):    "int",
}

func TestToInteger(t *testing.T) {
	integer, err := ToInteger[uint64]("1", 10)
	assert.NoError(t, err)
	assert.Equal(t, integer, uint64(1))

	for integerType, name := range IntegerTypeToName {
		assert.Equal(t, integerType.String(), name)
	}
	// Now we can ensure use-case like ToInteger[uint64](s, base) runs strconv.ParseUint(s, base, "64").
}
