69 lines
2.4 KiB
Go
69 lines
2.4 KiB
Go
package reinterpret
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"gotest.tools/v3/assert"
|
|
)
|
|
|
|
func TestReinterpretSign(t *testing.T) {
|
|
for _, tt := range []struct {
|
|
unsigned uint64
|
|
length uint8
|
|
signed int64
|
|
}{
|
|
// -1, byte aligned
|
|
{unsigned: 0xf, length: 4, signed: -1},
|
|
{unsigned: 0xff, length: 8, signed: -1},
|
|
{unsigned: 0xfff, length: 12, signed: -1},
|
|
{unsigned: 0xffff, length: 16, signed: -1},
|
|
{unsigned: 0xfffff, length: 20, signed: -1},
|
|
{unsigned: 0xffffff, length: 24, signed: -1},
|
|
{unsigned: 0xfffffff, length: 28, signed: -1},
|
|
{unsigned: 0xffffffff, length: 32, signed: -1},
|
|
{unsigned: 0xfffffffff, length: 36, signed: -1},
|
|
{unsigned: 0xffffffffff, length: 40, signed: -1},
|
|
{unsigned: 0xfffffffffff, length: 44, signed: -1},
|
|
{unsigned: 0xffffffffffff, length: 48, signed: -1},
|
|
{unsigned: 0xfffffffffffff, length: 52, signed: -1},
|
|
{unsigned: 0xffffffffffffff, length: 56, signed: -1},
|
|
{unsigned: 0xfffffffffffffff, length: 60, signed: -1},
|
|
{unsigned: 0xffffffffffffffff, length: 64, signed: -1},
|
|
// 3 bits
|
|
{unsigned: 0x0, length: 3, signed: 0},
|
|
{unsigned: 0x1, length: 3, signed: 1},
|
|
{unsigned: 0x2, length: 3, signed: 2},
|
|
{unsigned: 0x3, length: 3, signed: 3},
|
|
{unsigned: 0x4, length: 3, signed: -4},
|
|
{unsigned: 0x5, length: 3, signed: -3},
|
|
{unsigned: 0x6, length: 3, signed: -2},
|
|
{unsigned: 0x7, length: 3, signed: -1},
|
|
// 4 bits
|
|
{unsigned: 0x0, length: 4, signed: 0},
|
|
{unsigned: 0x1, length: 4, signed: 1},
|
|
{unsigned: 0x2, length: 4, signed: 2},
|
|
{unsigned: 0x3, length: 4, signed: 3},
|
|
{unsigned: 0x4, length: 4, signed: 4},
|
|
{unsigned: 0x5, length: 4, signed: 5},
|
|
{unsigned: 0x6, length: 4, signed: 6},
|
|
{unsigned: 0x7, length: 4, signed: 7},
|
|
{unsigned: 0x8, length: 4, signed: -8},
|
|
{unsigned: 0x9, length: 4, signed: -7},
|
|
{unsigned: 0xa, length: 4, signed: -6},
|
|
{unsigned: 0xb, length: 4, signed: -5},
|
|
{unsigned: 0xc, length: 4, signed: -4},
|
|
{unsigned: 0xd, length: 4, signed: -3},
|
|
{unsigned: 0xe, length: 4, signed: -2},
|
|
{unsigned: 0xf, length: 4, signed: -1},
|
|
} {
|
|
tt := tt
|
|
t.Run(fmt.Sprintf("%+v", tt), func(t *testing.T) {
|
|
assert.Equal(t, tt.signed, AsSigned(tt.unsigned, tt.length))
|
|
assert.Equal(t, tt.unsigned, AsUnsigned(tt.signed, tt.length))
|
|
assert.Equal(t, tt.signed, AsSigned(AsUnsigned(tt.signed, tt.length), tt.length))
|
|
assert.Equal(t, tt.unsigned, AsUnsigned(AsSigned(tt.unsigned, tt.length), tt.length))
|
|
})
|
|
}
|
|
}
|