github.com/bobyang007/helper@v1.1.3/reflecth/op-shift_test.go (about)

     1  package reflecth
     2  
     3  import (
     4  	"go/token"
     5  	"reflect"
     6  	"testing"
     7  )
     8  
     9  func TestShiftOp(t *testing.T) {
    10  	type testElement struct {
    11  		x   interface{}
    12  		op  token.Token
    13  		s   uint
    14  		r   interface{}
    15  		err bool
    16  	}
    17  
    18  	tests := []testElement{
    19  		{int(8), token.SHL, 1, int(16), false},
    20  		{int8(8), token.SHL, 1, int8(16), false},
    21  		{int16(8), token.SHL, 2, int16(32), false},
    22  		{int32(8), token.SHL, 2, int32(32), false},
    23  		{int64(8), token.SHL, 3, int64(64), false},
    24  		{uint(8), token.SHL, 1, uint(16), false},
    25  		{uint8(8), token.SHL, 1, uint8(16), false},
    26  		{uint16(8), token.SHL, 2, uint16(32), false},
    27  		{uint32(8), token.SHL, 2, uint32(32), false},
    28  		{uint64(8), token.SHL, 3, uint64(64), false},
    29  		{int(8), token.SHR, 1, int(4), false},
    30  		{int8(8), token.SHR, 1, int8(4), false},
    31  		{int16(8), token.SHR, 2, int16(2), false},
    32  		{int32(8), token.SHR, 2, int32(2), false},
    33  		{int64(8), token.SHR, 3, int64(1), false},
    34  		{uint(8), token.SHR, 1, uint(4), false},
    35  		{uint8(8), token.SHR, 1, uint8(4), false},
    36  		{uint16(8), token.SHR, 2, uint16(2), false},
    37  		{uint32(8), token.SHR, 2, uint32(2), false},
    38  		{uint64(8), token.SHR, 3, uint64(1), false},
    39  		// negative
    40  		{float32(8), token.SHL, 1, nil, true},
    41  		{float32(8), token.SHR, 1, nil, true},
    42  		{int(8), token.EQL, 1, nil, true},
    43  	}
    44  
    45  	for _, test := range tests {
    46  		r, err := ShiftOp(reflect.ValueOf(test.x), test.op, test.s)
    47  		if err != nil != test.err || (!test.err && (r.Interface() != test.r)) {
    48  			t.Errorf("%v %v %v: expect %v %v, got %v %v", test.x, test.op, test.s, test.r, test.err, r, err)
    49  		}
    50  	}
    51  }