1
2
3
4
5
6
7 package simd_test
8
9 import (
10 "simd/archsimd"
11 "testing"
12 )
13
14 func TestAdd(t *testing.T) {
15 testFloat32x4Binary(t, archsimd.Float32x4.Add, addSlice[float32])
16 testFloat64x2Binary(t, archsimd.Float64x2.Add, addSlice[float64])
17
18 testInt16x8Binary(t, archsimd.Int16x8.Add, addSlice[int16])
19 testInt32x4Binary(t, archsimd.Int32x4.Add, addSlice[int32])
20 testInt64x2Binary(t, archsimd.Int64x2.Add, addSlice[int64])
21 testInt8x16Binary(t, archsimd.Int8x16.Add, addSlice[int8])
22
23 testUint32x4Binary(t, archsimd.Uint32x4.Add, addSlice[uint32])
24 testUint64x2Binary(t, archsimd.Uint64x2.Add, addSlice[uint64])
25 testUint16x8Binary(t, archsimd.Uint16x8.Add, addSlice[uint16])
26 testUint8x16Binary(t, archsimd.Uint8x16.Add, addSlice[uint8])
27 }
28
29 func TestSub(t *testing.T) {
30 testFloat32x4Binary(t, archsimd.Float32x4.Sub, subSlice[float32])
31 testFloat64x2Binary(t, archsimd.Float64x2.Sub, subSlice[float64])
32
33 testInt32x4Binary(t, archsimd.Int32x4.Sub, subSlice[int32])
34 testInt16x8Binary(t, archsimd.Int16x8.Sub, subSlice[int16])
35 testInt64x2Binary(t, archsimd.Int64x2.Sub, subSlice[int64])
36 testInt8x16Binary(t, archsimd.Int8x16.Sub, subSlice[int8])
37
38 testUint32x4Binary(t, archsimd.Uint32x4.Sub, subSlice[uint32])
39 testUint16x8Binary(t, archsimd.Uint16x8.Sub, subSlice[uint16])
40 testUint64x2Binary(t, archsimd.Uint64x2.Sub, subSlice[uint64])
41 testUint8x16Binary(t, archsimd.Uint8x16.Sub, subSlice[uint8])
42 }
43
44 func TestMax(t *testing.T) {
45 testInt16x8Binary(t, archsimd.Int16x8.Max, maxSlice[int16])
46 testInt32x4Binary(t, archsimd.Int32x4.Max, maxSlice[int32])
47
48 testInt64x2Binary(t, archsimd.Int64x2.Max, maxSlice[int64])
49
50 testInt8x16Binary(t, archsimd.Int8x16.Max, maxSlice[int8])
51
52 testUint16x8Binary(t, archsimd.Uint16x8.Max, maxSlice[uint16])
53 testUint32x4Binary(t, archsimd.Uint32x4.Max, maxSlice[uint32])
54
55 testUint64x2Binary(t, archsimd.Uint64x2.Max, maxSlice[uint64])
56
57 testUint8x16Binary(t, archsimd.Uint8x16.Max, maxSlice[uint8])
58 }
59
60 func TestMin(t *testing.T) {
61 testInt16x8Binary(t, archsimd.Int16x8.Min, minSlice[int16])
62 testInt32x4Binary(t, archsimd.Int32x4.Min, minSlice[int32])
63
64 testInt64x2Binary(t, archsimd.Int64x2.Min, minSlice[int64])
65
66 testInt8x16Binary(t, archsimd.Int8x16.Min, minSlice[int8])
67
68 testUint16x8Binary(t, archsimd.Uint16x8.Min, minSlice[uint16])
69 testUint32x4Binary(t, archsimd.Uint32x4.Min, minSlice[uint32])
70
71 testUint64x2Binary(t, archsimd.Uint64x2.Min, minSlice[uint64])
72
73 testUint8x16Binary(t, archsimd.Uint8x16.Min, minSlice[uint8])
74 }
75
76 func TestAnd(t *testing.T) {
77 testInt16x8Binary(t, archsimd.Int16x8.And, andSlice[int16])
78 testInt32x4Binary(t, archsimd.Int32x4.And, andSlice[int32])
79 testInt64x2Binary(t, archsimd.Int64x2.And, andSlice[int64])
80 testInt8x16Binary(t, archsimd.Int8x16.And, andSlice[int8])
81
82 testUint16x8Binary(t, archsimd.Uint16x8.And, andSlice[uint16])
83 testUint32x4Binary(t, archsimd.Uint32x4.And, andSlice[uint32])
84 testUint64x2Binary(t, archsimd.Uint64x2.And, andSlice[uint64])
85 testUint8x16Binary(t, archsimd.Uint8x16.And, andSlice[uint8])
86 }
87
88 func TestAndNot(t *testing.T) {
89 testInt16x8Binary(t, archsimd.Int16x8.AndNot, andNotSlice[int16])
90 testInt32x4Binary(t, archsimd.Int32x4.AndNot, andNotSlice[int32])
91 testInt64x2Binary(t, archsimd.Int64x2.AndNot, andNotSlice[int64])
92 testInt8x16Binary(t, archsimd.Int8x16.AndNot, andNotSlice[int8])
93
94 testUint8x16Binary(t, archsimd.Uint8x16.AndNot, andNotSlice[uint8])
95 testUint16x8Binary(t, archsimd.Uint16x8.AndNot, andNotSlice[uint16])
96 testUint32x4Binary(t, archsimd.Uint32x4.AndNot, andNotSlice[uint32])
97 testUint64x2Binary(t, archsimd.Uint64x2.AndNot, andNotSlice[uint64])
98 }
99
100 func TestXor(t *testing.T) {
101 testInt16x8Binary(t, archsimd.Int16x8.Xor, xorSlice[int16])
102 testInt32x4Binary(t, archsimd.Int32x4.Xor, xorSlice[int32])
103 testInt64x2Binary(t, archsimd.Int64x2.Xor, xorSlice[int64])
104 testInt8x16Binary(t, archsimd.Int8x16.Xor, xorSlice[int8])
105
106 testUint16x8Binary(t, archsimd.Uint16x8.Xor, xorSlice[uint16])
107 testUint32x4Binary(t, archsimd.Uint32x4.Xor, xorSlice[uint32])
108 testUint64x2Binary(t, archsimd.Uint64x2.Xor, xorSlice[uint64])
109 testUint8x16Binary(t, archsimd.Uint8x16.Xor, xorSlice[uint8])
110 }
111
112 func TestOr(t *testing.T) {
113 testInt16x8Binary(t, archsimd.Int16x8.Or, orSlice[int16])
114 testInt32x4Binary(t, archsimd.Int32x4.Or, orSlice[int32])
115 testInt64x2Binary(t, archsimd.Int64x2.Or, orSlice[int64])
116 testInt8x16Binary(t, archsimd.Int8x16.Or, orSlice[int8])
117
118 testUint16x8Binary(t, archsimd.Uint16x8.Or, orSlice[uint16])
119 testUint32x4Binary(t, archsimd.Uint32x4.Or, orSlice[uint32])
120 testUint64x2Binary(t, archsimd.Uint64x2.Or, orSlice[uint64])
121 testUint8x16Binary(t, archsimd.Uint8x16.Or, orSlice[uint8])
122 }
123
124 func TestMul(t *testing.T) {
125 testFloat32x4Binary(t, archsimd.Float32x4.Mul, mulSlice[float32])
126 testFloat64x2Binary(t, archsimd.Float64x2.Mul, mulSlice[float64])
127
128 testInt8x16Binary(t, archsimd.Int8x16.Mul, mulSlice[int8])
129 testUint8x16Binary(t, archsimd.Uint8x16.Mul, mulSlice[uint8])
130 testInt16x8Binary(t, archsimd.Int16x8.Mul, mulSlice[int16])
131 testInt32x4Binary(t, archsimd.Int32x4.Mul, mulSlice[int32])
132
133 if archsimd.X86.AVX512() {
134 testInt64x2Binary(t, archsimd.Int64x2.Mul, mulSlice[int64])
135 }
136 }
137
138 func TestDiv(t *testing.T) {
139 testFloat32x4Binary(t, archsimd.Float32x4.Div, divSlice[float32])
140 testFloat64x2Binary(t, archsimd.Float64x2.Div, divSlice[float64])
141 }
142
View as plain text