/
typename_test.go
189 lines (179 loc) · 6.61 KB
/
typename_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
package sabi
import (
"github.com/stretchr/testify/assert"
"testing"
)
type V struct {
A string
B int
}
func (v V) GetA() string { return v.A }
func (v V) GetB() int { return v.B }
type I interface {
GetA() string
GetB() int
}
func TestTypeNameOf_values(t *testing.T) {
b := true
n := 123
n8 := int8(123)
n16 := int16(123)
n32 := int32(123)
n64 := int64(123)
u := uint(123)
u8 := uint8(123)
u16 := uint16(123)
u32 := uint32(123)
u64 := uint64(123)
f32 := float32(1.23)
f64 := float64(1.23)
c64 := complex64(1 + 2i)
c128 := complex128(1 + 2i)
str := "ABC"
arr := [2]int{1, 2}
slc := arr[:]
objV := V{A: "a", B: 1}
ptrV := &objV
var if1 I = objV
var if2 I = &objV
m := make(map[string]string)
fn := func() {}
chN := make(chan int)
chA := make(chan V)
assert.Equal(t, typeNameOf(b), "bool")
assert.Equal(t, typeNameOf(n), "int")
assert.Equal(t, typeNameOf(n8), "int8")
assert.Equal(t, typeNameOf(n16), "int16")
assert.Equal(t, typeNameOf(n32), "int32")
assert.Equal(t, typeNameOf(n64), "int64")
assert.Equal(t, typeNameOf(u), "uint")
assert.Equal(t, typeNameOf(u8), "uint8")
assert.Equal(t, typeNameOf(u16), "uint16")
assert.Equal(t, typeNameOf(u32), "uint32")
assert.Equal(t, typeNameOf(u64), "uint64")
assert.Equal(t, typeNameOf(f32), "float32")
assert.Equal(t, typeNameOf(f64), "float64")
assert.Equal(t, typeNameOf(c64), "complex64")
assert.Equal(t, typeNameOf(c128), "complex128")
assert.Equal(t, typeNameOf(str), "string")
assert.Equal(t, typeNameOf(arr), "[2]int")
assert.Equal(t, typeNameOf(slc), "[]int")
assert.Equal(t, typeNameOf(objV), "sabi.V")
assert.Equal(t, typeNameOf(ptrV), "*sabi.V")
assert.Equal(t, typeNameOf(if1), "sabi.V")
assert.Equal(t, typeNameOf(if2), "*sabi.V")
assert.Equal(t, typeNameOf(m), "map[string]string")
assert.Equal(t, typeNameOf(fn), "func()")
assert.Equal(t, typeNameOf(chN), "chan int")
assert.Equal(t, typeNameOf(chA), "chan sabi.V")
}
func TestTypeNameOf_pointers(t *testing.T) {
b := true
n := 123
n8 := int8(123)
n16 := int16(123)
n32 := int32(123)
n64 := int64(123)
u := uint(123)
u8 := uint8(123)
u16 := uint16(123)
u32 := uint32(123)
u64 := uint64(123)
f32 := float32(1.23)
f64 := float64(1.23)
c64 := complex64(1 + 2i)
c128 := complex128(1 + 2i)
str := "ABC"
arr := [2]int{1, 2}
slc := arr[:]
objV := V{A: "a", B: 1}
ptrV := &objV
var if1 I = objV
var if2 I = &objV
m := make(map[string]string)
fn := func() {}
chN := make(chan int)
chA := make(chan V)
assert.Equal(t, typeNameOf(&b), "*bool")
assert.Equal(t, typeNameOf(&n), "*int")
assert.Equal(t, typeNameOf(&n8), "*int8")
assert.Equal(t, typeNameOf(&n16), "*int16")
assert.Equal(t, typeNameOf(&n32), "*int32")
assert.Equal(t, typeNameOf(&n64), "*int64")
assert.Equal(t, typeNameOf(&u), "*uint")
assert.Equal(t, typeNameOf(&u8), "*uint8")
assert.Equal(t, typeNameOf(&u16), "*uint16")
assert.Equal(t, typeNameOf(&u32), "*uint32")
assert.Equal(t, typeNameOf(&u64), "*uint64")
assert.Equal(t, typeNameOf(&f32), "*float32")
assert.Equal(t, typeNameOf(&f64), "*float64")
assert.Equal(t, typeNameOf(&c64), "*complex64")
assert.Equal(t, typeNameOf(&c128), "*complex128")
assert.Equal(t, typeNameOf(&str), "*string")
assert.Equal(t, typeNameOf(&arr), "*[2]int")
assert.Equal(t, typeNameOf(&slc), "*[]int")
assert.Equal(t, typeNameOf(&objV), "*sabi.V")
assert.Equal(t, typeNameOf(&ptrV), "**sabi.V")
assert.Equal(t, typeNameOf(&if1), "*sabi.I")
assert.Equal(t, typeNameOf(&if2), "*sabi.I")
assert.Equal(t, typeNameOf(&m), "*map[string]string")
assert.Equal(t, typeNameOf(&fn), "*func()")
assert.Equal(t, typeNameOf(&chN), "*chan int")
assert.Equal(t, typeNameOf(&chA), "*chan sabi.V")
}
func TestTypeOfTypeParam_value(t *testing.T) {
assert.Equal(t, typeNameOfTypeParam[bool](), "bool")
assert.Equal(t, typeNameOfTypeParam[int](), "int")
assert.Equal(t, typeNameOfTypeParam[int8](), "int8")
assert.Equal(t, typeNameOfTypeParam[int16](), "int16")
assert.Equal(t, typeNameOfTypeParam[int32](), "int32")
assert.Equal(t, typeNameOfTypeParam[int64](), "int64")
assert.Equal(t, typeNameOfTypeParam[uint](), "uint")
assert.Equal(t, typeNameOfTypeParam[uint8](), "uint8")
assert.Equal(t, typeNameOfTypeParam[uint16](), "uint16")
assert.Equal(t, typeNameOfTypeParam[uint32](), "uint32")
assert.Equal(t, typeNameOfTypeParam[uint64](), "uint64")
assert.Equal(t, typeNameOfTypeParam[float32](), "float32")
assert.Equal(t, typeNameOfTypeParam[float64](), "float64")
assert.Equal(t, typeNameOfTypeParam[complex64](), "complex64")
assert.Equal(t, typeNameOfTypeParam[complex128](), "complex128")
assert.Equal(t, typeNameOfTypeParam[string](), "string")
assert.Equal(t, typeNameOfTypeParam[[2]int](), "[2]int")
assert.Equal(t, typeNameOfTypeParam[[]int](), "[]int")
assert.Equal(t, typeNameOfTypeParam[V](), "sabi.V")
assert.Equal(t, typeNameOfTypeParam[*V](), "*sabi.V")
assert.Equal(t, typeNameOfTypeParam[I](), "sabi.I")
assert.Equal(t, typeNameOfTypeParam[map[string]string](),
"map[string]string")
assert.Equal(t, typeNameOfTypeParam[func()](), "func()")
assert.Equal(t, typeNameOfTypeParam[chan int](), "chan int")
assert.Equal(t, typeNameOfTypeParam[chan V](), "chan sabi.V")
}
func TestTypeOfTypeParam_pointer(t *testing.T) {
assert.Equal(t, typeNameOfTypeParam[*bool](), "*bool")
assert.Equal(t, typeNameOfTypeParam[*int](), "*int")
assert.Equal(t, typeNameOfTypeParam[*int8](), "*int8")
assert.Equal(t, typeNameOfTypeParam[*int16](), "*int16")
assert.Equal(t, typeNameOfTypeParam[*int32](), "*int32")
assert.Equal(t, typeNameOfTypeParam[*int64](), "*int64")
assert.Equal(t, typeNameOfTypeParam[*uint](), "*uint")
assert.Equal(t, typeNameOfTypeParam[*uint8](), "*uint8")
assert.Equal(t, typeNameOfTypeParam[*uint16](), "*uint16")
assert.Equal(t, typeNameOfTypeParam[*uint32](), "*uint32")
assert.Equal(t, typeNameOfTypeParam[*uint64](), "*uint64")
assert.Equal(t, typeNameOfTypeParam[*float32](), "*float32")
assert.Equal(t, typeNameOfTypeParam[*float64](), "*float64")
assert.Equal(t, typeNameOfTypeParam[*complex64](), "*complex64")
assert.Equal(t, typeNameOfTypeParam[*complex128](), "*complex128")
assert.Equal(t, typeNameOfTypeParam[*string](), "*string")
assert.Equal(t, typeNameOfTypeParam[*[2]int](), "*[2]int")
assert.Equal(t, typeNameOfTypeParam[*[]int](), "*[]int")
assert.Equal(t, typeNameOfTypeParam[*V](), "*sabi.V")
assert.Equal(t, typeNameOfTypeParam[**V](), "**sabi.V")
assert.Equal(t, typeNameOfTypeParam[*I](), "*sabi.I")
assert.Equal(t, typeNameOfTypeParam[*map[string]string](),
"*map[string]string")
assert.Equal(t, typeNameOfTypeParam[*func()](), "*func()")
assert.Equal(t, typeNameOfTypeParam[*chan int](), "*chan int")
assert.Equal(t, typeNameOfTypeParam[*chan V](), "*chan sabi.V")
}