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