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  }