Files
go-easy-utils/jsonUtil/to_float_test.go
2024-04-03 10:46:39 +08:00

282 lines
5.7 KiB
Go

package jsonUtil
import (
go_easy_utils "github.com/jefferyjob/go-easy-utils/v2"
"reflect"
"testing"
)
//func TestFloat(t *testing.T) {
// var data1 any
// data1 = 123
// fmt.Println(toFloat64Reflect(data1))
//
// data2 := int16Ptr(80)
// fmt.Println(toFloat64Reflect(data2))
//
// data3 := map[any]any{
// "aaa": "aaa",
// }
// fmt.Println(toFloat64Reflect(data3))
//}
func TestToFloat64(t *testing.T) {
testCases := []struct {
value any
expected float64
expectedErr error
}{
{nil, 0, nil},
{float32(123.5), 123.5, nil},
{"123.456", 123.456, nil},
{uint(123), 123, nil},
{uint8(123), 123, nil},
{uint16(123), 123, nil},
{uint32(123), 123, nil},
{uint64(123), 123, nil},
{int(123), 123, nil},
{int8(123), 123, nil},
{int16(123), 123, nil},
{int32(123), 123, nil},
{int64(123), 123, nil},
{complex64(1 + 2i), 1, nil},
{complex128(1 + 2i), 1, nil},
{true, 1, nil},
{false, 0, nil},
{(*bool)(nil), 0, nil},
{make(chan int), 0, go_easy_utils.ErrType},
{"abc", 0, go_easy_utils.ErrSyntax},
}
for _, tc := range testCases {
f, err := toFloat64(tc.value)
if f != tc.expected || err != tc.expectedErr {
t.Errorf("toFloat64(%v) = (%v, %v), expected (%v, %v)", tc.value, f, err, tc.expected, tc.expectedErr)
}
f2, err2 := toFloat64Reflect(tc.value)
if f != tc.expected || err2 != tc.expectedErr {
t.Errorf("toFloat64Reflect(%v) = (%v, %v), expected (%v, %v)", tc.value, f2, err2, tc.expected, tc.expectedErr)
}
}
}
func TestToFloat64Pointer(t *testing.T) {
testCases := []struct {
name string
input any
expectedValue float64
expectedError error
}{
{
name: "nil input",
input: nil,
expectedValue: 0,
expectedError: nil,
},
{
name: "float32 pointer input",
input: float32Ptr(12.2),
expectedValue: 12.199999809265137,
expectedError: nil,
},
{
name: "float64 pointer input",
input: float64Ptr(56.78),
expectedValue: 56.78,
expectedError: nil,
},
{
name: "invalid string input",
input: stringPtr("abc"),
expectedValue: 0,
expectedError: go_easy_utils.ErrSyntax,
},
{
name: "valid string input",
input: stringPtr("123.45"),
expectedValue: 123.45,
expectedError: nil,
},
{
name: "uint pointer input",
input: uintPtr(10),
expectedValue: 10,
expectedError: nil,
},
{
name: "uint8 pointer input",
input: uint8Ptr(20),
expectedValue: 20,
expectedError: nil,
},
{
name: "uint16 pointer input",
input: uint16Ptr(30),
expectedValue: 30,
expectedError: nil,
},
{
name: "uint32 pointer input",
input: uint32Ptr(40),
expectedValue: 40,
expectedError: nil,
},
{
name: "uint64 pointer input",
input: uint64Ptr(50),
expectedValue: 50,
expectedError: nil,
},
{
name: "int pointer input",
input: intPtr(-60),
expectedValue: -60,
expectedError: nil,
},
{
name: "int8 pointer input",
input: int8Ptr(-70),
expectedValue: -70,
expectedError: nil,
},
{
name: "int16 pointer input",
input: int16Ptr(-80),
expectedValue: -80,
expectedError: nil,
},
{
name: "int32 pointer input",
input: int32Ptr(-90),
expectedValue: -90,
expectedError: nil,
},
{
name: "int64 pointer input",
input: int64Ptr(-100),
expectedValue: -100,
expectedError: nil,
},
{
name: "complex64 pointer input",
input: complex64Ptr(complex(1, 2)),
expectedValue: 1,
expectedError: nil,
},
{
name: "complex128 pointer input",
input: complex128Ptr(complex(3, 4)),
expectedValue: 3,
expectedError: nil,
},
{
name: "bool pointer input - true",
input: boolPtr(true),
expectedValue: 1,
expectedError: nil,
},
{
name: "bool pointer input - false",
input: boolPtr(false),
expectedValue: 0,
expectedError: nil,
},
{
name: "unsupported input type",
input: "unsupported",
expectedValue: 0,
expectedError: go_easy_utils.ErrSyntax,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
actualValue, actualError := toFloat64(tc.input)
if actualError != tc.expectedError {
t.Errorf("Expected(name:%s) error: %v, but got: %v", tc.name, tc.expectedError, actualError)
}
if !reflect.DeepEqual(actualValue, tc.expectedValue) {
t.Errorf("Expected value: %v, but got: %v", tc.expectedValue, actualValue)
}
// Reflect
actualValue2, actualError2 := toFloat64Reflect(tc.input)
if actualError2 != tc.expectedError {
t.Errorf("Expected(name:%s) error: %v, but got: %v", tc.name, tc.expectedError, actualError2)
}
if !reflect.DeepEqual(actualValue2, tc.expectedValue) {
t.Errorf("Expected value: %v, but got: %v", tc.expectedValue, actualValue2)
}
})
}
}
func float32Ptr(v float32) *float32 {
return &v
}
func float64Ptr(v float64) *float64 {
return &v
}
func stringPtr(v string) *string {
return &v
}
func uintPtr(v uint) *uint {
return &v
}
func uint8Ptr(v uint8) *uint8 {
return &v
}
func uint16Ptr(v uint16) *uint16 {
return &v
}
func uint32Ptr(v uint32) *uint32 {
return &v
}
func uint64Ptr(v uint64) *uint64 {
return &v
}
func intPtr(v int) *int {
return &v
}
func int8Ptr(v int8) *int8 {
return &v
}
func int16Ptr(v int16) *int16 {
return &v
}
func int32Ptr(v int32) *int32 {
return &v
}
func int64Ptr(v int64) *int64 {
return &v
}
func complex64Ptr(v complex64) *complex64 {
return &v
}
func complex128Ptr(v complex128) *complex128 {
return &v
}
func boolPtr(v bool) *bool {
return &v
}