mirror of
https://github.com/jefferyjob/go-easy-utils.git
synced 2025-09-27 03:15:55 +08:00
282 lines
5.7 KiB
Go
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
|
|
}
|