github.com/visualfc/xtype@v0.2.0/xtype_test.go (about) 1 package xtype_test 2 3 import ( 4 "fmt" 5 "reflect" 6 "runtime" 7 "testing" 8 9 "github.com/visualfc/xtype" 10 ) 11 12 func TestInt(t *testing.T) { 13 type T int 14 i1 := T(100) 15 if n := xtype.Int(i1); n != 100 { 16 t.Fatal(n) 17 } 18 typ := xtype.TypeOf(i1) 19 i2 := xtype.Make(typ, 200) 20 if n := xtype.Int(i2); n != 200 { 21 t.Fatal(n) 22 } 23 } 24 25 func TestUint(t *testing.T) { 26 type T uint 27 i1 := T(100) 28 if n := xtype.Uint(i1); n != 100 { 29 t.Fatal(n) 30 } 31 typ := xtype.TypeOf(i1) 32 i2 := xtype.Make(typ, 200) 33 if n := xtype.Uint(i2); n != 200 { 34 t.Fatal(n) 35 } 36 } 37 38 func TestFloat32(t *testing.T) { 39 type T float32 40 i1 := T(100.1) 41 if n := xtype.Float32(i1); n != 100.1 { 42 t.Fatal("check", n) 43 } 44 typ := xtype.TypeOf(i1) 45 i2 := xtype.Make(typ, float32(200.1)) 46 if n := xtype.Float32(i2); n != 200.1 { 47 t.Fatal("new at", n) 48 } 49 } 50 51 func TestComplex64(t *testing.T) { 52 type T complex64 53 i1 := T(1 + 2i) 54 if n := xtype.Complex64(i1); n != 1+2i { 55 t.Fatal("check", n) 56 } 57 typ := xtype.TypeOf(i1) 58 i2 := xtype.Make(typ, complex64(3+4i)) 59 if n := xtype.Complex64(i2); n != 3+4i { 60 t.Fatal("new at", n) 61 } 62 } 63 64 func TestString(t *testing.T) { 65 type T string 66 i1 := T("hello") 67 if n := xtype.String(i1); n != "hello" { 68 t.Fatal("check", n) 69 } 70 typ := xtype.TypeOf(i1) 71 i2 := xtype.Make(typ, "world") 72 if n := xtype.String(i2); n != "world" { 73 t.Fatal("new at", n) 74 } 75 } 76 77 func TestNot(t *testing.T) { 78 type T bool 79 var b T 80 if r := xtype.Not(b); xtype.Bool(r) != true { 81 t.Fatal("must true") 82 } 83 b = true 84 if r := xtype.Not(b); xtype.Bool(r) != false { 85 t.Fatal("must false") 86 } 87 } 88 89 func TestNegInt(t *testing.T) { 90 type T int 91 var n T = 100 92 if r := xtype.NegInt(n); xtype.Int(r) != -100 { 93 t.Fatal(r) 94 } 95 n = -200 96 if r := xtype.NegInt(n); xtype.Int(r) != 200 { 97 t.Fatal(r) 98 } 99 } 100 101 func TestNegUint8(t *testing.T) { 102 type T uint8 103 var n T = 255 104 if r := xtype.NegUint8(n); xtype.Uint8(r) != 1 { 105 t.Fatal(r) 106 } 107 n = 1 108 if r := xtype.NegUint8(n); xtype.Uint8(r) != 255 { 109 t.Fatal(r) 110 } 111 } 112 113 func TestNegFloat32(t *testing.T) { 114 type T float32 115 var n T = 123.456 116 if r := xtype.NegFloat32(n); xtype.Float32(r) != -123.456 { 117 t.Fatal(r) 118 } 119 n = -1 120 if r := xtype.NegFloat32(n); xtype.Float32(r) != 1 { 121 t.Fatal(r) 122 } 123 } 124 125 func TestNegComplex64(t *testing.T) { 126 type T complex64 127 var n T = 1 + 2i 128 if r := xtype.NegComplex64(n); xtype.Complex64(r) != -1-2i { 129 t.Fatal(r) 130 } 131 n = -1 132 if r := xtype.NegComplex64(n); xtype.Complex64(r) != 1 { 133 t.Fatal() 134 } 135 } 136 137 func TestXorInt8(t *testing.T) { 138 type T int8 139 var n T = 0b11 140 if r := xtype.XorInt8(n); xtype.Int8(r) != -0b100 { 141 t.Fatal(r) 142 } 143 } 144 145 func TestXorUint8(t *testing.T) { 146 type T uint 147 var n T = 0b11 148 if r := xtype.XorUint8(n); xtype.Uint8(r) != 0b11111100 { 149 t.Fatal(r) 150 } 151 } 152 153 func TestConvertInt(t *testing.T) { 154 type T int 155 var n int = 100 156 typ := xtype.TypeOf(T(0)) 157 if r := xtype.ConvertInt(typ, n); xtype.Int(r) != n { 158 t.Fatal(r) 159 } 160 } 161 162 func TestConvertFloat32(t *testing.T) { 163 type T float32 164 var n float32 = 100.1 165 typ := xtype.TypeOf(T(0)) 166 if r := xtype.ConvertFloat32(typ, n); xtype.Float32(r) != n { 167 t.Fatal(r) 168 } 169 } 170 171 func TestConvertComplex64(t *testing.T) { 172 type T complex64 173 var n complex64 = 1 + 2i 174 typ := xtype.TypeOf(T(0)) 175 if r := xtype.ConvertComplex64(typ, n); xtype.Complex64(r) != n { 176 t.Fatal(r) 177 } 178 } 179 180 func TestConvertString(t *testing.T) { 181 type T string 182 var n string = "hello" 183 typ := xtype.TypeOf(T("")) 184 if r := xtype.ConvertString(typ, n); xtype.String(r) != n { 185 t.Fatal(r) 186 } 187 } 188 189 func TestMakeInt(t *testing.T) { 190 type T int 191 typ := xtype.TypeOf(T(0)) 192 if r := xtype.MakeInt(typ, 100); xtype.Int(r) != 100 { 193 t.Fatal(r) 194 } 195 } 196 197 func TestMakeFloat32(t *testing.T) { 198 type T float32 199 typ := xtype.TypeOf(T(0)) 200 if r := xtype.MakeFloat32(typ, 100.1); xtype.Float32(r) != 100.1 { 201 t.Fatal(r) 202 } 203 } 204 205 func TestAllocInt(t *testing.T) { 206 type T int 207 typ := xtype.TypeOf(T(0)) 208 r := xtype.Alloc(typ) 209 if s := fmt.Sprintf("%T %#v", r, r); s != "xtype_test.T 0" { 210 panic(s) 211 } 212 } 213 214 func TestAllocStruct(t *testing.T) { 215 type T struct { 216 X int 217 Y int 218 } 219 typ := xtype.TypeOf(T{}) 220 r := xtype.Alloc(typ) 221 if s := fmt.Sprintf("%#v", r); s != "xtype_test.T{X:0, Y:0}" { 222 panic(s) 223 } 224 } 225 226 func TestAllocPtr(t *testing.T) { 227 type T struct { 228 X int 229 Y int 230 } 231 typ := xtype.TypeOf(&T{}) 232 r := xtype.Alloc(typ) 233 if s := fmt.Sprintf("%#v", r); s != "&xtype_test.T{X:0, Y:0}" { 234 panic(s) 235 } 236 } 237 238 func TestAllocInterfce(t *testing.T) { 239 if runtime.Compiler == "gopherjs" { 240 t.Skip("skip gopherjs") 241 } 242 type T = fmt.Stringer 243 typ := xtype.TypeOfType(reflect.TypeOf((*T)(nil)).Elem()) 244 r := xtype.Alloc(typ) 245 if s := fmt.Sprintf("%#v", r); s != "fmt.Stringer(nil)" { 246 panic(s) 247 } 248 } 249 250 func TestNewInt(t *testing.T) { 251 type T int 252 v := T(0) 253 typ := xtype.TypeOf(v) 254 ptrto := xtype.TypeOf(&v) 255 r := xtype.New(typ, ptrto) 256 if s := fmt.Sprintf("%T %#v", r, *(r.(*T))); s != "*xtype_test.T 0" { 257 panic(s) 258 } 259 } 260 261 func TestNewStruct(t *testing.T) { 262 type T struct { 263 X int 264 Y int 265 } 266 var v T 267 typ := xtype.TypeOf(v) 268 ptrto := xtype.TypeOf(&v) 269 r := xtype.New(typ, ptrto) 270 if s := fmt.Sprintf("%#v", r); s != "&xtype_test.T{X:0, Y:0}" { 271 panic(s) 272 } 273 } 274 275 func TestNewInterfce(t *testing.T) { 276 type T = fmt.Stringer 277 rt := reflect.TypeOf((*T)(nil)) 278 typ := xtype.TypeOfType(rt.Elem()) 279 ptrto := xtype.TypeOfType(rt) 280 r := xtype.New(typ, ptrto) 281 if s := fmt.Sprintf("%T %v", r, *(r.(*T))); s != "*fmt.Stringer <nil>" { 282 panic(s) 283 } 284 } 285 286 type N int 287 288 func fntest(n N) N { 289 return n + 100 290 } 291 292 func TestConvertFunc(t *testing.T) { 293 fn := reflect.ValueOf(fntest) 294 typ := reflect.TypeOf((*func(int) int)(nil)).Elem() 295 v := xtype.ConvertFunc(fn, xtype.TypeOfType(typ)) 296 if fn.Type() == typ { 297 t.Fatal("change org type") 298 } 299 if v.Type() != typ { 300 t.Fatalf("error %v != %v", v.Type(), typ) 301 } 302 if n := v.Interface().(func(int) int)(100); n != 200 { 303 t.Fatalf("error %v != 200", n) 304 } 305 }