1
2
3
4
5
6
7 package simd_test
8
9 import (
10 "simd/archsimd"
11 "testing"
12 )
13
14 func TestConcatEven(t *testing.T) {
15 testInt8x16Binary(t, archsimd.Int8x16.ConcatEven, deinterleaveSlice[int8](128, false))
16 testInt16x8Binary(t, archsimd.Int16x8.ConcatEven, deinterleaveSlice[int16](128, false))
17 testInt32x4Binary(t, archsimd.Int32x4.ConcatEven, deinterleaveSlice[int32](128, false))
18 testInt64x2Binary(t, archsimd.Int64x2.ConcatEven, deinterleaveSlice[int64](128, false))
19 testUint8x16Binary(t, archsimd.Uint8x16.ConcatEven, deinterleaveSlice[uint8](128, false))
20 testUint16x8Binary(t, archsimd.Uint16x8.ConcatEven, deinterleaveSlice[uint16](128, false))
21 testUint32x4Binary(t, archsimd.Uint32x4.ConcatEven, deinterleaveSlice[uint32](128, false))
22 testUint64x2Binary(t, archsimd.Uint64x2.ConcatEven, deinterleaveSlice[uint64](128, false))
23 }
24
25 func TestConcatOdd(t *testing.T) {
26 testInt8x16Binary(t, archsimd.Int8x16.ConcatOdd, deinterleaveSlice[int8](128, true))
27 testInt16x8Binary(t, archsimd.Int16x8.ConcatOdd, deinterleaveSlice[int16](128, true))
28 testInt32x4Binary(t, archsimd.Int32x4.ConcatOdd, deinterleaveSlice[int32](128, true))
29 testInt64x2Binary(t, archsimd.Int64x2.ConcatOdd, deinterleaveSlice[int64](128, true))
30 testUint8x16Binary(t, archsimd.Uint8x16.ConcatOdd, deinterleaveSlice[uint8](128, true))
31 testUint16x8Binary(t, archsimd.Uint16x8.ConcatOdd, deinterleaveSlice[uint16](128, true))
32 testUint32x4Binary(t, archsimd.Uint32x4.ConcatOdd, deinterleaveSlice[uint32](128, true))
33 testUint64x2Binary(t, archsimd.Uint64x2.ConcatOdd, deinterleaveSlice[uint64](128, true))
34 }
35
36 func TestInterleaveEven(t *testing.T) {
37 testInt8x16Binary(t, archsimd.Int8x16.InterleaveEven, transposeSlice[int8](128, false))
38 testInt16x8Binary(t, archsimd.Int16x8.InterleaveEven, transposeSlice[int16](128, false))
39 testInt32x4Binary(t, archsimd.Int32x4.InterleaveEven, transposeSlice[int32](128, false))
40 testInt64x2Binary(t, archsimd.Int64x2.InterleaveEven, transposeSlice[int64](128, false))
41 testUint8x16Binary(t, archsimd.Uint8x16.InterleaveEven, transposeSlice[uint8](128, false))
42 testUint16x8Binary(t, archsimd.Uint16x8.InterleaveEven, transposeSlice[uint16](128, false))
43 testUint32x4Binary(t, archsimd.Uint32x4.InterleaveEven, transposeSlice[uint32](128, false))
44 testUint64x2Binary(t, archsimd.Uint64x2.InterleaveEven, transposeSlice[uint64](128, false))
45 }
46
47 func TestInterleaveOdd(t *testing.T) {
48 testInt8x16Binary(t, archsimd.Int8x16.InterleaveOdd, transposeSlice[int8](128, true))
49 testInt16x8Binary(t, archsimd.Int16x8.InterleaveOdd, transposeSlice[int16](128, true))
50 testInt32x4Binary(t, archsimd.Int32x4.InterleaveOdd, transposeSlice[int32](128, true))
51 testInt64x2Binary(t, archsimd.Int64x2.InterleaveOdd, transposeSlice[int64](128, true))
52 testUint8x16Binary(t, archsimd.Uint8x16.InterleaveOdd, transposeSlice[uint8](128, true))
53 testUint16x8Binary(t, archsimd.Uint16x8.InterleaveOdd, transposeSlice[uint16](128, true))
54 testUint32x4Binary(t, archsimd.Uint32x4.InterleaveOdd, transposeSlice[uint32](128, true))
55 testUint64x2Binary(t, archsimd.Uint64x2.InterleaveOdd, transposeSlice[uint64](128, true))
56 }
57
58 func TestInterleaveLoARM64(t *testing.T) {
59 testInt8x16Binary(t, archsimd.Int8x16.InterleaveLo, interleaveSlice[int8](128, false))
60 testInt16x8Binary(t, archsimd.Int16x8.InterleaveLo, interleaveSlice[int16](128, false))
61 testInt32x4Binary(t, archsimd.Int32x4.InterleaveLo, interleaveSlice[int32](128, false))
62 testInt64x2Binary(t, archsimd.Int64x2.InterleaveLo, interleaveSlice[int64](128, false))
63 testUint8x16Binary(t, archsimd.Uint8x16.InterleaveLo, interleaveSlice[uint8](128, false))
64 testUint16x8Binary(t, archsimd.Uint16x8.InterleaveLo, interleaveSlice[uint16](128, false))
65 testUint32x4Binary(t, archsimd.Uint32x4.InterleaveLo, interleaveSlice[uint32](128, false))
66 testUint64x2Binary(t, archsimd.Uint64x2.InterleaveLo, interleaveSlice[uint64](128, false))
67 }
68
69 func TestInterleaveHiARM64(t *testing.T) {
70 testInt8x16Binary(t, archsimd.Int8x16.InterleaveHi, interleaveSlice[int8](128, true))
71 testInt16x8Binary(t, archsimd.Int16x8.InterleaveHi, interleaveSlice[int16](128, true))
72 testInt32x4Binary(t, archsimd.Int32x4.InterleaveHi, interleaveSlice[int32](128, true))
73 testInt64x2Binary(t, archsimd.Int64x2.InterleaveHi, interleaveSlice[int64](128, true))
74 testUint8x16Binary(t, archsimd.Uint8x16.InterleaveHi, interleaveSlice[uint8](128, true))
75 testUint16x8Binary(t, archsimd.Uint16x8.InterleaveHi, interleaveSlice[uint16](128, true))
76 testUint32x4Binary(t, archsimd.Uint32x4.InterleaveHi, interleaveSlice[uint32](128, true))
77 testUint64x2Binary(t, archsimd.Uint64x2.InterleaveHi, interleaveSlice[uint64](128, true))
78 }
79
80 func TestOrNot(t *testing.T) {
81 testInt8x16Binary(t, archsimd.Int8x16.OrNot, orNotSlice[int8])
82 testInt16x8Binary(t, archsimd.Int16x8.OrNot, orNotSlice[int16])
83 testInt32x4Binary(t, archsimd.Int32x4.OrNot, orNotSlice[int32])
84 testInt64x2Binary(t, archsimd.Int64x2.OrNot, orNotSlice[int64])
85
86 testUint8x16Binary(t, archsimd.Uint8x16.OrNot, orNotSlice[uint8])
87 testUint16x8Binary(t, archsimd.Uint16x8.OrNot, orNotSlice[uint16])
88 testUint32x4Binary(t, archsimd.Uint32x4.OrNot, orNotSlice[uint32])
89 testUint64x2Binary(t, archsimd.Uint64x2.OrNot, orNotSlice[uint64])
90 }
91
92 func cmtst[T integer](x, y T) bool {
93 return (x & y) != 0
94 }
95
96 func cmtstSlice[T integer](x, y []T) []int64 {
97 return mapCompare[T](cmtst)(x, y)
98 }
99
100
101 func cmtst8(x, y archsimd.Int8x16) archsimd.Mask8x16 {
102 var z archsimd.Int8x16
103 return x.And(y).Equal(z).Not()
104 }
105
106
107 func cmtst16(x, y archsimd.Int16x8) archsimd.Mask16x8 {
108 var z archsimd.Int16x8
109 return x.And(y).Equal(z).Not()
110 }
111
112
113 func cmtst32(x, y archsimd.Int32x4) archsimd.Mask32x4 {
114 z := x.Xor(x)
115 return x.And(y).Equal(z).Not()
116 }
117
118
119 func cmtst64(x, y archsimd.Int64x2) archsimd.Mask64x2 {
120 var z archsimd.Int64x2
121 return x.And(y).Equal(z).Not()
122 }
123
124 func TestCmtst(t *testing.T) {
125 testInt8x16Compare(t, cmtst8, cmtstSlice[int8])
126 testInt16x8Compare(t, cmtst16, cmtstSlice[int16])
127 testInt32x4Compare(t, cmtst32, cmtstSlice[int32])
128 testInt64x2Compare(t, cmtst64, cmtstSlice[int64])
129 }
130
View as plain text