1
2
3
4
5
6
7 package simd_test
8
9 import (
10 "simd/archsimd"
11 "testing"
12 )
13
14 func TestShift(t *testing.T) {
15
16 testInt8x16Binary(t, archsimd.Int8x16.Shift, shiftSlice[int8])
17 testInt16x8Binary(t, archsimd.Int16x8.Shift, shiftSlice[int16])
18 testInt32x4Binary(t, archsimd.Int32x4.Shift, shiftSlice[int32])
19 testInt64x2Binary(t, archsimd.Int64x2.Shift, shiftSlice[int64])
20
21
22 testUint8x16Shift(t, archsimd.Uint8x16.Shift, shiftMixedSlice[uint8, int8])
23 testUint16x8Shift(t, archsimd.Uint16x8.Shift, shiftMixedSlice[uint16, int16])
24 testUint32x4Shift(t, archsimd.Uint32x4.Shift, shiftMixedSlice[uint32, int32])
25 testUint64x2Shift(t, archsimd.Uint64x2.Shift, shiftMixedSlice[uint64, int64])
26 }
27
28 func TestShiftSaturated(t *testing.T) {
29
30 testInt8x16Binary(t, archsimd.Int8x16.ShiftSaturated, shiftSaturatingSignedSlice[int8])
31 testInt16x8Binary(t, archsimd.Int16x8.ShiftSaturated, shiftSaturatingSignedSlice[int16])
32 testInt32x4Binary(t, archsimd.Int32x4.ShiftSaturated, shiftSaturatingSignedSlice[int32])
33 testInt64x2Binary(t, archsimd.Int64x2.ShiftSaturated, shiftSaturatingSignedSlice[int64])
34
35
36 testUint8x16Shift(t, archsimd.Uint8x16.ShiftSaturated, shiftSaturatingUnsignedSlice[uint8, int8])
37 testUint16x8Shift(t, archsimd.Uint16x8.ShiftSaturated, shiftSaturatingUnsignedSlice[uint16, int16])
38 testUint32x4Shift(t, archsimd.Uint32x4.ShiftSaturated, shiftSaturatingUnsignedSlice[uint32, int32])
39 testUint64x2Shift(t, archsimd.Uint64x2.ShiftSaturated, shiftSaturatingUnsignedSlice[uint64, int64])
40 }
41
42 func TestConcatShiftBytesRight(t *testing.T) {
43 hide := hideConst[uint64]
44
45 csbr := func(shift uint64) func(x, y []uint8) []uint8 {
46 return func(x, y []uint8) []uint8 {
47 z := make([]uint8, len(x))
48 for i := range z {
49 target := i + int(shift)
50 if target < 16 {
51 z[i] = y[target]
52 } else if target < 32 {
53 z[i] = x[(target - 16)]
54 }
55 }
56 return z
57 }
58 }
59
60 t.Run("Uint8x16", func(t *testing.T) {
61 for _, shift := range []uint64{0, 2, 8, 15} {
62 t.Log("shift", shift)
63 testUint8x16Binary(t,
64 func(x, y archsimd.Uint8x16) archsimd.Uint8x16 { return x.ConcatShiftBytesRight(y, shift) },
65 csbr(shift))
66 testUint8x16Binary(t,
67 func(x, y archsimd.Uint8x16) archsimd.Uint8x16 { return x.ConcatShiftBytesRight(y, hide(shift)) },
68 csbr(hide(shift)))
69 }
70 })
71 }
72
73 func TestShiftAll8(t *testing.T) {
74 testInt8x16ShiftAll(t, archsimd.Int8x16.ShiftAllLeft, shiftAllLeftSlice[int8])
75 testUint8x16ShiftAll(t, archsimd.Uint8x16.ShiftAllLeft, shiftAllLeftSlice[uint8])
76 testInt8x16ShiftAll(t, archsimd.Int8x16.ShiftAllRight, shiftAllRightSlice[int8])
77 testUint8x16ShiftAll(t, archsimd.Uint8x16.ShiftAllRight, shiftAllRightSlice[uint8])
78 }
79
View as plain text