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 }