1 // Copyright 2021 Google LLC
2 //
3 // This source code is licensed under the BSD-style license found in the
4 // LICENSE file in the root directory of this source tree.
5 //
6 // Auto-generated file. Do not edit!
7 // Specification: test/f32-qu8-vcvt.yaml
8 // Generator: tools/generate-vcvt-test.py
9
10
11 #include <gtest/gtest.h>
12
13 #include <xnnpack/common.h>
14 #include <xnnpack/isa-checks.h>
15
16 #include <xnnpack/vcvt.h>
17 #include "vcvt-microkernel-tester.h"
18
19
20 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_QU8_VCVT__NEON_X8,batch_eq_8)21 TEST(F32_QU8_VCVT__NEON_X8, batch_eq_8) {
22 TEST_REQUIRES_ARM_NEON;
23 VCvtMicrokernelTester()
24 .batch_size(8)
25 .qmin(std::numeric_limits<uint8_t>::min())
26 .qmax(std::numeric_limits<uint8_t>::max())
27 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x8, xnn_init_f32_qu8_cvt_neon_params);
28 }
29
TEST(F32_QU8_VCVT__NEON_X8,batch_div_8)30 TEST(F32_QU8_VCVT__NEON_X8, batch_div_8) {
31 TEST_REQUIRES_ARM_NEON;
32 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
33 VCvtMicrokernelTester()
34 .batch_size(batch_size)
35 .qmin(std::numeric_limits<uint8_t>::min())
36 .qmax(std::numeric_limits<uint8_t>::max())
37 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x8, xnn_init_f32_qu8_cvt_neon_params);
38 }
39 }
40
TEST(F32_QU8_VCVT__NEON_X8,batch_lt_8)41 TEST(F32_QU8_VCVT__NEON_X8, batch_lt_8) {
42 TEST_REQUIRES_ARM_NEON;
43 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
44 VCvtMicrokernelTester()
45 .batch_size(batch_size)
46 .qmin(std::numeric_limits<uint8_t>::min())
47 .qmax(std::numeric_limits<uint8_t>::max())
48 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x8, xnn_init_f32_qu8_cvt_neon_params);
49 }
50 }
51
TEST(F32_QU8_VCVT__NEON_X8,batch_gt_8)52 TEST(F32_QU8_VCVT__NEON_X8, batch_gt_8) {
53 TEST_REQUIRES_ARM_NEON;
54 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
55 VCvtMicrokernelTester()
56 .batch_size(batch_size)
57 .qmin(std::numeric_limits<uint8_t>::min())
58 .qmax(std::numeric_limits<uint8_t>::max())
59 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x8, xnn_init_f32_qu8_cvt_neon_params);
60 }
61 }
62
TEST(F32_QU8_VCVT__NEON_X8,scale)63 TEST(F32_QU8_VCVT__NEON_X8, scale) {
64 TEST_REQUIRES_ARM_NEON;
65 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
66 VCvtMicrokernelTester()
67 .batch_size(batch_size)
68 .scale(50)
69 .output_zero_point(100)
70 .qmin(std::numeric_limits<uint8_t>::min())
71 .qmax(std::numeric_limits<uint8_t>::max())
72 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x8, xnn_init_f32_qu8_cvt_neon_params);
73 }
74 }
75
TEST(F32_QU8_VCVT__NEON_X8,output_zero_point)76 TEST(F32_QU8_VCVT__NEON_X8, output_zero_point) {
77 TEST_REQUIRES_ARM_NEON;
78 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
79 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
80 VCvtMicrokernelTester()
81 .batch_size(batch_size)
82 .output_zero_point(output_zero_point)
83 .qmin(std::numeric_limits<uint8_t>::min())
84 .qmax(std::numeric_limits<uint8_t>::max())
85 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x8, xnn_init_f32_qu8_cvt_neon_params);
86 }
87 }
88 }
89
TEST(F32_QU8_VCVT__NEON_X8,saturation)90 TEST(F32_QU8_VCVT__NEON_X8, saturation) {
91 TEST_REQUIRES_ARM_NEON;
92 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
93 VCvtMicrokernelTester()
94 .batch_size(batch_size)
95 .scale(500)
96 .output_zero_point(128)
97 .qmin(std::numeric_limits<uint8_t>::min())
98 .qmax(std::numeric_limits<uint8_t>::max())
99 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x8, xnn_init_f32_qu8_cvt_neon_params);
100 }
101 }
102
TEST(F32_QU8_VCVT__NEON_X8,overflow)103 TEST(F32_QU8_VCVT__NEON_X8, overflow) {
104 TEST_REQUIRES_ARM_NEON;
105 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
106 VCvtMicrokernelTester()
107 .batch_size(batch_size)
108 .scale(4294967296.0f)
109 .qmin(std::numeric_limits<uint8_t>::min())
110 .qmax(std::numeric_limits<uint8_t>::max())
111 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x8, xnn_init_f32_qu8_cvt_neon_params);
112 }
113 }
114
TEST(F32_QU8_VCVT__NEON_X8,qmin)115 TEST(F32_QU8_VCVT__NEON_X8, qmin) {
116 TEST_REQUIRES_ARM_NEON;
117 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
118 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
119 VCvtMicrokernelTester()
120 .batch_size(batch_size)
121 .scale(500)
122 .output_zero_point(128)
123 .qmin(qmin)
124 .qmax(std::numeric_limits<uint8_t>::max())
125 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x8, xnn_init_f32_qu8_cvt_neon_params);
126 }
127 }
128 }
129
TEST(F32_QU8_VCVT__NEON_X8,qmax)130 TEST(F32_QU8_VCVT__NEON_X8, qmax) {
131 TEST_REQUIRES_ARM_NEON;
132 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
133 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
134 VCvtMicrokernelTester()
135 .batch_size(batch_size)
136 .scale(500)
137 .output_zero_point(128)
138 .qmin(std::numeric_limits<uint8_t>::min())
139 .qmax(qmax)
140 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x8, xnn_init_f32_qu8_cvt_neon_params);
141 }
142 }
143 }
144 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
145
146
147 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_QU8_VCVT__NEON_X16,batch_eq_16)148 TEST(F32_QU8_VCVT__NEON_X16, batch_eq_16) {
149 TEST_REQUIRES_ARM_NEON;
150 VCvtMicrokernelTester()
151 .batch_size(16)
152 .qmin(std::numeric_limits<uint8_t>::min())
153 .qmax(std::numeric_limits<uint8_t>::max())
154 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x16, xnn_init_f32_qu8_cvt_neon_params);
155 }
156
TEST(F32_QU8_VCVT__NEON_X16,batch_div_16)157 TEST(F32_QU8_VCVT__NEON_X16, batch_div_16) {
158 TEST_REQUIRES_ARM_NEON;
159 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
160 VCvtMicrokernelTester()
161 .batch_size(batch_size)
162 .qmin(std::numeric_limits<uint8_t>::min())
163 .qmax(std::numeric_limits<uint8_t>::max())
164 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x16, xnn_init_f32_qu8_cvt_neon_params);
165 }
166 }
167
TEST(F32_QU8_VCVT__NEON_X16,batch_lt_16)168 TEST(F32_QU8_VCVT__NEON_X16, batch_lt_16) {
169 TEST_REQUIRES_ARM_NEON;
170 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
171 VCvtMicrokernelTester()
172 .batch_size(batch_size)
173 .qmin(std::numeric_limits<uint8_t>::min())
174 .qmax(std::numeric_limits<uint8_t>::max())
175 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x16, xnn_init_f32_qu8_cvt_neon_params);
176 }
177 }
178
TEST(F32_QU8_VCVT__NEON_X16,batch_gt_16)179 TEST(F32_QU8_VCVT__NEON_X16, batch_gt_16) {
180 TEST_REQUIRES_ARM_NEON;
181 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
182 VCvtMicrokernelTester()
183 .batch_size(batch_size)
184 .qmin(std::numeric_limits<uint8_t>::min())
185 .qmax(std::numeric_limits<uint8_t>::max())
186 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x16, xnn_init_f32_qu8_cvt_neon_params);
187 }
188 }
189
TEST(F32_QU8_VCVT__NEON_X16,scale)190 TEST(F32_QU8_VCVT__NEON_X16, scale) {
191 TEST_REQUIRES_ARM_NEON;
192 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
193 VCvtMicrokernelTester()
194 .batch_size(batch_size)
195 .scale(50)
196 .output_zero_point(100)
197 .qmin(std::numeric_limits<uint8_t>::min())
198 .qmax(std::numeric_limits<uint8_t>::max())
199 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x16, xnn_init_f32_qu8_cvt_neon_params);
200 }
201 }
202
TEST(F32_QU8_VCVT__NEON_X16,output_zero_point)203 TEST(F32_QU8_VCVT__NEON_X16, output_zero_point) {
204 TEST_REQUIRES_ARM_NEON;
205 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
206 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
207 VCvtMicrokernelTester()
208 .batch_size(batch_size)
209 .output_zero_point(output_zero_point)
210 .qmin(std::numeric_limits<uint8_t>::min())
211 .qmax(std::numeric_limits<uint8_t>::max())
212 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x16, xnn_init_f32_qu8_cvt_neon_params);
213 }
214 }
215 }
216
TEST(F32_QU8_VCVT__NEON_X16,saturation)217 TEST(F32_QU8_VCVT__NEON_X16, saturation) {
218 TEST_REQUIRES_ARM_NEON;
219 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
220 VCvtMicrokernelTester()
221 .batch_size(batch_size)
222 .scale(500)
223 .output_zero_point(128)
224 .qmin(std::numeric_limits<uint8_t>::min())
225 .qmax(std::numeric_limits<uint8_t>::max())
226 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x16, xnn_init_f32_qu8_cvt_neon_params);
227 }
228 }
229
TEST(F32_QU8_VCVT__NEON_X16,overflow)230 TEST(F32_QU8_VCVT__NEON_X16, overflow) {
231 TEST_REQUIRES_ARM_NEON;
232 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
233 VCvtMicrokernelTester()
234 .batch_size(batch_size)
235 .scale(4294967296.0f)
236 .qmin(std::numeric_limits<uint8_t>::min())
237 .qmax(std::numeric_limits<uint8_t>::max())
238 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x16, xnn_init_f32_qu8_cvt_neon_params);
239 }
240 }
241
TEST(F32_QU8_VCVT__NEON_X16,qmin)242 TEST(F32_QU8_VCVT__NEON_X16, qmin) {
243 TEST_REQUIRES_ARM_NEON;
244 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
245 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
246 VCvtMicrokernelTester()
247 .batch_size(batch_size)
248 .scale(500)
249 .output_zero_point(128)
250 .qmin(qmin)
251 .qmax(std::numeric_limits<uint8_t>::max())
252 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x16, xnn_init_f32_qu8_cvt_neon_params);
253 }
254 }
255 }
256
TEST(F32_QU8_VCVT__NEON_X16,qmax)257 TEST(F32_QU8_VCVT__NEON_X16, qmax) {
258 TEST_REQUIRES_ARM_NEON;
259 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
260 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
261 VCvtMicrokernelTester()
262 .batch_size(batch_size)
263 .scale(500)
264 .output_zero_point(128)
265 .qmin(std::numeric_limits<uint8_t>::min())
266 .qmax(qmax)
267 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x16, xnn_init_f32_qu8_cvt_neon_params);
268 }
269 }
270 }
271 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
272
273
274 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_QU8_VCVT__NEON_X24,batch_eq_24)275 TEST(F32_QU8_VCVT__NEON_X24, batch_eq_24) {
276 TEST_REQUIRES_ARM_NEON;
277 VCvtMicrokernelTester()
278 .batch_size(24)
279 .qmin(std::numeric_limits<uint8_t>::min())
280 .qmax(std::numeric_limits<uint8_t>::max())
281 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x24, xnn_init_f32_qu8_cvt_neon_params);
282 }
283
TEST(F32_QU8_VCVT__NEON_X24,batch_div_24)284 TEST(F32_QU8_VCVT__NEON_X24, batch_div_24) {
285 TEST_REQUIRES_ARM_NEON;
286 for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
287 VCvtMicrokernelTester()
288 .batch_size(batch_size)
289 .qmin(std::numeric_limits<uint8_t>::min())
290 .qmax(std::numeric_limits<uint8_t>::max())
291 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x24, xnn_init_f32_qu8_cvt_neon_params);
292 }
293 }
294
TEST(F32_QU8_VCVT__NEON_X24,batch_lt_24)295 TEST(F32_QU8_VCVT__NEON_X24, batch_lt_24) {
296 TEST_REQUIRES_ARM_NEON;
297 for (size_t batch_size = 1; batch_size < 24; batch_size++) {
298 VCvtMicrokernelTester()
299 .batch_size(batch_size)
300 .qmin(std::numeric_limits<uint8_t>::min())
301 .qmax(std::numeric_limits<uint8_t>::max())
302 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x24, xnn_init_f32_qu8_cvt_neon_params);
303 }
304 }
305
TEST(F32_QU8_VCVT__NEON_X24,batch_gt_24)306 TEST(F32_QU8_VCVT__NEON_X24, batch_gt_24) {
307 TEST_REQUIRES_ARM_NEON;
308 for (size_t batch_size = 25; batch_size < 48; batch_size++) {
309 VCvtMicrokernelTester()
310 .batch_size(batch_size)
311 .qmin(std::numeric_limits<uint8_t>::min())
312 .qmax(std::numeric_limits<uint8_t>::max())
313 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x24, xnn_init_f32_qu8_cvt_neon_params);
314 }
315 }
316
TEST(F32_QU8_VCVT__NEON_X24,scale)317 TEST(F32_QU8_VCVT__NEON_X24, scale) {
318 TEST_REQUIRES_ARM_NEON;
319 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
320 VCvtMicrokernelTester()
321 .batch_size(batch_size)
322 .scale(50)
323 .output_zero_point(100)
324 .qmin(std::numeric_limits<uint8_t>::min())
325 .qmax(std::numeric_limits<uint8_t>::max())
326 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x24, xnn_init_f32_qu8_cvt_neon_params);
327 }
328 }
329
TEST(F32_QU8_VCVT__NEON_X24,output_zero_point)330 TEST(F32_QU8_VCVT__NEON_X24, output_zero_point) {
331 TEST_REQUIRES_ARM_NEON;
332 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
333 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
334 VCvtMicrokernelTester()
335 .batch_size(batch_size)
336 .output_zero_point(output_zero_point)
337 .qmin(std::numeric_limits<uint8_t>::min())
338 .qmax(std::numeric_limits<uint8_t>::max())
339 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x24, xnn_init_f32_qu8_cvt_neon_params);
340 }
341 }
342 }
343
TEST(F32_QU8_VCVT__NEON_X24,saturation)344 TEST(F32_QU8_VCVT__NEON_X24, saturation) {
345 TEST_REQUIRES_ARM_NEON;
346 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
347 VCvtMicrokernelTester()
348 .batch_size(batch_size)
349 .scale(500)
350 .output_zero_point(128)
351 .qmin(std::numeric_limits<uint8_t>::min())
352 .qmax(std::numeric_limits<uint8_t>::max())
353 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x24, xnn_init_f32_qu8_cvt_neon_params);
354 }
355 }
356
TEST(F32_QU8_VCVT__NEON_X24,overflow)357 TEST(F32_QU8_VCVT__NEON_X24, overflow) {
358 TEST_REQUIRES_ARM_NEON;
359 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
360 VCvtMicrokernelTester()
361 .batch_size(batch_size)
362 .scale(4294967296.0f)
363 .qmin(std::numeric_limits<uint8_t>::min())
364 .qmax(std::numeric_limits<uint8_t>::max())
365 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x24, xnn_init_f32_qu8_cvt_neon_params);
366 }
367 }
368
TEST(F32_QU8_VCVT__NEON_X24,qmin)369 TEST(F32_QU8_VCVT__NEON_X24, qmin) {
370 TEST_REQUIRES_ARM_NEON;
371 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
372 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
373 VCvtMicrokernelTester()
374 .batch_size(batch_size)
375 .scale(500)
376 .output_zero_point(128)
377 .qmin(qmin)
378 .qmax(std::numeric_limits<uint8_t>::max())
379 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x24, xnn_init_f32_qu8_cvt_neon_params);
380 }
381 }
382 }
383
TEST(F32_QU8_VCVT__NEON_X24,qmax)384 TEST(F32_QU8_VCVT__NEON_X24, qmax) {
385 TEST_REQUIRES_ARM_NEON;
386 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
387 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
388 VCvtMicrokernelTester()
389 .batch_size(batch_size)
390 .scale(500)
391 .output_zero_point(128)
392 .qmin(std::numeric_limits<uint8_t>::min())
393 .qmax(qmax)
394 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x24, xnn_init_f32_qu8_cvt_neon_params);
395 }
396 }
397 }
398 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
399
400
401 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_QU8_VCVT__NEON_X32,batch_eq_32)402 TEST(F32_QU8_VCVT__NEON_X32, batch_eq_32) {
403 TEST_REQUIRES_ARM_NEON;
404 VCvtMicrokernelTester()
405 .batch_size(32)
406 .qmin(std::numeric_limits<uint8_t>::min())
407 .qmax(std::numeric_limits<uint8_t>::max())
408 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x32, xnn_init_f32_qu8_cvt_neon_params);
409 }
410
TEST(F32_QU8_VCVT__NEON_X32,batch_div_32)411 TEST(F32_QU8_VCVT__NEON_X32, batch_div_32) {
412 TEST_REQUIRES_ARM_NEON;
413 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
414 VCvtMicrokernelTester()
415 .batch_size(batch_size)
416 .qmin(std::numeric_limits<uint8_t>::min())
417 .qmax(std::numeric_limits<uint8_t>::max())
418 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x32, xnn_init_f32_qu8_cvt_neon_params);
419 }
420 }
421
TEST(F32_QU8_VCVT__NEON_X32,batch_lt_32)422 TEST(F32_QU8_VCVT__NEON_X32, batch_lt_32) {
423 TEST_REQUIRES_ARM_NEON;
424 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
425 VCvtMicrokernelTester()
426 .batch_size(batch_size)
427 .qmin(std::numeric_limits<uint8_t>::min())
428 .qmax(std::numeric_limits<uint8_t>::max())
429 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x32, xnn_init_f32_qu8_cvt_neon_params);
430 }
431 }
432
TEST(F32_QU8_VCVT__NEON_X32,batch_gt_32)433 TEST(F32_QU8_VCVT__NEON_X32, batch_gt_32) {
434 TEST_REQUIRES_ARM_NEON;
435 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
436 VCvtMicrokernelTester()
437 .batch_size(batch_size)
438 .qmin(std::numeric_limits<uint8_t>::min())
439 .qmax(std::numeric_limits<uint8_t>::max())
440 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x32, xnn_init_f32_qu8_cvt_neon_params);
441 }
442 }
443
TEST(F32_QU8_VCVT__NEON_X32,scale)444 TEST(F32_QU8_VCVT__NEON_X32, scale) {
445 TEST_REQUIRES_ARM_NEON;
446 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
447 VCvtMicrokernelTester()
448 .batch_size(batch_size)
449 .scale(50)
450 .output_zero_point(100)
451 .qmin(std::numeric_limits<uint8_t>::min())
452 .qmax(std::numeric_limits<uint8_t>::max())
453 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x32, xnn_init_f32_qu8_cvt_neon_params);
454 }
455 }
456
TEST(F32_QU8_VCVT__NEON_X32,output_zero_point)457 TEST(F32_QU8_VCVT__NEON_X32, output_zero_point) {
458 TEST_REQUIRES_ARM_NEON;
459 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
460 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
461 VCvtMicrokernelTester()
462 .batch_size(batch_size)
463 .output_zero_point(output_zero_point)
464 .qmin(std::numeric_limits<uint8_t>::min())
465 .qmax(std::numeric_limits<uint8_t>::max())
466 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x32, xnn_init_f32_qu8_cvt_neon_params);
467 }
468 }
469 }
470
TEST(F32_QU8_VCVT__NEON_X32,saturation)471 TEST(F32_QU8_VCVT__NEON_X32, saturation) {
472 TEST_REQUIRES_ARM_NEON;
473 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
474 VCvtMicrokernelTester()
475 .batch_size(batch_size)
476 .scale(500)
477 .output_zero_point(128)
478 .qmin(std::numeric_limits<uint8_t>::min())
479 .qmax(std::numeric_limits<uint8_t>::max())
480 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x32, xnn_init_f32_qu8_cvt_neon_params);
481 }
482 }
483
TEST(F32_QU8_VCVT__NEON_X32,overflow)484 TEST(F32_QU8_VCVT__NEON_X32, overflow) {
485 TEST_REQUIRES_ARM_NEON;
486 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
487 VCvtMicrokernelTester()
488 .batch_size(batch_size)
489 .scale(4294967296.0f)
490 .qmin(std::numeric_limits<uint8_t>::min())
491 .qmax(std::numeric_limits<uint8_t>::max())
492 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x32, xnn_init_f32_qu8_cvt_neon_params);
493 }
494 }
495
TEST(F32_QU8_VCVT__NEON_X32,qmin)496 TEST(F32_QU8_VCVT__NEON_X32, qmin) {
497 TEST_REQUIRES_ARM_NEON;
498 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
499 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
500 VCvtMicrokernelTester()
501 .batch_size(batch_size)
502 .scale(500)
503 .output_zero_point(128)
504 .qmin(qmin)
505 .qmax(std::numeric_limits<uint8_t>::max())
506 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x32, xnn_init_f32_qu8_cvt_neon_params);
507 }
508 }
509 }
510
TEST(F32_QU8_VCVT__NEON_X32,qmax)511 TEST(F32_QU8_VCVT__NEON_X32, qmax) {
512 TEST_REQUIRES_ARM_NEON;
513 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
514 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
515 VCvtMicrokernelTester()
516 .batch_size(batch_size)
517 .scale(500)
518 .output_zero_point(128)
519 .qmin(std::numeric_limits<uint8_t>::min())
520 .qmax(qmax)
521 .Test(xnn_f32_qu8_vcvt_ukernel__neon_x32, xnn_init_f32_qu8_cvt_neon_params);
522 }
523 }
524 }
525 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
526
527
528 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_QU8_VCVT__NEONV8_X8,batch_eq_8)529 TEST(F32_QU8_VCVT__NEONV8_X8, batch_eq_8) {
530 TEST_REQUIRES_ARM_NEON_V8;
531 VCvtMicrokernelTester()
532 .batch_size(8)
533 .qmin(std::numeric_limits<uint8_t>::min())
534 .qmax(std::numeric_limits<uint8_t>::max())
535 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qu8_cvt_neonv8_params);
536 }
537
TEST(F32_QU8_VCVT__NEONV8_X8,batch_div_8)538 TEST(F32_QU8_VCVT__NEONV8_X8, batch_div_8) {
539 TEST_REQUIRES_ARM_NEON_V8;
540 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
541 VCvtMicrokernelTester()
542 .batch_size(batch_size)
543 .qmin(std::numeric_limits<uint8_t>::min())
544 .qmax(std::numeric_limits<uint8_t>::max())
545 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qu8_cvt_neonv8_params);
546 }
547 }
548
TEST(F32_QU8_VCVT__NEONV8_X8,batch_lt_8)549 TEST(F32_QU8_VCVT__NEONV8_X8, batch_lt_8) {
550 TEST_REQUIRES_ARM_NEON_V8;
551 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
552 VCvtMicrokernelTester()
553 .batch_size(batch_size)
554 .qmin(std::numeric_limits<uint8_t>::min())
555 .qmax(std::numeric_limits<uint8_t>::max())
556 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qu8_cvt_neonv8_params);
557 }
558 }
559
TEST(F32_QU8_VCVT__NEONV8_X8,batch_gt_8)560 TEST(F32_QU8_VCVT__NEONV8_X8, batch_gt_8) {
561 TEST_REQUIRES_ARM_NEON_V8;
562 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
563 VCvtMicrokernelTester()
564 .batch_size(batch_size)
565 .qmin(std::numeric_limits<uint8_t>::min())
566 .qmax(std::numeric_limits<uint8_t>::max())
567 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qu8_cvt_neonv8_params);
568 }
569 }
570
TEST(F32_QU8_VCVT__NEONV8_X8,scale)571 TEST(F32_QU8_VCVT__NEONV8_X8, scale) {
572 TEST_REQUIRES_ARM_NEON_V8;
573 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
574 VCvtMicrokernelTester()
575 .batch_size(batch_size)
576 .scale(50)
577 .output_zero_point(100)
578 .qmin(std::numeric_limits<uint8_t>::min())
579 .qmax(std::numeric_limits<uint8_t>::max())
580 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qu8_cvt_neonv8_params);
581 }
582 }
583
TEST(F32_QU8_VCVT__NEONV8_X8,output_zero_point)584 TEST(F32_QU8_VCVT__NEONV8_X8, output_zero_point) {
585 TEST_REQUIRES_ARM_NEON_V8;
586 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
587 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
588 VCvtMicrokernelTester()
589 .batch_size(batch_size)
590 .output_zero_point(output_zero_point)
591 .qmin(std::numeric_limits<uint8_t>::min())
592 .qmax(std::numeric_limits<uint8_t>::max())
593 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qu8_cvt_neonv8_params);
594 }
595 }
596 }
597
TEST(F32_QU8_VCVT__NEONV8_X8,saturation)598 TEST(F32_QU8_VCVT__NEONV8_X8, saturation) {
599 TEST_REQUIRES_ARM_NEON_V8;
600 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
601 VCvtMicrokernelTester()
602 .batch_size(batch_size)
603 .scale(500)
604 .output_zero_point(128)
605 .qmin(std::numeric_limits<uint8_t>::min())
606 .qmax(std::numeric_limits<uint8_t>::max())
607 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qu8_cvt_neonv8_params);
608 }
609 }
610
TEST(F32_QU8_VCVT__NEONV8_X8,overflow)611 TEST(F32_QU8_VCVT__NEONV8_X8, overflow) {
612 TEST_REQUIRES_ARM_NEON_V8;
613 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
614 VCvtMicrokernelTester()
615 .batch_size(batch_size)
616 .scale(4294967296.0f)
617 .qmin(std::numeric_limits<uint8_t>::min())
618 .qmax(std::numeric_limits<uint8_t>::max())
619 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qu8_cvt_neonv8_params);
620 }
621 }
622
TEST(F32_QU8_VCVT__NEONV8_X8,qmin)623 TEST(F32_QU8_VCVT__NEONV8_X8, qmin) {
624 TEST_REQUIRES_ARM_NEON_V8;
625 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
626 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
627 VCvtMicrokernelTester()
628 .batch_size(batch_size)
629 .scale(500)
630 .output_zero_point(128)
631 .qmin(qmin)
632 .qmax(std::numeric_limits<uint8_t>::max())
633 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qu8_cvt_neonv8_params);
634 }
635 }
636 }
637
TEST(F32_QU8_VCVT__NEONV8_X8,qmax)638 TEST(F32_QU8_VCVT__NEONV8_X8, qmax) {
639 TEST_REQUIRES_ARM_NEON_V8;
640 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
641 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
642 VCvtMicrokernelTester()
643 .batch_size(batch_size)
644 .scale(500)
645 .output_zero_point(128)
646 .qmin(std::numeric_limits<uint8_t>::min())
647 .qmax(qmax)
648 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x8, xnn_init_f32_qu8_cvt_neonv8_params);
649 }
650 }
651 }
652 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
653
654
655 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_QU8_VCVT__NEONV8_X16,batch_eq_16)656 TEST(F32_QU8_VCVT__NEONV8_X16, batch_eq_16) {
657 TEST_REQUIRES_ARM_NEON_V8;
658 VCvtMicrokernelTester()
659 .batch_size(16)
660 .qmin(std::numeric_limits<uint8_t>::min())
661 .qmax(std::numeric_limits<uint8_t>::max())
662 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qu8_cvt_neonv8_params);
663 }
664
TEST(F32_QU8_VCVT__NEONV8_X16,batch_div_16)665 TEST(F32_QU8_VCVT__NEONV8_X16, batch_div_16) {
666 TEST_REQUIRES_ARM_NEON_V8;
667 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
668 VCvtMicrokernelTester()
669 .batch_size(batch_size)
670 .qmin(std::numeric_limits<uint8_t>::min())
671 .qmax(std::numeric_limits<uint8_t>::max())
672 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qu8_cvt_neonv8_params);
673 }
674 }
675
TEST(F32_QU8_VCVT__NEONV8_X16,batch_lt_16)676 TEST(F32_QU8_VCVT__NEONV8_X16, batch_lt_16) {
677 TEST_REQUIRES_ARM_NEON_V8;
678 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
679 VCvtMicrokernelTester()
680 .batch_size(batch_size)
681 .qmin(std::numeric_limits<uint8_t>::min())
682 .qmax(std::numeric_limits<uint8_t>::max())
683 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qu8_cvt_neonv8_params);
684 }
685 }
686
TEST(F32_QU8_VCVT__NEONV8_X16,batch_gt_16)687 TEST(F32_QU8_VCVT__NEONV8_X16, batch_gt_16) {
688 TEST_REQUIRES_ARM_NEON_V8;
689 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
690 VCvtMicrokernelTester()
691 .batch_size(batch_size)
692 .qmin(std::numeric_limits<uint8_t>::min())
693 .qmax(std::numeric_limits<uint8_t>::max())
694 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qu8_cvt_neonv8_params);
695 }
696 }
697
TEST(F32_QU8_VCVT__NEONV8_X16,scale)698 TEST(F32_QU8_VCVT__NEONV8_X16, scale) {
699 TEST_REQUIRES_ARM_NEON_V8;
700 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
701 VCvtMicrokernelTester()
702 .batch_size(batch_size)
703 .scale(50)
704 .output_zero_point(100)
705 .qmin(std::numeric_limits<uint8_t>::min())
706 .qmax(std::numeric_limits<uint8_t>::max())
707 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qu8_cvt_neonv8_params);
708 }
709 }
710
TEST(F32_QU8_VCVT__NEONV8_X16,output_zero_point)711 TEST(F32_QU8_VCVT__NEONV8_X16, output_zero_point) {
712 TEST_REQUIRES_ARM_NEON_V8;
713 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
714 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
715 VCvtMicrokernelTester()
716 .batch_size(batch_size)
717 .output_zero_point(output_zero_point)
718 .qmin(std::numeric_limits<uint8_t>::min())
719 .qmax(std::numeric_limits<uint8_t>::max())
720 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qu8_cvt_neonv8_params);
721 }
722 }
723 }
724
TEST(F32_QU8_VCVT__NEONV8_X16,saturation)725 TEST(F32_QU8_VCVT__NEONV8_X16, saturation) {
726 TEST_REQUIRES_ARM_NEON_V8;
727 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
728 VCvtMicrokernelTester()
729 .batch_size(batch_size)
730 .scale(500)
731 .output_zero_point(128)
732 .qmin(std::numeric_limits<uint8_t>::min())
733 .qmax(std::numeric_limits<uint8_t>::max())
734 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qu8_cvt_neonv8_params);
735 }
736 }
737
TEST(F32_QU8_VCVT__NEONV8_X16,overflow)738 TEST(F32_QU8_VCVT__NEONV8_X16, overflow) {
739 TEST_REQUIRES_ARM_NEON_V8;
740 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
741 VCvtMicrokernelTester()
742 .batch_size(batch_size)
743 .scale(4294967296.0f)
744 .qmin(std::numeric_limits<uint8_t>::min())
745 .qmax(std::numeric_limits<uint8_t>::max())
746 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qu8_cvt_neonv8_params);
747 }
748 }
749
TEST(F32_QU8_VCVT__NEONV8_X16,qmin)750 TEST(F32_QU8_VCVT__NEONV8_X16, qmin) {
751 TEST_REQUIRES_ARM_NEON_V8;
752 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
753 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
754 VCvtMicrokernelTester()
755 .batch_size(batch_size)
756 .scale(500)
757 .output_zero_point(128)
758 .qmin(qmin)
759 .qmax(std::numeric_limits<uint8_t>::max())
760 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qu8_cvt_neonv8_params);
761 }
762 }
763 }
764
TEST(F32_QU8_VCVT__NEONV8_X16,qmax)765 TEST(F32_QU8_VCVT__NEONV8_X16, qmax) {
766 TEST_REQUIRES_ARM_NEON_V8;
767 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
768 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
769 VCvtMicrokernelTester()
770 .batch_size(batch_size)
771 .scale(500)
772 .output_zero_point(128)
773 .qmin(std::numeric_limits<uint8_t>::min())
774 .qmax(qmax)
775 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x16, xnn_init_f32_qu8_cvt_neonv8_params);
776 }
777 }
778 }
779 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
780
781
782 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_QU8_VCVT__NEONV8_X24,batch_eq_24)783 TEST(F32_QU8_VCVT__NEONV8_X24, batch_eq_24) {
784 TEST_REQUIRES_ARM_NEON_V8;
785 VCvtMicrokernelTester()
786 .batch_size(24)
787 .qmin(std::numeric_limits<uint8_t>::min())
788 .qmax(std::numeric_limits<uint8_t>::max())
789 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qu8_cvt_neonv8_params);
790 }
791
TEST(F32_QU8_VCVT__NEONV8_X24,batch_div_24)792 TEST(F32_QU8_VCVT__NEONV8_X24, batch_div_24) {
793 TEST_REQUIRES_ARM_NEON_V8;
794 for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
795 VCvtMicrokernelTester()
796 .batch_size(batch_size)
797 .qmin(std::numeric_limits<uint8_t>::min())
798 .qmax(std::numeric_limits<uint8_t>::max())
799 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qu8_cvt_neonv8_params);
800 }
801 }
802
TEST(F32_QU8_VCVT__NEONV8_X24,batch_lt_24)803 TEST(F32_QU8_VCVT__NEONV8_X24, batch_lt_24) {
804 TEST_REQUIRES_ARM_NEON_V8;
805 for (size_t batch_size = 1; batch_size < 24; batch_size++) {
806 VCvtMicrokernelTester()
807 .batch_size(batch_size)
808 .qmin(std::numeric_limits<uint8_t>::min())
809 .qmax(std::numeric_limits<uint8_t>::max())
810 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qu8_cvt_neonv8_params);
811 }
812 }
813
TEST(F32_QU8_VCVT__NEONV8_X24,batch_gt_24)814 TEST(F32_QU8_VCVT__NEONV8_X24, batch_gt_24) {
815 TEST_REQUIRES_ARM_NEON_V8;
816 for (size_t batch_size = 25; batch_size < 48; batch_size++) {
817 VCvtMicrokernelTester()
818 .batch_size(batch_size)
819 .qmin(std::numeric_limits<uint8_t>::min())
820 .qmax(std::numeric_limits<uint8_t>::max())
821 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qu8_cvt_neonv8_params);
822 }
823 }
824
TEST(F32_QU8_VCVT__NEONV8_X24,scale)825 TEST(F32_QU8_VCVT__NEONV8_X24, scale) {
826 TEST_REQUIRES_ARM_NEON_V8;
827 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
828 VCvtMicrokernelTester()
829 .batch_size(batch_size)
830 .scale(50)
831 .output_zero_point(100)
832 .qmin(std::numeric_limits<uint8_t>::min())
833 .qmax(std::numeric_limits<uint8_t>::max())
834 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qu8_cvt_neonv8_params);
835 }
836 }
837
TEST(F32_QU8_VCVT__NEONV8_X24,output_zero_point)838 TEST(F32_QU8_VCVT__NEONV8_X24, output_zero_point) {
839 TEST_REQUIRES_ARM_NEON_V8;
840 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
841 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
842 VCvtMicrokernelTester()
843 .batch_size(batch_size)
844 .output_zero_point(output_zero_point)
845 .qmin(std::numeric_limits<uint8_t>::min())
846 .qmax(std::numeric_limits<uint8_t>::max())
847 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qu8_cvt_neonv8_params);
848 }
849 }
850 }
851
TEST(F32_QU8_VCVT__NEONV8_X24,saturation)852 TEST(F32_QU8_VCVT__NEONV8_X24, saturation) {
853 TEST_REQUIRES_ARM_NEON_V8;
854 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
855 VCvtMicrokernelTester()
856 .batch_size(batch_size)
857 .scale(500)
858 .output_zero_point(128)
859 .qmin(std::numeric_limits<uint8_t>::min())
860 .qmax(std::numeric_limits<uint8_t>::max())
861 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qu8_cvt_neonv8_params);
862 }
863 }
864
TEST(F32_QU8_VCVT__NEONV8_X24,overflow)865 TEST(F32_QU8_VCVT__NEONV8_X24, overflow) {
866 TEST_REQUIRES_ARM_NEON_V8;
867 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
868 VCvtMicrokernelTester()
869 .batch_size(batch_size)
870 .scale(4294967296.0f)
871 .qmin(std::numeric_limits<uint8_t>::min())
872 .qmax(std::numeric_limits<uint8_t>::max())
873 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qu8_cvt_neonv8_params);
874 }
875 }
876
TEST(F32_QU8_VCVT__NEONV8_X24,qmin)877 TEST(F32_QU8_VCVT__NEONV8_X24, qmin) {
878 TEST_REQUIRES_ARM_NEON_V8;
879 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
880 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
881 VCvtMicrokernelTester()
882 .batch_size(batch_size)
883 .scale(500)
884 .output_zero_point(128)
885 .qmin(qmin)
886 .qmax(std::numeric_limits<uint8_t>::max())
887 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qu8_cvt_neonv8_params);
888 }
889 }
890 }
891
TEST(F32_QU8_VCVT__NEONV8_X24,qmax)892 TEST(F32_QU8_VCVT__NEONV8_X24, qmax) {
893 TEST_REQUIRES_ARM_NEON_V8;
894 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
895 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
896 VCvtMicrokernelTester()
897 .batch_size(batch_size)
898 .scale(500)
899 .output_zero_point(128)
900 .qmin(std::numeric_limits<uint8_t>::min())
901 .qmax(qmax)
902 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x24, xnn_init_f32_qu8_cvt_neonv8_params);
903 }
904 }
905 }
906 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
907
908
909 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_QU8_VCVT__NEONV8_X32,batch_eq_32)910 TEST(F32_QU8_VCVT__NEONV8_X32, batch_eq_32) {
911 TEST_REQUIRES_ARM_NEON_V8;
912 VCvtMicrokernelTester()
913 .batch_size(32)
914 .qmin(std::numeric_limits<uint8_t>::min())
915 .qmax(std::numeric_limits<uint8_t>::max())
916 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qu8_cvt_neonv8_params);
917 }
918
TEST(F32_QU8_VCVT__NEONV8_X32,batch_div_32)919 TEST(F32_QU8_VCVT__NEONV8_X32, batch_div_32) {
920 TEST_REQUIRES_ARM_NEON_V8;
921 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
922 VCvtMicrokernelTester()
923 .batch_size(batch_size)
924 .qmin(std::numeric_limits<uint8_t>::min())
925 .qmax(std::numeric_limits<uint8_t>::max())
926 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qu8_cvt_neonv8_params);
927 }
928 }
929
TEST(F32_QU8_VCVT__NEONV8_X32,batch_lt_32)930 TEST(F32_QU8_VCVT__NEONV8_X32, batch_lt_32) {
931 TEST_REQUIRES_ARM_NEON_V8;
932 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
933 VCvtMicrokernelTester()
934 .batch_size(batch_size)
935 .qmin(std::numeric_limits<uint8_t>::min())
936 .qmax(std::numeric_limits<uint8_t>::max())
937 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qu8_cvt_neonv8_params);
938 }
939 }
940
TEST(F32_QU8_VCVT__NEONV8_X32,batch_gt_32)941 TEST(F32_QU8_VCVT__NEONV8_X32, batch_gt_32) {
942 TEST_REQUIRES_ARM_NEON_V8;
943 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
944 VCvtMicrokernelTester()
945 .batch_size(batch_size)
946 .qmin(std::numeric_limits<uint8_t>::min())
947 .qmax(std::numeric_limits<uint8_t>::max())
948 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qu8_cvt_neonv8_params);
949 }
950 }
951
TEST(F32_QU8_VCVT__NEONV8_X32,scale)952 TEST(F32_QU8_VCVT__NEONV8_X32, scale) {
953 TEST_REQUIRES_ARM_NEON_V8;
954 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
955 VCvtMicrokernelTester()
956 .batch_size(batch_size)
957 .scale(50)
958 .output_zero_point(100)
959 .qmin(std::numeric_limits<uint8_t>::min())
960 .qmax(std::numeric_limits<uint8_t>::max())
961 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qu8_cvt_neonv8_params);
962 }
963 }
964
TEST(F32_QU8_VCVT__NEONV8_X32,output_zero_point)965 TEST(F32_QU8_VCVT__NEONV8_X32, output_zero_point) {
966 TEST_REQUIRES_ARM_NEON_V8;
967 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
968 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
969 VCvtMicrokernelTester()
970 .batch_size(batch_size)
971 .output_zero_point(output_zero_point)
972 .qmin(std::numeric_limits<uint8_t>::min())
973 .qmax(std::numeric_limits<uint8_t>::max())
974 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qu8_cvt_neonv8_params);
975 }
976 }
977 }
978
TEST(F32_QU8_VCVT__NEONV8_X32,saturation)979 TEST(F32_QU8_VCVT__NEONV8_X32, saturation) {
980 TEST_REQUIRES_ARM_NEON_V8;
981 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
982 VCvtMicrokernelTester()
983 .batch_size(batch_size)
984 .scale(500)
985 .output_zero_point(128)
986 .qmin(std::numeric_limits<uint8_t>::min())
987 .qmax(std::numeric_limits<uint8_t>::max())
988 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qu8_cvt_neonv8_params);
989 }
990 }
991
TEST(F32_QU8_VCVT__NEONV8_X32,overflow)992 TEST(F32_QU8_VCVT__NEONV8_X32, overflow) {
993 TEST_REQUIRES_ARM_NEON_V8;
994 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
995 VCvtMicrokernelTester()
996 .batch_size(batch_size)
997 .scale(4294967296.0f)
998 .qmin(std::numeric_limits<uint8_t>::min())
999 .qmax(std::numeric_limits<uint8_t>::max())
1000 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qu8_cvt_neonv8_params);
1001 }
1002 }
1003
TEST(F32_QU8_VCVT__NEONV8_X32,qmin)1004 TEST(F32_QU8_VCVT__NEONV8_X32, qmin) {
1005 TEST_REQUIRES_ARM_NEON_V8;
1006 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
1007 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1008 VCvtMicrokernelTester()
1009 .batch_size(batch_size)
1010 .scale(500)
1011 .output_zero_point(128)
1012 .qmin(qmin)
1013 .qmax(std::numeric_limits<uint8_t>::max())
1014 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qu8_cvt_neonv8_params);
1015 }
1016 }
1017 }
1018
TEST(F32_QU8_VCVT__NEONV8_X32,qmax)1019 TEST(F32_QU8_VCVT__NEONV8_X32, qmax) {
1020 TEST_REQUIRES_ARM_NEON_V8;
1021 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
1022 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1023 VCvtMicrokernelTester()
1024 .batch_size(batch_size)
1025 .scale(500)
1026 .output_zero_point(128)
1027 .qmin(std::numeric_limits<uint8_t>::min())
1028 .qmax(qmax)
1029 .Test(xnn_f32_qu8_vcvt_ukernel__neonv8_x32, xnn_init_f32_qu8_cvt_neonv8_params);
1030 }
1031 }
1032 }
1033 #endif // XNN_ARCH_ARM || XNN_ARCH_ARM64
1034
1035
1036 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QU8_VCVT__SSE2_X8,batch_eq_8)1037 TEST(F32_QU8_VCVT__SSE2_X8, batch_eq_8) {
1038 TEST_REQUIRES_X86_SSE2;
1039 VCvtMicrokernelTester()
1040 .batch_size(8)
1041 .qmin(std::numeric_limits<uint8_t>::min())
1042 .qmax(std::numeric_limits<uint8_t>::max())
1043 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x8, xnn_init_f32_qu8_cvt_sse2_params);
1044 }
1045
TEST(F32_QU8_VCVT__SSE2_X8,batch_div_8)1046 TEST(F32_QU8_VCVT__SSE2_X8, batch_div_8) {
1047 TEST_REQUIRES_X86_SSE2;
1048 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
1049 VCvtMicrokernelTester()
1050 .batch_size(batch_size)
1051 .qmin(std::numeric_limits<uint8_t>::min())
1052 .qmax(std::numeric_limits<uint8_t>::max())
1053 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x8, xnn_init_f32_qu8_cvt_sse2_params);
1054 }
1055 }
1056
TEST(F32_QU8_VCVT__SSE2_X8,batch_lt_8)1057 TEST(F32_QU8_VCVT__SSE2_X8, batch_lt_8) {
1058 TEST_REQUIRES_X86_SSE2;
1059 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
1060 VCvtMicrokernelTester()
1061 .batch_size(batch_size)
1062 .qmin(std::numeric_limits<uint8_t>::min())
1063 .qmax(std::numeric_limits<uint8_t>::max())
1064 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x8, xnn_init_f32_qu8_cvt_sse2_params);
1065 }
1066 }
1067
TEST(F32_QU8_VCVT__SSE2_X8,batch_gt_8)1068 TEST(F32_QU8_VCVT__SSE2_X8, batch_gt_8) {
1069 TEST_REQUIRES_X86_SSE2;
1070 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
1071 VCvtMicrokernelTester()
1072 .batch_size(batch_size)
1073 .qmin(std::numeric_limits<uint8_t>::min())
1074 .qmax(std::numeric_limits<uint8_t>::max())
1075 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x8, xnn_init_f32_qu8_cvt_sse2_params);
1076 }
1077 }
1078
TEST(F32_QU8_VCVT__SSE2_X8,scale)1079 TEST(F32_QU8_VCVT__SSE2_X8, scale) {
1080 TEST_REQUIRES_X86_SSE2;
1081 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1082 VCvtMicrokernelTester()
1083 .batch_size(batch_size)
1084 .scale(50)
1085 .output_zero_point(100)
1086 .qmin(std::numeric_limits<uint8_t>::min())
1087 .qmax(std::numeric_limits<uint8_t>::max())
1088 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x8, xnn_init_f32_qu8_cvt_sse2_params);
1089 }
1090 }
1091
TEST(F32_QU8_VCVT__SSE2_X8,output_zero_point)1092 TEST(F32_QU8_VCVT__SSE2_X8, output_zero_point) {
1093 TEST_REQUIRES_X86_SSE2;
1094 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
1095 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1096 VCvtMicrokernelTester()
1097 .batch_size(batch_size)
1098 .output_zero_point(output_zero_point)
1099 .qmin(std::numeric_limits<uint8_t>::min())
1100 .qmax(std::numeric_limits<uint8_t>::max())
1101 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x8, xnn_init_f32_qu8_cvt_sse2_params);
1102 }
1103 }
1104 }
1105
TEST(F32_QU8_VCVT__SSE2_X8,saturation)1106 TEST(F32_QU8_VCVT__SSE2_X8, saturation) {
1107 TEST_REQUIRES_X86_SSE2;
1108 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1109 VCvtMicrokernelTester()
1110 .batch_size(batch_size)
1111 .scale(500)
1112 .output_zero_point(128)
1113 .qmin(std::numeric_limits<uint8_t>::min())
1114 .qmax(std::numeric_limits<uint8_t>::max())
1115 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x8, xnn_init_f32_qu8_cvt_sse2_params);
1116 }
1117 }
1118
TEST(F32_QU8_VCVT__SSE2_X8,overflow)1119 TEST(F32_QU8_VCVT__SSE2_X8, overflow) {
1120 TEST_REQUIRES_X86_SSE2;
1121 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1122 VCvtMicrokernelTester()
1123 .batch_size(batch_size)
1124 .scale(4294967296.0f)
1125 .qmin(std::numeric_limits<uint8_t>::min())
1126 .qmax(std::numeric_limits<uint8_t>::max())
1127 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x8, xnn_init_f32_qu8_cvt_sse2_params);
1128 }
1129 }
1130
TEST(F32_QU8_VCVT__SSE2_X8,qmin)1131 TEST(F32_QU8_VCVT__SSE2_X8, qmin) {
1132 TEST_REQUIRES_X86_SSE2;
1133 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
1134 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1135 VCvtMicrokernelTester()
1136 .batch_size(batch_size)
1137 .scale(500)
1138 .output_zero_point(128)
1139 .qmin(qmin)
1140 .qmax(std::numeric_limits<uint8_t>::max())
1141 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x8, xnn_init_f32_qu8_cvt_sse2_params);
1142 }
1143 }
1144 }
1145
TEST(F32_QU8_VCVT__SSE2_X8,qmax)1146 TEST(F32_QU8_VCVT__SSE2_X8, qmax) {
1147 TEST_REQUIRES_X86_SSE2;
1148 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
1149 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1150 VCvtMicrokernelTester()
1151 .batch_size(batch_size)
1152 .scale(500)
1153 .output_zero_point(128)
1154 .qmin(std::numeric_limits<uint8_t>::min())
1155 .qmax(qmax)
1156 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x8, xnn_init_f32_qu8_cvt_sse2_params);
1157 }
1158 }
1159 }
1160 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1161
1162
1163 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QU8_VCVT__SSE2_X16,batch_eq_16)1164 TEST(F32_QU8_VCVT__SSE2_X16, batch_eq_16) {
1165 TEST_REQUIRES_X86_SSE2;
1166 VCvtMicrokernelTester()
1167 .batch_size(16)
1168 .qmin(std::numeric_limits<uint8_t>::min())
1169 .qmax(std::numeric_limits<uint8_t>::max())
1170 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x16, xnn_init_f32_qu8_cvt_sse2_params);
1171 }
1172
TEST(F32_QU8_VCVT__SSE2_X16,batch_div_16)1173 TEST(F32_QU8_VCVT__SSE2_X16, batch_div_16) {
1174 TEST_REQUIRES_X86_SSE2;
1175 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
1176 VCvtMicrokernelTester()
1177 .batch_size(batch_size)
1178 .qmin(std::numeric_limits<uint8_t>::min())
1179 .qmax(std::numeric_limits<uint8_t>::max())
1180 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x16, xnn_init_f32_qu8_cvt_sse2_params);
1181 }
1182 }
1183
TEST(F32_QU8_VCVT__SSE2_X16,batch_lt_16)1184 TEST(F32_QU8_VCVT__SSE2_X16, batch_lt_16) {
1185 TEST_REQUIRES_X86_SSE2;
1186 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
1187 VCvtMicrokernelTester()
1188 .batch_size(batch_size)
1189 .qmin(std::numeric_limits<uint8_t>::min())
1190 .qmax(std::numeric_limits<uint8_t>::max())
1191 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x16, xnn_init_f32_qu8_cvt_sse2_params);
1192 }
1193 }
1194
TEST(F32_QU8_VCVT__SSE2_X16,batch_gt_16)1195 TEST(F32_QU8_VCVT__SSE2_X16, batch_gt_16) {
1196 TEST_REQUIRES_X86_SSE2;
1197 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
1198 VCvtMicrokernelTester()
1199 .batch_size(batch_size)
1200 .qmin(std::numeric_limits<uint8_t>::min())
1201 .qmax(std::numeric_limits<uint8_t>::max())
1202 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x16, xnn_init_f32_qu8_cvt_sse2_params);
1203 }
1204 }
1205
TEST(F32_QU8_VCVT__SSE2_X16,scale)1206 TEST(F32_QU8_VCVT__SSE2_X16, scale) {
1207 TEST_REQUIRES_X86_SSE2;
1208 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1209 VCvtMicrokernelTester()
1210 .batch_size(batch_size)
1211 .scale(50)
1212 .output_zero_point(100)
1213 .qmin(std::numeric_limits<uint8_t>::min())
1214 .qmax(std::numeric_limits<uint8_t>::max())
1215 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x16, xnn_init_f32_qu8_cvt_sse2_params);
1216 }
1217 }
1218
TEST(F32_QU8_VCVT__SSE2_X16,output_zero_point)1219 TEST(F32_QU8_VCVT__SSE2_X16, output_zero_point) {
1220 TEST_REQUIRES_X86_SSE2;
1221 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
1222 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1223 VCvtMicrokernelTester()
1224 .batch_size(batch_size)
1225 .output_zero_point(output_zero_point)
1226 .qmin(std::numeric_limits<uint8_t>::min())
1227 .qmax(std::numeric_limits<uint8_t>::max())
1228 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x16, xnn_init_f32_qu8_cvt_sse2_params);
1229 }
1230 }
1231 }
1232
TEST(F32_QU8_VCVT__SSE2_X16,saturation)1233 TEST(F32_QU8_VCVT__SSE2_X16, saturation) {
1234 TEST_REQUIRES_X86_SSE2;
1235 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1236 VCvtMicrokernelTester()
1237 .batch_size(batch_size)
1238 .scale(500)
1239 .output_zero_point(128)
1240 .qmin(std::numeric_limits<uint8_t>::min())
1241 .qmax(std::numeric_limits<uint8_t>::max())
1242 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x16, xnn_init_f32_qu8_cvt_sse2_params);
1243 }
1244 }
1245
TEST(F32_QU8_VCVT__SSE2_X16,overflow)1246 TEST(F32_QU8_VCVT__SSE2_X16, overflow) {
1247 TEST_REQUIRES_X86_SSE2;
1248 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1249 VCvtMicrokernelTester()
1250 .batch_size(batch_size)
1251 .scale(4294967296.0f)
1252 .qmin(std::numeric_limits<uint8_t>::min())
1253 .qmax(std::numeric_limits<uint8_t>::max())
1254 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x16, xnn_init_f32_qu8_cvt_sse2_params);
1255 }
1256 }
1257
TEST(F32_QU8_VCVT__SSE2_X16,qmin)1258 TEST(F32_QU8_VCVT__SSE2_X16, qmin) {
1259 TEST_REQUIRES_X86_SSE2;
1260 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
1261 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1262 VCvtMicrokernelTester()
1263 .batch_size(batch_size)
1264 .scale(500)
1265 .output_zero_point(128)
1266 .qmin(qmin)
1267 .qmax(std::numeric_limits<uint8_t>::max())
1268 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x16, xnn_init_f32_qu8_cvt_sse2_params);
1269 }
1270 }
1271 }
1272
TEST(F32_QU8_VCVT__SSE2_X16,qmax)1273 TEST(F32_QU8_VCVT__SSE2_X16, qmax) {
1274 TEST_REQUIRES_X86_SSE2;
1275 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
1276 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1277 VCvtMicrokernelTester()
1278 .batch_size(batch_size)
1279 .scale(500)
1280 .output_zero_point(128)
1281 .qmin(std::numeric_limits<uint8_t>::min())
1282 .qmax(qmax)
1283 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x16, xnn_init_f32_qu8_cvt_sse2_params);
1284 }
1285 }
1286 }
1287 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1288
1289
1290 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QU8_VCVT__SSE2_X24,batch_eq_24)1291 TEST(F32_QU8_VCVT__SSE2_X24, batch_eq_24) {
1292 TEST_REQUIRES_X86_SSE2;
1293 VCvtMicrokernelTester()
1294 .batch_size(24)
1295 .qmin(std::numeric_limits<uint8_t>::min())
1296 .qmax(std::numeric_limits<uint8_t>::max())
1297 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x24, xnn_init_f32_qu8_cvt_sse2_params);
1298 }
1299
TEST(F32_QU8_VCVT__SSE2_X24,batch_div_24)1300 TEST(F32_QU8_VCVT__SSE2_X24, batch_div_24) {
1301 TEST_REQUIRES_X86_SSE2;
1302 for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
1303 VCvtMicrokernelTester()
1304 .batch_size(batch_size)
1305 .qmin(std::numeric_limits<uint8_t>::min())
1306 .qmax(std::numeric_limits<uint8_t>::max())
1307 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x24, xnn_init_f32_qu8_cvt_sse2_params);
1308 }
1309 }
1310
TEST(F32_QU8_VCVT__SSE2_X24,batch_lt_24)1311 TEST(F32_QU8_VCVT__SSE2_X24, batch_lt_24) {
1312 TEST_REQUIRES_X86_SSE2;
1313 for (size_t batch_size = 1; batch_size < 24; batch_size++) {
1314 VCvtMicrokernelTester()
1315 .batch_size(batch_size)
1316 .qmin(std::numeric_limits<uint8_t>::min())
1317 .qmax(std::numeric_limits<uint8_t>::max())
1318 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x24, xnn_init_f32_qu8_cvt_sse2_params);
1319 }
1320 }
1321
TEST(F32_QU8_VCVT__SSE2_X24,batch_gt_24)1322 TEST(F32_QU8_VCVT__SSE2_X24, batch_gt_24) {
1323 TEST_REQUIRES_X86_SSE2;
1324 for (size_t batch_size = 25; batch_size < 48; batch_size++) {
1325 VCvtMicrokernelTester()
1326 .batch_size(batch_size)
1327 .qmin(std::numeric_limits<uint8_t>::min())
1328 .qmax(std::numeric_limits<uint8_t>::max())
1329 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x24, xnn_init_f32_qu8_cvt_sse2_params);
1330 }
1331 }
1332
TEST(F32_QU8_VCVT__SSE2_X24,scale)1333 TEST(F32_QU8_VCVT__SSE2_X24, scale) {
1334 TEST_REQUIRES_X86_SSE2;
1335 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1336 VCvtMicrokernelTester()
1337 .batch_size(batch_size)
1338 .scale(50)
1339 .output_zero_point(100)
1340 .qmin(std::numeric_limits<uint8_t>::min())
1341 .qmax(std::numeric_limits<uint8_t>::max())
1342 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x24, xnn_init_f32_qu8_cvt_sse2_params);
1343 }
1344 }
1345
TEST(F32_QU8_VCVT__SSE2_X24,output_zero_point)1346 TEST(F32_QU8_VCVT__SSE2_X24, output_zero_point) {
1347 TEST_REQUIRES_X86_SSE2;
1348 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
1349 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1350 VCvtMicrokernelTester()
1351 .batch_size(batch_size)
1352 .output_zero_point(output_zero_point)
1353 .qmin(std::numeric_limits<uint8_t>::min())
1354 .qmax(std::numeric_limits<uint8_t>::max())
1355 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x24, xnn_init_f32_qu8_cvt_sse2_params);
1356 }
1357 }
1358 }
1359
TEST(F32_QU8_VCVT__SSE2_X24,saturation)1360 TEST(F32_QU8_VCVT__SSE2_X24, saturation) {
1361 TEST_REQUIRES_X86_SSE2;
1362 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1363 VCvtMicrokernelTester()
1364 .batch_size(batch_size)
1365 .scale(500)
1366 .output_zero_point(128)
1367 .qmin(std::numeric_limits<uint8_t>::min())
1368 .qmax(std::numeric_limits<uint8_t>::max())
1369 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x24, xnn_init_f32_qu8_cvt_sse2_params);
1370 }
1371 }
1372
TEST(F32_QU8_VCVT__SSE2_X24,overflow)1373 TEST(F32_QU8_VCVT__SSE2_X24, overflow) {
1374 TEST_REQUIRES_X86_SSE2;
1375 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1376 VCvtMicrokernelTester()
1377 .batch_size(batch_size)
1378 .scale(4294967296.0f)
1379 .qmin(std::numeric_limits<uint8_t>::min())
1380 .qmax(std::numeric_limits<uint8_t>::max())
1381 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x24, xnn_init_f32_qu8_cvt_sse2_params);
1382 }
1383 }
1384
TEST(F32_QU8_VCVT__SSE2_X24,qmin)1385 TEST(F32_QU8_VCVT__SSE2_X24, qmin) {
1386 TEST_REQUIRES_X86_SSE2;
1387 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
1388 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1389 VCvtMicrokernelTester()
1390 .batch_size(batch_size)
1391 .scale(500)
1392 .output_zero_point(128)
1393 .qmin(qmin)
1394 .qmax(std::numeric_limits<uint8_t>::max())
1395 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x24, xnn_init_f32_qu8_cvt_sse2_params);
1396 }
1397 }
1398 }
1399
TEST(F32_QU8_VCVT__SSE2_X24,qmax)1400 TEST(F32_QU8_VCVT__SSE2_X24, qmax) {
1401 TEST_REQUIRES_X86_SSE2;
1402 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
1403 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1404 VCvtMicrokernelTester()
1405 .batch_size(batch_size)
1406 .scale(500)
1407 .output_zero_point(128)
1408 .qmin(std::numeric_limits<uint8_t>::min())
1409 .qmax(qmax)
1410 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x24, xnn_init_f32_qu8_cvt_sse2_params);
1411 }
1412 }
1413 }
1414 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1415
1416
1417 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QU8_VCVT__SSE2_X32,batch_eq_32)1418 TEST(F32_QU8_VCVT__SSE2_X32, batch_eq_32) {
1419 TEST_REQUIRES_X86_SSE2;
1420 VCvtMicrokernelTester()
1421 .batch_size(32)
1422 .qmin(std::numeric_limits<uint8_t>::min())
1423 .qmax(std::numeric_limits<uint8_t>::max())
1424 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x32, xnn_init_f32_qu8_cvt_sse2_params);
1425 }
1426
TEST(F32_QU8_VCVT__SSE2_X32,batch_div_32)1427 TEST(F32_QU8_VCVT__SSE2_X32, batch_div_32) {
1428 TEST_REQUIRES_X86_SSE2;
1429 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
1430 VCvtMicrokernelTester()
1431 .batch_size(batch_size)
1432 .qmin(std::numeric_limits<uint8_t>::min())
1433 .qmax(std::numeric_limits<uint8_t>::max())
1434 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x32, xnn_init_f32_qu8_cvt_sse2_params);
1435 }
1436 }
1437
TEST(F32_QU8_VCVT__SSE2_X32,batch_lt_32)1438 TEST(F32_QU8_VCVT__SSE2_X32, batch_lt_32) {
1439 TEST_REQUIRES_X86_SSE2;
1440 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
1441 VCvtMicrokernelTester()
1442 .batch_size(batch_size)
1443 .qmin(std::numeric_limits<uint8_t>::min())
1444 .qmax(std::numeric_limits<uint8_t>::max())
1445 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x32, xnn_init_f32_qu8_cvt_sse2_params);
1446 }
1447 }
1448
TEST(F32_QU8_VCVT__SSE2_X32,batch_gt_32)1449 TEST(F32_QU8_VCVT__SSE2_X32, batch_gt_32) {
1450 TEST_REQUIRES_X86_SSE2;
1451 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
1452 VCvtMicrokernelTester()
1453 .batch_size(batch_size)
1454 .qmin(std::numeric_limits<uint8_t>::min())
1455 .qmax(std::numeric_limits<uint8_t>::max())
1456 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x32, xnn_init_f32_qu8_cvt_sse2_params);
1457 }
1458 }
1459
TEST(F32_QU8_VCVT__SSE2_X32,scale)1460 TEST(F32_QU8_VCVT__SSE2_X32, scale) {
1461 TEST_REQUIRES_X86_SSE2;
1462 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1463 VCvtMicrokernelTester()
1464 .batch_size(batch_size)
1465 .scale(50)
1466 .output_zero_point(100)
1467 .qmin(std::numeric_limits<uint8_t>::min())
1468 .qmax(std::numeric_limits<uint8_t>::max())
1469 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x32, xnn_init_f32_qu8_cvt_sse2_params);
1470 }
1471 }
1472
TEST(F32_QU8_VCVT__SSE2_X32,output_zero_point)1473 TEST(F32_QU8_VCVT__SSE2_X32, output_zero_point) {
1474 TEST_REQUIRES_X86_SSE2;
1475 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
1476 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1477 VCvtMicrokernelTester()
1478 .batch_size(batch_size)
1479 .output_zero_point(output_zero_point)
1480 .qmin(std::numeric_limits<uint8_t>::min())
1481 .qmax(std::numeric_limits<uint8_t>::max())
1482 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x32, xnn_init_f32_qu8_cvt_sse2_params);
1483 }
1484 }
1485 }
1486
TEST(F32_QU8_VCVT__SSE2_X32,saturation)1487 TEST(F32_QU8_VCVT__SSE2_X32, saturation) {
1488 TEST_REQUIRES_X86_SSE2;
1489 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1490 VCvtMicrokernelTester()
1491 .batch_size(batch_size)
1492 .scale(500)
1493 .output_zero_point(128)
1494 .qmin(std::numeric_limits<uint8_t>::min())
1495 .qmax(std::numeric_limits<uint8_t>::max())
1496 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x32, xnn_init_f32_qu8_cvt_sse2_params);
1497 }
1498 }
1499
TEST(F32_QU8_VCVT__SSE2_X32,overflow)1500 TEST(F32_QU8_VCVT__SSE2_X32, overflow) {
1501 TEST_REQUIRES_X86_SSE2;
1502 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1503 VCvtMicrokernelTester()
1504 .batch_size(batch_size)
1505 .scale(4294967296.0f)
1506 .qmin(std::numeric_limits<uint8_t>::min())
1507 .qmax(std::numeric_limits<uint8_t>::max())
1508 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x32, xnn_init_f32_qu8_cvt_sse2_params);
1509 }
1510 }
1511
TEST(F32_QU8_VCVT__SSE2_X32,qmin)1512 TEST(F32_QU8_VCVT__SSE2_X32, qmin) {
1513 TEST_REQUIRES_X86_SSE2;
1514 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
1515 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1516 VCvtMicrokernelTester()
1517 .batch_size(batch_size)
1518 .scale(500)
1519 .output_zero_point(128)
1520 .qmin(qmin)
1521 .qmax(std::numeric_limits<uint8_t>::max())
1522 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x32, xnn_init_f32_qu8_cvt_sse2_params);
1523 }
1524 }
1525 }
1526
TEST(F32_QU8_VCVT__SSE2_X32,qmax)1527 TEST(F32_QU8_VCVT__SSE2_X32, qmax) {
1528 TEST_REQUIRES_X86_SSE2;
1529 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
1530 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1531 VCvtMicrokernelTester()
1532 .batch_size(batch_size)
1533 .scale(500)
1534 .output_zero_point(128)
1535 .qmin(std::numeric_limits<uint8_t>::min())
1536 .qmax(qmax)
1537 .Test(xnn_f32_qu8_vcvt_ukernel__sse2_x32, xnn_init_f32_qu8_cvt_sse2_params);
1538 }
1539 }
1540 }
1541 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1542
1543
1544 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QU8_VCVT__AVX_X8,batch_eq_8)1545 TEST(F32_QU8_VCVT__AVX_X8, batch_eq_8) {
1546 TEST_REQUIRES_X86_AVX;
1547 VCvtMicrokernelTester()
1548 .batch_size(8)
1549 .qmin(std::numeric_limits<uint8_t>::min())
1550 .qmax(std::numeric_limits<uint8_t>::max())
1551 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x8, xnn_init_f32_qu8_cvt_avx_params);
1552 }
1553
TEST(F32_QU8_VCVT__AVX_X8,batch_div_8)1554 TEST(F32_QU8_VCVT__AVX_X8, batch_div_8) {
1555 TEST_REQUIRES_X86_AVX;
1556 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
1557 VCvtMicrokernelTester()
1558 .batch_size(batch_size)
1559 .qmin(std::numeric_limits<uint8_t>::min())
1560 .qmax(std::numeric_limits<uint8_t>::max())
1561 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x8, xnn_init_f32_qu8_cvt_avx_params);
1562 }
1563 }
1564
TEST(F32_QU8_VCVT__AVX_X8,batch_lt_8)1565 TEST(F32_QU8_VCVT__AVX_X8, batch_lt_8) {
1566 TEST_REQUIRES_X86_AVX;
1567 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
1568 VCvtMicrokernelTester()
1569 .batch_size(batch_size)
1570 .qmin(std::numeric_limits<uint8_t>::min())
1571 .qmax(std::numeric_limits<uint8_t>::max())
1572 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x8, xnn_init_f32_qu8_cvt_avx_params);
1573 }
1574 }
1575
TEST(F32_QU8_VCVT__AVX_X8,batch_gt_8)1576 TEST(F32_QU8_VCVT__AVX_X8, batch_gt_8) {
1577 TEST_REQUIRES_X86_AVX;
1578 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
1579 VCvtMicrokernelTester()
1580 .batch_size(batch_size)
1581 .qmin(std::numeric_limits<uint8_t>::min())
1582 .qmax(std::numeric_limits<uint8_t>::max())
1583 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x8, xnn_init_f32_qu8_cvt_avx_params);
1584 }
1585 }
1586
TEST(F32_QU8_VCVT__AVX_X8,scale)1587 TEST(F32_QU8_VCVT__AVX_X8, scale) {
1588 TEST_REQUIRES_X86_AVX;
1589 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1590 VCvtMicrokernelTester()
1591 .batch_size(batch_size)
1592 .scale(50)
1593 .output_zero_point(100)
1594 .qmin(std::numeric_limits<uint8_t>::min())
1595 .qmax(std::numeric_limits<uint8_t>::max())
1596 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x8, xnn_init_f32_qu8_cvt_avx_params);
1597 }
1598 }
1599
TEST(F32_QU8_VCVT__AVX_X8,output_zero_point)1600 TEST(F32_QU8_VCVT__AVX_X8, output_zero_point) {
1601 TEST_REQUIRES_X86_AVX;
1602 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
1603 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1604 VCvtMicrokernelTester()
1605 .batch_size(batch_size)
1606 .output_zero_point(output_zero_point)
1607 .qmin(std::numeric_limits<uint8_t>::min())
1608 .qmax(std::numeric_limits<uint8_t>::max())
1609 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x8, xnn_init_f32_qu8_cvt_avx_params);
1610 }
1611 }
1612 }
1613
TEST(F32_QU8_VCVT__AVX_X8,saturation)1614 TEST(F32_QU8_VCVT__AVX_X8, saturation) {
1615 TEST_REQUIRES_X86_AVX;
1616 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1617 VCvtMicrokernelTester()
1618 .batch_size(batch_size)
1619 .scale(500)
1620 .output_zero_point(128)
1621 .qmin(std::numeric_limits<uint8_t>::min())
1622 .qmax(std::numeric_limits<uint8_t>::max())
1623 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x8, xnn_init_f32_qu8_cvt_avx_params);
1624 }
1625 }
1626
TEST(F32_QU8_VCVT__AVX_X8,overflow)1627 TEST(F32_QU8_VCVT__AVX_X8, overflow) {
1628 TEST_REQUIRES_X86_AVX;
1629 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1630 VCvtMicrokernelTester()
1631 .batch_size(batch_size)
1632 .scale(4294967296.0f)
1633 .qmin(std::numeric_limits<uint8_t>::min())
1634 .qmax(std::numeric_limits<uint8_t>::max())
1635 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x8, xnn_init_f32_qu8_cvt_avx_params);
1636 }
1637 }
1638
TEST(F32_QU8_VCVT__AVX_X8,qmin)1639 TEST(F32_QU8_VCVT__AVX_X8, qmin) {
1640 TEST_REQUIRES_X86_AVX;
1641 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
1642 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1643 VCvtMicrokernelTester()
1644 .batch_size(batch_size)
1645 .scale(500)
1646 .output_zero_point(128)
1647 .qmin(qmin)
1648 .qmax(std::numeric_limits<uint8_t>::max())
1649 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x8, xnn_init_f32_qu8_cvt_avx_params);
1650 }
1651 }
1652 }
1653
TEST(F32_QU8_VCVT__AVX_X8,qmax)1654 TEST(F32_QU8_VCVT__AVX_X8, qmax) {
1655 TEST_REQUIRES_X86_AVX;
1656 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
1657 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
1658 VCvtMicrokernelTester()
1659 .batch_size(batch_size)
1660 .scale(500)
1661 .output_zero_point(128)
1662 .qmin(std::numeric_limits<uint8_t>::min())
1663 .qmax(qmax)
1664 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x8, xnn_init_f32_qu8_cvt_avx_params);
1665 }
1666 }
1667 }
1668 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1669
1670
1671 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QU8_VCVT__AVX_X16,batch_eq_16)1672 TEST(F32_QU8_VCVT__AVX_X16, batch_eq_16) {
1673 TEST_REQUIRES_X86_AVX;
1674 VCvtMicrokernelTester()
1675 .batch_size(16)
1676 .qmin(std::numeric_limits<uint8_t>::min())
1677 .qmax(std::numeric_limits<uint8_t>::max())
1678 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x16, xnn_init_f32_qu8_cvt_avx_params);
1679 }
1680
TEST(F32_QU8_VCVT__AVX_X16,batch_div_16)1681 TEST(F32_QU8_VCVT__AVX_X16, batch_div_16) {
1682 TEST_REQUIRES_X86_AVX;
1683 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
1684 VCvtMicrokernelTester()
1685 .batch_size(batch_size)
1686 .qmin(std::numeric_limits<uint8_t>::min())
1687 .qmax(std::numeric_limits<uint8_t>::max())
1688 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x16, xnn_init_f32_qu8_cvt_avx_params);
1689 }
1690 }
1691
TEST(F32_QU8_VCVT__AVX_X16,batch_lt_16)1692 TEST(F32_QU8_VCVT__AVX_X16, batch_lt_16) {
1693 TEST_REQUIRES_X86_AVX;
1694 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
1695 VCvtMicrokernelTester()
1696 .batch_size(batch_size)
1697 .qmin(std::numeric_limits<uint8_t>::min())
1698 .qmax(std::numeric_limits<uint8_t>::max())
1699 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x16, xnn_init_f32_qu8_cvt_avx_params);
1700 }
1701 }
1702
TEST(F32_QU8_VCVT__AVX_X16,batch_gt_16)1703 TEST(F32_QU8_VCVT__AVX_X16, batch_gt_16) {
1704 TEST_REQUIRES_X86_AVX;
1705 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
1706 VCvtMicrokernelTester()
1707 .batch_size(batch_size)
1708 .qmin(std::numeric_limits<uint8_t>::min())
1709 .qmax(std::numeric_limits<uint8_t>::max())
1710 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x16, xnn_init_f32_qu8_cvt_avx_params);
1711 }
1712 }
1713
TEST(F32_QU8_VCVT__AVX_X16,scale)1714 TEST(F32_QU8_VCVT__AVX_X16, scale) {
1715 TEST_REQUIRES_X86_AVX;
1716 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1717 VCvtMicrokernelTester()
1718 .batch_size(batch_size)
1719 .scale(50)
1720 .output_zero_point(100)
1721 .qmin(std::numeric_limits<uint8_t>::min())
1722 .qmax(std::numeric_limits<uint8_t>::max())
1723 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x16, xnn_init_f32_qu8_cvt_avx_params);
1724 }
1725 }
1726
TEST(F32_QU8_VCVT__AVX_X16,output_zero_point)1727 TEST(F32_QU8_VCVT__AVX_X16, output_zero_point) {
1728 TEST_REQUIRES_X86_AVX;
1729 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
1730 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1731 VCvtMicrokernelTester()
1732 .batch_size(batch_size)
1733 .output_zero_point(output_zero_point)
1734 .qmin(std::numeric_limits<uint8_t>::min())
1735 .qmax(std::numeric_limits<uint8_t>::max())
1736 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x16, xnn_init_f32_qu8_cvt_avx_params);
1737 }
1738 }
1739 }
1740
TEST(F32_QU8_VCVT__AVX_X16,saturation)1741 TEST(F32_QU8_VCVT__AVX_X16, saturation) {
1742 TEST_REQUIRES_X86_AVX;
1743 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1744 VCvtMicrokernelTester()
1745 .batch_size(batch_size)
1746 .scale(500)
1747 .output_zero_point(128)
1748 .qmin(std::numeric_limits<uint8_t>::min())
1749 .qmax(std::numeric_limits<uint8_t>::max())
1750 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x16, xnn_init_f32_qu8_cvt_avx_params);
1751 }
1752 }
1753
TEST(F32_QU8_VCVT__AVX_X16,overflow)1754 TEST(F32_QU8_VCVT__AVX_X16, overflow) {
1755 TEST_REQUIRES_X86_AVX;
1756 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1757 VCvtMicrokernelTester()
1758 .batch_size(batch_size)
1759 .scale(4294967296.0f)
1760 .qmin(std::numeric_limits<uint8_t>::min())
1761 .qmax(std::numeric_limits<uint8_t>::max())
1762 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x16, xnn_init_f32_qu8_cvt_avx_params);
1763 }
1764 }
1765
TEST(F32_QU8_VCVT__AVX_X16,qmin)1766 TEST(F32_QU8_VCVT__AVX_X16, qmin) {
1767 TEST_REQUIRES_X86_AVX;
1768 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
1769 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1770 VCvtMicrokernelTester()
1771 .batch_size(batch_size)
1772 .scale(500)
1773 .output_zero_point(128)
1774 .qmin(qmin)
1775 .qmax(std::numeric_limits<uint8_t>::max())
1776 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x16, xnn_init_f32_qu8_cvt_avx_params);
1777 }
1778 }
1779 }
1780
TEST(F32_QU8_VCVT__AVX_X16,qmax)1781 TEST(F32_QU8_VCVT__AVX_X16, qmax) {
1782 TEST_REQUIRES_X86_AVX;
1783 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
1784 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
1785 VCvtMicrokernelTester()
1786 .batch_size(batch_size)
1787 .scale(500)
1788 .output_zero_point(128)
1789 .qmin(std::numeric_limits<uint8_t>::min())
1790 .qmax(qmax)
1791 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x16, xnn_init_f32_qu8_cvt_avx_params);
1792 }
1793 }
1794 }
1795 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1796
1797
1798 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QU8_VCVT__AVX_X24,batch_eq_24)1799 TEST(F32_QU8_VCVT__AVX_X24, batch_eq_24) {
1800 TEST_REQUIRES_X86_AVX;
1801 VCvtMicrokernelTester()
1802 .batch_size(24)
1803 .qmin(std::numeric_limits<uint8_t>::min())
1804 .qmax(std::numeric_limits<uint8_t>::max())
1805 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x24, xnn_init_f32_qu8_cvt_avx_params);
1806 }
1807
TEST(F32_QU8_VCVT__AVX_X24,batch_div_24)1808 TEST(F32_QU8_VCVT__AVX_X24, batch_div_24) {
1809 TEST_REQUIRES_X86_AVX;
1810 for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
1811 VCvtMicrokernelTester()
1812 .batch_size(batch_size)
1813 .qmin(std::numeric_limits<uint8_t>::min())
1814 .qmax(std::numeric_limits<uint8_t>::max())
1815 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x24, xnn_init_f32_qu8_cvt_avx_params);
1816 }
1817 }
1818
TEST(F32_QU8_VCVT__AVX_X24,batch_lt_24)1819 TEST(F32_QU8_VCVT__AVX_X24, batch_lt_24) {
1820 TEST_REQUIRES_X86_AVX;
1821 for (size_t batch_size = 1; batch_size < 24; batch_size++) {
1822 VCvtMicrokernelTester()
1823 .batch_size(batch_size)
1824 .qmin(std::numeric_limits<uint8_t>::min())
1825 .qmax(std::numeric_limits<uint8_t>::max())
1826 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x24, xnn_init_f32_qu8_cvt_avx_params);
1827 }
1828 }
1829
TEST(F32_QU8_VCVT__AVX_X24,batch_gt_24)1830 TEST(F32_QU8_VCVT__AVX_X24, batch_gt_24) {
1831 TEST_REQUIRES_X86_AVX;
1832 for (size_t batch_size = 25; batch_size < 48; batch_size++) {
1833 VCvtMicrokernelTester()
1834 .batch_size(batch_size)
1835 .qmin(std::numeric_limits<uint8_t>::min())
1836 .qmax(std::numeric_limits<uint8_t>::max())
1837 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x24, xnn_init_f32_qu8_cvt_avx_params);
1838 }
1839 }
1840
TEST(F32_QU8_VCVT__AVX_X24,scale)1841 TEST(F32_QU8_VCVT__AVX_X24, scale) {
1842 TEST_REQUIRES_X86_AVX;
1843 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1844 VCvtMicrokernelTester()
1845 .batch_size(batch_size)
1846 .scale(50)
1847 .output_zero_point(100)
1848 .qmin(std::numeric_limits<uint8_t>::min())
1849 .qmax(std::numeric_limits<uint8_t>::max())
1850 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x24, xnn_init_f32_qu8_cvt_avx_params);
1851 }
1852 }
1853
TEST(F32_QU8_VCVT__AVX_X24,output_zero_point)1854 TEST(F32_QU8_VCVT__AVX_X24, output_zero_point) {
1855 TEST_REQUIRES_X86_AVX;
1856 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
1857 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1858 VCvtMicrokernelTester()
1859 .batch_size(batch_size)
1860 .output_zero_point(output_zero_point)
1861 .qmin(std::numeric_limits<uint8_t>::min())
1862 .qmax(std::numeric_limits<uint8_t>::max())
1863 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x24, xnn_init_f32_qu8_cvt_avx_params);
1864 }
1865 }
1866 }
1867
TEST(F32_QU8_VCVT__AVX_X24,saturation)1868 TEST(F32_QU8_VCVT__AVX_X24, saturation) {
1869 TEST_REQUIRES_X86_AVX;
1870 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1871 VCvtMicrokernelTester()
1872 .batch_size(batch_size)
1873 .scale(500)
1874 .output_zero_point(128)
1875 .qmin(std::numeric_limits<uint8_t>::min())
1876 .qmax(std::numeric_limits<uint8_t>::max())
1877 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x24, xnn_init_f32_qu8_cvt_avx_params);
1878 }
1879 }
1880
TEST(F32_QU8_VCVT__AVX_X24,overflow)1881 TEST(F32_QU8_VCVT__AVX_X24, overflow) {
1882 TEST_REQUIRES_X86_AVX;
1883 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1884 VCvtMicrokernelTester()
1885 .batch_size(batch_size)
1886 .scale(4294967296.0f)
1887 .qmin(std::numeric_limits<uint8_t>::min())
1888 .qmax(std::numeric_limits<uint8_t>::max())
1889 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x24, xnn_init_f32_qu8_cvt_avx_params);
1890 }
1891 }
1892
TEST(F32_QU8_VCVT__AVX_X24,qmin)1893 TEST(F32_QU8_VCVT__AVX_X24, qmin) {
1894 TEST_REQUIRES_X86_AVX;
1895 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
1896 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1897 VCvtMicrokernelTester()
1898 .batch_size(batch_size)
1899 .scale(500)
1900 .output_zero_point(128)
1901 .qmin(qmin)
1902 .qmax(std::numeric_limits<uint8_t>::max())
1903 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x24, xnn_init_f32_qu8_cvt_avx_params);
1904 }
1905 }
1906 }
1907
TEST(F32_QU8_VCVT__AVX_X24,qmax)1908 TEST(F32_QU8_VCVT__AVX_X24, qmax) {
1909 TEST_REQUIRES_X86_AVX;
1910 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
1911 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
1912 VCvtMicrokernelTester()
1913 .batch_size(batch_size)
1914 .scale(500)
1915 .output_zero_point(128)
1916 .qmin(std::numeric_limits<uint8_t>::min())
1917 .qmax(qmax)
1918 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x24, xnn_init_f32_qu8_cvt_avx_params);
1919 }
1920 }
1921 }
1922 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
1923
1924
1925 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QU8_VCVT__AVX_X32,batch_eq_32)1926 TEST(F32_QU8_VCVT__AVX_X32, batch_eq_32) {
1927 TEST_REQUIRES_X86_AVX;
1928 VCvtMicrokernelTester()
1929 .batch_size(32)
1930 .qmin(std::numeric_limits<uint8_t>::min())
1931 .qmax(std::numeric_limits<uint8_t>::max())
1932 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x32, xnn_init_f32_qu8_cvt_avx_params);
1933 }
1934
TEST(F32_QU8_VCVT__AVX_X32,batch_div_32)1935 TEST(F32_QU8_VCVT__AVX_X32, batch_div_32) {
1936 TEST_REQUIRES_X86_AVX;
1937 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
1938 VCvtMicrokernelTester()
1939 .batch_size(batch_size)
1940 .qmin(std::numeric_limits<uint8_t>::min())
1941 .qmax(std::numeric_limits<uint8_t>::max())
1942 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x32, xnn_init_f32_qu8_cvt_avx_params);
1943 }
1944 }
1945
TEST(F32_QU8_VCVT__AVX_X32,batch_lt_32)1946 TEST(F32_QU8_VCVT__AVX_X32, batch_lt_32) {
1947 TEST_REQUIRES_X86_AVX;
1948 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
1949 VCvtMicrokernelTester()
1950 .batch_size(batch_size)
1951 .qmin(std::numeric_limits<uint8_t>::min())
1952 .qmax(std::numeric_limits<uint8_t>::max())
1953 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x32, xnn_init_f32_qu8_cvt_avx_params);
1954 }
1955 }
1956
TEST(F32_QU8_VCVT__AVX_X32,batch_gt_32)1957 TEST(F32_QU8_VCVT__AVX_X32, batch_gt_32) {
1958 TEST_REQUIRES_X86_AVX;
1959 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
1960 VCvtMicrokernelTester()
1961 .batch_size(batch_size)
1962 .qmin(std::numeric_limits<uint8_t>::min())
1963 .qmax(std::numeric_limits<uint8_t>::max())
1964 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x32, xnn_init_f32_qu8_cvt_avx_params);
1965 }
1966 }
1967
TEST(F32_QU8_VCVT__AVX_X32,scale)1968 TEST(F32_QU8_VCVT__AVX_X32, scale) {
1969 TEST_REQUIRES_X86_AVX;
1970 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1971 VCvtMicrokernelTester()
1972 .batch_size(batch_size)
1973 .scale(50)
1974 .output_zero_point(100)
1975 .qmin(std::numeric_limits<uint8_t>::min())
1976 .qmax(std::numeric_limits<uint8_t>::max())
1977 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x32, xnn_init_f32_qu8_cvt_avx_params);
1978 }
1979 }
1980
TEST(F32_QU8_VCVT__AVX_X32,output_zero_point)1981 TEST(F32_QU8_VCVT__AVX_X32, output_zero_point) {
1982 TEST_REQUIRES_X86_AVX;
1983 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
1984 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1985 VCvtMicrokernelTester()
1986 .batch_size(batch_size)
1987 .output_zero_point(output_zero_point)
1988 .qmin(std::numeric_limits<uint8_t>::min())
1989 .qmax(std::numeric_limits<uint8_t>::max())
1990 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x32, xnn_init_f32_qu8_cvt_avx_params);
1991 }
1992 }
1993 }
1994
TEST(F32_QU8_VCVT__AVX_X32,saturation)1995 TEST(F32_QU8_VCVT__AVX_X32, saturation) {
1996 TEST_REQUIRES_X86_AVX;
1997 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
1998 VCvtMicrokernelTester()
1999 .batch_size(batch_size)
2000 .scale(500)
2001 .output_zero_point(128)
2002 .qmin(std::numeric_limits<uint8_t>::min())
2003 .qmax(std::numeric_limits<uint8_t>::max())
2004 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x32, xnn_init_f32_qu8_cvt_avx_params);
2005 }
2006 }
2007
TEST(F32_QU8_VCVT__AVX_X32,overflow)2008 TEST(F32_QU8_VCVT__AVX_X32, overflow) {
2009 TEST_REQUIRES_X86_AVX;
2010 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2011 VCvtMicrokernelTester()
2012 .batch_size(batch_size)
2013 .scale(4294967296.0f)
2014 .qmin(std::numeric_limits<uint8_t>::min())
2015 .qmax(std::numeric_limits<uint8_t>::max())
2016 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x32, xnn_init_f32_qu8_cvt_avx_params);
2017 }
2018 }
2019
TEST(F32_QU8_VCVT__AVX_X32,qmin)2020 TEST(F32_QU8_VCVT__AVX_X32, qmin) {
2021 TEST_REQUIRES_X86_AVX;
2022 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
2023 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2024 VCvtMicrokernelTester()
2025 .batch_size(batch_size)
2026 .scale(500)
2027 .output_zero_point(128)
2028 .qmin(qmin)
2029 .qmax(std::numeric_limits<uint8_t>::max())
2030 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x32, xnn_init_f32_qu8_cvt_avx_params);
2031 }
2032 }
2033 }
2034
TEST(F32_QU8_VCVT__AVX_X32,qmax)2035 TEST(F32_QU8_VCVT__AVX_X32, qmax) {
2036 TEST_REQUIRES_X86_AVX;
2037 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
2038 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2039 VCvtMicrokernelTester()
2040 .batch_size(batch_size)
2041 .scale(500)
2042 .output_zero_point(128)
2043 .qmin(std::numeric_limits<uint8_t>::min())
2044 .qmax(qmax)
2045 .Test(xnn_f32_qu8_vcvt_ukernel__avx_x32, xnn_init_f32_qu8_cvt_avx_params);
2046 }
2047 }
2048 }
2049 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2050
2051
2052 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QU8_VCVT__AVX2_X16,batch_eq_16)2053 TEST(F32_QU8_VCVT__AVX2_X16, batch_eq_16) {
2054 TEST_REQUIRES_X86_AVX2;
2055 VCvtMicrokernelTester()
2056 .batch_size(16)
2057 .qmin(std::numeric_limits<uint8_t>::min())
2058 .qmax(std::numeric_limits<uint8_t>::max())
2059 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x16, xnn_init_f32_qu8_cvt_avx2_params);
2060 }
2061
TEST(F32_QU8_VCVT__AVX2_X16,batch_div_16)2062 TEST(F32_QU8_VCVT__AVX2_X16, batch_div_16) {
2063 TEST_REQUIRES_X86_AVX2;
2064 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
2065 VCvtMicrokernelTester()
2066 .batch_size(batch_size)
2067 .qmin(std::numeric_limits<uint8_t>::min())
2068 .qmax(std::numeric_limits<uint8_t>::max())
2069 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x16, xnn_init_f32_qu8_cvt_avx2_params);
2070 }
2071 }
2072
TEST(F32_QU8_VCVT__AVX2_X16,batch_lt_16)2073 TEST(F32_QU8_VCVT__AVX2_X16, batch_lt_16) {
2074 TEST_REQUIRES_X86_AVX2;
2075 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
2076 VCvtMicrokernelTester()
2077 .batch_size(batch_size)
2078 .qmin(std::numeric_limits<uint8_t>::min())
2079 .qmax(std::numeric_limits<uint8_t>::max())
2080 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x16, xnn_init_f32_qu8_cvt_avx2_params);
2081 }
2082 }
2083
TEST(F32_QU8_VCVT__AVX2_X16,batch_gt_16)2084 TEST(F32_QU8_VCVT__AVX2_X16, batch_gt_16) {
2085 TEST_REQUIRES_X86_AVX2;
2086 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
2087 VCvtMicrokernelTester()
2088 .batch_size(batch_size)
2089 .qmin(std::numeric_limits<uint8_t>::min())
2090 .qmax(std::numeric_limits<uint8_t>::max())
2091 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x16, xnn_init_f32_qu8_cvt_avx2_params);
2092 }
2093 }
2094
TEST(F32_QU8_VCVT__AVX2_X16,scale)2095 TEST(F32_QU8_VCVT__AVX2_X16, scale) {
2096 TEST_REQUIRES_X86_AVX2;
2097 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2098 VCvtMicrokernelTester()
2099 .batch_size(batch_size)
2100 .scale(50)
2101 .output_zero_point(100)
2102 .qmin(std::numeric_limits<uint8_t>::min())
2103 .qmax(std::numeric_limits<uint8_t>::max())
2104 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x16, xnn_init_f32_qu8_cvt_avx2_params);
2105 }
2106 }
2107
TEST(F32_QU8_VCVT__AVX2_X16,output_zero_point)2108 TEST(F32_QU8_VCVT__AVX2_X16, output_zero_point) {
2109 TEST_REQUIRES_X86_AVX2;
2110 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
2111 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2112 VCvtMicrokernelTester()
2113 .batch_size(batch_size)
2114 .output_zero_point(output_zero_point)
2115 .qmin(std::numeric_limits<uint8_t>::min())
2116 .qmax(std::numeric_limits<uint8_t>::max())
2117 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x16, xnn_init_f32_qu8_cvt_avx2_params);
2118 }
2119 }
2120 }
2121
TEST(F32_QU8_VCVT__AVX2_X16,saturation)2122 TEST(F32_QU8_VCVT__AVX2_X16, saturation) {
2123 TEST_REQUIRES_X86_AVX2;
2124 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2125 VCvtMicrokernelTester()
2126 .batch_size(batch_size)
2127 .scale(500)
2128 .output_zero_point(128)
2129 .qmin(std::numeric_limits<uint8_t>::min())
2130 .qmax(std::numeric_limits<uint8_t>::max())
2131 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x16, xnn_init_f32_qu8_cvt_avx2_params);
2132 }
2133 }
2134
TEST(F32_QU8_VCVT__AVX2_X16,overflow)2135 TEST(F32_QU8_VCVT__AVX2_X16, overflow) {
2136 TEST_REQUIRES_X86_AVX2;
2137 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2138 VCvtMicrokernelTester()
2139 .batch_size(batch_size)
2140 .scale(4294967296.0f)
2141 .qmin(std::numeric_limits<uint8_t>::min())
2142 .qmax(std::numeric_limits<uint8_t>::max())
2143 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x16, xnn_init_f32_qu8_cvt_avx2_params);
2144 }
2145 }
2146
TEST(F32_QU8_VCVT__AVX2_X16,qmin)2147 TEST(F32_QU8_VCVT__AVX2_X16, qmin) {
2148 TEST_REQUIRES_X86_AVX2;
2149 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
2150 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2151 VCvtMicrokernelTester()
2152 .batch_size(batch_size)
2153 .scale(500)
2154 .output_zero_point(128)
2155 .qmin(qmin)
2156 .qmax(std::numeric_limits<uint8_t>::max())
2157 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x16, xnn_init_f32_qu8_cvt_avx2_params);
2158 }
2159 }
2160 }
2161
TEST(F32_QU8_VCVT__AVX2_X16,qmax)2162 TEST(F32_QU8_VCVT__AVX2_X16, qmax) {
2163 TEST_REQUIRES_X86_AVX2;
2164 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
2165 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
2166 VCvtMicrokernelTester()
2167 .batch_size(batch_size)
2168 .scale(500)
2169 .output_zero_point(128)
2170 .qmin(std::numeric_limits<uint8_t>::min())
2171 .qmax(qmax)
2172 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x16, xnn_init_f32_qu8_cvt_avx2_params);
2173 }
2174 }
2175 }
2176 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2177
2178
2179 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QU8_VCVT__AVX2_X32,batch_eq_32)2180 TEST(F32_QU8_VCVT__AVX2_X32, batch_eq_32) {
2181 TEST_REQUIRES_X86_AVX2;
2182 VCvtMicrokernelTester()
2183 .batch_size(32)
2184 .qmin(std::numeric_limits<uint8_t>::min())
2185 .qmax(std::numeric_limits<uint8_t>::max())
2186 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x32, xnn_init_f32_qu8_cvt_avx2_params);
2187 }
2188
TEST(F32_QU8_VCVT__AVX2_X32,batch_div_32)2189 TEST(F32_QU8_VCVT__AVX2_X32, batch_div_32) {
2190 TEST_REQUIRES_X86_AVX2;
2191 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
2192 VCvtMicrokernelTester()
2193 .batch_size(batch_size)
2194 .qmin(std::numeric_limits<uint8_t>::min())
2195 .qmax(std::numeric_limits<uint8_t>::max())
2196 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x32, xnn_init_f32_qu8_cvt_avx2_params);
2197 }
2198 }
2199
TEST(F32_QU8_VCVT__AVX2_X32,batch_lt_32)2200 TEST(F32_QU8_VCVT__AVX2_X32, batch_lt_32) {
2201 TEST_REQUIRES_X86_AVX2;
2202 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
2203 VCvtMicrokernelTester()
2204 .batch_size(batch_size)
2205 .qmin(std::numeric_limits<uint8_t>::min())
2206 .qmax(std::numeric_limits<uint8_t>::max())
2207 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x32, xnn_init_f32_qu8_cvt_avx2_params);
2208 }
2209 }
2210
TEST(F32_QU8_VCVT__AVX2_X32,batch_gt_32)2211 TEST(F32_QU8_VCVT__AVX2_X32, batch_gt_32) {
2212 TEST_REQUIRES_X86_AVX2;
2213 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
2214 VCvtMicrokernelTester()
2215 .batch_size(batch_size)
2216 .qmin(std::numeric_limits<uint8_t>::min())
2217 .qmax(std::numeric_limits<uint8_t>::max())
2218 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x32, xnn_init_f32_qu8_cvt_avx2_params);
2219 }
2220 }
2221
TEST(F32_QU8_VCVT__AVX2_X32,scale)2222 TEST(F32_QU8_VCVT__AVX2_X32, scale) {
2223 TEST_REQUIRES_X86_AVX2;
2224 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2225 VCvtMicrokernelTester()
2226 .batch_size(batch_size)
2227 .scale(50)
2228 .output_zero_point(100)
2229 .qmin(std::numeric_limits<uint8_t>::min())
2230 .qmax(std::numeric_limits<uint8_t>::max())
2231 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x32, xnn_init_f32_qu8_cvt_avx2_params);
2232 }
2233 }
2234
TEST(F32_QU8_VCVT__AVX2_X32,output_zero_point)2235 TEST(F32_QU8_VCVT__AVX2_X32, output_zero_point) {
2236 TEST_REQUIRES_X86_AVX2;
2237 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
2238 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2239 VCvtMicrokernelTester()
2240 .batch_size(batch_size)
2241 .output_zero_point(output_zero_point)
2242 .qmin(std::numeric_limits<uint8_t>::min())
2243 .qmax(std::numeric_limits<uint8_t>::max())
2244 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x32, xnn_init_f32_qu8_cvt_avx2_params);
2245 }
2246 }
2247 }
2248
TEST(F32_QU8_VCVT__AVX2_X32,saturation)2249 TEST(F32_QU8_VCVT__AVX2_X32, saturation) {
2250 TEST_REQUIRES_X86_AVX2;
2251 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2252 VCvtMicrokernelTester()
2253 .batch_size(batch_size)
2254 .scale(500)
2255 .output_zero_point(128)
2256 .qmin(std::numeric_limits<uint8_t>::min())
2257 .qmax(std::numeric_limits<uint8_t>::max())
2258 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x32, xnn_init_f32_qu8_cvt_avx2_params);
2259 }
2260 }
2261
TEST(F32_QU8_VCVT__AVX2_X32,overflow)2262 TEST(F32_QU8_VCVT__AVX2_X32, overflow) {
2263 TEST_REQUIRES_X86_AVX2;
2264 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2265 VCvtMicrokernelTester()
2266 .batch_size(batch_size)
2267 .scale(4294967296.0f)
2268 .qmin(std::numeric_limits<uint8_t>::min())
2269 .qmax(std::numeric_limits<uint8_t>::max())
2270 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x32, xnn_init_f32_qu8_cvt_avx2_params);
2271 }
2272 }
2273
TEST(F32_QU8_VCVT__AVX2_X32,qmin)2274 TEST(F32_QU8_VCVT__AVX2_X32, qmin) {
2275 TEST_REQUIRES_X86_AVX2;
2276 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
2277 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2278 VCvtMicrokernelTester()
2279 .batch_size(batch_size)
2280 .scale(500)
2281 .output_zero_point(128)
2282 .qmin(qmin)
2283 .qmax(std::numeric_limits<uint8_t>::max())
2284 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x32, xnn_init_f32_qu8_cvt_avx2_params);
2285 }
2286 }
2287 }
2288
TEST(F32_QU8_VCVT__AVX2_X32,qmax)2289 TEST(F32_QU8_VCVT__AVX2_X32, qmax) {
2290 TEST_REQUIRES_X86_AVX2;
2291 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
2292 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2293 VCvtMicrokernelTester()
2294 .batch_size(batch_size)
2295 .scale(500)
2296 .output_zero_point(128)
2297 .qmin(std::numeric_limits<uint8_t>::min())
2298 .qmax(qmax)
2299 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x32, xnn_init_f32_qu8_cvt_avx2_params);
2300 }
2301 }
2302 }
2303 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2304
2305
2306 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QU8_VCVT__AVX2_X48,batch_eq_48)2307 TEST(F32_QU8_VCVT__AVX2_X48, batch_eq_48) {
2308 TEST_REQUIRES_X86_AVX2;
2309 VCvtMicrokernelTester()
2310 .batch_size(48)
2311 .qmin(std::numeric_limits<uint8_t>::min())
2312 .qmax(std::numeric_limits<uint8_t>::max())
2313 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x48, xnn_init_f32_qu8_cvt_avx2_params);
2314 }
2315
TEST(F32_QU8_VCVT__AVX2_X48,batch_div_48)2316 TEST(F32_QU8_VCVT__AVX2_X48, batch_div_48) {
2317 TEST_REQUIRES_X86_AVX2;
2318 for (size_t batch_size = 96; batch_size < 480; batch_size += 48) {
2319 VCvtMicrokernelTester()
2320 .batch_size(batch_size)
2321 .qmin(std::numeric_limits<uint8_t>::min())
2322 .qmax(std::numeric_limits<uint8_t>::max())
2323 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x48, xnn_init_f32_qu8_cvt_avx2_params);
2324 }
2325 }
2326
TEST(F32_QU8_VCVT__AVX2_X48,batch_lt_48)2327 TEST(F32_QU8_VCVT__AVX2_X48, batch_lt_48) {
2328 TEST_REQUIRES_X86_AVX2;
2329 for (size_t batch_size = 1; batch_size < 48; batch_size++) {
2330 VCvtMicrokernelTester()
2331 .batch_size(batch_size)
2332 .qmin(std::numeric_limits<uint8_t>::min())
2333 .qmax(std::numeric_limits<uint8_t>::max())
2334 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x48, xnn_init_f32_qu8_cvt_avx2_params);
2335 }
2336 }
2337
TEST(F32_QU8_VCVT__AVX2_X48,batch_gt_48)2338 TEST(F32_QU8_VCVT__AVX2_X48, batch_gt_48) {
2339 TEST_REQUIRES_X86_AVX2;
2340 for (size_t batch_size = 49; batch_size < 96; batch_size++) {
2341 VCvtMicrokernelTester()
2342 .batch_size(batch_size)
2343 .qmin(std::numeric_limits<uint8_t>::min())
2344 .qmax(std::numeric_limits<uint8_t>::max())
2345 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x48, xnn_init_f32_qu8_cvt_avx2_params);
2346 }
2347 }
2348
TEST(F32_QU8_VCVT__AVX2_X48,scale)2349 TEST(F32_QU8_VCVT__AVX2_X48, scale) {
2350 TEST_REQUIRES_X86_AVX2;
2351 for (size_t batch_size = 1; batch_size <= 240; batch_size += 47) {
2352 VCvtMicrokernelTester()
2353 .batch_size(batch_size)
2354 .scale(50)
2355 .output_zero_point(100)
2356 .qmin(std::numeric_limits<uint8_t>::min())
2357 .qmax(std::numeric_limits<uint8_t>::max())
2358 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x48, xnn_init_f32_qu8_cvt_avx2_params);
2359 }
2360 }
2361
TEST(F32_QU8_VCVT__AVX2_X48,output_zero_point)2362 TEST(F32_QU8_VCVT__AVX2_X48, output_zero_point) {
2363 TEST_REQUIRES_X86_AVX2;
2364 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
2365 for (size_t batch_size = 1; batch_size <= 240; batch_size += 47) {
2366 VCvtMicrokernelTester()
2367 .batch_size(batch_size)
2368 .output_zero_point(output_zero_point)
2369 .qmin(std::numeric_limits<uint8_t>::min())
2370 .qmax(std::numeric_limits<uint8_t>::max())
2371 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x48, xnn_init_f32_qu8_cvt_avx2_params);
2372 }
2373 }
2374 }
2375
TEST(F32_QU8_VCVT__AVX2_X48,saturation)2376 TEST(F32_QU8_VCVT__AVX2_X48, saturation) {
2377 TEST_REQUIRES_X86_AVX2;
2378 for (size_t batch_size = 1; batch_size <= 240; batch_size += 47) {
2379 VCvtMicrokernelTester()
2380 .batch_size(batch_size)
2381 .scale(500)
2382 .output_zero_point(128)
2383 .qmin(std::numeric_limits<uint8_t>::min())
2384 .qmax(std::numeric_limits<uint8_t>::max())
2385 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x48, xnn_init_f32_qu8_cvt_avx2_params);
2386 }
2387 }
2388
TEST(F32_QU8_VCVT__AVX2_X48,overflow)2389 TEST(F32_QU8_VCVT__AVX2_X48, overflow) {
2390 TEST_REQUIRES_X86_AVX2;
2391 for (size_t batch_size = 1; batch_size <= 240; batch_size += 47) {
2392 VCvtMicrokernelTester()
2393 .batch_size(batch_size)
2394 .scale(4294967296.0f)
2395 .qmin(std::numeric_limits<uint8_t>::min())
2396 .qmax(std::numeric_limits<uint8_t>::max())
2397 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x48, xnn_init_f32_qu8_cvt_avx2_params);
2398 }
2399 }
2400
TEST(F32_QU8_VCVT__AVX2_X48,qmin)2401 TEST(F32_QU8_VCVT__AVX2_X48, qmin) {
2402 TEST_REQUIRES_X86_AVX2;
2403 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
2404 for (size_t batch_size = 1; batch_size <= 240; batch_size += 47) {
2405 VCvtMicrokernelTester()
2406 .batch_size(batch_size)
2407 .scale(500)
2408 .output_zero_point(128)
2409 .qmin(qmin)
2410 .qmax(std::numeric_limits<uint8_t>::max())
2411 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x48, xnn_init_f32_qu8_cvt_avx2_params);
2412 }
2413 }
2414 }
2415
TEST(F32_QU8_VCVT__AVX2_X48,qmax)2416 TEST(F32_QU8_VCVT__AVX2_X48, qmax) {
2417 TEST_REQUIRES_X86_AVX2;
2418 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
2419 for (size_t batch_size = 1; batch_size <= 240; batch_size += 47) {
2420 VCvtMicrokernelTester()
2421 .batch_size(batch_size)
2422 .scale(500)
2423 .output_zero_point(128)
2424 .qmin(std::numeric_limits<uint8_t>::min())
2425 .qmax(qmax)
2426 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x48, xnn_init_f32_qu8_cvt_avx2_params);
2427 }
2428 }
2429 }
2430 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2431
2432
2433 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QU8_VCVT__AVX2_X64,batch_eq_64)2434 TEST(F32_QU8_VCVT__AVX2_X64, batch_eq_64) {
2435 TEST_REQUIRES_X86_AVX2;
2436 VCvtMicrokernelTester()
2437 .batch_size(64)
2438 .qmin(std::numeric_limits<uint8_t>::min())
2439 .qmax(std::numeric_limits<uint8_t>::max())
2440 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x64, xnn_init_f32_qu8_cvt_avx2_params);
2441 }
2442
TEST(F32_QU8_VCVT__AVX2_X64,batch_div_64)2443 TEST(F32_QU8_VCVT__AVX2_X64, batch_div_64) {
2444 TEST_REQUIRES_X86_AVX2;
2445 for (size_t batch_size = 128; batch_size < 640; batch_size += 64) {
2446 VCvtMicrokernelTester()
2447 .batch_size(batch_size)
2448 .qmin(std::numeric_limits<uint8_t>::min())
2449 .qmax(std::numeric_limits<uint8_t>::max())
2450 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x64, xnn_init_f32_qu8_cvt_avx2_params);
2451 }
2452 }
2453
TEST(F32_QU8_VCVT__AVX2_X64,batch_lt_64)2454 TEST(F32_QU8_VCVT__AVX2_X64, batch_lt_64) {
2455 TEST_REQUIRES_X86_AVX2;
2456 for (size_t batch_size = 1; batch_size < 64; batch_size++) {
2457 VCvtMicrokernelTester()
2458 .batch_size(batch_size)
2459 .qmin(std::numeric_limits<uint8_t>::min())
2460 .qmax(std::numeric_limits<uint8_t>::max())
2461 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x64, xnn_init_f32_qu8_cvt_avx2_params);
2462 }
2463 }
2464
TEST(F32_QU8_VCVT__AVX2_X64,batch_gt_64)2465 TEST(F32_QU8_VCVT__AVX2_X64, batch_gt_64) {
2466 TEST_REQUIRES_X86_AVX2;
2467 for (size_t batch_size = 65; batch_size < 128; batch_size++) {
2468 VCvtMicrokernelTester()
2469 .batch_size(batch_size)
2470 .qmin(std::numeric_limits<uint8_t>::min())
2471 .qmax(std::numeric_limits<uint8_t>::max())
2472 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x64, xnn_init_f32_qu8_cvt_avx2_params);
2473 }
2474 }
2475
TEST(F32_QU8_VCVT__AVX2_X64,scale)2476 TEST(F32_QU8_VCVT__AVX2_X64, scale) {
2477 TEST_REQUIRES_X86_AVX2;
2478 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2479 VCvtMicrokernelTester()
2480 .batch_size(batch_size)
2481 .scale(50)
2482 .output_zero_point(100)
2483 .qmin(std::numeric_limits<uint8_t>::min())
2484 .qmax(std::numeric_limits<uint8_t>::max())
2485 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x64, xnn_init_f32_qu8_cvt_avx2_params);
2486 }
2487 }
2488
TEST(F32_QU8_VCVT__AVX2_X64,output_zero_point)2489 TEST(F32_QU8_VCVT__AVX2_X64, output_zero_point) {
2490 TEST_REQUIRES_X86_AVX2;
2491 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
2492 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2493 VCvtMicrokernelTester()
2494 .batch_size(batch_size)
2495 .output_zero_point(output_zero_point)
2496 .qmin(std::numeric_limits<uint8_t>::min())
2497 .qmax(std::numeric_limits<uint8_t>::max())
2498 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x64, xnn_init_f32_qu8_cvt_avx2_params);
2499 }
2500 }
2501 }
2502
TEST(F32_QU8_VCVT__AVX2_X64,saturation)2503 TEST(F32_QU8_VCVT__AVX2_X64, saturation) {
2504 TEST_REQUIRES_X86_AVX2;
2505 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2506 VCvtMicrokernelTester()
2507 .batch_size(batch_size)
2508 .scale(500)
2509 .output_zero_point(128)
2510 .qmin(std::numeric_limits<uint8_t>::min())
2511 .qmax(std::numeric_limits<uint8_t>::max())
2512 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x64, xnn_init_f32_qu8_cvt_avx2_params);
2513 }
2514 }
2515
TEST(F32_QU8_VCVT__AVX2_X64,overflow)2516 TEST(F32_QU8_VCVT__AVX2_X64, overflow) {
2517 TEST_REQUIRES_X86_AVX2;
2518 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2519 VCvtMicrokernelTester()
2520 .batch_size(batch_size)
2521 .scale(4294967296.0f)
2522 .qmin(std::numeric_limits<uint8_t>::min())
2523 .qmax(std::numeric_limits<uint8_t>::max())
2524 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x64, xnn_init_f32_qu8_cvt_avx2_params);
2525 }
2526 }
2527
TEST(F32_QU8_VCVT__AVX2_X64,qmin)2528 TEST(F32_QU8_VCVT__AVX2_X64, qmin) {
2529 TEST_REQUIRES_X86_AVX2;
2530 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
2531 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2532 VCvtMicrokernelTester()
2533 .batch_size(batch_size)
2534 .scale(500)
2535 .output_zero_point(128)
2536 .qmin(qmin)
2537 .qmax(std::numeric_limits<uint8_t>::max())
2538 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x64, xnn_init_f32_qu8_cvt_avx2_params);
2539 }
2540 }
2541 }
2542
TEST(F32_QU8_VCVT__AVX2_X64,qmax)2543 TEST(F32_QU8_VCVT__AVX2_X64, qmax) {
2544 TEST_REQUIRES_X86_AVX2;
2545 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
2546 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2547 VCvtMicrokernelTester()
2548 .batch_size(batch_size)
2549 .scale(500)
2550 .output_zero_point(128)
2551 .qmin(std::numeric_limits<uint8_t>::min())
2552 .qmax(qmax)
2553 .Test(xnn_f32_qu8_vcvt_ukernel__avx2_x64, xnn_init_f32_qu8_cvt_avx2_params);
2554 }
2555 }
2556 }
2557 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2558
2559
2560 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QU8_VCVT__AVX512SKX_X32,batch_eq_32)2561 TEST(F32_QU8_VCVT__AVX512SKX_X32, batch_eq_32) {
2562 TEST_REQUIRES_X86_AVX512SKX;
2563 VCvtMicrokernelTester()
2564 .batch_size(32)
2565 .qmin(std::numeric_limits<uint8_t>::min())
2566 .qmax(std::numeric_limits<uint8_t>::max())
2567 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qu8_cvt_avx512_params);
2568 }
2569
TEST(F32_QU8_VCVT__AVX512SKX_X32,batch_div_32)2570 TEST(F32_QU8_VCVT__AVX512SKX_X32, batch_div_32) {
2571 TEST_REQUIRES_X86_AVX512SKX;
2572 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
2573 VCvtMicrokernelTester()
2574 .batch_size(batch_size)
2575 .qmin(std::numeric_limits<uint8_t>::min())
2576 .qmax(std::numeric_limits<uint8_t>::max())
2577 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qu8_cvt_avx512_params);
2578 }
2579 }
2580
TEST(F32_QU8_VCVT__AVX512SKX_X32,batch_lt_32)2581 TEST(F32_QU8_VCVT__AVX512SKX_X32, batch_lt_32) {
2582 TEST_REQUIRES_X86_AVX512SKX;
2583 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
2584 VCvtMicrokernelTester()
2585 .batch_size(batch_size)
2586 .qmin(std::numeric_limits<uint8_t>::min())
2587 .qmax(std::numeric_limits<uint8_t>::max())
2588 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qu8_cvt_avx512_params);
2589 }
2590 }
2591
TEST(F32_QU8_VCVT__AVX512SKX_X32,batch_gt_32)2592 TEST(F32_QU8_VCVT__AVX512SKX_X32, batch_gt_32) {
2593 TEST_REQUIRES_X86_AVX512SKX;
2594 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
2595 VCvtMicrokernelTester()
2596 .batch_size(batch_size)
2597 .qmin(std::numeric_limits<uint8_t>::min())
2598 .qmax(std::numeric_limits<uint8_t>::max())
2599 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qu8_cvt_avx512_params);
2600 }
2601 }
2602
TEST(F32_QU8_VCVT__AVX512SKX_X32,scale)2603 TEST(F32_QU8_VCVT__AVX512SKX_X32, scale) {
2604 TEST_REQUIRES_X86_AVX512SKX;
2605 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2606 VCvtMicrokernelTester()
2607 .batch_size(batch_size)
2608 .scale(50)
2609 .output_zero_point(100)
2610 .qmin(std::numeric_limits<uint8_t>::min())
2611 .qmax(std::numeric_limits<uint8_t>::max())
2612 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qu8_cvt_avx512_params);
2613 }
2614 }
2615
TEST(F32_QU8_VCVT__AVX512SKX_X32,output_zero_point)2616 TEST(F32_QU8_VCVT__AVX512SKX_X32, output_zero_point) {
2617 TEST_REQUIRES_X86_AVX512SKX;
2618 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
2619 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2620 VCvtMicrokernelTester()
2621 .batch_size(batch_size)
2622 .output_zero_point(output_zero_point)
2623 .qmin(std::numeric_limits<uint8_t>::min())
2624 .qmax(std::numeric_limits<uint8_t>::max())
2625 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qu8_cvt_avx512_params);
2626 }
2627 }
2628 }
2629
TEST(F32_QU8_VCVT__AVX512SKX_X32,saturation)2630 TEST(F32_QU8_VCVT__AVX512SKX_X32, saturation) {
2631 TEST_REQUIRES_X86_AVX512SKX;
2632 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2633 VCvtMicrokernelTester()
2634 .batch_size(batch_size)
2635 .scale(500)
2636 .output_zero_point(128)
2637 .qmin(std::numeric_limits<uint8_t>::min())
2638 .qmax(std::numeric_limits<uint8_t>::max())
2639 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qu8_cvt_avx512_params);
2640 }
2641 }
2642
TEST(F32_QU8_VCVT__AVX512SKX_X32,overflow)2643 TEST(F32_QU8_VCVT__AVX512SKX_X32, overflow) {
2644 TEST_REQUIRES_X86_AVX512SKX;
2645 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2646 VCvtMicrokernelTester()
2647 .batch_size(batch_size)
2648 .scale(4294967296.0f)
2649 .qmin(std::numeric_limits<uint8_t>::min())
2650 .qmax(std::numeric_limits<uint8_t>::max())
2651 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qu8_cvt_avx512_params);
2652 }
2653 }
2654
TEST(F32_QU8_VCVT__AVX512SKX_X32,qmin)2655 TEST(F32_QU8_VCVT__AVX512SKX_X32, qmin) {
2656 TEST_REQUIRES_X86_AVX512SKX;
2657 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
2658 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2659 VCvtMicrokernelTester()
2660 .batch_size(batch_size)
2661 .scale(500)
2662 .output_zero_point(128)
2663 .qmin(qmin)
2664 .qmax(std::numeric_limits<uint8_t>::max())
2665 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qu8_cvt_avx512_params);
2666 }
2667 }
2668 }
2669
TEST(F32_QU8_VCVT__AVX512SKX_X32,qmax)2670 TEST(F32_QU8_VCVT__AVX512SKX_X32, qmax) {
2671 TEST_REQUIRES_X86_AVX512SKX;
2672 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
2673 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
2674 VCvtMicrokernelTester()
2675 .batch_size(batch_size)
2676 .scale(500)
2677 .output_zero_point(128)
2678 .qmin(std::numeric_limits<uint8_t>::min())
2679 .qmax(qmax)
2680 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x32, xnn_init_f32_qu8_cvt_avx512_params);
2681 }
2682 }
2683 }
2684 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2685
2686
2687 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QU8_VCVT__AVX512SKX_X64,batch_eq_64)2688 TEST(F32_QU8_VCVT__AVX512SKX_X64, batch_eq_64) {
2689 TEST_REQUIRES_X86_AVX512SKX;
2690 VCvtMicrokernelTester()
2691 .batch_size(64)
2692 .qmin(std::numeric_limits<uint8_t>::min())
2693 .qmax(std::numeric_limits<uint8_t>::max())
2694 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qu8_cvt_avx512_params);
2695 }
2696
TEST(F32_QU8_VCVT__AVX512SKX_X64,batch_div_64)2697 TEST(F32_QU8_VCVT__AVX512SKX_X64, batch_div_64) {
2698 TEST_REQUIRES_X86_AVX512SKX;
2699 for (size_t batch_size = 128; batch_size < 640; batch_size += 64) {
2700 VCvtMicrokernelTester()
2701 .batch_size(batch_size)
2702 .qmin(std::numeric_limits<uint8_t>::min())
2703 .qmax(std::numeric_limits<uint8_t>::max())
2704 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qu8_cvt_avx512_params);
2705 }
2706 }
2707
TEST(F32_QU8_VCVT__AVX512SKX_X64,batch_lt_64)2708 TEST(F32_QU8_VCVT__AVX512SKX_X64, batch_lt_64) {
2709 TEST_REQUIRES_X86_AVX512SKX;
2710 for (size_t batch_size = 1; batch_size < 64; batch_size++) {
2711 VCvtMicrokernelTester()
2712 .batch_size(batch_size)
2713 .qmin(std::numeric_limits<uint8_t>::min())
2714 .qmax(std::numeric_limits<uint8_t>::max())
2715 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qu8_cvt_avx512_params);
2716 }
2717 }
2718
TEST(F32_QU8_VCVT__AVX512SKX_X64,batch_gt_64)2719 TEST(F32_QU8_VCVT__AVX512SKX_X64, batch_gt_64) {
2720 TEST_REQUIRES_X86_AVX512SKX;
2721 for (size_t batch_size = 65; batch_size < 128; batch_size++) {
2722 VCvtMicrokernelTester()
2723 .batch_size(batch_size)
2724 .qmin(std::numeric_limits<uint8_t>::min())
2725 .qmax(std::numeric_limits<uint8_t>::max())
2726 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qu8_cvt_avx512_params);
2727 }
2728 }
2729
TEST(F32_QU8_VCVT__AVX512SKX_X64,scale)2730 TEST(F32_QU8_VCVT__AVX512SKX_X64, scale) {
2731 TEST_REQUIRES_X86_AVX512SKX;
2732 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2733 VCvtMicrokernelTester()
2734 .batch_size(batch_size)
2735 .scale(50)
2736 .output_zero_point(100)
2737 .qmin(std::numeric_limits<uint8_t>::min())
2738 .qmax(std::numeric_limits<uint8_t>::max())
2739 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qu8_cvt_avx512_params);
2740 }
2741 }
2742
TEST(F32_QU8_VCVT__AVX512SKX_X64,output_zero_point)2743 TEST(F32_QU8_VCVT__AVX512SKX_X64, output_zero_point) {
2744 TEST_REQUIRES_X86_AVX512SKX;
2745 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
2746 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2747 VCvtMicrokernelTester()
2748 .batch_size(batch_size)
2749 .output_zero_point(output_zero_point)
2750 .qmin(std::numeric_limits<uint8_t>::min())
2751 .qmax(std::numeric_limits<uint8_t>::max())
2752 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qu8_cvt_avx512_params);
2753 }
2754 }
2755 }
2756
TEST(F32_QU8_VCVT__AVX512SKX_X64,saturation)2757 TEST(F32_QU8_VCVT__AVX512SKX_X64, saturation) {
2758 TEST_REQUIRES_X86_AVX512SKX;
2759 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2760 VCvtMicrokernelTester()
2761 .batch_size(batch_size)
2762 .scale(500)
2763 .output_zero_point(128)
2764 .qmin(std::numeric_limits<uint8_t>::min())
2765 .qmax(std::numeric_limits<uint8_t>::max())
2766 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qu8_cvt_avx512_params);
2767 }
2768 }
2769
TEST(F32_QU8_VCVT__AVX512SKX_X64,overflow)2770 TEST(F32_QU8_VCVT__AVX512SKX_X64, overflow) {
2771 TEST_REQUIRES_X86_AVX512SKX;
2772 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2773 VCvtMicrokernelTester()
2774 .batch_size(batch_size)
2775 .scale(4294967296.0f)
2776 .qmin(std::numeric_limits<uint8_t>::min())
2777 .qmax(std::numeric_limits<uint8_t>::max())
2778 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qu8_cvt_avx512_params);
2779 }
2780 }
2781
TEST(F32_QU8_VCVT__AVX512SKX_X64,qmin)2782 TEST(F32_QU8_VCVT__AVX512SKX_X64, qmin) {
2783 TEST_REQUIRES_X86_AVX512SKX;
2784 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
2785 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2786 VCvtMicrokernelTester()
2787 .batch_size(batch_size)
2788 .scale(500)
2789 .output_zero_point(128)
2790 .qmin(qmin)
2791 .qmax(std::numeric_limits<uint8_t>::max())
2792 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qu8_cvt_avx512_params);
2793 }
2794 }
2795 }
2796
TEST(F32_QU8_VCVT__AVX512SKX_X64,qmax)2797 TEST(F32_QU8_VCVT__AVX512SKX_X64, qmax) {
2798 TEST_REQUIRES_X86_AVX512SKX;
2799 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
2800 for (size_t batch_size = 1; batch_size <= 320; batch_size += 63) {
2801 VCvtMicrokernelTester()
2802 .batch_size(batch_size)
2803 .scale(500)
2804 .output_zero_point(128)
2805 .qmin(std::numeric_limits<uint8_t>::min())
2806 .qmax(qmax)
2807 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x64, xnn_init_f32_qu8_cvt_avx512_params);
2808 }
2809 }
2810 }
2811 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2812
2813
2814 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QU8_VCVT__AVX512SKX_X96,batch_eq_96)2815 TEST(F32_QU8_VCVT__AVX512SKX_X96, batch_eq_96) {
2816 TEST_REQUIRES_X86_AVX512SKX;
2817 VCvtMicrokernelTester()
2818 .batch_size(96)
2819 .qmin(std::numeric_limits<uint8_t>::min())
2820 .qmax(std::numeric_limits<uint8_t>::max())
2821 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qu8_cvt_avx512_params);
2822 }
2823
TEST(F32_QU8_VCVT__AVX512SKX_X96,batch_div_96)2824 TEST(F32_QU8_VCVT__AVX512SKX_X96, batch_div_96) {
2825 TEST_REQUIRES_X86_AVX512SKX;
2826 for (size_t batch_size = 192; batch_size < 960; batch_size += 96) {
2827 VCvtMicrokernelTester()
2828 .batch_size(batch_size)
2829 .qmin(std::numeric_limits<uint8_t>::min())
2830 .qmax(std::numeric_limits<uint8_t>::max())
2831 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qu8_cvt_avx512_params);
2832 }
2833 }
2834
TEST(F32_QU8_VCVT__AVX512SKX_X96,batch_lt_96)2835 TEST(F32_QU8_VCVT__AVX512SKX_X96, batch_lt_96) {
2836 TEST_REQUIRES_X86_AVX512SKX;
2837 for (size_t batch_size = 1; batch_size < 96; batch_size++) {
2838 VCvtMicrokernelTester()
2839 .batch_size(batch_size)
2840 .qmin(std::numeric_limits<uint8_t>::min())
2841 .qmax(std::numeric_limits<uint8_t>::max())
2842 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qu8_cvt_avx512_params);
2843 }
2844 }
2845
TEST(F32_QU8_VCVT__AVX512SKX_X96,batch_gt_96)2846 TEST(F32_QU8_VCVT__AVX512SKX_X96, batch_gt_96) {
2847 TEST_REQUIRES_X86_AVX512SKX;
2848 for (size_t batch_size = 97; batch_size < 192; batch_size++) {
2849 VCvtMicrokernelTester()
2850 .batch_size(batch_size)
2851 .qmin(std::numeric_limits<uint8_t>::min())
2852 .qmax(std::numeric_limits<uint8_t>::max())
2853 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qu8_cvt_avx512_params);
2854 }
2855 }
2856
TEST(F32_QU8_VCVT__AVX512SKX_X96,scale)2857 TEST(F32_QU8_VCVT__AVX512SKX_X96, scale) {
2858 TEST_REQUIRES_X86_AVX512SKX;
2859 for (size_t batch_size = 1; batch_size <= 480; batch_size += 95) {
2860 VCvtMicrokernelTester()
2861 .batch_size(batch_size)
2862 .scale(50)
2863 .output_zero_point(100)
2864 .qmin(std::numeric_limits<uint8_t>::min())
2865 .qmax(std::numeric_limits<uint8_t>::max())
2866 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qu8_cvt_avx512_params);
2867 }
2868 }
2869
TEST(F32_QU8_VCVT__AVX512SKX_X96,output_zero_point)2870 TEST(F32_QU8_VCVT__AVX512SKX_X96, output_zero_point) {
2871 TEST_REQUIRES_X86_AVX512SKX;
2872 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
2873 for (size_t batch_size = 1; batch_size <= 480; batch_size += 95) {
2874 VCvtMicrokernelTester()
2875 .batch_size(batch_size)
2876 .output_zero_point(output_zero_point)
2877 .qmin(std::numeric_limits<uint8_t>::min())
2878 .qmax(std::numeric_limits<uint8_t>::max())
2879 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qu8_cvt_avx512_params);
2880 }
2881 }
2882 }
2883
TEST(F32_QU8_VCVT__AVX512SKX_X96,saturation)2884 TEST(F32_QU8_VCVT__AVX512SKX_X96, saturation) {
2885 TEST_REQUIRES_X86_AVX512SKX;
2886 for (size_t batch_size = 1; batch_size <= 480; batch_size += 95) {
2887 VCvtMicrokernelTester()
2888 .batch_size(batch_size)
2889 .scale(500)
2890 .output_zero_point(128)
2891 .qmin(std::numeric_limits<uint8_t>::min())
2892 .qmax(std::numeric_limits<uint8_t>::max())
2893 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qu8_cvt_avx512_params);
2894 }
2895 }
2896
TEST(F32_QU8_VCVT__AVX512SKX_X96,overflow)2897 TEST(F32_QU8_VCVT__AVX512SKX_X96, overflow) {
2898 TEST_REQUIRES_X86_AVX512SKX;
2899 for (size_t batch_size = 1; batch_size <= 480; batch_size += 95) {
2900 VCvtMicrokernelTester()
2901 .batch_size(batch_size)
2902 .scale(4294967296.0f)
2903 .qmin(std::numeric_limits<uint8_t>::min())
2904 .qmax(std::numeric_limits<uint8_t>::max())
2905 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qu8_cvt_avx512_params);
2906 }
2907 }
2908
TEST(F32_QU8_VCVT__AVX512SKX_X96,qmin)2909 TEST(F32_QU8_VCVT__AVX512SKX_X96, qmin) {
2910 TEST_REQUIRES_X86_AVX512SKX;
2911 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
2912 for (size_t batch_size = 1; batch_size <= 480; batch_size += 95) {
2913 VCvtMicrokernelTester()
2914 .batch_size(batch_size)
2915 .scale(500)
2916 .output_zero_point(128)
2917 .qmin(qmin)
2918 .qmax(std::numeric_limits<uint8_t>::max())
2919 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qu8_cvt_avx512_params);
2920 }
2921 }
2922 }
2923
TEST(F32_QU8_VCVT__AVX512SKX_X96,qmax)2924 TEST(F32_QU8_VCVT__AVX512SKX_X96, qmax) {
2925 TEST_REQUIRES_X86_AVX512SKX;
2926 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
2927 for (size_t batch_size = 1; batch_size <= 480; batch_size += 95) {
2928 VCvtMicrokernelTester()
2929 .batch_size(batch_size)
2930 .scale(500)
2931 .output_zero_point(128)
2932 .qmin(std::numeric_limits<uint8_t>::min())
2933 .qmax(qmax)
2934 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x96, xnn_init_f32_qu8_cvt_avx512_params);
2935 }
2936 }
2937 }
2938 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
2939
2940
2941 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_QU8_VCVT__AVX512SKX_X128,batch_eq_128)2942 TEST(F32_QU8_VCVT__AVX512SKX_X128, batch_eq_128) {
2943 TEST_REQUIRES_X86_AVX512SKX;
2944 VCvtMicrokernelTester()
2945 .batch_size(128)
2946 .qmin(std::numeric_limits<uint8_t>::min())
2947 .qmax(std::numeric_limits<uint8_t>::max())
2948 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qu8_cvt_avx512_params);
2949 }
2950
TEST(F32_QU8_VCVT__AVX512SKX_X128,batch_div_128)2951 TEST(F32_QU8_VCVT__AVX512SKX_X128, batch_div_128) {
2952 TEST_REQUIRES_X86_AVX512SKX;
2953 for (size_t batch_size = 256; batch_size < 1280; batch_size += 128) {
2954 VCvtMicrokernelTester()
2955 .batch_size(batch_size)
2956 .qmin(std::numeric_limits<uint8_t>::min())
2957 .qmax(std::numeric_limits<uint8_t>::max())
2958 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qu8_cvt_avx512_params);
2959 }
2960 }
2961
TEST(F32_QU8_VCVT__AVX512SKX_X128,batch_lt_128)2962 TEST(F32_QU8_VCVT__AVX512SKX_X128, batch_lt_128) {
2963 TEST_REQUIRES_X86_AVX512SKX;
2964 for (size_t batch_size = 1; batch_size < 128; batch_size++) {
2965 VCvtMicrokernelTester()
2966 .batch_size(batch_size)
2967 .qmin(std::numeric_limits<uint8_t>::min())
2968 .qmax(std::numeric_limits<uint8_t>::max())
2969 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qu8_cvt_avx512_params);
2970 }
2971 }
2972
TEST(F32_QU8_VCVT__AVX512SKX_X128,batch_gt_128)2973 TEST(F32_QU8_VCVT__AVX512SKX_X128, batch_gt_128) {
2974 TEST_REQUIRES_X86_AVX512SKX;
2975 for (size_t batch_size = 129; batch_size < 256; batch_size++) {
2976 VCvtMicrokernelTester()
2977 .batch_size(batch_size)
2978 .qmin(std::numeric_limits<uint8_t>::min())
2979 .qmax(std::numeric_limits<uint8_t>::max())
2980 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qu8_cvt_avx512_params);
2981 }
2982 }
2983
TEST(F32_QU8_VCVT__AVX512SKX_X128,scale)2984 TEST(F32_QU8_VCVT__AVX512SKX_X128, scale) {
2985 TEST_REQUIRES_X86_AVX512SKX;
2986 for (size_t batch_size = 1; batch_size <= 640; batch_size += 127) {
2987 VCvtMicrokernelTester()
2988 .batch_size(batch_size)
2989 .scale(50)
2990 .output_zero_point(100)
2991 .qmin(std::numeric_limits<uint8_t>::min())
2992 .qmax(std::numeric_limits<uint8_t>::max())
2993 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qu8_cvt_avx512_params);
2994 }
2995 }
2996
TEST(F32_QU8_VCVT__AVX512SKX_X128,output_zero_point)2997 TEST(F32_QU8_VCVT__AVX512SKX_X128, output_zero_point) {
2998 TEST_REQUIRES_X86_AVX512SKX;
2999 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3000 for (size_t batch_size = 1; batch_size <= 640; batch_size += 127) {
3001 VCvtMicrokernelTester()
3002 .batch_size(batch_size)
3003 .output_zero_point(output_zero_point)
3004 .qmin(std::numeric_limits<uint8_t>::min())
3005 .qmax(std::numeric_limits<uint8_t>::max())
3006 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qu8_cvt_avx512_params);
3007 }
3008 }
3009 }
3010
TEST(F32_QU8_VCVT__AVX512SKX_X128,saturation)3011 TEST(F32_QU8_VCVT__AVX512SKX_X128, saturation) {
3012 TEST_REQUIRES_X86_AVX512SKX;
3013 for (size_t batch_size = 1; batch_size <= 640; batch_size += 127) {
3014 VCvtMicrokernelTester()
3015 .batch_size(batch_size)
3016 .scale(500)
3017 .output_zero_point(128)
3018 .qmin(std::numeric_limits<uint8_t>::min())
3019 .qmax(std::numeric_limits<uint8_t>::max())
3020 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qu8_cvt_avx512_params);
3021 }
3022 }
3023
TEST(F32_QU8_VCVT__AVX512SKX_X128,overflow)3024 TEST(F32_QU8_VCVT__AVX512SKX_X128, overflow) {
3025 TEST_REQUIRES_X86_AVX512SKX;
3026 for (size_t batch_size = 1; batch_size <= 640; batch_size += 127) {
3027 VCvtMicrokernelTester()
3028 .batch_size(batch_size)
3029 .scale(4294967296.0f)
3030 .qmin(std::numeric_limits<uint8_t>::min())
3031 .qmax(std::numeric_limits<uint8_t>::max())
3032 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qu8_cvt_avx512_params);
3033 }
3034 }
3035
TEST(F32_QU8_VCVT__AVX512SKX_X128,qmin)3036 TEST(F32_QU8_VCVT__AVX512SKX_X128, qmin) {
3037 TEST_REQUIRES_X86_AVX512SKX;
3038 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
3039 for (size_t batch_size = 1; batch_size <= 640; batch_size += 127) {
3040 VCvtMicrokernelTester()
3041 .batch_size(batch_size)
3042 .scale(500)
3043 .output_zero_point(128)
3044 .qmin(qmin)
3045 .qmax(std::numeric_limits<uint8_t>::max())
3046 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qu8_cvt_avx512_params);
3047 }
3048 }
3049 }
3050
TEST(F32_QU8_VCVT__AVX512SKX_X128,qmax)3051 TEST(F32_QU8_VCVT__AVX512SKX_X128, qmax) {
3052 TEST_REQUIRES_X86_AVX512SKX;
3053 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
3054 for (size_t batch_size = 1; batch_size <= 640; batch_size += 127) {
3055 VCvtMicrokernelTester()
3056 .batch_size(batch_size)
3057 .scale(500)
3058 .output_zero_point(128)
3059 .qmin(std::numeric_limits<uint8_t>::min())
3060 .qmax(qmax)
3061 .Test(xnn_f32_qu8_vcvt_ukernel__avx512skx_x128, xnn_init_f32_qu8_cvt_avx512_params);
3062 }
3063 }
3064 }
3065 #endif // XNN_ARCH_X86 || XNN_ARCH_X86_64
3066
3067
3068 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8,batch_eq_8)3069 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8, batch_eq_8) {
3070 VCvtMicrokernelTester()
3071 .batch_size(8)
3072 .qmin(std::numeric_limits<uint8_t>::min())
3073 .qmax(std::numeric_limits<uint8_t>::max())
3074 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3075 }
3076
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8,batch_div_8)3077 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8, batch_div_8) {
3078 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
3079 VCvtMicrokernelTester()
3080 .batch_size(batch_size)
3081 .qmin(std::numeric_limits<uint8_t>::min())
3082 .qmax(std::numeric_limits<uint8_t>::max())
3083 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3084 }
3085 }
3086
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8,batch_lt_8)3087 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8, batch_lt_8) {
3088 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
3089 VCvtMicrokernelTester()
3090 .batch_size(batch_size)
3091 .qmin(std::numeric_limits<uint8_t>::min())
3092 .qmax(std::numeric_limits<uint8_t>::max())
3093 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3094 }
3095 }
3096
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8,batch_gt_8)3097 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8, batch_gt_8) {
3098 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
3099 VCvtMicrokernelTester()
3100 .batch_size(batch_size)
3101 .qmin(std::numeric_limits<uint8_t>::min())
3102 .qmax(std::numeric_limits<uint8_t>::max())
3103 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3104 }
3105 }
3106
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8,scale)3107 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8, scale) {
3108 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3109 VCvtMicrokernelTester()
3110 .batch_size(batch_size)
3111 .scale(50)
3112 .output_zero_point(100)
3113 .qmin(std::numeric_limits<uint8_t>::min())
3114 .qmax(std::numeric_limits<uint8_t>::max())
3115 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3116 }
3117 }
3118
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8,output_zero_point)3119 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8, output_zero_point) {
3120 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3121 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3122 VCvtMicrokernelTester()
3123 .batch_size(batch_size)
3124 .output_zero_point(output_zero_point)
3125 .qmin(std::numeric_limits<uint8_t>::min())
3126 .qmax(std::numeric_limits<uint8_t>::max())
3127 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3128 }
3129 }
3130 }
3131
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8,saturation)3132 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8, saturation) {
3133 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3134 VCvtMicrokernelTester()
3135 .batch_size(batch_size)
3136 .scale(500)
3137 .output_zero_point(128)
3138 .qmin(std::numeric_limits<uint8_t>::min())
3139 .qmax(std::numeric_limits<uint8_t>::max())
3140 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3141 }
3142 }
3143
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8,overflow)3144 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8, overflow) {
3145 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3146 VCvtMicrokernelTester()
3147 .batch_size(batch_size)
3148 .scale(4294967296.0f)
3149 .qmin(std::numeric_limits<uint8_t>::min())
3150 .qmax(std::numeric_limits<uint8_t>::max())
3151 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3152 }
3153 }
3154
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8,qmin)3155 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8, qmin) {
3156 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
3157 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3158 VCvtMicrokernelTester()
3159 .batch_size(batch_size)
3160 .scale(500)
3161 .output_zero_point(128)
3162 .qmin(qmin)
3163 .qmax(std::numeric_limits<uint8_t>::max())
3164 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3165 }
3166 }
3167 }
3168
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8,qmax)3169 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X8, qmax) {
3170 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
3171 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3172 VCvtMicrokernelTester()
3173 .batch_size(batch_size)
3174 .scale(500)
3175 .output_zero_point(128)
3176 .qmin(std::numeric_limits<uint8_t>::min())
3177 .qmax(qmax)
3178 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x8, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3179 }
3180 }
3181 }
3182 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
3183
3184
3185 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16,batch_eq_16)3186 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16, batch_eq_16) {
3187 VCvtMicrokernelTester()
3188 .batch_size(16)
3189 .qmin(std::numeric_limits<uint8_t>::min())
3190 .qmax(std::numeric_limits<uint8_t>::max())
3191 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3192 }
3193
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16,batch_div_16)3194 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16, batch_div_16) {
3195 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
3196 VCvtMicrokernelTester()
3197 .batch_size(batch_size)
3198 .qmin(std::numeric_limits<uint8_t>::min())
3199 .qmax(std::numeric_limits<uint8_t>::max())
3200 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3201 }
3202 }
3203
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16,batch_lt_16)3204 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16, batch_lt_16) {
3205 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
3206 VCvtMicrokernelTester()
3207 .batch_size(batch_size)
3208 .qmin(std::numeric_limits<uint8_t>::min())
3209 .qmax(std::numeric_limits<uint8_t>::max())
3210 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3211 }
3212 }
3213
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16,batch_gt_16)3214 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16, batch_gt_16) {
3215 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
3216 VCvtMicrokernelTester()
3217 .batch_size(batch_size)
3218 .qmin(std::numeric_limits<uint8_t>::min())
3219 .qmax(std::numeric_limits<uint8_t>::max())
3220 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3221 }
3222 }
3223
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16,scale)3224 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16, scale) {
3225 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3226 VCvtMicrokernelTester()
3227 .batch_size(batch_size)
3228 .scale(50)
3229 .output_zero_point(100)
3230 .qmin(std::numeric_limits<uint8_t>::min())
3231 .qmax(std::numeric_limits<uint8_t>::max())
3232 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3233 }
3234 }
3235
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16,output_zero_point)3236 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16, output_zero_point) {
3237 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3238 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3239 VCvtMicrokernelTester()
3240 .batch_size(batch_size)
3241 .output_zero_point(output_zero_point)
3242 .qmin(std::numeric_limits<uint8_t>::min())
3243 .qmax(std::numeric_limits<uint8_t>::max())
3244 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3245 }
3246 }
3247 }
3248
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16,saturation)3249 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16, saturation) {
3250 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3251 VCvtMicrokernelTester()
3252 .batch_size(batch_size)
3253 .scale(500)
3254 .output_zero_point(128)
3255 .qmin(std::numeric_limits<uint8_t>::min())
3256 .qmax(std::numeric_limits<uint8_t>::max())
3257 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3258 }
3259 }
3260
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16,overflow)3261 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16, overflow) {
3262 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3263 VCvtMicrokernelTester()
3264 .batch_size(batch_size)
3265 .scale(4294967296.0f)
3266 .qmin(std::numeric_limits<uint8_t>::min())
3267 .qmax(std::numeric_limits<uint8_t>::max())
3268 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3269 }
3270 }
3271
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16,qmin)3272 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16, qmin) {
3273 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
3274 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3275 VCvtMicrokernelTester()
3276 .batch_size(batch_size)
3277 .scale(500)
3278 .output_zero_point(128)
3279 .qmin(qmin)
3280 .qmax(std::numeric_limits<uint8_t>::max())
3281 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3282 }
3283 }
3284 }
3285
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16,qmax)3286 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X16, qmax) {
3287 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
3288 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3289 VCvtMicrokernelTester()
3290 .batch_size(batch_size)
3291 .scale(500)
3292 .output_zero_point(128)
3293 .qmin(std::numeric_limits<uint8_t>::min())
3294 .qmax(qmax)
3295 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x16, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3296 }
3297 }
3298 }
3299 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
3300
3301
3302 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24,batch_eq_24)3303 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24, batch_eq_24) {
3304 VCvtMicrokernelTester()
3305 .batch_size(24)
3306 .qmin(std::numeric_limits<uint8_t>::min())
3307 .qmax(std::numeric_limits<uint8_t>::max())
3308 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3309 }
3310
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24,batch_div_24)3311 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24, batch_div_24) {
3312 for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
3313 VCvtMicrokernelTester()
3314 .batch_size(batch_size)
3315 .qmin(std::numeric_limits<uint8_t>::min())
3316 .qmax(std::numeric_limits<uint8_t>::max())
3317 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3318 }
3319 }
3320
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24,batch_lt_24)3321 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24, batch_lt_24) {
3322 for (size_t batch_size = 1; batch_size < 24; batch_size++) {
3323 VCvtMicrokernelTester()
3324 .batch_size(batch_size)
3325 .qmin(std::numeric_limits<uint8_t>::min())
3326 .qmax(std::numeric_limits<uint8_t>::max())
3327 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3328 }
3329 }
3330
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24,batch_gt_24)3331 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24, batch_gt_24) {
3332 for (size_t batch_size = 25; batch_size < 48; batch_size++) {
3333 VCvtMicrokernelTester()
3334 .batch_size(batch_size)
3335 .qmin(std::numeric_limits<uint8_t>::min())
3336 .qmax(std::numeric_limits<uint8_t>::max())
3337 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3338 }
3339 }
3340
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24,scale)3341 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24, scale) {
3342 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3343 VCvtMicrokernelTester()
3344 .batch_size(batch_size)
3345 .scale(50)
3346 .output_zero_point(100)
3347 .qmin(std::numeric_limits<uint8_t>::min())
3348 .qmax(std::numeric_limits<uint8_t>::max())
3349 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3350 }
3351 }
3352
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24,output_zero_point)3353 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24, output_zero_point) {
3354 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3355 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3356 VCvtMicrokernelTester()
3357 .batch_size(batch_size)
3358 .output_zero_point(output_zero_point)
3359 .qmin(std::numeric_limits<uint8_t>::min())
3360 .qmax(std::numeric_limits<uint8_t>::max())
3361 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3362 }
3363 }
3364 }
3365
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24,saturation)3366 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24, saturation) {
3367 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3368 VCvtMicrokernelTester()
3369 .batch_size(batch_size)
3370 .scale(500)
3371 .output_zero_point(128)
3372 .qmin(std::numeric_limits<uint8_t>::min())
3373 .qmax(std::numeric_limits<uint8_t>::max())
3374 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3375 }
3376 }
3377
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24,overflow)3378 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24, overflow) {
3379 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3380 VCvtMicrokernelTester()
3381 .batch_size(batch_size)
3382 .scale(4294967296.0f)
3383 .qmin(std::numeric_limits<uint8_t>::min())
3384 .qmax(std::numeric_limits<uint8_t>::max())
3385 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3386 }
3387 }
3388
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24,qmin)3389 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24, qmin) {
3390 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
3391 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3392 VCvtMicrokernelTester()
3393 .batch_size(batch_size)
3394 .scale(500)
3395 .output_zero_point(128)
3396 .qmin(qmin)
3397 .qmax(std::numeric_limits<uint8_t>::max())
3398 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3399 }
3400 }
3401 }
3402
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24,qmax)3403 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X24, qmax) {
3404 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
3405 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3406 VCvtMicrokernelTester()
3407 .batch_size(batch_size)
3408 .scale(500)
3409 .output_zero_point(128)
3410 .qmin(std::numeric_limits<uint8_t>::min())
3411 .qmax(qmax)
3412 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x24, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3413 }
3414 }
3415 }
3416 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
3417
3418
3419 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32,batch_eq_32)3420 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32, batch_eq_32) {
3421 VCvtMicrokernelTester()
3422 .batch_size(32)
3423 .qmin(std::numeric_limits<uint8_t>::min())
3424 .qmax(std::numeric_limits<uint8_t>::max())
3425 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3426 }
3427
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32,batch_div_32)3428 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32, batch_div_32) {
3429 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
3430 VCvtMicrokernelTester()
3431 .batch_size(batch_size)
3432 .qmin(std::numeric_limits<uint8_t>::min())
3433 .qmax(std::numeric_limits<uint8_t>::max())
3434 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3435 }
3436 }
3437
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32,batch_lt_32)3438 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32, batch_lt_32) {
3439 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
3440 VCvtMicrokernelTester()
3441 .batch_size(batch_size)
3442 .qmin(std::numeric_limits<uint8_t>::min())
3443 .qmax(std::numeric_limits<uint8_t>::max())
3444 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3445 }
3446 }
3447
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32,batch_gt_32)3448 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32, batch_gt_32) {
3449 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
3450 VCvtMicrokernelTester()
3451 .batch_size(batch_size)
3452 .qmin(std::numeric_limits<uint8_t>::min())
3453 .qmax(std::numeric_limits<uint8_t>::max())
3454 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3455 }
3456 }
3457
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32,scale)3458 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32, scale) {
3459 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3460 VCvtMicrokernelTester()
3461 .batch_size(batch_size)
3462 .scale(50)
3463 .output_zero_point(100)
3464 .qmin(std::numeric_limits<uint8_t>::min())
3465 .qmax(std::numeric_limits<uint8_t>::max())
3466 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3467 }
3468 }
3469
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32,output_zero_point)3470 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32, output_zero_point) {
3471 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3472 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3473 VCvtMicrokernelTester()
3474 .batch_size(batch_size)
3475 .output_zero_point(output_zero_point)
3476 .qmin(std::numeric_limits<uint8_t>::min())
3477 .qmax(std::numeric_limits<uint8_t>::max())
3478 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3479 }
3480 }
3481 }
3482
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32,saturation)3483 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32, saturation) {
3484 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3485 VCvtMicrokernelTester()
3486 .batch_size(batch_size)
3487 .scale(500)
3488 .output_zero_point(128)
3489 .qmin(std::numeric_limits<uint8_t>::min())
3490 .qmax(std::numeric_limits<uint8_t>::max())
3491 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3492 }
3493 }
3494
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32,overflow)3495 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32, overflow) {
3496 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3497 VCvtMicrokernelTester()
3498 .batch_size(batch_size)
3499 .scale(4294967296.0f)
3500 .qmin(std::numeric_limits<uint8_t>::min())
3501 .qmax(std::numeric_limits<uint8_t>::max())
3502 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3503 }
3504 }
3505
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32,qmin)3506 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32, qmin) {
3507 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
3508 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3509 VCvtMicrokernelTester()
3510 .batch_size(batch_size)
3511 .scale(500)
3512 .output_zero_point(128)
3513 .qmin(qmin)
3514 .qmax(std::numeric_limits<uint8_t>::max())
3515 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3516 }
3517 }
3518 }
3519
TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32,qmax)3520 TEST(F32_QU8_VCVT__WASMSIMD_CVT_X32, qmax) {
3521 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
3522 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3523 VCvtMicrokernelTester()
3524 .batch_size(batch_size)
3525 .scale(500)
3526 .output_zero_point(128)
3527 .qmin(std::numeric_limits<uint8_t>::min())
3528 .qmax(qmax)
3529 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_cvt_x32, xnn_init_f32_qu8_cvt_wasmsimd_cvt_params);
3530 }
3531 }
3532 }
3533 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
3534
3535
3536 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8,batch_eq_8)3537 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8, batch_eq_8) {
3538 VCvtMicrokernelTester()
3539 .batch_size(8)
3540 .qmin(std::numeric_limits<uint8_t>::min())
3541 .qmax(std::numeric_limits<uint8_t>::max())
3542 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3543 }
3544
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8,batch_div_8)3545 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8, batch_div_8) {
3546 for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
3547 VCvtMicrokernelTester()
3548 .batch_size(batch_size)
3549 .qmin(std::numeric_limits<uint8_t>::min())
3550 .qmax(std::numeric_limits<uint8_t>::max())
3551 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3552 }
3553 }
3554
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8,batch_lt_8)3555 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8, batch_lt_8) {
3556 for (size_t batch_size = 1; batch_size < 8; batch_size++) {
3557 VCvtMicrokernelTester()
3558 .batch_size(batch_size)
3559 .qmin(std::numeric_limits<uint8_t>::min())
3560 .qmax(std::numeric_limits<uint8_t>::max())
3561 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3562 }
3563 }
3564
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8,batch_gt_8)3565 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8, batch_gt_8) {
3566 for (size_t batch_size = 9; batch_size < 16; batch_size++) {
3567 VCvtMicrokernelTester()
3568 .batch_size(batch_size)
3569 .qmin(std::numeric_limits<uint8_t>::min())
3570 .qmax(std::numeric_limits<uint8_t>::max())
3571 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3572 }
3573 }
3574
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8,scale)3575 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8, scale) {
3576 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3577 VCvtMicrokernelTester()
3578 .batch_size(batch_size)
3579 .scale(50)
3580 .output_zero_point(100)
3581 .qmin(std::numeric_limits<uint8_t>::min())
3582 .qmax(std::numeric_limits<uint8_t>::max())
3583 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3584 }
3585 }
3586
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8,output_zero_point)3587 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8, output_zero_point) {
3588 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3589 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3590 VCvtMicrokernelTester()
3591 .batch_size(batch_size)
3592 .output_zero_point(output_zero_point)
3593 .qmin(std::numeric_limits<uint8_t>::min())
3594 .qmax(std::numeric_limits<uint8_t>::max())
3595 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3596 }
3597 }
3598 }
3599
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8,saturation)3600 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8, saturation) {
3601 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3602 VCvtMicrokernelTester()
3603 .batch_size(batch_size)
3604 .scale(500)
3605 .output_zero_point(128)
3606 .qmin(std::numeric_limits<uint8_t>::min())
3607 .qmax(std::numeric_limits<uint8_t>::max())
3608 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3609 }
3610 }
3611
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8,overflow)3612 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8, overflow) {
3613 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3614 VCvtMicrokernelTester()
3615 .batch_size(batch_size)
3616 .scale(4294967296.0f)
3617 .qmin(std::numeric_limits<uint8_t>::min())
3618 .qmax(std::numeric_limits<uint8_t>::max())
3619 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3620 }
3621 }
3622
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8,qmin)3623 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8, qmin) {
3624 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
3625 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3626 VCvtMicrokernelTester()
3627 .batch_size(batch_size)
3628 .scale(500)
3629 .output_zero_point(128)
3630 .qmin(qmin)
3631 .qmax(std::numeric_limits<uint8_t>::max())
3632 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3633 }
3634 }
3635 }
3636
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8,qmax)3637 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X8, qmax) {
3638 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
3639 for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
3640 VCvtMicrokernelTester()
3641 .batch_size(batch_size)
3642 .scale(500)
3643 .output_zero_point(128)
3644 .qmin(std::numeric_limits<uint8_t>::min())
3645 .qmax(qmax)
3646 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x8, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3647 }
3648 }
3649 }
3650 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
3651
3652
3653 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16,batch_eq_16)3654 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16, batch_eq_16) {
3655 VCvtMicrokernelTester()
3656 .batch_size(16)
3657 .qmin(std::numeric_limits<uint8_t>::min())
3658 .qmax(std::numeric_limits<uint8_t>::max())
3659 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3660 }
3661
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16,batch_div_16)3662 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16, batch_div_16) {
3663 for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
3664 VCvtMicrokernelTester()
3665 .batch_size(batch_size)
3666 .qmin(std::numeric_limits<uint8_t>::min())
3667 .qmax(std::numeric_limits<uint8_t>::max())
3668 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3669 }
3670 }
3671
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16,batch_lt_16)3672 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16, batch_lt_16) {
3673 for (size_t batch_size = 1; batch_size < 16; batch_size++) {
3674 VCvtMicrokernelTester()
3675 .batch_size(batch_size)
3676 .qmin(std::numeric_limits<uint8_t>::min())
3677 .qmax(std::numeric_limits<uint8_t>::max())
3678 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3679 }
3680 }
3681
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16,batch_gt_16)3682 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16, batch_gt_16) {
3683 for (size_t batch_size = 17; batch_size < 32; batch_size++) {
3684 VCvtMicrokernelTester()
3685 .batch_size(batch_size)
3686 .qmin(std::numeric_limits<uint8_t>::min())
3687 .qmax(std::numeric_limits<uint8_t>::max())
3688 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3689 }
3690 }
3691
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16,scale)3692 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16, scale) {
3693 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3694 VCvtMicrokernelTester()
3695 .batch_size(batch_size)
3696 .scale(50)
3697 .output_zero_point(100)
3698 .qmin(std::numeric_limits<uint8_t>::min())
3699 .qmax(std::numeric_limits<uint8_t>::max())
3700 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3701 }
3702 }
3703
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16,output_zero_point)3704 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16, output_zero_point) {
3705 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3706 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3707 VCvtMicrokernelTester()
3708 .batch_size(batch_size)
3709 .output_zero_point(output_zero_point)
3710 .qmin(std::numeric_limits<uint8_t>::min())
3711 .qmax(std::numeric_limits<uint8_t>::max())
3712 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3713 }
3714 }
3715 }
3716
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16,saturation)3717 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16, saturation) {
3718 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3719 VCvtMicrokernelTester()
3720 .batch_size(batch_size)
3721 .scale(500)
3722 .output_zero_point(128)
3723 .qmin(std::numeric_limits<uint8_t>::min())
3724 .qmax(std::numeric_limits<uint8_t>::max())
3725 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3726 }
3727 }
3728
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16,overflow)3729 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16, overflow) {
3730 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3731 VCvtMicrokernelTester()
3732 .batch_size(batch_size)
3733 .scale(4294967296.0f)
3734 .qmin(std::numeric_limits<uint8_t>::min())
3735 .qmax(std::numeric_limits<uint8_t>::max())
3736 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3737 }
3738 }
3739
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16,qmin)3740 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16, qmin) {
3741 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
3742 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3743 VCvtMicrokernelTester()
3744 .batch_size(batch_size)
3745 .scale(500)
3746 .output_zero_point(128)
3747 .qmin(qmin)
3748 .qmax(std::numeric_limits<uint8_t>::max())
3749 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3750 }
3751 }
3752 }
3753
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16,qmax)3754 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X16, qmax) {
3755 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
3756 for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
3757 VCvtMicrokernelTester()
3758 .batch_size(batch_size)
3759 .scale(500)
3760 .output_zero_point(128)
3761 .qmin(std::numeric_limits<uint8_t>::min())
3762 .qmax(qmax)
3763 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x16, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3764 }
3765 }
3766 }
3767 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
3768
3769
3770 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24,batch_eq_24)3771 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24, batch_eq_24) {
3772 VCvtMicrokernelTester()
3773 .batch_size(24)
3774 .qmin(std::numeric_limits<uint8_t>::min())
3775 .qmax(std::numeric_limits<uint8_t>::max())
3776 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3777 }
3778
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24,batch_div_24)3779 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24, batch_div_24) {
3780 for (size_t batch_size = 48; batch_size < 240; batch_size += 24) {
3781 VCvtMicrokernelTester()
3782 .batch_size(batch_size)
3783 .qmin(std::numeric_limits<uint8_t>::min())
3784 .qmax(std::numeric_limits<uint8_t>::max())
3785 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3786 }
3787 }
3788
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24,batch_lt_24)3789 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24, batch_lt_24) {
3790 for (size_t batch_size = 1; batch_size < 24; batch_size++) {
3791 VCvtMicrokernelTester()
3792 .batch_size(batch_size)
3793 .qmin(std::numeric_limits<uint8_t>::min())
3794 .qmax(std::numeric_limits<uint8_t>::max())
3795 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3796 }
3797 }
3798
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24,batch_gt_24)3799 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24, batch_gt_24) {
3800 for (size_t batch_size = 25; batch_size < 48; batch_size++) {
3801 VCvtMicrokernelTester()
3802 .batch_size(batch_size)
3803 .qmin(std::numeric_limits<uint8_t>::min())
3804 .qmax(std::numeric_limits<uint8_t>::max())
3805 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3806 }
3807 }
3808
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24,scale)3809 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24, scale) {
3810 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3811 VCvtMicrokernelTester()
3812 .batch_size(batch_size)
3813 .scale(50)
3814 .output_zero_point(100)
3815 .qmin(std::numeric_limits<uint8_t>::min())
3816 .qmax(std::numeric_limits<uint8_t>::max())
3817 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3818 }
3819 }
3820
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24,output_zero_point)3821 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24, output_zero_point) {
3822 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3823 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3824 VCvtMicrokernelTester()
3825 .batch_size(batch_size)
3826 .output_zero_point(output_zero_point)
3827 .qmin(std::numeric_limits<uint8_t>::min())
3828 .qmax(std::numeric_limits<uint8_t>::max())
3829 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3830 }
3831 }
3832 }
3833
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24,saturation)3834 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24, saturation) {
3835 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3836 VCvtMicrokernelTester()
3837 .batch_size(batch_size)
3838 .scale(500)
3839 .output_zero_point(128)
3840 .qmin(std::numeric_limits<uint8_t>::min())
3841 .qmax(std::numeric_limits<uint8_t>::max())
3842 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3843 }
3844 }
3845
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24,overflow)3846 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24, overflow) {
3847 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3848 VCvtMicrokernelTester()
3849 .batch_size(batch_size)
3850 .scale(4294967296.0f)
3851 .qmin(std::numeric_limits<uint8_t>::min())
3852 .qmax(std::numeric_limits<uint8_t>::max())
3853 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3854 }
3855 }
3856
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24,qmin)3857 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24, qmin) {
3858 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
3859 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3860 VCvtMicrokernelTester()
3861 .batch_size(batch_size)
3862 .scale(500)
3863 .output_zero_point(128)
3864 .qmin(qmin)
3865 .qmax(std::numeric_limits<uint8_t>::max())
3866 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3867 }
3868 }
3869 }
3870
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24,qmax)3871 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X24, qmax) {
3872 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
3873 for (size_t batch_size = 1; batch_size <= 120; batch_size += 23) {
3874 VCvtMicrokernelTester()
3875 .batch_size(batch_size)
3876 .scale(500)
3877 .output_zero_point(128)
3878 .qmin(std::numeric_limits<uint8_t>::min())
3879 .qmax(qmax)
3880 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x24, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3881 }
3882 }
3883 }
3884 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
3885
3886
3887 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32,batch_eq_32)3888 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32, batch_eq_32) {
3889 VCvtMicrokernelTester()
3890 .batch_size(32)
3891 .qmin(std::numeric_limits<uint8_t>::min())
3892 .qmax(std::numeric_limits<uint8_t>::max())
3893 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3894 }
3895
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32,batch_div_32)3896 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32, batch_div_32) {
3897 for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
3898 VCvtMicrokernelTester()
3899 .batch_size(batch_size)
3900 .qmin(std::numeric_limits<uint8_t>::min())
3901 .qmax(std::numeric_limits<uint8_t>::max())
3902 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3903 }
3904 }
3905
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32,batch_lt_32)3906 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32, batch_lt_32) {
3907 for (size_t batch_size = 1; batch_size < 32; batch_size++) {
3908 VCvtMicrokernelTester()
3909 .batch_size(batch_size)
3910 .qmin(std::numeric_limits<uint8_t>::min())
3911 .qmax(std::numeric_limits<uint8_t>::max())
3912 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3913 }
3914 }
3915
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32,batch_gt_32)3916 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32, batch_gt_32) {
3917 for (size_t batch_size = 33; batch_size < 64; batch_size++) {
3918 VCvtMicrokernelTester()
3919 .batch_size(batch_size)
3920 .qmin(std::numeric_limits<uint8_t>::min())
3921 .qmax(std::numeric_limits<uint8_t>::max())
3922 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3923 }
3924 }
3925
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32,scale)3926 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32, scale) {
3927 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3928 VCvtMicrokernelTester()
3929 .batch_size(batch_size)
3930 .scale(50)
3931 .output_zero_point(100)
3932 .qmin(std::numeric_limits<uint8_t>::min())
3933 .qmax(std::numeric_limits<uint8_t>::max())
3934 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3935 }
3936 }
3937
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32,output_zero_point)3938 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32, output_zero_point) {
3939 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
3940 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3941 VCvtMicrokernelTester()
3942 .batch_size(batch_size)
3943 .output_zero_point(output_zero_point)
3944 .qmin(std::numeric_limits<uint8_t>::min())
3945 .qmax(std::numeric_limits<uint8_t>::max())
3946 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3947 }
3948 }
3949 }
3950
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32,saturation)3951 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32, saturation) {
3952 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3953 VCvtMicrokernelTester()
3954 .batch_size(batch_size)
3955 .scale(500)
3956 .output_zero_point(128)
3957 .qmin(std::numeric_limits<uint8_t>::min())
3958 .qmax(std::numeric_limits<uint8_t>::max())
3959 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3960 }
3961 }
3962
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32,overflow)3963 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32, overflow) {
3964 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3965 VCvtMicrokernelTester()
3966 .batch_size(batch_size)
3967 .scale(4294967296.0f)
3968 .qmin(std::numeric_limits<uint8_t>::min())
3969 .qmax(std::numeric_limits<uint8_t>::max())
3970 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3971 }
3972 }
3973
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32,qmin)3974 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32, qmin) {
3975 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
3976 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3977 VCvtMicrokernelTester()
3978 .batch_size(batch_size)
3979 .scale(500)
3980 .output_zero_point(128)
3981 .qmin(qmin)
3982 .qmax(std::numeric_limits<uint8_t>::max())
3983 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3984 }
3985 }
3986 }
3987
TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32,qmax)3988 TEST(F32_QU8_VCVT__WASMSIMD_MAGIC_X32, qmax) {
3989 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
3990 for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
3991 VCvtMicrokernelTester()
3992 .batch_size(batch_size)
3993 .scale(500)
3994 .output_zero_point(128)
3995 .qmin(std::numeric_limits<uint8_t>::min())
3996 .qmax(qmax)
3997 .Test(xnn_f32_qu8_vcvt_ukernel__wasmsimd_magic_x32, xnn_init_f32_qu8_cvt_wasmsimd_magic_params);
3998 }
3999 }
4000 }
4001 #endif // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
4002
4003
4004 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QU8_VCVT__WASM_FMAGIC_X1,batch_eq_1)4005 TEST(F32_QU8_VCVT__WASM_FMAGIC_X1, batch_eq_1) {
4006 VCvtMicrokernelTester()
4007 .batch_size(1)
4008 .qmin(std::numeric_limits<uint8_t>::min())
4009 .qmax(std::numeric_limits<uint8_t>::max())
4010 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x1, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4011 }
4012
TEST(F32_QU8_VCVT__WASM_FMAGIC_X1,batch_gt_1)4013 TEST(F32_QU8_VCVT__WASM_FMAGIC_X1, batch_gt_1) {
4014 for (size_t batch_size = 2; batch_size < 10; batch_size++) {
4015 VCvtMicrokernelTester()
4016 .batch_size(batch_size)
4017 .qmin(std::numeric_limits<uint8_t>::min())
4018 .qmax(std::numeric_limits<uint8_t>::max())
4019 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x1, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4020 }
4021 }
4022
TEST(F32_QU8_VCVT__WASM_FMAGIC_X1,scale)4023 TEST(F32_QU8_VCVT__WASM_FMAGIC_X1, scale) {
4024 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4025 VCvtMicrokernelTester()
4026 .batch_size(batch_size)
4027 .scale(50)
4028 .output_zero_point(100)
4029 .qmin(std::numeric_limits<uint8_t>::min())
4030 .qmax(std::numeric_limits<uint8_t>::max())
4031 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x1, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4032 }
4033 }
4034
TEST(F32_QU8_VCVT__WASM_FMAGIC_X1,output_zero_point)4035 TEST(F32_QU8_VCVT__WASM_FMAGIC_X1, output_zero_point) {
4036 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4037 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4038 VCvtMicrokernelTester()
4039 .batch_size(batch_size)
4040 .output_zero_point(output_zero_point)
4041 .qmin(std::numeric_limits<uint8_t>::min())
4042 .qmax(std::numeric_limits<uint8_t>::max())
4043 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x1, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4044 }
4045 }
4046 }
4047
TEST(F32_QU8_VCVT__WASM_FMAGIC_X1,saturation)4048 TEST(F32_QU8_VCVT__WASM_FMAGIC_X1, saturation) {
4049 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4050 VCvtMicrokernelTester()
4051 .batch_size(batch_size)
4052 .scale(500)
4053 .output_zero_point(128)
4054 .qmin(std::numeric_limits<uint8_t>::min())
4055 .qmax(std::numeric_limits<uint8_t>::max())
4056 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x1, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4057 }
4058 }
4059
TEST(F32_QU8_VCVT__WASM_FMAGIC_X1,overflow)4060 TEST(F32_QU8_VCVT__WASM_FMAGIC_X1, overflow) {
4061 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4062 VCvtMicrokernelTester()
4063 .batch_size(batch_size)
4064 .scale(4294967296.0f)
4065 .qmin(std::numeric_limits<uint8_t>::min())
4066 .qmax(std::numeric_limits<uint8_t>::max())
4067 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x1, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4068 }
4069 }
4070
TEST(F32_QU8_VCVT__WASM_FMAGIC_X1,qmin)4071 TEST(F32_QU8_VCVT__WASM_FMAGIC_X1, qmin) {
4072 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
4073 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4074 VCvtMicrokernelTester()
4075 .batch_size(batch_size)
4076 .scale(500)
4077 .output_zero_point(128)
4078 .qmin(qmin)
4079 .qmax(std::numeric_limits<uint8_t>::max())
4080 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x1, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4081 }
4082 }
4083 }
4084
TEST(F32_QU8_VCVT__WASM_FMAGIC_X1,qmax)4085 TEST(F32_QU8_VCVT__WASM_FMAGIC_X1, qmax) {
4086 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
4087 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4088 VCvtMicrokernelTester()
4089 .batch_size(batch_size)
4090 .scale(500)
4091 .output_zero_point(128)
4092 .qmin(std::numeric_limits<uint8_t>::min())
4093 .qmax(qmax)
4094 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x1, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4095 }
4096 }
4097 }
4098 #endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
4099
4100
4101 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QU8_VCVT__WASM_FMAGIC_X2,batch_eq_2)4102 TEST(F32_QU8_VCVT__WASM_FMAGIC_X2, batch_eq_2) {
4103 VCvtMicrokernelTester()
4104 .batch_size(2)
4105 .qmin(std::numeric_limits<uint8_t>::min())
4106 .qmax(std::numeric_limits<uint8_t>::max())
4107 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4108 }
4109
TEST(F32_QU8_VCVT__WASM_FMAGIC_X2,batch_div_2)4110 TEST(F32_QU8_VCVT__WASM_FMAGIC_X2, batch_div_2) {
4111 for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
4112 VCvtMicrokernelTester()
4113 .batch_size(batch_size)
4114 .qmin(std::numeric_limits<uint8_t>::min())
4115 .qmax(std::numeric_limits<uint8_t>::max())
4116 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4117 }
4118 }
4119
TEST(F32_QU8_VCVT__WASM_FMAGIC_X2,batch_lt_2)4120 TEST(F32_QU8_VCVT__WASM_FMAGIC_X2, batch_lt_2) {
4121 for (size_t batch_size = 1; batch_size < 2; batch_size++) {
4122 VCvtMicrokernelTester()
4123 .batch_size(batch_size)
4124 .qmin(std::numeric_limits<uint8_t>::min())
4125 .qmax(std::numeric_limits<uint8_t>::max())
4126 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4127 }
4128 }
4129
TEST(F32_QU8_VCVT__WASM_FMAGIC_X2,batch_gt_2)4130 TEST(F32_QU8_VCVT__WASM_FMAGIC_X2, batch_gt_2) {
4131 for (size_t batch_size = 3; batch_size < 4; batch_size++) {
4132 VCvtMicrokernelTester()
4133 .batch_size(batch_size)
4134 .qmin(std::numeric_limits<uint8_t>::min())
4135 .qmax(std::numeric_limits<uint8_t>::max())
4136 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4137 }
4138 }
4139
TEST(F32_QU8_VCVT__WASM_FMAGIC_X2,scale)4140 TEST(F32_QU8_VCVT__WASM_FMAGIC_X2, scale) {
4141 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4142 VCvtMicrokernelTester()
4143 .batch_size(batch_size)
4144 .scale(50)
4145 .output_zero_point(100)
4146 .qmin(std::numeric_limits<uint8_t>::min())
4147 .qmax(std::numeric_limits<uint8_t>::max())
4148 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4149 }
4150 }
4151
TEST(F32_QU8_VCVT__WASM_FMAGIC_X2,output_zero_point)4152 TEST(F32_QU8_VCVT__WASM_FMAGIC_X2, output_zero_point) {
4153 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4154 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4155 VCvtMicrokernelTester()
4156 .batch_size(batch_size)
4157 .output_zero_point(output_zero_point)
4158 .qmin(std::numeric_limits<uint8_t>::min())
4159 .qmax(std::numeric_limits<uint8_t>::max())
4160 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4161 }
4162 }
4163 }
4164
TEST(F32_QU8_VCVT__WASM_FMAGIC_X2,saturation)4165 TEST(F32_QU8_VCVT__WASM_FMAGIC_X2, saturation) {
4166 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4167 VCvtMicrokernelTester()
4168 .batch_size(batch_size)
4169 .scale(500)
4170 .output_zero_point(128)
4171 .qmin(std::numeric_limits<uint8_t>::min())
4172 .qmax(std::numeric_limits<uint8_t>::max())
4173 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4174 }
4175 }
4176
TEST(F32_QU8_VCVT__WASM_FMAGIC_X2,overflow)4177 TEST(F32_QU8_VCVT__WASM_FMAGIC_X2, overflow) {
4178 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4179 VCvtMicrokernelTester()
4180 .batch_size(batch_size)
4181 .scale(4294967296.0f)
4182 .qmin(std::numeric_limits<uint8_t>::min())
4183 .qmax(std::numeric_limits<uint8_t>::max())
4184 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4185 }
4186 }
4187
TEST(F32_QU8_VCVT__WASM_FMAGIC_X2,qmin)4188 TEST(F32_QU8_VCVT__WASM_FMAGIC_X2, qmin) {
4189 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
4190 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4191 VCvtMicrokernelTester()
4192 .batch_size(batch_size)
4193 .scale(500)
4194 .output_zero_point(128)
4195 .qmin(qmin)
4196 .qmax(std::numeric_limits<uint8_t>::max())
4197 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4198 }
4199 }
4200 }
4201
TEST(F32_QU8_VCVT__WASM_FMAGIC_X2,qmax)4202 TEST(F32_QU8_VCVT__WASM_FMAGIC_X2, qmax) {
4203 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
4204 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4205 VCvtMicrokernelTester()
4206 .batch_size(batch_size)
4207 .scale(500)
4208 .output_zero_point(128)
4209 .qmin(std::numeric_limits<uint8_t>::min())
4210 .qmax(qmax)
4211 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4212 }
4213 }
4214 }
4215 #endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
4216
4217
4218 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QU8_VCVT__WASM_FMAGIC_X3,batch_eq_3)4219 TEST(F32_QU8_VCVT__WASM_FMAGIC_X3, batch_eq_3) {
4220 VCvtMicrokernelTester()
4221 .batch_size(3)
4222 .qmin(std::numeric_limits<uint8_t>::min())
4223 .qmax(std::numeric_limits<uint8_t>::max())
4224 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4225 }
4226
TEST(F32_QU8_VCVT__WASM_FMAGIC_X3,batch_div_3)4227 TEST(F32_QU8_VCVT__WASM_FMAGIC_X3, batch_div_3) {
4228 for (size_t batch_size = 6; batch_size < 30; batch_size += 3) {
4229 VCvtMicrokernelTester()
4230 .batch_size(batch_size)
4231 .qmin(std::numeric_limits<uint8_t>::min())
4232 .qmax(std::numeric_limits<uint8_t>::max())
4233 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4234 }
4235 }
4236
TEST(F32_QU8_VCVT__WASM_FMAGIC_X3,batch_lt_3)4237 TEST(F32_QU8_VCVT__WASM_FMAGIC_X3, batch_lt_3) {
4238 for (size_t batch_size = 1; batch_size < 3; batch_size++) {
4239 VCvtMicrokernelTester()
4240 .batch_size(batch_size)
4241 .qmin(std::numeric_limits<uint8_t>::min())
4242 .qmax(std::numeric_limits<uint8_t>::max())
4243 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4244 }
4245 }
4246
TEST(F32_QU8_VCVT__WASM_FMAGIC_X3,batch_gt_3)4247 TEST(F32_QU8_VCVT__WASM_FMAGIC_X3, batch_gt_3) {
4248 for (size_t batch_size = 4; batch_size < 6; batch_size++) {
4249 VCvtMicrokernelTester()
4250 .batch_size(batch_size)
4251 .qmin(std::numeric_limits<uint8_t>::min())
4252 .qmax(std::numeric_limits<uint8_t>::max())
4253 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4254 }
4255 }
4256
TEST(F32_QU8_VCVT__WASM_FMAGIC_X3,scale)4257 TEST(F32_QU8_VCVT__WASM_FMAGIC_X3, scale) {
4258 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4259 VCvtMicrokernelTester()
4260 .batch_size(batch_size)
4261 .scale(50)
4262 .output_zero_point(100)
4263 .qmin(std::numeric_limits<uint8_t>::min())
4264 .qmax(std::numeric_limits<uint8_t>::max())
4265 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4266 }
4267 }
4268
TEST(F32_QU8_VCVT__WASM_FMAGIC_X3,output_zero_point)4269 TEST(F32_QU8_VCVT__WASM_FMAGIC_X3, output_zero_point) {
4270 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4271 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4272 VCvtMicrokernelTester()
4273 .batch_size(batch_size)
4274 .output_zero_point(output_zero_point)
4275 .qmin(std::numeric_limits<uint8_t>::min())
4276 .qmax(std::numeric_limits<uint8_t>::max())
4277 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4278 }
4279 }
4280 }
4281
TEST(F32_QU8_VCVT__WASM_FMAGIC_X3,saturation)4282 TEST(F32_QU8_VCVT__WASM_FMAGIC_X3, saturation) {
4283 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4284 VCvtMicrokernelTester()
4285 .batch_size(batch_size)
4286 .scale(500)
4287 .output_zero_point(128)
4288 .qmin(std::numeric_limits<uint8_t>::min())
4289 .qmax(std::numeric_limits<uint8_t>::max())
4290 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4291 }
4292 }
4293
TEST(F32_QU8_VCVT__WASM_FMAGIC_X3,overflow)4294 TEST(F32_QU8_VCVT__WASM_FMAGIC_X3, overflow) {
4295 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4296 VCvtMicrokernelTester()
4297 .batch_size(batch_size)
4298 .scale(4294967296.0f)
4299 .qmin(std::numeric_limits<uint8_t>::min())
4300 .qmax(std::numeric_limits<uint8_t>::max())
4301 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4302 }
4303 }
4304
TEST(F32_QU8_VCVT__WASM_FMAGIC_X3,qmin)4305 TEST(F32_QU8_VCVT__WASM_FMAGIC_X3, qmin) {
4306 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
4307 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4308 VCvtMicrokernelTester()
4309 .batch_size(batch_size)
4310 .scale(500)
4311 .output_zero_point(128)
4312 .qmin(qmin)
4313 .qmax(std::numeric_limits<uint8_t>::max())
4314 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4315 }
4316 }
4317 }
4318
TEST(F32_QU8_VCVT__WASM_FMAGIC_X3,qmax)4319 TEST(F32_QU8_VCVT__WASM_FMAGIC_X3, qmax) {
4320 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
4321 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4322 VCvtMicrokernelTester()
4323 .batch_size(batch_size)
4324 .scale(500)
4325 .output_zero_point(128)
4326 .qmin(std::numeric_limits<uint8_t>::min())
4327 .qmax(qmax)
4328 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4329 }
4330 }
4331 }
4332 #endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
4333
4334
4335 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_QU8_VCVT__WASM_FMAGIC_X4,batch_eq_4)4336 TEST(F32_QU8_VCVT__WASM_FMAGIC_X4, batch_eq_4) {
4337 VCvtMicrokernelTester()
4338 .batch_size(4)
4339 .qmin(std::numeric_limits<uint8_t>::min())
4340 .qmax(std::numeric_limits<uint8_t>::max())
4341 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4342 }
4343
TEST(F32_QU8_VCVT__WASM_FMAGIC_X4,batch_div_4)4344 TEST(F32_QU8_VCVT__WASM_FMAGIC_X4, batch_div_4) {
4345 for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
4346 VCvtMicrokernelTester()
4347 .batch_size(batch_size)
4348 .qmin(std::numeric_limits<uint8_t>::min())
4349 .qmax(std::numeric_limits<uint8_t>::max())
4350 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4351 }
4352 }
4353
TEST(F32_QU8_VCVT__WASM_FMAGIC_X4,batch_lt_4)4354 TEST(F32_QU8_VCVT__WASM_FMAGIC_X4, batch_lt_4) {
4355 for (size_t batch_size = 1; batch_size < 4; batch_size++) {
4356 VCvtMicrokernelTester()
4357 .batch_size(batch_size)
4358 .qmin(std::numeric_limits<uint8_t>::min())
4359 .qmax(std::numeric_limits<uint8_t>::max())
4360 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4361 }
4362 }
4363
TEST(F32_QU8_VCVT__WASM_FMAGIC_X4,batch_gt_4)4364 TEST(F32_QU8_VCVT__WASM_FMAGIC_X4, batch_gt_4) {
4365 for (size_t batch_size = 5; batch_size < 8; batch_size++) {
4366 VCvtMicrokernelTester()
4367 .batch_size(batch_size)
4368 .qmin(std::numeric_limits<uint8_t>::min())
4369 .qmax(std::numeric_limits<uint8_t>::max())
4370 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4371 }
4372 }
4373
TEST(F32_QU8_VCVT__WASM_FMAGIC_X4,scale)4374 TEST(F32_QU8_VCVT__WASM_FMAGIC_X4, scale) {
4375 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4376 VCvtMicrokernelTester()
4377 .batch_size(batch_size)
4378 .scale(50)
4379 .output_zero_point(100)
4380 .qmin(std::numeric_limits<uint8_t>::min())
4381 .qmax(std::numeric_limits<uint8_t>::max())
4382 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4383 }
4384 }
4385
TEST(F32_QU8_VCVT__WASM_FMAGIC_X4,output_zero_point)4386 TEST(F32_QU8_VCVT__WASM_FMAGIC_X4, output_zero_point) {
4387 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4388 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4389 VCvtMicrokernelTester()
4390 .batch_size(batch_size)
4391 .output_zero_point(output_zero_point)
4392 .qmin(std::numeric_limits<uint8_t>::min())
4393 .qmax(std::numeric_limits<uint8_t>::max())
4394 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4395 }
4396 }
4397 }
4398
TEST(F32_QU8_VCVT__WASM_FMAGIC_X4,saturation)4399 TEST(F32_QU8_VCVT__WASM_FMAGIC_X4, saturation) {
4400 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4401 VCvtMicrokernelTester()
4402 .batch_size(batch_size)
4403 .scale(500)
4404 .output_zero_point(128)
4405 .qmin(std::numeric_limits<uint8_t>::min())
4406 .qmax(std::numeric_limits<uint8_t>::max())
4407 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4408 }
4409 }
4410
TEST(F32_QU8_VCVT__WASM_FMAGIC_X4,overflow)4411 TEST(F32_QU8_VCVT__WASM_FMAGIC_X4, overflow) {
4412 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4413 VCvtMicrokernelTester()
4414 .batch_size(batch_size)
4415 .scale(4294967296.0f)
4416 .qmin(std::numeric_limits<uint8_t>::min())
4417 .qmax(std::numeric_limits<uint8_t>::max())
4418 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4419 }
4420 }
4421
TEST(F32_QU8_VCVT__WASM_FMAGIC_X4,qmin)4422 TEST(F32_QU8_VCVT__WASM_FMAGIC_X4, qmin) {
4423 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
4424 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4425 VCvtMicrokernelTester()
4426 .batch_size(batch_size)
4427 .scale(500)
4428 .output_zero_point(128)
4429 .qmin(qmin)
4430 .qmax(std::numeric_limits<uint8_t>::max())
4431 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4432 }
4433 }
4434 }
4435
TEST(F32_QU8_VCVT__WASM_FMAGIC_X4,qmax)4436 TEST(F32_QU8_VCVT__WASM_FMAGIC_X4, qmax) {
4437 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
4438 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4439 VCvtMicrokernelTester()
4440 .batch_size(batch_size)
4441 .scale(500)
4442 .output_zero_point(128)
4443 .qmin(std::numeric_limits<uint8_t>::min())
4444 .qmax(qmax)
4445 .Test(xnn_f32_qu8_vcvt_ukernel__wasm_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4446 }
4447 }
4448 }
4449 #endif // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
4450
4451
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X1,batch_eq_1)4452 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X1, batch_eq_1) {
4453 VCvtMicrokernelTester()
4454 .batch_size(1)
4455 .qmin(std::numeric_limits<uint8_t>::min())
4456 .qmax(std::numeric_limits<uint8_t>::max())
4457 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x1, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4458 }
4459
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X1,batch_gt_1)4460 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X1, batch_gt_1) {
4461 for (size_t batch_size = 2; batch_size < 10; batch_size++) {
4462 VCvtMicrokernelTester()
4463 .batch_size(batch_size)
4464 .qmin(std::numeric_limits<uint8_t>::min())
4465 .qmax(std::numeric_limits<uint8_t>::max())
4466 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x1, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4467 }
4468 }
4469
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X1,scale)4470 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X1, scale) {
4471 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4472 VCvtMicrokernelTester()
4473 .batch_size(batch_size)
4474 .scale(50)
4475 .output_zero_point(100)
4476 .qmin(std::numeric_limits<uint8_t>::min())
4477 .qmax(std::numeric_limits<uint8_t>::max())
4478 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x1, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4479 }
4480 }
4481
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X1,output_zero_point)4482 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X1, output_zero_point) {
4483 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4484 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4485 VCvtMicrokernelTester()
4486 .batch_size(batch_size)
4487 .output_zero_point(output_zero_point)
4488 .qmin(std::numeric_limits<uint8_t>::min())
4489 .qmax(std::numeric_limits<uint8_t>::max())
4490 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x1, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4491 }
4492 }
4493 }
4494
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X1,saturation)4495 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X1, saturation) {
4496 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4497 VCvtMicrokernelTester()
4498 .batch_size(batch_size)
4499 .scale(500)
4500 .output_zero_point(128)
4501 .qmin(std::numeric_limits<uint8_t>::min())
4502 .qmax(std::numeric_limits<uint8_t>::max())
4503 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x1, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4504 }
4505 }
4506
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X1,overflow)4507 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X1, overflow) {
4508 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4509 VCvtMicrokernelTester()
4510 .batch_size(batch_size)
4511 .scale(4294967296.0f)
4512 .qmin(std::numeric_limits<uint8_t>::min())
4513 .qmax(std::numeric_limits<uint8_t>::max())
4514 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x1, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4515 }
4516 }
4517
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X1,qmin)4518 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X1, qmin) {
4519 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
4520 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4521 VCvtMicrokernelTester()
4522 .batch_size(batch_size)
4523 .scale(500)
4524 .output_zero_point(128)
4525 .qmin(qmin)
4526 .qmax(std::numeric_limits<uint8_t>::max())
4527 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x1, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4528 }
4529 }
4530 }
4531
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X1,qmax)4532 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X1, qmax) {
4533 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
4534 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4535 VCvtMicrokernelTester()
4536 .batch_size(batch_size)
4537 .scale(500)
4538 .output_zero_point(128)
4539 .qmin(std::numeric_limits<uint8_t>::min())
4540 .qmax(qmax)
4541 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x1, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4542 }
4543 }
4544 }
4545
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2,batch_eq_2)4546 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2, batch_eq_2) {
4547 VCvtMicrokernelTester()
4548 .batch_size(2)
4549 .qmin(std::numeric_limits<uint8_t>::min())
4550 .qmax(std::numeric_limits<uint8_t>::max())
4551 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4552 }
4553
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2,batch_div_2)4554 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2, batch_div_2) {
4555 for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
4556 VCvtMicrokernelTester()
4557 .batch_size(batch_size)
4558 .qmin(std::numeric_limits<uint8_t>::min())
4559 .qmax(std::numeric_limits<uint8_t>::max())
4560 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4561 }
4562 }
4563
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2,batch_lt_2)4564 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2, batch_lt_2) {
4565 for (size_t batch_size = 1; batch_size < 2; batch_size++) {
4566 VCvtMicrokernelTester()
4567 .batch_size(batch_size)
4568 .qmin(std::numeric_limits<uint8_t>::min())
4569 .qmax(std::numeric_limits<uint8_t>::max())
4570 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4571 }
4572 }
4573
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2,batch_gt_2)4574 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2, batch_gt_2) {
4575 for (size_t batch_size = 3; batch_size < 4; batch_size++) {
4576 VCvtMicrokernelTester()
4577 .batch_size(batch_size)
4578 .qmin(std::numeric_limits<uint8_t>::min())
4579 .qmax(std::numeric_limits<uint8_t>::max())
4580 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4581 }
4582 }
4583
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2,scale)4584 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2, scale) {
4585 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4586 VCvtMicrokernelTester()
4587 .batch_size(batch_size)
4588 .scale(50)
4589 .output_zero_point(100)
4590 .qmin(std::numeric_limits<uint8_t>::min())
4591 .qmax(std::numeric_limits<uint8_t>::max())
4592 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4593 }
4594 }
4595
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2,output_zero_point)4596 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2, output_zero_point) {
4597 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4598 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4599 VCvtMicrokernelTester()
4600 .batch_size(batch_size)
4601 .output_zero_point(output_zero_point)
4602 .qmin(std::numeric_limits<uint8_t>::min())
4603 .qmax(std::numeric_limits<uint8_t>::max())
4604 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4605 }
4606 }
4607 }
4608
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2,saturation)4609 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2, saturation) {
4610 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4611 VCvtMicrokernelTester()
4612 .batch_size(batch_size)
4613 .scale(500)
4614 .output_zero_point(128)
4615 .qmin(std::numeric_limits<uint8_t>::min())
4616 .qmax(std::numeric_limits<uint8_t>::max())
4617 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4618 }
4619 }
4620
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2,overflow)4621 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2, overflow) {
4622 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4623 VCvtMicrokernelTester()
4624 .batch_size(batch_size)
4625 .scale(4294967296.0f)
4626 .qmin(std::numeric_limits<uint8_t>::min())
4627 .qmax(std::numeric_limits<uint8_t>::max())
4628 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4629 }
4630 }
4631
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2,qmin)4632 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2, qmin) {
4633 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
4634 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4635 VCvtMicrokernelTester()
4636 .batch_size(batch_size)
4637 .scale(500)
4638 .output_zero_point(128)
4639 .qmin(qmin)
4640 .qmax(std::numeric_limits<uint8_t>::max())
4641 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4642 }
4643 }
4644 }
4645
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2,qmax)4646 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X2, qmax) {
4647 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
4648 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
4649 VCvtMicrokernelTester()
4650 .batch_size(batch_size)
4651 .scale(500)
4652 .output_zero_point(128)
4653 .qmin(std::numeric_limits<uint8_t>::min())
4654 .qmax(qmax)
4655 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x2, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4656 }
4657 }
4658 }
4659
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3,batch_eq_3)4660 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3, batch_eq_3) {
4661 VCvtMicrokernelTester()
4662 .batch_size(3)
4663 .qmin(std::numeric_limits<uint8_t>::min())
4664 .qmax(std::numeric_limits<uint8_t>::max())
4665 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4666 }
4667
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3,batch_div_3)4668 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3, batch_div_3) {
4669 for (size_t batch_size = 6; batch_size < 30; batch_size += 3) {
4670 VCvtMicrokernelTester()
4671 .batch_size(batch_size)
4672 .qmin(std::numeric_limits<uint8_t>::min())
4673 .qmax(std::numeric_limits<uint8_t>::max())
4674 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4675 }
4676 }
4677
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3,batch_lt_3)4678 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3, batch_lt_3) {
4679 for (size_t batch_size = 1; batch_size < 3; batch_size++) {
4680 VCvtMicrokernelTester()
4681 .batch_size(batch_size)
4682 .qmin(std::numeric_limits<uint8_t>::min())
4683 .qmax(std::numeric_limits<uint8_t>::max())
4684 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4685 }
4686 }
4687
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3,batch_gt_3)4688 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3, batch_gt_3) {
4689 for (size_t batch_size = 4; batch_size < 6; batch_size++) {
4690 VCvtMicrokernelTester()
4691 .batch_size(batch_size)
4692 .qmin(std::numeric_limits<uint8_t>::min())
4693 .qmax(std::numeric_limits<uint8_t>::max())
4694 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4695 }
4696 }
4697
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3,scale)4698 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3, scale) {
4699 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4700 VCvtMicrokernelTester()
4701 .batch_size(batch_size)
4702 .scale(50)
4703 .output_zero_point(100)
4704 .qmin(std::numeric_limits<uint8_t>::min())
4705 .qmax(std::numeric_limits<uint8_t>::max())
4706 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4707 }
4708 }
4709
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3,output_zero_point)4710 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3, output_zero_point) {
4711 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4712 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4713 VCvtMicrokernelTester()
4714 .batch_size(batch_size)
4715 .output_zero_point(output_zero_point)
4716 .qmin(std::numeric_limits<uint8_t>::min())
4717 .qmax(std::numeric_limits<uint8_t>::max())
4718 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4719 }
4720 }
4721 }
4722
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3,saturation)4723 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3, saturation) {
4724 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4725 VCvtMicrokernelTester()
4726 .batch_size(batch_size)
4727 .scale(500)
4728 .output_zero_point(128)
4729 .qmin(std::numeric_limits<uint8_t>::min())
4730 .qmax(std::numeric_limits<uint8_t>::max())
4731 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4732 }
4733 }
4734
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3,overflow)4735 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3, overflow) {
4736 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4737 VCvtMicrokernelTester()
4738 .batch_size(batch_size)
4739 .scale(4294967296.0f)
4740 .qmin(std::numeric_limits<uint8_t>::min())
4741 .qmax(std::numeric_limits<uint8_t>::max())
4742 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4743 }
4744 }
4745
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3,qmin)4746 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3, qmin) {
4747 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
4748 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4749 VCvtMicrokernelTester()
4750 .batch_size(batch_size)
4751 .scale(500)
4752 .output_zero_point(128)
4753 .qmin(qmin)
4754 .qmax(std::numeric_limits<uint8_t>::max())
4755 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4756 }
4757 }
4758 }
4759
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3,qmax)4760 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X3, qmax) {
4761 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
4762 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
4763 VCvtMicrokernelTester()
4764 .batch_size(batch_size)
4765 .scale(500)
4766 .output_zero_point(128)
4767 .qmin(std::numeric_limits<uint8_t>::min())
4768 .qmax(qmax)
4769 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x3, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4770 }
4771 }
4772 }
4773
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4,batch_eq_4)4774 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4, batch_eq_4) {
4775 VCvtMicrokernelTester()
4776 .batch_size(4)
4777 .qmin(std::numeric_limits<uint8_t>::min())
4778 .qmax(std::numeric_limits<uint8_t>::max())
4779 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4780 }
4781
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4,batch_div_4)4782 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4, batch_div_4) {
4783 for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
4784 VCvtMicrokernelTester()
4785 .batch_size(batch_size)
4786 .qmin(std::numeric_limits<uint8_t>::min())
4787 .qmax(std::numeric_limits<uint8_t>::max())
4788 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4789 }
4790 }
4791
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4,batch_lt_4)4792 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4, batch_lt_4) {
4793 for (size_t batch_size = 1; batch_size < 4; batch_size++) {
4794 VCvtMicrokernelTester()
4795 .batch_size(batch_size)
4796 .qmin(std::numeric_limits<uint8_t>::min())
4797 .qmax(std::numeric_limits<uint8_t>::max())
4798 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4799 }
4800 }
4801
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4,batch_gt_4)4802 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4, batch_gt_4) {
4803 for (size_t batch_size = 5; batch_size < 8; batch_size++) {
4804 VCvtMicrokernelTester()
4805 .batch_size(batch_size)
4806 .qmin(std::numeric_limits<uint8_t>::min())
4807 .qmax(std::numeric_limits<uint8_t>::max())
4808 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4809 }
4810 }
4811
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4,scale)4812 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4, scale) {
4813 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4814 VCvtMicrokernelTester()
4815 .batch_size(batch_size)
4816 .scale(50)
4817 .output_zero_point(100)
4818 .qmin(std::numeric_limits<uint8_t>::min())
4819 .qmax(std::numeric_limits<uint8_t>::max())
4820 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4821 }
4822 }
4823
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4,output_zero_point)4824 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4, output_zero_point) {
4825 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4826 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4827 VCvtMicrokernelTester()
4828 .batch_size(batch_size)
4829 .output_zero_point(output_zero_point)
4830 .qmin(std::numeric_limits<uint8_t>::min())
4831 .qmax(std::numeric_limits<uint8_t>::max())
4832 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4833 }
4834 }
4835 }
4836
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4,saturation)4837 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4, saturation) {
4838 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4839 VCvtMicrokernelTester()
4840 .batch_size(batch_size)
4841 .scale(500)
4842 .output_zero_point(128)
4843 .qmin(std::numeric_limits<uint8_t>::min())
4844 .qmax(std::numeric_limits<uint8_t>::max())
4845 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4846 }
4847 }
4848
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4,overflow)4849 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4, overflow) {
4850 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4851 VCvtMicrokernelTester()
4852 .batch_size(batch_size)
4853 .scale(4294967296.0f)
4854 .qmin(std::numeric_limits<uint8_t>::min())
4855 .qmax(std::numeric_limits<uint8_t>::max())
4856 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4857 }
4858 }
4859
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4,qmin)4860 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4, qmin) {
4861 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
4862 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4863 VCvtMicrokernelTester()
4864 .batch_size(batch_size)
4865 .scale(500)
4866 .output_zero_point(128)
4867 .qmin(qmin)
4868 .qmax(std::numeric_limits<uint8_t>::max())
4869 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4870 }
4871 }
4872 }
4873
TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4,qmax)4874 TEST(F32_QU8_VCVT__SCALAR_FMAGIC_X4, qmax) {
4875 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
4876 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
4877 VCvtMicrokernelTester()
4878 .batch_size(batch_size)
4879 .scale(500)
4880 .output_zero_point(128)
4881 .qmin(std::numeric_limits<uint8_t>::min())
4882 .qmax(qmax)
4883 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_fmagic_x4, xnn_init_f32_qu8_cvt_scalar_fmagic_params);
4884 }
4885 }
4886 }
4887
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X1,batch_eq_1)4888 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X1, batch_eq_1) {
4889 VCvtMicrokernelTester()
4890 .batch_size(1)
4891 .qmin(std::numeric_limits<uint8_t>::min())
4892 .qmax(std::numeric_limits<uint8_t>::max())
4893 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x1, xnn_init_f32_qu8_cvt_scalar_imagic_params);
4894 }
4895
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X1,batch_gt_1)4896 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X1, batch_gt_1) {
4897 for (size_t batch_size = 2; batch_size < 10; batch_size++) {
4898 VCvtMicrokernelTester()
4899 .batch_size(batch_size)
4900 .qmin(std::numeric_limits<uint8_t>::min())
4901 .qmax(std::numeric_limits<uint8_t>::max())
4902 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x1, xnn_init_f32_qu8_cvt_scalar_imagic_params);
4903 }
4904 }
4905
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X1,scale)4906 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X1, scale) {
4907 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4908 VCvtMicrokernelTester()
4909 .batch_size(batch_size)
4910 .scale(50)
4911 .output_zero_point(100)
4912 .qmin(std::numeric_limits<uint8_t>::min())
4913 .qmax(std::numeric_limits<uint8_t>::max())
4914 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x1, xnn_init_f32_qu8_cvt_scalar_imagic_params);
4915 }
4916 }
4917
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X1,output_zero_point)4918 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X1, output_zero_point) {
4919 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
4920 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4921 VCvtMicrokernelTester()
4922 .batch_size(batch_size)
4923 .output_zero_point(output_zero_point)
4924 .qmin(std::numeric_limits<uint8_t>::min())
4925 .qmax(std::numeric_limits<uint8_t>::max())
4926 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x1, xnn_init_f32_qu8_cvt_scalar_imagic_params);
4927 }
4928 }
4929 }
4930
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X1,saturation)4931 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X1, saturation) {
4932 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4933 VCvtMicrokernelTester()
4934 .batch_size(batch_size)
4935 .scale(500)
4936 .output_zero_point(128)
4937 .qmin(std::numeric_limits<uint8_t>::min())
4938 .qmax(std::numeric_limits<uint8_t>::max())
4939 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x1, xnn_init_f32_qu8_cvt_scalar_imagic_params);
4940 }
4941 }
4942
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X1,overflow)4943 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X1, overflow) {
4944 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4945 VCvtMicrokernelTester()
4946 .batch_size(batch_size)
4947 .scale(4294967296.0f)
4948 .qmin(std::numeric_limits<uint8_t>::min())
4949 .qmax(std::numeric_limits<uint8_t>::max())
4950 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x1, xnn_init_f32_qu8_cvt_scalar_imagic_params);
4951 }
4952 }
4953
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X1,qmin)4954 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X1, qmin) {
4955 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
4956 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4957 VCvtMicrokernelTester()
4958 .batch_size(batch_size)
4959 .scale(500)
4960 .output_zero_point(128)
4961 .qmin(qmin)
4962 .qmax(std::numeric_limits<uint8_t>::max())
4963 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x1, xnn_init_f32_qu8_cvt_scalar_imagic_params);
4964 }
4965 }
4966 }
4967
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X1,qmax)4968 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X1, qmax) {
4969 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
4970 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
4971 VCvtMicrokernelTester()
4972 .batch_size(batch_size)
4973 .scale(500)
4974 .output_zero_point(128)
4975 .qmin(std::numeric_limits<uint8_t>::min())
4976 .qmax(qmax)
4977 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x1, xnn_init_f32_qu8_cvt_scalar_imagic_params);
4978 }
4979 }
4980 }
4981
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2,batch_eq_2)4982 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2, batch_eq_2) {
4983 VCvtMicrokernelTester()
4984 .batch_size(2)
4985 .qmin(std::numeric_limits<uint8_t>::min())
4986 .qmax(std::numeric_limits<uint8_t>::max())
4987 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qu8_cvt_scalar_imagic_params);
4988 }
4989
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2,batch_div_2)4990 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2, batch_div_2) {
4991 for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
4992 VCvtMicrokernelTester()
4993 .batch_size(batch_size)
4994 .qmin(std::numeric_limits<uint8_t>::min())
4995 .qmax(std::numeric_limits<uint8_t>::max())
4996 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qu8_cvt_scalar_imagic_params);
4997 }
4998 }
4999
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2,batch_lt_2)5000 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2, batch_lt_2) {
5001 for (size_t batch_size = 1; batch_size < 2; batch_size++) {
5002 VCvtMicrokernelTester()
5003 .batch_size(batch_size)
5004 .qmin(std::numeric_limits<uint8_t>::min())
5005 .qmax(std::numeric_limits<uint8_t>::max())
5006 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5007 }
5008 }
5009
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2,batch_gt_2)5010 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2, batch_gt_2) {
5011 for (size_t batch_size = 3; batch_size < 4; batch_size++) {
5012 VCvtMicrokernelTester()
5013 .batch_size(batch_size)
5014 .qmin(std::numeric_limits<uint8_t>::min())
5015 .qmax(std::numeric_limits<uint8_t>::max())
5016 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5017 }
5018 }
5019
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2,scale)5020 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2, scale) {
5021 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5022 VCvtMicrokernelTester()
5023 .batch_size(batch_size)
5024 .scale(50)
5025 .output_zero_point(100)
5026 .qmin(std::numeric_limits<uint8_t>::min())
5027 .qmax(std::numeric_limits<uint8_t>::max())
5028 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5029 }
5030 }
5031
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2,output_zero_point)5032 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2, output_zero_point) {
5033 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
5034 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5035 VCvtMicrokernelTester()
5036 .batch_size(batch_size)
5037 .output_zero_point(output_zero_point)
5038 .qmin(std::numeric_limits<uint8_t>::min())
5039 .qmax(std::numeric_limits<uint8_t>::max())
5040 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5041 }
5042 }
5043 }
5044
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2,saturation)5045 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2, saturation) {
5046 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5047 VCvtMicrokernelTester()
5048 .batch_size(batch_size)
5049 .scale(500)
5050 .output_zero_point(128)
5051 .qmin(std::numeric_limits<uint8_t>::min())
5052 .qmax(std::numeric_limits<uint8_t>::max())
5053 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5054 }
5055 }
5056
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2,overflow)5057 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2, overflow) {
5058 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5059 VCvtMicrokernelTester()
5060 .batch_size(batch_size)
5061 .scale(4294967296.0f)
5062 .qmin(std::numeric_limits<uint8_t>::min())
5063 .qmax(std::numeric_limits<uint8_t>::max())
5064 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5065 }
5066 }
5067
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2,qmin)5068 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2, qmin) {
5069 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
5070 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5071 VCvtMicrokernelTester()
5072 .batch_size(batch_size)
5073 .scale(500)
5074 .output_zero_point(128)
5075 .qmin(qmin)
5076 .qmax(std::numeric_limits<uint8_t>::max())
5077 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5078 }
5079 }
5080 }
5081
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2,qmax)5082 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X2, qmax) {
5083 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
5084 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5085 VCvtMicrokernelTester()
5086 .batch_size(batch_size)
5087 .scale(500)
5088 .output_zero_point(128)
5089 .qmin(std::numeric_limits<uint8_t>::min())
5090 .qmax(qmax)
5091 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x2, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5092 }
5093 }
5094 }
5095
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3,batch_eq_3)5096 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3, batch_eq_3) {
5097 VCvtMicrokernelTester()
5098 .batch_size(3)
5099 .qmin(std::numeric_limits<uint8_t>::min())
5100 .qmax(std::numeric_limits<uint8_t>::max())
5101 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5102 }
5103
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3,batch_div_3)5104 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3, batch_div_3) {
5105 for (size_t batch_size = 6; batch_size < 30; batch_size += 3) {
5106 VCvtMicrokernelTester()
5107 .batch_size(batch_size)
5108 .qmin(std::numeric_limits<uint8_t>::min())
5109 .qmax(std::numeric_limits<uint8_t>::max())
5110 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5111 }
5112 }
5113
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3,batch_lt_3)5114 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3, batch_lt_3) {
5115 for (size_t batch_size = 1; batch_size < 3; batch_size++) {
5116 VCvtMicrokernelTester()
5117 .batch_size(batch_size)
5118 .qmin(std::numeric_limits<uint8_t>::min())
5119 .qmax(std::numeric_limits<uint8_t>::max())
5120 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5121 }
5122 }
5123
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3,batch_gt_3)5124 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3, batch_gt_3) {
5125 for (size_t batch_size = 4; batch_size < 6; batch_size++) {
5126 VCvtMicrokernelTester()
5127 .batch_size(batch_size)
5128 .qmin(std::numeric_limits<uint8_t>::min())
5129 .qmax(std::numeric_limits<uint8_t>::max())
5130 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5131 }
5132 }
5133
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3,scale)5134 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3, scale) {
5135 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5136 VCvtMicrokernelTester()
5137 .batch_size(batch_size)
5138 .scale(50)
5139 .output_zero_point(100)
5140 .qmin(std::numeric_limits<uint8_t>::min())
5141 .qmax(std::numeric_limits<uint8_t>::max())
5142 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5143 }
5144 }
5145
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3,output_zero_point)5146 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3, output_zero_point) {
5147 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
5148 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5149 VCvtMicrokernelTester()
5150 .batch_size(batch_size)
5151 .output_zero_point(output_zero_point)
5152 .qmin(std::numeric_limits<uint8_t>::min())
5153 .qmax(std::numeric_limits<uint8_t>::max())
5154 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5155 }
5156 }
5157 }
5158
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3,saturation)5159 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3, saturation) {
5160 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5161 VCvtMicrokernelTester()
5162 .batch_size(batch_size)
5163 .scale(500)
5164 .output_zero_point(128)
5165 .qmin(std::numeric_limits<uint8_t>::min())
5166 .qmax(std::numeric_limits<uint8_t>::max())
5167 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5168 }
5169 }
5170
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3,overflow)5171 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3, overflow) {
5172 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5173 VCvtMicrokernelTester()
5174 .batch_size(batch_size)
5175 .scale(4294967296.0f)
5176 .qmin(std::numeric_limits<uint8_t>::min())
5177 .qmax(std::numeric_limits<uint8_t>::max())
5178 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5179 }
5180 }
5181
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3,qmin)5182 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3, qmin) {
5183 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
5184 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5185 VCvtMicrokernelTester()
5186 .batch_size(batch_size)
5187 .scale(500)
5188 .output_zero_point(128)
5189 .qmin(qmin)
5190 .qmax(std::numeric_limits<uint8_t>::max())
5191 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5192 }
5193 }
5194 }
5195
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3,qmax)5196 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X3, qmax) {
5197 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
5198 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5199 VCvtMicrokernelTester()
5200 .batch_size(batch_size)
5201 .scale(500)
5202 .output_zero_point(128)
5203 .qmin(std::numeric_limits<uint8_t>::min())
5204 .qmax(qmax)
5205 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x3, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5206 }
5207 }
5208 }
5209
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4,batch_eq_4)5210 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4, batch_eq_4) {
5211 VCvtMicrokernelTester()
5212 .batch_size(4)
5213 .qmin(std::numeric_limits<uint8_t>::min())
5214 .qmax(std::numeric_limits<uint8_t>::max())
5215 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5216 }
5217
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4,batch_div_4)5218 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4, batch_div_4) {
5219 for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
5220 VCvtMicrokernelTester()
5221 .batch_size(batch_size)
5222 .qmin(std::numeric_limits<uint8_t>::min())
5223 .qmax(std::numeric_limits<uint8_t>::max())
5224 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5225 }
5226 }
5227
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4,batch_lt_4)5228 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4, batch_lt_4) {
5229 for (size_t batch_size = 1; batch_size < 4; batch_size++) {
5230 VCvtMicrokernelTester()
5231 .batch_size(batch_size)
5232 .qmin(std::numeric_limits<uint8_t>::min())
5233 .qmax(std::numeric_limits<uint8_t>::max())
5234 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5235 }
5236 }
5237
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4,batch_gt_4)5238 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4, batch_gt_4) {
5239 for (size_t batch_size = 5; batch_size < 8; batch_size++) {
5240 VCvtMicrokernelTester()
5241 .batch_size(batch_size)
5242 .qmin(std::numeric_limits<uint8_t>::min())
5243 .qmax(std::numeric_limits<uint8_t>::max())
5244 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5245 }
5246 }
5247
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4,scale)5248 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4, scale) {
5249 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5250 VCvtMicrokernelTester()
5251 .batch_size(batch_size)
5252 .scale(50)
5253 .output_zero_point(100)
5254 .qmin(std::numeric_limits<uint8_t>::min())
5255 .qmax(std::numeric_limits<uint8_t>::max())
5256 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5257 }
5258 }
5259
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4,output_zero_point)5260 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4, output_zero_point) {
5261 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
5262 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5263 VCvtMicrokernelTester()
5264 .batch_size(batch_size)
5265 .output_zero_point(output_zero_point)
5266 .qmin(std::numeric_limits<uint8_t>::min())
5267 .qmax(std::numeric_limits<uint8_t>::max())
5268 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5269 }
5270 }
5271 }
5272
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4,saturation)5273 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4, saturation) {
5274 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5275 VCvtMicrokernelTester()
5276 .batch_size(batch_size)
5277 .scale(500)
5278 .output_zero_point(128)
5279 .qmin(std::numeric_limits<uint8_t>::min())
5280 .qmax(std::numeric_limits<uint8_t>::max())
5281 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5282 }
5283 }
5284
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4,overflow)5285 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4, overflow) {
5286 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5287 VCvtMicrokernelTester()
5288 .batch_size(batch_size)
5289 .scale(4294967296.0f)
5290 .qmin(std::numeric_limits<uint8_t>::min())
5291 .qmax(std::numeric_limits<uint8_t>::max())
5292 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5293 }
5294 }
5295
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4,qmin)5296 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4, qmin) {
5297 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
5298 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5299 VCvtMicrokernelTester()
5300 .batch_size(batch_size)
5301 .scale(500)
5302 .output_zero_point(128)
5303 .qmin(qmin)
5304 .qmax(std::numeric_limits<uint8_t>::max())
5305 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5306 }
5307 }
5308 }
5309
TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4,qmax)5310 TEST(F32_QU8_VCVT__SCALAR_IMAGIC_X4, qmax) {
5311 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
5312 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5313 VCvtMicrokernelTester()
5314 .batch_size(batch_size)
5315 .scale(500)
5316 .output_zero_point(128)
5317 .qmin(std::numeric_limits<uint8_t>::min())
5318 .qmax(qmax)
5319 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_imagic_x4, xnn_init_f32_qu8_cvt_scalar_imagic_params);
5320 }
5321 }
5322 }
5323
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X1,batch_eq_1)5324 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X1, batch_eq_1) {
5325 VCvtMicrokernelTester()
5326 .batch_size(1)
5327 .qmin(std::numeric_limits<uint8_t>::min())
5328 .qmax(std::numeric_limits<uint8_t>::max())
5329 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x1, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5330 }
5331
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X1,batch_gt_1)5332 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X1, batch_gt_1) {
5333 for (size_t batch_size = 2; batch_size < 10; batch_size++) {
5334 VCvtMicrokernelTester()
5335 .batch_size(batch_size)
5336 .qmin(std::numeric_limits<uint8_t>::min())
5337 .qmax(std::numeric_limits<uint8_t>::max())
5338 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x1, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5339 }
5340 }
5341
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X1,scale)5342 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X1, scale) {
5343 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5344 VCvtMicrokernelTester()
5345 .batch_size(batch_size)
5346 .scale(50)
5347 .output_zero_point(100)
5348 .qmin(std::numeric_limits<uint8_t>::min())
5349 .qmax(std::numeric_limits<uint8_t>::max())
5350 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x1, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5351 }
5352 }
5353
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X1,output_zero_point)5354 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X1, output_zero_point) {
5355 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
5356 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5357 VCvtMicrokernelTester()
5358 .batch_size(batch_size)
5359 .output_zero_point(output_zero_point)
5360 .qmin(std::numeric_limits<uint8_t>::min())
5361 .qmax(std::numeric_limits<uint8_t>::max())
5362 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x1, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5363 }
5364 }
5365 }
5366
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X1,saturation)5367 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X1, saturation) {
5368 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5369 VCvtMicrokernelTester()
5370 .batch_size(batch_size)
5371 .scale(500)
5372 .output_zero_point(128)
5373 .qmin(std::numeric_limits<uint8_t>::min())
5374 .qmax(std::numeric_limits<uint8_t>::max())
5375 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x1, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5376 }
5377 }
5378
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X1,overflow)5379 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X1, overflow) {
5380 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5381 VCvtMicrokernelTester()
5382 .batch_size(batch_size)
5383 .scale(4294967296.0f)
5384 .qmin(std::numeric_limits<uint8_t>::min())
5385 .qmax(std::numeric_limits<uint8_t>::max())
5386 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x1, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5387 }
5388 }
5389
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X1,qmin)5390 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X1, qmin) {
5391 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
5392 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5393 VCvtMicrokernelTester()
5394 .batch_size(batch_size)
5395 .scale(500)
5396 .output_zero_point(128)
5397 .qmin(qmin)
5398 .qmax(std::numeric_limits<uint8_t>::max())
5399 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x1, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5400 }
5401 }
5402 }
5403
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X1,qmax)5404 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X1, qmax) {
5405 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
5406 for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
5407 VCvtMicrokernelTester()
5408 .batch_size(batch_size)
5409 .scale(500)
5410 .output_zero_point(128)
5411 .qmin(std::numeric_limits<uint8_t>::min())
5412 .qmax(qmax)
5413 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x1, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5414 }
5415 }
5416 }
5417
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2,batch_eq_2)5418 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2, batch_eq_2) {
5419 VCvtMicrokernelTester()
5420 .batch_size(2)
5421 .qmin(std::numeric_limits<uint8_t>::min())
5422 .qmax(std::numeric_limits<uint8_t>::max())
5423 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5424 }
5425
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2,batch_div_2)5426 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2, batch_div_2) {
5427 for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
5428 VCvtMicrokernelTester()
5429 .batch_size(batch_size)
5430 .qmin(std::numeric_limits<uint8_t>::min())
5431 .qmax(std::numeric_limits<uint8_t>::max())
5432 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5433 }
5434 }
5435
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2,batch_lt_2)5436 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2, batch_lt_2) {
5437 for (size_t batch_size = 1; batch_size < 2; batch_size++) {
5438 VCvtMicrokernelTester()
5439 .batch_size(batch_size)
5440 .qmin(std::numeric_limits<uint8_t>::min())
5441 .qmax(std::numeric_limits<uint8_t>::max())
5442 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5443 }
5444 }
5445
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2,batch_gt_2)5446 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2, batch_gt_2) {
5447 for (size_t batch_size = 3; batch_size < 4; batch_size++) {
5448 VCvtMicrokernelTester()
5449 .batch_size(batch_size)
5450 .qmin(std::numeric_limits<uint8_t>::min())
5451 .qmax(std::numeric_limits<uint8_t>::max())
5452 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5453 }
5454 }
5455
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2,scale)5456 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2, scale) {
5457 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5458 VCvtMicrokernelTester()
5459 .batch_size(batch_size)
5460 .scale(50)
5461 .output_zero_point(100)
5462 .qmin(std::numeric_limits<uint8_t>::min())
5463 .qmax(std::numeric_limits<uint8_t>::max())
5464 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5465 }
5466 }
5467
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2,output_zero_point)5468 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2, output_zero_point) {
5469 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
5470 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5471 VCvtMicrokernelTester()
5472 .batch_size(batch_size)
5473 .output_zero_point(output_zero_point)
5474 .qmin(std::numeric_limits<uint8_t>::min())
5475 .qmax(std::numeric_limits<uint8_t>::max())
5476 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5477 }
5478 }
5479 }
5480
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2,saturation)5481 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2, saturation) {
5482 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5483 VCvtMicrokernelTester()
5484 .batch_size(batch_size)
5485 .scale(500)
5486 .output_zero_point(128)
5487 .qmin(std::numeric_limits<uint8_t>::min())
5488 .qmax(std::numeric_limits<uint8_t>::max())
5489 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5490 }
5491 }
5492
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2,overflow)5493 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2, overflow) {
5494 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5495 VCvtMicrokernelTester()
5496 .batch_size(batch_size)
5497 .scale(4294967296.0f)
5498 .qmin(std::numeric_limits<uint8_t>::min())
5499 .qmax(std::numeric_limits<uint8_t>::max())
5500 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5501 }
5502 }
5503
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2,qmin)5504 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2, qmin) {
5505 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
5506 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5507 VCvtMicrokernelTester()
5508 .batch_size(batch_size)
5509 .scale(500)
5510 .output_zero_point(128)
5511 .qmin(qmin)
5512 .qmax(std::numeric_limits<uint8_t>::max())
5513 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5514 }
5515 }
5516 }
5517
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2,qmax)5518 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X2, qmax) {
5519 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
5520 for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
5521 VCvtMicrokernelTester()
5522 .batch_size(batch_size)
5523 .scale(500)
5524 .output_zero_point(128)
5525 .qmin(std::numeric_limits<uint8_t>::min())
5526 .qmax(qmax)
5527 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x2, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5528 }
5529 }
5530 }
5531
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3,batch_eq_3)5532 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3, batch_eq_3) {
5533 VCvtMicrokernelTester()
5534 .batch_size(3)
5535 .qmin(std::numeric_limits<uint8_t>::min())
5536 .qmax(std::numeric_limits<uint8_t>::max())
5537 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5538 }
5539
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3,batch_div_3)5540 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3, batch_div_3) {
5541 for (size_t batch_size = 6; batch_size < 30; batch_size += 3) {
5542 VCvtMicrokernelTester()
5543 .batch_size(batch_size)
5544 .qmin(std::numeric_limits<uint8_t>::min())
5545 .qmax(std::numeric_limits<uint8_t>::max())
5546 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5547 }
5548 }
5549
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3,batch_lt_3)5550 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3, batch_lt_3) {
5551 for (size_t batch_size = 1; batch_size < 3; batch_size++) {
5552 VCvtMicrokernelTester()
5553 .batch_size(batch_size)
5554 .qmin(std::numeric_limits<uint8_t>::min())
5555 .qmax(std::numeric_limits<uint8_t>::max())
5556 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5557 }
5558 }
5559
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3,batch_gt_3)5560 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3, batch_gt_3) {
5561 for (size_t batch_size = 4; batch_size < 6; batch_size++) {
5562 VCvtMicrokernelTester()
5563 .batch_size(batch_size)
5564 .qmin(std::numeric_limits<uint8_t>::min())
5565 .qmax(std::numeric_limits<uint8_t>::max())
5566 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5567 }
5568 }
5569
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3,scale)5570 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3, scale) {
5571 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5572 VCvtMicrokernelTester()
5573 .batch_size(batch_size)
5574 .scale(50)
5575 .output_zero_point(100)
5576 .qmin(std::numeric_limits<uint8_t>::min())
5577 .qmax(std::numeric_limits<uint8_t>::max())
5578 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5579 }
5580 }
5581
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3,output_zero_point)5582 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3, output_zero_point) {
5583 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
5584 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5585 VCvtMicrokernelTester()
5586 .batch_size(batch_size)
5587 .output_zero_point(output_zero_point)
5588 .qmin(std::numeric_limits<uint8_t>::min())
5589 .qmax(std::numeric_limits<uint8_t>::max())
5590 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5591 }
5592 }
5593 }
5594
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3,saturation)5595 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3, saturation) {
5596 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5597 VCvtMicrokernelTester()
5598 .batch_size(batch_size)
5599 .scale(500)
5600 .output_zero_point(128)
5601 .qmin(std::numeric_limits<uint8_t>::min())
5602 .qmax(std::numeric_limits<uint8_t>::max())
5603 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5604 }
5605 }
5606
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3,overflow)5607 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3, overflow) {
5608 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5609 VCvtMicrokernelTester()
5610 .batch_size(batch_size)
5611 .scale(4294967296.0f)
5612 .qmin(std::numeric_limits<uint8_t>::min())
5613 .qmax(std::numeric_limits<uint8_t>::max())
5614 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5615 }
5616 }
5617
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3,qmin)5618 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3, qmin) {
5619 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
5620 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5621 VCvtMicrokernelTester()
5622 .batch_size(batch_size)
5623 .scale(500)
5624 .output_zero_point(128)
5625 .qmin(qmin)
5626 .qmax(std::numeric_limits<uint8_t>::max())
5627 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5628 }
5629 }
5630 }
5631
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3,qmax)5632 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X3, qmax) {
5633 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
5634 for (size_t batch_size = 1; batch_size <= 15; batch_size += 2) {
5635 VCvtMicrokernelTester()
5636 .batch_size(batch_size)
5637 .scale(500)
5638 .output_zero_point(128)
5639 .qmin(std::numeric_limits<uint8_t>::min())
5640 .qmax(qmax)
5641 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x3, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5642 }
5643 }
5644 }
5645
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4,batch_eq_4)5646 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4, batch_eq_4) {
5647 VCvtMicrokernelTester()
5648 .batch_size(4)
5649 .qmin(std::numeric_limits<uint8_t>::min())
5650 .qmax(std::numeric_limits<uint8_t>::max())
5651 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5652 }
5653
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4,batch_div_4)5654 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4, batch_div_4) {
5655 for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
5656 VCvtMicrokernelTester()
5657 .batch_size(batch_size)
5658 .qmin(std::numeric_limits<uint8_t>::min())
5659 .qmax(std::numeric_limits<uint8_t>::max())
5660 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5661 }
5662 }
5663
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4,batch_lt_4)5664 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4, batch_lt_4) {
5665 for (size_t batch_size = 1; batch_size < 4; batch_size++) {
5666 VCvtMicrokernelTester()
5667 .batch_size(batch_size)
5668 .qmin(std::numeric_limits<uint8_t>::min())
5669 .qmax(std::numeric_limits<uint8_t>::max())
5670 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5671 }
5672 }
5673
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4,batch_gt_4)5674 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4, batch_gt_4) {
5675 for (size_t batch_size = 5; batch_size < 8; batch_size++) {
5676 VCvtMicrokernelTester()
5677 .batch_size(batch_size)
5678 .qmin(std::numeric_limits<uint8_t>::min())
5679 .qmax(std::numeric_limits<uint8_t>::max())
5680 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5681 }
5682 }
5683
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4,scale)5684 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4, scale) {
5685 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5686 VCvtMicrokernelTester()
5687 .batch_size(batch_size)
5688 .scale(50)
5689 .output_zero_point(100)
5690 .qmin(std::numeric_limits<uint8_t>::min())
5691 .qmax(std::numeric_limits<uint8_t>::max())
5692 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5693 }
5694 }
5695
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4,output_zero_point)5696 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4, output_zero_point) {
5697 for (int16_t output_zero_point = 0; output_zero_point < 5; output_zero_point += 2) {
5698 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5699 VCvtMicrokernelTester()
5700 .batch_size(batch_size)
5701 .output_zero_point(output_zero_point)
5702 .qmin(std::numeric_limits<uint8_t>::min())
5703 .qmax(std::numeric_limits<uint8_t>::max())
5704 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5705 }
5706 }
5707 }
5708
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4,saturation)5709 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4, saturation) {
5710 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5711 VCvtMicrokernelTester()
5712 .batch_size(batch_size)
5713 .scale(500)
5714 .output_zero_point(128)
5715 .qmin(std::numeric_limits<uint8_t>::min())
5716 .qmax(std::numeric_limits<uint8_t>::max())
5717 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5718 }
5719 }
5720
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4,overflow)5721 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4, overflow) {
5722 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5723 VCvtMicrokernelTester()
5724 .batch_size(batch_size)
5725 .scale(4294967296.0f)
5726 .qmin(std::numeric_limits<uint8_t>::min())
5727 .qmax(std::numeric_limits<uint8_t>::max())
5728 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5729 }
5730 }
5731
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4,qmin)5732 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4, qmin) {
5733 for (int16_t qmin = 0; qmin < 255; qmin += 51) {
5734 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5735 VCvtMicrokernelTester()
5736 .batch_size(batch_size)
5737 .scale(500)
5738 .output_zero_point(128)
5739 .qmin(qmin)
5740 .qmax(std::numeric_limits<uint8_t>::max())
5741 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5742 }
5743 }
5744 }
5745
TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4,qmax)5746 TEST(F32_QU8_VCVT__SCALAR_LRINTF_X4, qmax) {
5747 for (int16_t qmax = 1; qmax <= 255; qmax += 51) {
5748 for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
5749 VCvtMicrokernelTester()
5750 .batch_size(batch_size)
5751 .scale(500)
5752 .output_zero_point(128)
5753 .qmin(std::numeric_limits<uint8_t>::min())
5754 .qmax(qmax)
5755 .Test(xnn_f32_qu8_vcvt_ukernel__scalar_lrintf_x4, xnn_init_f32_qu8_cvt_scalar_lrintf_params);
5756 }
5757 }
5758 }