github.com/jshiv/can-go@v0.2.1-0.20210224011015-069e90e90bdf/internal/reinterpret/reinterpret_test.go (about) 1 package reinterpret 2 3 import ( 4 "fmt" 5 "testing" 6 7 "gotest.tools/v3/assert" 8 ) 9 10 func TestReinterpretSign(t *testing.T) { 11 for _, tt := range []struct { 12 unsigned uint64 13 length uint8 14 signed int64 15 }{ 16 // -1, byte aligned 17 {unsigned: 0xf, length: 4, signed: -1}, 18 {unsigned: 0xff, length: 8, signed: -1}, 19 {unsigned: 0xfff, length: 12, signed: -1}, 20 {unsigned: 0xffff, length: 16, signed: -1}, 21 {unsigned: 0xfffff, length: 20, signed: -1}, 22 {unsigned: 0xffffff, length: 24, signed: -1}, 23 {unsigned: 0xfffffff, length: 28, signed: -1}, 24 {unsigned: 0xffffffff, length: 32, signed: -1}, 25 {unsigned: 0xfffffffff, length: 36, signed: -1}, 26 {unsigned: 0xffffffffff, length: 40, signed: -1}, 27 {unsigned: 0xfffffffffff, length: 44, signed: -1}, 28 {unsigned: 0xffffffffffff, length: 48, signed: -1}, 29 {unsigned: 0xfffffffffffff, length: 52, signed: -1}, 30 {unsigned: 0xffffffffffffff, length: 56, signed: -1}, 31 {unsigned: 0xfffffffffffffff, length: 60, signed: -1}, 32 {unsigned: 0xffffffffffffffff, length: 64, signed: -1}, 33 // 3 bits 34 {unsigned: 0x0, length: 3, signed: 0}, 35 {unsigned: 0x1, length: 3, signed: 1}, 36 {unsigned: 0x2, length: 3, signed: 2}, 37 {unsigned: 0x3, length: 3, signed: 3}, 38 {unsigned: 0x4, length: 3, signed: -4}, 39 {unsigned: 0x5, length: 3, signed: -3}, 40 {unsigned: 0x6, length: 3, signed: -2}, 41 {unsigned: 0x7, length: 3, signed: -1}, 42 // 4 bits 43 {unsigned: 0x0, length: 4, signed: 0}, 44 {unsigned: 0x1, length: 4, signed: 1}, 45 {unsigned: 0x2, length: 4, signed: 2}, 46 {unsigned: 0x3, length: 4, signed: 3}, 47 {unsigned: 0x4, length: 4, signed: 4}, 48 {unsigned: 0x5, length: 4, signed: 5}, 49 {unsigned: 0x6, length: 4, signed: 6}, 50 {unsigned: 0x7, length: 4, signed: 7}, 51 {unsigned: 0x8, length: 4, signed: -8}, 52 {unsigned: 0x9, length: 4, signed: -7}, 53 {unsigned: 0xa, length: 4, signed: -6}, 54 {unsigned: 0xb, length: 4, signed: -5}, 55 {unsigned: 0xc, length: 4, signed: -4}, 56 {unsigned: 0xd, length: 4, signed: -3}, 57 {unsigned: 0xe, length: 4, signed: -2}, 58 {unsigned: 0xf, length: 4, signed: -1}, 59 } { 60 tt := tt 61 t.Run(fmt.Sprintf("%+v", tt), func(t *testing.T) { 62 assert.Equal(t, tt.signed, AsSigned(tt.unsigned, tt.length)) 63 assert.Equal(t, tt.unsigned, AsUnsigned(tt.signed, tt.length)) 64 assert.Equal(t, tt.signed, AsSigned(AsUnsigned(tt.signed, tt.length), tt.length)) 65 assert.Equal(t, tt.unsigned, AsUnsigned(AsSigned(tt.unsigned, tt.length), tt.length)) 66 }) 67 } 68 }