mirror of
https://github.com/duke-git/lancet.git
synced 2026-02-04 12:52:28 +08:00
* [FEATURE] typemap, quick map any type to specified type * [DOC] add more test case --------- Co-authored-by: zhijian.chen <zhijian.chen@longsys.com>
122 lines
2.8 KiB
Go
122 lines
2.8 KiB
Go
package typemap
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
type (
|
|
Person struct {
|
|
Name string `json:"name"`
|
|
Age int `json:"age"`
|
|
Phone string `json:"phone"`
|
|
Addr Address `json:"address"`
|
|
}
|
|
|
|
Address struct {
|
|
Street string `json:"street"`
|
|
Number int `json:"number"`
|
|
}
|
|
)
|
|
|
|
func TestTransform(t *testing.T) {
|
|
src := map[string]interface{}{
|
|
"name": "Nothin",
|
|
"age": 28,
|
|
"phone": "123456789",
|
|
"address": map[string]interface{}{
|
|
"street": "test",
|
|
"number": 1,
|
|
},
|
|
}
|
|
|
|
var p Person
|
|
err := MapTo(src, &p)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, src["name"], p.Name)
|
|
assert.Equal(t, src["age"], p.Age)
|
|
assert.Equal(t, src["phone"], p.Phone)
|
|
assert.Equal(t, "test", p.Addr.Street)
|
|
assert.Equal(t, 1, p.Addr.Number)
|
|
}
|
|
|
|
func TestBaseType(t *testing.T) {
|
|
tc := map[string]interface{}{
|
|
"i32": -32,
|
|
"i8": -8,
|
|
"i16": -16,
|
|
"i64": -64,
|
|
"i": -1,
|
|
"u32": 32,
|
|
"u8": 8,
|
|
"u16": 16,
|
|
"u64": 64,
|
|
"u": 1,
|
|
"tf": true,
|
|
"f32": 1.32,
|
|
"f64": 1.64,
|
|
"str": "hello mapto",
|
|
"complex": 1 + 3i,
|
|
}
|
|
|
|
type BaseType struct {
|
|
I int `json:"i"`
|
|
I8 int8 `json:"i8"`
|
|
I16 int16 `json:"i16"`
|
|
I32 int32 `json:"i32"`
|
|
I64 int64 `json:"i64"`
|
|
U uint `json:"u"`
|
|
U8 uint8 `json:"u8"`
|
|
U16 uint16 `json:"u16"`
|
|
U32 uint32 `json:"u32"`
|
|
U64 uint64 `json:"u64"`
|
|
F32 float32 `json:"f32"`
|
|
F64 float64 `json:"f64"`
|
|
Tf bool `json:"tf"`
|
|
Str string `json:"str"`
|
|
Comp complex128 `json:"complex"`
|
|
}
|
|
var dist BaseType
|
|
err := MapTo(tc, &dist)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, -1, dist.I)
|
|
assert.EqualValues(t, -8, dist.I8)
|
|
assert.EqualValues(t, -16, dist.I16)
|
|
assert.EqualValues(t, -32, dist.I32)
|
|
assert.EqualValues(t, -64, dist.I64)
|
|
assert.EqualValues(t, 1, dist.U)
|
|
assert.EqualValues(t, 8, dist.U8)
|
|
assert.EqualValues(t, 16, dist.U16)
|
|
assert.EqualValues(t, 32, dist.U32)
|
|
assert.EqualValues(t, 64, dist.U64)
|
|
assert.EqualValues(t, tc["f32"], dist.F32)
|
|
assert.EqualValues(t, tc["f64"], dist.F64)
|
|
assert.EqualValues(t, tc["str"], dist.Str)
|
|
assert.EqualValues(t, tc["tf"], dist.Tf)
|
|
assert.EqualValues(t, tc["complex"], dist.Comp)
|
|
|
|
var number float64
|
|
|
|
MapTo(tc["i"], &number)
|
|
assert.EqualValues(t, -1, number)
|
|
MapTo(tc["i8"], &number)
|
|
assert.EqualValues(t, -8, number)
|
|
MapTo(tc["i16"], &number)
|
|
assert.EqualValues(t, -16, number)
|
|
MapTo(tc["i32"], &number)
|
|
assert.EqualValues(t, -32, number)
|
|
MapTo(tc["i64"], &number)
|
|
assert.EqualValues(t, -64, number)
|
|
MapTo(tc["u"], &number)
|
|
assert.EqualValues(t, 1, number)
|
|
MapTo(tc["u8"], &number)
|
|
assert.EqualValues(t, 8, number)
|
|
MapTo(tc["u16"], &number)
|
|
assert.EqualValues(t, 16, number)
|
|
MapTo(tc["u32"], &number)
|
|
assert.EqualValues(t, 32, number)
|
|
MapTo(tc["u64"], &number)
|
|
assert.EqualValues(t, 64, number)
|
|
}
|