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  }