Files
go-easy-utils/anyUtil/any_to_int_x_test.go
libin b756c25673 int
2023-03-23 08:34:35 +08:00

138 lines
2.9 KiB
Go

package anyUtil
import (
"errors"
"fmt"
"testing"
)
func TestAnyToInt(t *testing.T) {
tests := []struct {
input interface{}
want int
}{
{1, 1},
{int8(2), 2},
{int16(3), 3},
{int32(4), 4},
{int64(5), 5},
{uint(6), 6},
{uint8(7), 7},
{uint16(8), 8},
{uint32(9), 9},
{uint64(10), 10},
{"11", 11},
{"invalid", 0},
}
for _, test := range tests {
got, err := AnyToInt(test.input)
if err != nil {
if test.want != 0 {
t.Errorf("AnyToInt(%v) error: %v", test.input, err)
}
} else if got != test.want {
t.Errorf("AnyToInt(%v) = %v, want %v", test.input, got, test.want)
}
}
}
func TestAnyToInt8(t *testing.T) {
tests := []struct {
input interface{}
want int8
err bool
}{
{1, 1, false},
{int8(2), 2, false},
}
for _, test := range tests {
got, err := AnyToInt8(test.input)
if err != nil {
if !test.err {
t.Errorf("AnyToInt8(%v) error: %v", test.input, err)
}
} else if got != test.want {
t.Errorf("AnyToInt8(%v) = %v, want %v", test.input, got, test.want)
}
}
}
func TestAnyToInt16(t *testing.T) {
tests := []struct {
input interface{}
want int16
err error
}{
{int16(42), 42, nil},
{int8(42), 42, nil},
{int32(42), 42, nil},
{int64(42), 42, nil},
{uint(42), 42, nil},
{uint8(42), 42, nil},
{uint16(42), 42, nil},
{uint32(42), 42, nil},
{uint64(42), 42, nil},
{"42", 42, nil},
}
for _, tt := range tests {
got, err := AnyToInt16(tt.input)
if got != tt.want || !errors.Is(err, tt.err) {
t.Errorf("AnyToInt16(%v) = (%v, %v); want (%v, %v)", tt.input, got, err, tt.want, tt.err)
}
}
}
func TestAnyToInt32(t *testing.T) {
tests := []struct {
input interface{}
want int32
err error
}{
{int32(42), 42, nil},
{int8(42), 42, nil},
{int16(42), 42, nil},
}
for _, tt := range tests {
got, err := AnyToInt32(tt.input)
if got != tt.want || !errors.Is(err, tt.err) {
t.Errorf("AnyToInt32(%v) = (%v, %v); want (%v, %v)", tt.input, got, err, tt.want, tt.err)
}
}
}
func TestAnyToInt64(t *testing.T) {
tests := []struct {
name string
input interface{}
expected int64
err error
}{
{"int", 42, 42, nil},
{"int8", int8(42), 42, nil},
{"int16", int16(42), 42, nil},
{"int32", int32(42), 42, nil},
{"int64", int64(42), 42, nil},
{"uint", uint(42), 42, nil},
{"uint8", uint8(42), 42, nil},
{"uint16", uint16(42), 42, nil},
{"uint32", uint32(42), 42, nil},
{"uint64", uint64(42), 42, nil},
{"string", "42", 42, nil},
{"invalid", struct{}{}, 0, fmt.Errorf("unsupported type struct {}")},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result, err := AnyToInt64(tt.input)
if err != nil && err.Error() != tt.err.Error() {
t.Fatalf("unexpected error: expected %v, got %v", tt.err, err)
}
if result != tt.expected {
t.Fatalf("unexpected result: expected %v, got %v", tt.expected, result)
}
})
}
}