xref: /aosp_15_r20/external/XNNPACK/test/f32-vlrelu.cc (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1 // Copyright 2019 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-vlrelu.yaml
8 //   Generator: tools/generate-vunary-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/vunary.h>
17 #include "vunary-microkernel-tester.h"
18 
19 
20 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_VLRELU__NEON_X4,batch_eq_4)21   TEST(F32_VLRELU__NEON_X4, batch_eq_4) {
22     TEST_REQUIRES_ARM_NEON;
23     VUnaryMicrokernelTester()
24       .batch_size(4)
25       .Test(xnn_f32_vlrelu_ukernel__neon_x4, xnn_init_f32_lrelu_scalar_params);
26   }
27 
TEST(F32_VLRELU__NEON_X4,batch_div_4)28   TEST(F32_VLRELU__NEON_X4, batch_div_4) {
29     TEST_REQUIRES_ARM_NEON;
30     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
31       VUnaryMicrokernelTester()
32         .batch_size(batch_size)
33         .Test(xnn_f32_vlrelu_ukernel__neon_x4, xnn_init_f32_lrelu_scalar_params);
34     }
35   }
36 
TEST(F32_VLRELU__NEON_X4,batch_lt_4)37   TEST(F32_VLRELU__NEON_X4, batch_lt_4) {
38     TEST_REQUIRES_ARM_NEON;
39     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
40       VUnaryMicrokernelTester()
41         .batch_size(batch_size)
42         .Test(xnn_f32_vlrelu_ukernel__neon_x4, xnn_init_f32_lrelu_scalar_params);
43     }
44   }
45 
TEST(F32_VLRELU__NEON_X4,batch_gt_4)46   TEST(F32_VLRELU__NEON_X4, batch_gt_4) {
47     TEST_REQUIRES_ARM_NEON;
48     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
49       VUnaryMicrokernelTester()
50         .batch_size(batch_size)
51         .Test(xnn_f32_vlrelu_ukernel__neon_x4, xnn_init_f32_lrelu_scalar_params);
52     }
53   }
54 
TEST(F32_VLRELU__NEON_X4,inplace)55   TEST(F32_VLRELU__NEON_X4, inplace) {
56     TEST_REQUIRES_ARM_NEON;
57     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
58       VUnaryMicrokernelTester()
59         .batch_size(batch_size)
60         .inplace(true)
61         .Test(xnn_f32_vlrelu_ukernel__neon_x4, xnn_init_f32_lrelu_scalar_params);
62     }
63   }
64 
TEST(F32_VLRELU__NEON_X4,slope)65   TEST(F32_VLRELU__NEON_X4, slope) {
66     TEST_REQUIRES_ARM_NEON;
67     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
68       for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
69         VUnaryMicrokernelTester()
70           .batch_size(batch_size)
71           .slope(slope)
72           .Test(xnn_f32_vlrelu_ukernel__neon_x4, xnn_init_f32_lrelu_scalar_params);
73       }
74     }
75   }
76 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
77 
78 
79 #if XNN_ARCH_ARM || XNN_ARCH_ARM64
TEST(F32_VLRELU__NEON_X8,batch_eq_8)80   TEST(F32_VLRELU__NEON_X8, batch_eq_8) {
81     TEST_REQUIRES_ARM_NEON;
82     VUnaryMicrokernelTester()
83       .batch_size(8)
84       .Test(xnn_f32_vlrelu_ukernel__neon_x8, xnn_init_f32_lrelu_scalar_params);
85   }
86 
TEST(F32_VLRELU__NEON_X8,batch_div_8)87   TEST(F32_VLRELU__NEON_X8, batch_div_8) {
88     TEST_REQUIRES_ARM_NEON;
89     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
90       VUnaryMicrokernelTester()
91         .batch_size(batch_size)
92         .Test(xnn_f32_vlrelu_ukernel__neon_x8, xnn_init_f32_lrelu_scalar_params);
93     }
94   }
95 
TEST(F32_VLRELU__NEON_X8,batch_lt_8)96   TEST(F32_VLRELU__NEON_X8, batch_lt_8) {
97     TEST_REQUIRES_ARM_NEON;
98     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
99       VUnaryMicrokernelTester()
100         .batch_size(batch_size)
101         .Test(xnn_f32_vlrelu_ukernel__neon_x8, xnn_init_f32_lrelu_scalar_params);
102     }
103   }
104 
TEST(F32_VLRELU__NEON_X8,batch_gt_8)105   TEST(F32_VLRELU__NEON_X8, batch_gt_8) {
106     TEST_REQUIRES_ARM_NEON;
107     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
108       VUnaryMicrokernelTester()
109         .batch_size(batch_size)
110         .Test(xnn_f32_vlrelu_ukernel__neon_x8, xnn_init_f32_lrelu_scalar_params);
111     }
112   }
113 
TEST(F32_VLRELU__NEON_X8,inplace)114   TEST(F32_VLRELU__NEON_X8, inplace) {
115     TEST_REQUIRES_ARM_NEON;
116     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
117       VUnaryMicrokernelTester()
118         .batch_size(batch_size)
119         .inplace(true)
120         .Test(xnn_f32_vlrelu_ukernel__neon_x8, xnn_init_f32_lrelu_scalar_params);
121     }
122   }
123 
TEST(F32_VLRELU__NEON_X8,slope)124   TEST(F32_VLRELU__NEON_X8, slope) {
125     TEST_REQUIRES_ARM_NEON;
126     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
127       for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
128         VUnaryMicrokernelTester()
129           .batch_size(batch_size)
130           .slope(slope)
131           .Test(xnn_f32_vlrelu_ukernel__neon_x8, xnn_init_f32_lrelu_scalar_params);
132       }
133     }
134   }
135 #endif  // XNN_ARCH_ARM || XNN_ARCH_ARM64
136 
137 
138 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VLRELU__SSE_X4,batch_eq_4)139   TEST(F32_VLRELU__SSE_X4, batch_eq_4) {
140     TEST_REQUIRES_X86_SSE;
141     VUnaryMicrokernelTester()
142       .batch_size(4)
143       .Test(xnn_f32_vlrelu_ukernel__sse_x4, xnn_init_f32_lrelu_sse_params);
144   }
145 
TEST(F32_VLRELU__SSE_X4,batch_div_4)146   TEST(F32_VLRELU__SSE_X4, batch_div_4) {
147     TEST_REQUIRES_X86_SSE;
148     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
149       VUnaryMicrokernelTester()
150         .batch_size(batch_size)
151         .Test(xnn_f32_vlrelu_ukernel__sse_x4, xnn_init_f32_lrelu_sse_params);
152     }
153   }
154 
TEST(F32_VLRELU__SSE_X4,batch_lt_4)155   TEST(F32_VLRELU__SSE_X4, batch_lt_4) {
156     TEST_REQUIRES_X86_SSE;
157     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
158       VUnaryMicrokernelTester()
159         .batch_size(batch_size)
160         .Test(xnn_f32_vlrelu_ukernel__sse_x4, xnn_init_f32_lrelu_sse_params);
161     }
162   }
163 
TEST(F32_VLRELU__SSE_X4,batch_gt_4)164   TEST(F32_VLRELU__SSE_X4, batch_gt_4) {
165     TEST_REQUIRES_X86_SSE;
166     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
167       VUnaryMicrokernelTester()
168         .batch_size(batch_size)
169         .Test(xnn_f32_vlrelu_ukernel__sse_x4, xnn_init_f32_lrelu_sse_params);
170     }
171   }
172 
TEST(F32_VLRELU__SSE_X4,inplace)173   TEST(F32_VLRELU__SSE_X4, inplace) {
174     TEST_REQUIRES_X86_SSE;
175     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
176       VUnaryMicrokernelTester()
177         .batch_size(batch_size)
178         .inplace(true)
179         .Test(xnn_f32_vlrelu_ukernel__sse_x4, xnn_init_f32_lrelu_sse_params);
180     }
181   }
182 
TEST(F32_VLRELU__SSE_X4,slope)183   TEST(F32_VLRELU__SSE_X4, slope) {
184     TEST_REQUIRES_X86_SSE;
185     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
186       for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
187         VUnaryMicrokernelTester()
188           .batch_size(batch_size)
189           .slope(slope)
190           .Test(xnn_f32_vlrelu_ukernel__sse_x4, xnn_init_f32_lrelu_sse_params);
191       }
192     }
193   }
194 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
195 
196 
197 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VLRELU__SSE_X8,batch_eq_8)198   TEST(F32_VLRELU__SSE_X8, batch_eq_8) {
199     TEST_REQUIRES_X86_SSE;
200     VUnaryMicrokernelTester()
201       .batch_size(8)
202       .Test(xnn_f32_vlrelu_ukernel__sse_x8, xnn_init_f32_lrelu_sse_params);
203   }
204 
TEST(F32_VLRELU__SSE_X8,batch_div_8)205   TEST(F32_VLRELU__SSE_X8, batch_div_8) {
206     TEST_REQUIRES_X86_SSE;
207     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
208       VUnaryMicrokernelTester()
209         .batch_size(batch_size)
210         .Test(xnn_f32_vlrelu_ukernel__sse_x8, xnn_init_f32_lrelu_sse_params);
211     }
212   }
213 
TEST(F32_VLRELU__SSE_X8,batch_lt_8)214   TEST(F32_VLRELU__SSE_X8, batch_lt_8) {
215     TEST_REQUIRES_X86_SSE;
216     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
217       VUnaryMicrokernelTester()
218         .batch_size(batch_size)
219         .Test(xnn_f32_vlrelu_ukernel__sse_x8, xnn_init_f32_lrelu_sse_params);
220     }
221   }
222 
TEST(F32_VLRELU__SSE_X8,batch_gt_8)223   TEST(F32_VLRELU__SSE_X8, batch_gt_8) {
224     TEST_REQUIRES_X86_SSE;
225     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
226       VUnaryMicrokernelTester()
227         .batch_size(batch_size)
228         .Test(xnn_f32_vlrelu_ukernel__sse_x8, xnn_init_f32_lrelu_sse_params);
229     }
230   }
231 
TEST(F32_VLRELU__SSE_X8,inplace)232   TEST(F32_VLRELU__SSE_X8, inplace) {
233     TEST_REQUIRES_X86_SSE;
234     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
235       VUnaryMicrokernelTester()
236         .batch_size(batch_size)
237         .inplace(true)
238         .Test(xnn_f32_vlrelu_ukernel__sse_x8, xnn_init_f32_lrelu_sse_params);
239     }
240   }
241 
TEST(F32_VLRELU__SSE_X8,slope)242   TEST(F32_VLRELU__SSE_X8, slope) {
243     TEST_REQUIRES_X86_SSE;
244     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
245       for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
246         VUnaryMicrokernelTester()
247           .batch_size(batch_size)
248           .slope(slope)
249           .Test(xnn_f32_vlrelu_ukernel__sse_x8, xnn_init_f32_lrelu_sse_params);
250       }
251     }
252   }
253 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
254 
255 
256 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VLRELU__SSE2_X4,batch_eq_4)257   TEST(F32_VLRELU__SSE2_X4, batch_eq_4) {
258     TEST_REQUIRES_X86_SSE2;
259     VUnaryMicrokernelTester()
260       .batch_size(4)
261       .Test(xnn_f32_vlrelu_ukernel__sse2_x4, xnn_init_f32_lrelu_sse_params);
262   }
263 
TEST(F32_VLRELU__SSE2_X4,batch_div_4)264   TEST(F32_VLRELU__SSE2_X4, batch_div_4) {
265     TEST_REQUIRES_X86_SSE2;
266     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
267       VUnaryMicrokernelTester()
268         .batch_size(batch_size)
269         .Test(xnn_f32_vlrelu_ukernel__sse2_x4, xnn_init_f32_lrelu_sse_params);
270     }
271   }
272 
TEST(F32_VLRELU__SSE2_X4,batch_lt_4)273   TEST(F32_VLRELU__SSE2_X4, batch_lt_4) {
274     TEST_REQUIRES_X86_SSE2;
275     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
276       VUnaryMicrokernelTester()
277         .batch_size(batch_size)
278         .Test(xnn_f32_vlrelu_ukernel__sse2_x4, xnn_init_f32_lrelu_sse_params);
279     }
280   }
281 
TEST(F32_VLRELU__SSE2_X4,batch_gt_4)282   TEST(F32_VLRELU__SSE2_X4, batch_gt_4) {
283     TEST_REQUIRES_X86_SSE2;
284     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
285       VUnaryMicrokernelTester()
286         .batch_size(batch_size)
287         .Test(xnn_f32_vlrelu_ukernel__sse2_x4, xnn_init_f32_lrelu_sse_params);
288     }
289   }
290 
TEST(F32_VLRELU__SSE2_X4,inplace)291   TEST(F32_VLRELU__SSE2_X4, inplace) {
292     TEST_REQUIRES_X86_SSE2;
293     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
294       VUnaryMicrokernelTester()
295         .batch_size(batch_size)
296         .inplace(true)
297         .Test(xnn_f32_vlrelu_ukernel__sse2_x4, xnn_init_f32_lrelu_sse_params);
298     }
299   }
300 
TEST(F32_VLRELU__SSE2_X4,slope)301   TEST(F32_VLRELU__SSE2_X4, slope) {
302     TEST_REQUIRES_X86_SSE2;
303     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
304       for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
305         VUnaryMicrokernelTester()
306           .batch_size(batch_size)
307           .slope(slope)
308           .Test(xnn_f32_vlrelu_ukernel__sse2_x4, xnn_init_f32_lrelu_sse_params);
309       }
310     }
311   }
312 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
313 
314 
315 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VLRELU__SSE2_X8,batch_eq_8)316   TEST(F32_VLRELU__SSE2_X8, batch_eq_8) {
317     TEST_REQUIRES_X86_SSE2;
318     VUnaryMicrokernelTester()
319       .batch_size(8)
320       .Test(xnn_f32_vlrelu_ukernel__sse2_x8, xnn_init_f32_lrelu_sse_params);
321   }
322 
TEST(F32_VLRELU__SSE2_X8,batch_div_8)323   TEST(F32_VLRELU__SSE2_X8, batch_div_8) {
324     TEST_REQUIRES_X86_SSE2;
325     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
326       VUnaryMicrokernelTester()
327         .batch_size(batch_size)
328         .Test(xnn_f32_vlrelu_ukernel__sse2_x8, xnn_init_f32_lrelu_sse_params);
329     }
330   }
331 
TEST(F32_VLRELU__SSE2_X8,batch_lt_8)332   TEST(F32_VLRELU__SSE2_X8, batch_lt_8) {
333     TEST_REQUIRES_X86_SSE2;
334     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
335       VUnaryMicrokernelTester()
336         .batch_size(batch_size)
337         .Test(xnn_f32_vlrelu_ukernel__sse2_x8, xnn_init_f32_lrelu_sse_params);
338     }
339   }
340 
TEST(F32_VLRELU__SSE2_X8,batch_gt_8)341   TEST(F32_VLRELU__SSE2_X8, batch_gt_8) {
342     TEST_REQUIRES_X86_SSE2;
343     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
344       VUnaryMicrokernelTester()
345         .batch_size(batch_size)
346         .Test(xnn_f32_vlrelu_ukernel__sse2_x8, xnn_init_f32_lrelu_sse_params);
347     }
348   }
349 
TEST(F32_VLRELU__SSE2_X8,inplace)350   TEST(F32_VLRELU__SSE2_X8, inplace) {
351     TEST_REQUIRES_X86_SSE2;
352     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
353       VUnaryMicrokernelTester()
354         .batch_size(batch_size)
355         .inplace(true)
356         .Test(xnn_f32_vlrelu_ukernel__sse2_x8, xnn_init_f32_lrelu_sse_params);
357     }
358   }
359 
TEST(F32_VLRELU__SSE2_X8,slope)360   TEST(F32_VLRELU__SSE2_X8, slope) {
361     TEST_REQUIRES_X86_SSE2;
362     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
363       for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
364         VUnaryMicrokernelTester()
365           .batch_size(batch_size)
366           .slope(slope)
367           .Test(xnn_f32_vlrelu_ukernel__sse2_x8, xnn_init_f32_lrelu_sse_params);
368       }
369     }
370   }
371 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
372 
373 
374 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VLRELU__SSE41_X4,batch_eq_4)375   TEST(F32_VLRELU__SSE41_X4, batch_eq_4) {
376     TEST_REQUIRES_X86_SSE41;
377     VUnaryMicrokernelTester()
378       .batch_size(4)
379       .Test(xnn_f32_vlrelu_ukernel__sse41_x4, xnn_init_f32_lrelu_sse_params);
380   }
381 
TEST(F32_VLRELU__SSE41_X4,batch_div_4)382   TEST(F32_VLRELU__SSE41_X4, batch_div_4) {
383     TEST_REQUIRES_X86_SSE41;
384     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
385       VUnaryMicrokernelTester()
386         .batch_size(batch_size)
387         .Test(xnn_f32_vlrelu_ukernel__sse41_x4, xnn_init_f32_lrelu_sse_params);
388     }
389   }
390 
TEST(F32_VLRELU__SSE41_X4,batch_lt_4)391   TEST(F32_VLRELU__SSE41_X4, batch_lt_4) {
392     TEST_REQUIRES_X86_SSE41;
393     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
394       VUnaryMicrokernelTester()
395         .batch_size(batch_size)
396         .Test(xnn_f32_vlrelu_ukernel__sse41_x4, xnn_init_f32_lrelu_sse_params);
397     }
398   }
399 
TEST(F32_VLRELU__SSE41_X4,batch_gt_4)400   TEST(F32_VLRELU__SSE41_X4, batch_gt_4) {
401     TEST_REQUIRES_X86_SSE41;
402     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
403       VUnaryMicrokernelTester()
404         .batch_size(batch_size)
405         .Test(xnn_f32_vlrelu_ukernel__sse41_x4, xnn_init_f32_lrelu_sse_params);
406     }
407   }
408 
TEST(F32_VLRELU__SSE41_X4,inplace)409   TEST(F32_VLRELU__SSE41_X4, inplace) {
410     TEST_REQUIRES_X86_SSE41;
411     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
412       VUnaryMicrokernelTester()
413         .batch_size(batch_size)
414         .inplace(true)
415         .Test(xnn_f32_vlrelu_ukernel__sse41_x4, xnn_init_f32_lrelu_sse_params);
416     }
417   }
418 
TEST(F32_VLRELU__SSE41_X4,slope)419   TEST(F32_VLRELU__SSE41_X4, slope) {
420     TEST_REQUIRES_X86_SSE41;
421     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
422       for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
423         VUnaryMicrokernelTester()
424           .batch_size(batch_size)
425           .slope(slope)
426           .Test(xnn_f32_vlrelu_ukernel__sse41_x4, xnn_init_f32_lrelu_sse_params);
427       }
428     }
429   }
430 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
431 
432 
433 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VLRELU__SSE41_X8,batch_eq_8)434   TEST(F32_VLRELU__SSE41_X8, batch_eq_8) {
435     TEST_REQUIRES_X86_SSE41;
436     VUnaryMicrokernelTester()
437       .batch_size(8)
438       .Test(xnn_f32_vlrelu_ukernel__sse41_x8, xnn_init_f32_lrelu_sse_params);
439   }
440 
TEST(F32_VLRELU__SSE41_X8,batch_div_8)441   TEST(F32_VLRELU__SSE41_X8, batch_div_8) {
442     TEST_REQUIRES_X86_SSE41;
443     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
444       VUnaryMicrokernelTester()
445         .batch_size(batch_size)
446         .Test(xnn_f32_vlrelu_ukernel__sse41_x8, xnn_init_f32_lrelu_sse_params);
447     }
448   }
449 
TEST(F32_VLRELU__SSE41_X8,batch_lt_8)450   TEST(F32_VLRELU__SSE41_X8, batch_lt_8) {
451     TEST_REQUIRES_X86_SSE41;
452     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
453       VUnaryMicrokernelTester()
454         .batch_size(batch_size)
455         .Test(xnn_f32_vlrelu_ukernel__sse41_x8, xnn_init_f32_lrelu_sse_params);
456     }
457   }
458 
TEST(F32_VLRELU__SSE41_X8,batch_gt_8)459   TEST(F32_VLRELU__SSE41_X8, batch_gt_8) {
460     TEST_REQUIRES_X86_SSE41;
461     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
462       VUnaryMicrokernelTester()
463         .batch_size(batch_size)
464         .Test(xnn_f32_vlrelu_ukernel__sse41_x8, xnn_init_f32_lrelu_sse_params);
465     }
466   }
467 
TEST(F32_VLRELU__SSE41_X8,inplace)468   TEST(F32_VLRELU__SSE41_X8, inplace) {
469     TEST_REQUIRES_X86_SSE41;
470     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
471       VUnaryMicrokernelTester()
472         .batch_size(batch_size)
473         .inplace(true)
474         .Test(xnn_f32_vlrelu_ukernel__sse41_x8, xnn_init_f32_lrelu_sse_params);
475     }
476   }
477 
TEST(F32_VLRELU__SSE41_X8,slope)478   TEST(F32_VLRELU__SSE41_X8, slope) {
479     TEST_REQUIRES_X86_SSE41;
480     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
481       for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
482         VUnaryMicrokernelTester()
483           .batch_size(batch_size)
484           .slope(slope)
485           .Test(xnn_f32_vlrelu_ukernel__sse41_x8, xnn_init_f32_lrelu_sse_params);
486       }
487     }
488   }
489 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
490 
491 
492 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VLRELU__AVX_X8,batch_eq_8)493   TEST(F32_VLRELU__AVX_X8, batch_eq_8) {
494     TEST_REQUIRES_X86_AVX;
495     VUnaryMicrokernelTester()
496       .batch_size(8)
497       .Test(xnn_f32_vlrelu_ukernel__avx_x8, xnn_init_f32_lrelu_avx_params);
498   }
499 
TEST(F32_VLRELU__AVX_X8,batch_div_8)500   TEST(F32_VLRELU__AVX_X8, batch_div_8) {
501     TEST_REQUIRES_X86_AVX;
502     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
503       VUnaryMicrokernelTester()
504         .batch_size(batch_size)
505         .Test(xnn_f32_vlrelu_ukernel__avx_x8, xnn_init_f32_lrelu_avx_params);
506     }
507   }
508 
TEST(F32_VLRELU__AVX_X8,batch_lt_8)509   TEST(F32_VLRELU__AVX_X8, batch_lt_8) {
510     TEST_REQUIRES_X86_AVX;
511     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
512       VUnaryMicrokernelTester()
513         .batch_size(batch_size)
514         .Test(xnn_f32_vlrelu_ukernel__avx_x8, xnn_init_f32_lrelu_avx_params);
515     }
516   }
517 
TEST(F32_VLRELU__AVX_X8,batch_gt_8)518   TEST(F32_VLRELU__AVX_X8, batch_gt_8) {
519     TEST_REQUIRES_X86_AVX;
520     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
521       VUnaryMicrokernelTester()
522         .batch_size(batch_size)
523         .Test(xnn_f32_vlrelu_ukernel__avx_x8, xnn_init_f32_lrelu_avx_params);
524     }
525   }
526 
TEST(F32_VLRELU__AVX_X8,inplace)527   TEST(F32_VLRELU__AVX_X8, inplace) {
528     TEST_REQUIRES_X86_AVX;
529     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
530       VUnaryMicrokernelTester()
531         .batch_size(batch_size)
532         .inplace(true)
533         .Test(xnn_f32_vlrelu_ukernel__avx_x8, xnn_init_f32_lrelu_avx_params);
534     }
535   }
536 
TEST(F32_VLRELU__AVX_X8,slope)537   TEST(F32_VLRELU__AVX_X8, slope) {
538     TEST_REQUIRES_X86_AVX;
539     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
540       for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
541         VUnaryMicrokernelTester()
542           .batch_size(batch_size)
543           .slope(slope)
544           .Test(xnn_f32_vlrelu_ukernel__avx_x8, xnn_init_f32_lrelu_avx_params);
545       }
546     }
547   }
548 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
549 
550 
551 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VLRELU__AVX_X16,batch_eq_16)552   TEST(F32_VLRELU__AVX_X16, batch_eq_16) {
553     TEST_REQUIRES_X86_AVX;
554     VUnaryMicrokernelTester()
555       .batch_size(16)
556       .Test(xnn_f32_vlrelu_ukernel__avx_x16, xnn_init_f32_lrelu_avx_params);
557   }
558 
TEST(F32_VLRELU__AVX_X16,batch_div_16)559   TEST(F32_VLRELU__AVX_X16, batch_div_16) {
560     TEST_REQUIRES_X86_AVX;
561     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
562       VUnaryMicrokernelTester()
563         .batch_size(batch_size)
564         .Test(xnn_f32_vlrelu_ukernel__avx_x16, xnn_init_f32_lrelu_avx_params);
565     }
566   }
567 
TEST(F32_VLRELU__AVX_X16,batch_lt_16)568   TEST(F32_VLRELU__AVX_X16, batch_lt_16) {
569     TEST_REQUIRES_X86_AVX;
570     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
571       VUnaryMicrokernelTester()
572         .batch_size(batch_size)
573         .Test(xnn_f32_vlrelu_ukernel__avx_x16, xnn_init_f32_lrelu_avx_params);
574     }
575   }
576 
TEST(F32_VLRELU__AVX_X16,batch_gt_16)577   TEST(F32_VLRELU__AVX_X16, batch_gt_16) {
578     TEST_REQUIRES_X86_AVX;
579     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
580       VUnaryMicrokernelTester()
581         .batch_size(batch_size)
582         .Test(xnn_f32_vlrelu_ukernel__avx_x16, xnn_init_f32_lrelu_avx_params);
583     }
584   }
585 
TEST(F32_VLRELU__AVX_X16,inplace)586   TEST(F32_VLRELU__AVX_X16, inplace) {
587     TEST_REQUIRES_X86_AVX;
588     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
589       VUnaryMicrokernelTester()
590         .batch_size(batch_size)
591         .inplace(true)
592         .Test(xnn_f32_vlrelu_ukernel__avx_x16, xnn_init_f32_lrelu_avx_params);
593     }
594   }
595 
TEST(F32_VLRELU__AVX_X16,slope)596   TEST(F32_VLRELU__AVX_X16, slope) {
597     TEST_REQUIRES_X86_AVX;
598     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
599       for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
600         VUnaryMicrokernelTester()
601           .batch_size(batch_size)
602           .slope(slope)
603           .Test(xnn_f32_vlrelu_ukernel__avx_x16, xnn_init_f32_lrelu_avx_params);
604       }
605     }
606   }
607 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
608 
609 
610 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VLRELU__AVX512F_X16,batch_eq_16)611   TEST(F32_VLRELU__AVX512F_X16, batch_eq_16) {
612     TEST_REQUIRES_X86_AVX512F;
613     VUnaryMicrokernelTester()
614       .batch_size(16)
615       .Test(xnn_f32_vlrelu_ukernel__avx512f_x16, xnn_init_f32_lrelu_scalar_params);
616   }
617 
TEST(F32_VLRELU__AVX512F_X16,batch_div_16)618   TEST(F32_VLRELU__AVX512F_X16, batch_div_16) {
619     TEST_REQUIRES_X86_AVX512F;
620     for (size_t batch_size = 32; batch_size < 160; batch_size += 16) {
621       VUnaryMicrokernelTester()
622         .batch_size(batch_size)
623         .Test(xnn_f32_vlrelu_ukernel__avx512f_x16, xnn_init_f32_lrelu_scalar_params);
624     }
625   }
626 
TEST(F32_VLRELU__AVX512F_X16,batch_lt_16)627   TEST(F32_VLRELU__AVX512F_X16, batch_lt_16) {
628     TEST_REQUIRES_X86_AVX512F;
629     for (size_t batch_size = 1; batch_size < 16; batch_size++) {
630       VUnaryMicrokernelTester()
631         .batch_size(batch_size)
632         .Test(xnn_f32_vlrelu_ukernel__avx512f_x16, xnn_init_f32_lrelu_scalar_params);
633     }
634   }
635 
TEST(F32_VLRELU__AVX512F_X16,batch_gt_16)636   TEST(F32_VLRELU__AVX512F_X16, batch_gt_16) {
637     TEST_REQUIRES_X86_AVX512F;
638     for (size_t batch_size = 17; batch_size < 32; batch_size++) {
639       VUnaryMicrokernelTester()
640         .batch_size(batch_size)
641         .Test(xnn_f32_vlrelu_ukernel__avx512f_x16, xnn_init_f32_lrelu_scalar_params);
642     }
643   }
644 
TEST(F32_VLRELU__AVX512F_X16,inplace)645   TEST(F32_VLRELU__AVX512F_X16, inplace) {
646     TEST_REQUIRES_X86_AVX512F;
647     for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
648       VUnaryMicrokernelTester()
649         .batch_size(batch_size)
650         .inplace(true)
651         .Test(xnn_f32_vlrelu_ukernel__avx512f_x16, xnn_init_f32_lrelu_scalar_params);
652     }
653   }
654 
TEST(F32_VLRELU__AVX512F_X16,slope)655   TEST(F32_VLRELU__AVX512F_X16, slope) {
656     TEST_REQUIRES_X86_AVX512F;
657     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
658       for (size_t batch_size = 1; batch_size <= 80; batch_size += 15) {
659         VUnaryMicrokernelTester()
660           .batch_size(batch_size)
661           .slope(slope)
662           .Test(xnn_f32_vlrelu_ukernel__avx512f_x16, xnn_init_f32_lrelu_scalar_params);
663       }
664     }
665   }
666 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
667 
668 
669 #if XNN_ARCH_X86 || XNN_ARCH_X86_64
TEST(F32_VLRELU__AVX512F_X32,batch_eq_32)670   TEST(F32_VLRELU__AVX512F_X32, batch_eq_32) {
671     TEST_REQUIRES_X86_AVX512F;
672     VUnaryMicrokernelTester()
673       .batch_size(32)
674       .Test(xnn_f32_vlrelu_ukernel__avx512f_x32, xnn_init_f32_lrelu_scalar_params);
675   }
676 
TEST(F32_VLRELU__AVX512F_X32,batch_div_32)677   TEST(F32_VLRELU__AVX512F_X32, batch_div_32) {
678     TEST_REQUIRES_X86_AVX512F;
679     for (size_t batch_size = 64; batch_size < 320; batch_size += 32) {
680       VUnaryMicrokernelTester()
681         .batch_size(batch_size)
682         .Test(xnn_f32_vlrelu_ukernel__avx512f_x32, xnn_init_f32_lrelu_scalar_params);
683     }
684   }
685 
TEST(F32_VLRELU__AVX512F_X32,batch_lt_32)686   TEST(F32_VLRELU__AVX512F_X32, batch_lt_32) {
687     TEST_REQUIRES_X86_AVX512F;
688     for (size_t batch_size = 1; batch_size < 32; batch_size++) {
689       VUnaryMicrokernelTester()
690         .batch_size(batch_size)
691         .Test(xnn_f32_vlrelu_ukernel__avx512f_x32, xnn_init_f32_lrelu_scalar_params);
692     }
693   }
694 
TEST(F32_VLRELU__AVX512F_X32,batch_gt_32)695   TEST(F32_VLRELU__AVX512F_X32, batch_gt_32) {
696     TEST_REQUIRES_X86_AVX512F;
697     for (size_t batch_size = 33; batch_size < 64; batch_size++) {
698       VUnaryMicrokernelTester()
699         .batch_size(batch_size)
700         .Test(xnn_f32_vlrelu_ukernel__avx512f_x32, xnn_init_f32_lrelu_scalar_params);
701     }
702   }
703 
TEST(F32_VLRELU__AVX512F_X32,inplace)704   TEST(F32_VLRELU__AVX512F_X32, inplace) {
705     TEST_REQUIRES_X86_AVX512F;
706     for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
707       VUnaryMicrokernelTester()
708         .batch_size(batch_size)
709         .inplace(true)
710         .Test(xnn_f32_vlrelu_ukernel__avx512f_x32, xnn_init_f32_lrelu_scalar_params);
711     }
712   }
713 
TEST(F32_VLRELU__AVX512F_X32,slope)714   TEST(F32_VLRELU__AVX512F_X32, slope) {
715     TEST_REQUIRES_X86_AVX512F;
716     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
717       for (size_t batch_size = 1; batch_size <= 160; batch_size += 31) {
718         VUnaryMicrokernelTester()
719           .batch_size(batch_size)
720           .slope(slope)
721           .Test(xnn_f32_vlrelu_ukernel__avx512f_x32, xnn_init_f32_lrelu_scalar_params);
722       }
723     }
724   }
725 #endif  // XNN_ARCH_X86 || XNN_ARCH_X86_64
726 
727 
728 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VLRELU__WASMSIMD_BITSELECT_X4,batch_eq_4)729   TEST(F32_VLRELU__WASMSIMD_BITSELECT_X4, batch_eq_4) {
730     VUnaryMicrokernelTester()
731       .batch_size(4)
732       .Test(xnn_f32_vlrelu_ukernel__wasmsimd_bitselect_x4, xnn_init_f32_lrelu_wasmsimd_params);
733   }
734 
TEST(F32_VLRELU__WASMSIMD_BITSELECT_X4,batch_div_4)735   TEST(F32_VLRELU__WASMSIMD_BITSELECT_X4, batch_div_4) {
736     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
737       VUnaryMicrokernelTester()
738         .batch_size(batch_size)
739         .Test(xnn_f32_vlrelu_ukernel__wasmsimd_bitselect_x4, xnn_init_f32_lrelu_wasmsimd_params);
740     }
741   }
742 
TEST(F32_VLRELU__WASMSIMD_BITSELECT_X4,batch_lt_4)743   TEST(F32_VLRELU__WASMSIMD_BITSELECT_X4, batch_lt_4) {
744     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
745       VUnaryMicrokernelTester()
746         .batch_size(batch_size)
747         .Test(xnn_f32_vlrelu_ukernel__wasmsimd_bitselect_x4, xnn_init_f32_lrelu_wasmsimd_params);
748     }
749   }
750 
TEST(F32_VLRELU__WASMSIMD_BITSELECT_X4,batch_gt_4)751   TEST(F32_VLRELU__WASMSIMD_BITSELECT_X4, batch_gt_4) {
752     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
753       VUnaryMicrokernelTester()
754         .batch_size(batch_size)
755         .Test(xnn_f32_vlrelu_ukernel__wasmsimd_bitselect_x4, xnn_init_f32_lrelu_wasmsimd_params);
756     }
757   }
758 
TEST(F32_VLRELU__WASMSIMD_BITSELECT_X4,inplace)759   TEST(F32_VLRELU__WASMSIMD_BITSELECT_X4, inplace) {
760     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
761       VUnaryMicrokernelTester()
762         .batch_size(batch_size)
763         .inplace(true)
764         .Test(xnn_f32_vlrelu_ukernel__wasmsimd_bitselect_x4, xnn_init_f32_lrelu_wasmsimd_params);
765     }
766   }
767 
TEST(F32_VLRELU__WASMSIMD_BITSELECT_X4,slope)768   TEST(F32_VLRELU__WASMSIMD_BITSELECT_X4, slope) {
769     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
770       for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
771         VUnaryMicrokernelTester()
772           .batch_size(batch_size)
773           .slope(slope)
774           .Test(xnn_f32_vlrelu_ukernel__wasmsimd_bitselect_x4, xnn_init_f32_lrelu_wasmsimd_params);
775       }
776     }
777   }
778 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
779 
780 
781 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VLRELU__WASMSIMD_BITSELECT_X8,batch_eq_8)782   TEST(F32_VLRELU__WASMSIMD_BITSELECT_X8, batch_eq_8) {
783     VUnaryMicrokernelTester()
784       .batch_size(8)
785       .Test(xnn_f32_vlrelu_ukernel__wasmsimd_bitselect_x8, xnn_init_f32_lrelu_wasmsimd_params);
786   }
787 
TEST(F32_VLRELU__WASMSIMD_BITSELECT_X8,batch_div_8)788   TEST(F32_VLRELU__WASMSIMD_BITSELECT_X8, batch_div_8) {
789     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
790       VUnaryMicrokernelTester()
791         .batch_size(batch_size)
792         .Test(xnn_f32_vlrelu_ukernel__wasmsimd_bitselect_x8, xnn_init_f32_lrelu_wasmsimd_params);
793     }
794   }
795 
TEST(F32_VLRELU__WASMSIMD_BITSELECT_X8,batch_lt_8)796   TEST(F32_VLRELU__WASMSIMD_BITSELECT_X8, batch_lt_8) {
797     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
798       VUnaryMicrokernelTester()
799         .batch_size(batch_size)
800         .Test(xnn_f32_vlrelu_ukernel__wasmsimd_bitselect_x8, xnn_init_f32_lrelu_wasmsimd_params);
801     }
802   }
803 
TEST(F32_VLRELU__WASMSIMD_BITSELECT_X8,batch_gt_8)804   TEST(F32_VLRELU__WASMSIMD_BITSELECT_X8, batch_gt_8) {
805     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
806       VUnaryMicrokernelTester()
807         .batch_size(batch_size)
808         .Test(xnn_f32_vlrelu_ukernel__wasmsimd_bitselect_x8, xnn_init_f32_lrelu_wasmsimd_params);
809     }
810   }
811 
TEST(F32_VLRELU__WASMSIMD_BITSELECT_X8,inplace)812   TEST(F32_VLRELU__WASMSIMD_BITSELECT_X8, inplace) {
813     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
814       VUnaryMicrokernelTester()
815         .batch_size(batch_size)
816         .inplace(true)
817         .Test(xnn_f32_vlrelu_ukernel__wasmsimd_bitselect_x8, xnn_init_f32_lrelu_wasmsimd_params);
818     }
819   }
820 
TEST(F32_VLRELU__WASMSIMD_BITSELECT_X8,slope)821   TEST(F32_VLRELU__WASMSIMD_BITSELECT_X8, slope) {
822     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
823       for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
824         VUnaryMicrokernelTester()
825           .batch_size(batch_size)
826           .slope(slope)
827           .Test(xnn_f32_vlrelu_ukernel__wasmsimd_bitselect_x8, xnn_init_f32_lrelu_wasmsimd_params);
828       }
829     }
830   }
831 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
832 
833 
834 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VLRELU__WASMSIMD_MINMAX_X4,batch_eq_4)835   TEST(F32_VLRELU__WASMSIMD_MINMAX_X4, batch_eq_4) {
836     VUnaryMicrokernelTester()
837       .batch_size(4)
838       .Test(xnn_f32_vlrelu_ukernel__wasmsimd_minmax_x4, xnn_init_f32_lrelu_wasmsimd_params);
839   }
840 
TEST(F32_VLRELU__WASMSIMD_MINMAX_X4,batch_div_4)841   TEST(F32_VLRELU__WASMSIMD_MINMAX_X4, batch_div_4) {
842     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
843       VUnaryMicrokernelTester()
844         .batch_size(batch_size)
845         .Test(xnn_f32_vlrelu_ukernel__wasmsimd_minmax_x4, xnn_init_f32_lrelu_wasmsimd_params);
846     }
847   }
848 
TEST(F32_VLRELU__WASMSIMD_MINMAX_X4,batch_lt_4)849   TEST(F32_VLRELU__WASMSIMD_MINMAX_X4, batch_lt_4) {
850     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
851       VUnaryMicrokernelTester()
852         .batch_size(batch_size)
853         .Test(xnn_f32_vlrelu_ukernel__wasmsimd_minmax_x4, xnn_init_f32_lrelu_wasmsimd_params);
854     }
855   }
856 
TEST(F32_VLRELU__WASMSIMD_MINMAX_X4,batch_gt_4)857   TEST(F32_VLRELU__WASMSIMD_MINMAX_X4, batch_gt_4) {
858     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
859       VUnaryMicrokernelTester()
860         .batch_size(batch_size)
861         .Test(xnn_f32_vlrelu_ukernel__wasmsimd_minmax_x4, xnn_init_f32_lrelu_wasmsimd_params);
862     }
863   }
864 
TEST(F32_VLRELU__WASMSIMD_MINMAX_X4,inplace)865   TEST(F32_VLRELU__WASMSIMD_MINMAX_X4, inplace) {
866     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
867       VUnaryMicrokernelTester()
868         .batch_size(batch_size)
869         .inplace(true)
870         .Test(xnn_f32_vlrelu_ukernel__wasmsimd_minmax_x4, xnn_init_f32_lrelu_wasmsimd_params);
871     }
872   }
873 
TEST(F32_VLRELU__WASMSIMD_MINMAX_X4,slope)874   TEST(F32_VLRELU__WASMSIMD_MINMAX_X4, slope) {
875     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
876       for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
877         VUnaryMicrokernelTester()
878           .batch_size(batch_size)
879           .slope(slope)
880           .Test(xnn_f32_vlrelu_ukernel__wasmsimd_minmax_x4, xnn_init_f32_lrelu_wasmsimd_params);
881       }
882     }
883   }
884 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
885 
886 
887 #if XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VLRELU__WASMSIMD_MINMAX_X8,batch_eq_8)888   TEST(F32_VLRELU__WASMSIMD_MINMAX_X8, batch_eq_8) {
889     VUnaryMicrokernelTester()
890       .batch_size(8)
891       .Test(xnn_f32_vlrelu_ukernel__wasmsimd_minmax_x8, xnn_init_f32_lrelu_wasmsimd_params);
892   }
893 
TEST(F32_VLRELU__WASMSIMD_MINMAX_X8,batch_div_8)894   TEST(F32_VLRELU__WASMSIMD_MINMAX_X8, batch_div_8) {
895     for (size_t batch_size = 16; batch_size < 80; batch_size += 8) {
896       VUnaryMicrokernelTester()
897         .batch_size(batch_size)
898         .Test(xnn_f32_vlrelu_ukernel__wasmsimd_minmax_x8, xnn_init_f32_lrelu_wasmsimd_params);
899     }
900   }
901 
TEST(F32_VLRELU__WASMSIMD_MINMAX_X8,batch_lt_8)902   TEST(F32_VLRELU__WASMSIMD_MINMAX_X8, batch_lt_8) {
903     for (size_t batch_size = 1; batch_size < 8; batch_size++) {
904       VUnaryMicrokernelTester()
905         .batch_size(batch_size)
906         .Test(xnn_f32_vlrelu_ukernel__wasmsimd_minmax_x8, xnn_init_f32_lrelu_wasmsimd_params);
907     }
908   }
909 
TEST(F32_VLRELU__WASMSIMD_MINMAX_X8,batch_gt_8)910   TEST(F32_VLRELU__WASMSIMD_MINMAX_X8, batch_gt_8) {
911     for (size_t batch_size = 9; batch_size < 16; batch_size++) {
912       VUnaryMicrokernelTester()
913         .batch_size(batch_size)
914         .Test(xnn_f32_vlrelu_ukernel__wasmsimd_minmax_x8, xnn_init_f32_lrelu_wasmsimd_params);
915     }
916   }
917 
TEST(F32_VLRELU__WASMSIMD_MINMAX_X8,inplace)918   TEST(F32_VLRELU__WASMSIMD_MINMAX_X8, inplace) {
919     for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
920       VUnaryMicrokernelTester()
921         .batch_size(batch_size)
922         .inplace(true)
923         .Test(xnn_f32_vlrelu_ukernel__wasmsimd_minmax_x8, xnn_init_f32_lrelu_wasmsimd_params);
924     }
925   }
926 
TEST(F32_VLRELU__WASMSIMD_MINMAX_X8,slope)927   TEST(F32_VLRELU__WASMSIMD_MINMAX_X8, slope) {
928     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
929       for (size_t batch_size = 1; batch_size <= 40; batch_size += 7) {
930         VUnaryMicrokernelTester()
931           .batch_size(batch_size)
932           .slope(slope)
933           .Test(xnn_f32_vlrelu_ukernel__wasmsimd_minmax_x8, xnn_init_f32_lrelu_wasmsimd_params);
934       }
935     }
936   }
937 #endif  // XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
938 
939 
940 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VLRELU__WASM_X1,batch_eq_1)941   TEST(F32_VLRELU__WASM_X1, batch_eq_1) {
942     VUnaryMicrokernelTester()
943       .batch_size(1)
944       .Test(xnn_f32_vlrelu_ukernel__wasm_x1, xnn_init_f32_lrelu_scalar_params);
945   }
946 
TEST(F32_VLRELU__WASM_X1,batch_gt_1)947   TEST(F32_VLRELU__WASM_X1, batch_gt_1) {
948     for (size_t batch_size = 2; batch_size < 10; batch_size++) {
949       VUnaryMicrokernelTester()
950         .batch_size(batch_size)
951         .Test(xnn_f32_vlrelu_ukernel__wasm_x1, xnn_init_f32_lrelu_scalar_params);
952     }
953   }
954 
TEST(F32_VLRELU__WASM_X1,inplace)955   TEST(F32_VLRELU__WASM_X1, inplace) {
956     for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
957       VUnaryMicrokernelTester()
958         .batch_size(batch_size)
959         .inplace(true)
960         .Test(xnn_f32_vlrelu_ukernel__wasm_x1, xnn_init_f32_lrelu_scalar_params);
961     }
962   }
963 
TEST(F32_VLRELU__WASM_X1,slope)964   TEST(F32_VLRELU__WASM_X1, slope) {
965     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
966       for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
967         VUnaryMicrokernelTester()
968           .batch_size(batch_size)
969           .slope(slope)
970           .Test(xnn_f32_vlrelu_ukernel__wasm_x1, xnn_init_f32_lrelu_scalar_params);
971       }
972     }
973   }
974 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
975 
976 
977 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VLRELU__WASM_X2,batch_eq_2)978   TEST(F32_VLRELU__WASM_X2, batch_eq_2) {
979     VUnaryMicrokernelTester()
980       .batch_size(2)
981       .Test(xnn_f32_vlrelu_ukernel__wasm_x2, xnn_init_f32_lrelu_scalar_params);
982   }
983 
TEST(F32_VLRELU__WASM_X2,batch_div_2)984   TEST(F32_VLRELU__WASM_X2, batch_div_2) {
985     for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
986       VUnaryMicrokernelTester()
987         .batch_size(batch_size)
988         .Test(xnn_f32_vlrelu_ukernel__wasm_x2, xnn_init_f32_lrelu_scalar_params);
989     }
990   }
991 
TEST(F32_VLRELU__WASM_X2,batch_lt_2)992   TEST(F32_VLRELU__WASM_X2, batch_lt_2) {
993     for (size_t batch_size = 1; batch_size < 2; batch_size++) {
994       VUnaryMicrokernelTester()
995         .batch_size(batch_size)
996         .Test(xnn_f32_vlrelu_ukernel__wasm_x2, xnn_init_f32_lrelu_scalar_params);
997     }
998   }
999 
TEST(F32_VLRELU__WASM_X2,batch_gt_2)1000   TEST(F32_VLRELU__WASM_X2, batch_gt_2) {
1001     for (size_t batch_size = 3; batch_size < 4; batch_size++) {
1002       VUnaryMicrokernelTester()
1003         .batch_size(batch_size)
1004         .Test(xnn_f32_vlrelu_ukernel__wasm_x2, xnn_init_f32_lrelu_scalar_params);
1005     }
1006   }
1007 
TEST(F32_VLRELU__WASM_X2,inplace)1008   TEST(F32_VLRELU__WASM_X2, inplace) {
1009     for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1010       VUnaryMicrokernelTester()
1011         .batch_size(batch_size)
1012         .inplace(true)
1013         .Test(xnn_f32_vlrelu_ukernel__wasm_x2, xnn_init_f32_lrelu_scalar_params);
1014     }
1015   }
1016 
TEST(F32_VLRELU__WASM_X2,slope)1017   TEST(F32_VLRELU__WASM_X2, slope) {
1018     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
1019       for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1020         VUnaryMicrokernelTester()
1021           .batch_size(batch_size)
1022           .slope(slope)
1023           .Test(xnn_f32_vlrelu_ukernel__wasm_x2, xnn_init_f32_lrelu_scalar_params);
1024       }
1025     }
1026   }
1027 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1028 
1029 
1030 #if XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
TEST(F32_VLRELU__WASM_X4,batch_eq_4)1031   TEST(F32_VLRELU__WASM_X4, batch_eq_4) {
1032     VUnaryMicrokernelTester()
1033       .batch_size(4)
1034       .Test(xnn_f32_vlrelu_ukernel__wasm_x4, xnn_init_f32_lrelu_scalar_params);
1035   }
1036 
TEST(F32_VLRELU__WASM_X4,batch_div_4)1037   TEST(F32_VLRELU__WASM_X4, batch_div_4) {
1038     for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
1039       VUnaryMicrokernelTester()
1040         .batch_size(batch_size)
1041         .Test(xnn_f32_vlrelu_ukernel__wasm_x4, xnn_init_f32_lrelu_scalar_params);
1042     }
1043   }
1044 
TEST(F32_VLRELU__WASM_X4,batch_lt_4)1045   TEST(F32_VLRELU__WASM_X4, batch_lt_4) {
1046     for (size_t batch_size = 1; batch_size < 4; batch_size++) {
1047       VUnaryMicrokernelTester()
1048         .batch_size(batch_size)
1049         .Test(xnn_f32_vlrelu_ukernel__wasm_x4, xnn_init_f32_lrelu_scalar_params);
1050     }
1051   }
1052 
TEST(F32_VLRELU__WASM_X4,batch_gt_4)1053   TEST(F32_VLRELU__WASM_X4, batch_gt_4) {
1054     for (size_t batch_size = 5; batch_size < 8; batch_size++) {
1055       VUnaryMicrokernelTester()
1056         .batch_size(batch_size)
1057         .Test(xnn_f32_vlrelu_ukernel__wasm_x4, xnn_init_f32_lrelu_scalar_params);
1058     }
1059   }
1060 
TEST(F32_VLRELU__WASM_X4,inplace)1061   TEST(F32_VLRELU__WASM_X4, inplace) {
1062     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1063       VUnaryMicrokernelTester()
1064         .batch_size(batch_size)
1065         .inplace(true)
1066         .Test(xnn_f32_vlrelu_ukernel__wasm_x4, xnn_init_f32_lrelu_scalar_params);
1067     }
1068   }
1069 
TEST(F32_VLRELU__WASM_X4,slope)1070   TEST(F32_VLRELU__WASM_X4, slope) {
1071     for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
1072       for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1073         VUnaryMicrokernelTester()
1074           .batch_size(batch_size)
1075           .slope(slope)
1076           .Test(xnn_f32_vlrelu_ukernel__wasm_x4, xnn_init_f32_lrelu_scalar_params);
1077       }
1078     }
1079   }
1080 #endif  // XNN_ARCH_WASM || XNN_ARCH_WASMSIMD || XNN_ARCH_WASMRELAXEDSIMD
1081 
1082 
TEST(F32_VLRELU__SCALAR_X1,batch_eq_1)1083 TEST(F32_VLRELU__SCALAR_X1, batch_eq_1) {
1084   VUnaryMicrokernelTester()
1085     .batch_size(1)
1086     .Test(xnn_f32_vlrelu_ukernel__scalar_x1, xnn_init_f32_lrelu_scalar_params);
1087 }
1088 
TEST(F32_VLRELU__SCALAR_X1,batch_gt_1)1089 TEST(F32_VLRELU__SCALAR_X1, batch_gt_1) {
1090   for (size_t batch_size = 2; batch_size < 10; batch_size++) {
1091     VUnaryMicrokernelTester()
1092       .batch_size(batch_size)
1093       .Test(xnn_f32_vlrelu_ukernel__scalar_x1, xnn_init_f32_lrelu_scalar_params);
1094   }
1095 }
1096 
TEST(F32_VLRELU__SCALAR_X1,inplace)1097 TEST(F32_VLRELU__SCALAR_X1, inplace) {
1098   for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1099     VUnaryMicrokernelTester()
1100       .batch_size(batch_size)
1101       .inplace(true)
1102       .Test(xnn_f32_vlrelu_ukernel__scalar_x1, xnn_init_f32_lrelu_scalar_params);
1103   }
1104 }
1105 
TEST(F32_VLRELU__SCALAR_X1,slope)1106 TEST(F32_VLRELU__SCALAR_X1, slope) {
1107   for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
1108     for (size_t batch_size = 1; batch_size <= 5; batch_size += 1) {
1109       VUnaryMicrokernelTester()
1110         .batch_size(batch_size)
1111         .slope(slope)
1112         .Test(xnn_f32_vlrelu_ukernel__scalar_x1, xnn_init_f32_lrelu_scalar_params);
1113     }
1114   }
1115 }
1116 
1117 
TEST(F32_VLRELU__SCALAR_X2,batch_eq_2)1118 TEST(F32_VLRELU__SCALAR_X2, batch_eq_2) {
1119   VUnaryMicrokernelTester()
1120     .batch_size(2)
1121     .Test(xnn_f32_vlrelu_ukernel__scalar_x2, xnn_init_f32_lrelu_scalar_params);
1122 }
1123 
TEST(F32_VLRELU__SCALAR_X2,batch_div_2)1124 TEST(F32_VLRELU__SCALAR_X2, batch_div_2) {
1125   for (size_t batch_size = 4; batch_size < 20; batch_size += 2) {
1126     VUnaryMicrokernelTester()
1127       .batch_size(batch_size)
1128       .Test(xnn_f32_vlrelu_ukernel__scalar_x2, xnn_init_f32_lrelu_scalar_params);
1129   }
1130 }
1131 
TEST(F32_VLRELU__SCALAR_X2,batch_lt_2)1132 TEST(F32_VLRELU__SCALAR_X2, batch_lt_2) {
1133   for (size_t batch_size = 1; batch_size < 2; batch_size++) {
1134     VUnaryMicrokernelTester()
1135       .batch_size(batch_size)
1136       .Test(xnn_f32_vlrelu_ukernel__scalar_x2, xnn_init_f32_lrelu_scalar_params);
1137   }
1138 }
1139 
TEST(F32_VLRELU__SCALAR_X2,batch_gt_2)1140 TEST(F32_VLRELU__SCALAR_X2, batch_gt_2) {
1141   for (size_t batch_size = 3; batch_size < 4; batch_size++) {
1142     VUnaryMicrokernelTester()
1143       .batch_size(batch_size)
1144       .Test(xnn_f32_vlrelu_ukernel__scalar_x2, xnn_init_f32_lrelu_scalar_params);
1145   }
1146 }
1147 
TEST(F32_VLRELU__SCALAR_X2,inplace)1148 TEST(F32_VLRELU__SCALAR_X2, inplace) {
1149   for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1150     VUnaryMicrokernelTester()
1151       .batch_size(batch_size)
1152       .inplace(true)
1153       .Test(xnn_f32_vlrelu_ukernel__scalar_x2, xnn_init_f32_lrelu_scalar_params);
1154   }
1155 }
1156 
TEST(F32_VLRELU__SCALAR_X2,slope)1157 TEST(F32_VLRELU__SCALAR_X2, slope) {
1158   for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
1159     for (size_t batch_size = 1; batch_size <= 10; batch_size += 1) {
1160       VUnaryMicrokernelTester()
1161         .batch_size(batch_size)
1162         .slope(slope)
1163         .Test(xnn_f32_vlrelu_ukernel__scalar_x2, xnn_init_f32_lrelu_scalar_params);
1164     }
1165   }
1166 }
1167 
1168 
TEST(F32_VLRELU__SCALAR_X4,batch_eq_4)1169 TEST(F32_VLRELU__SCALAR_X4, batch_eq_4) {
1170   VUnaryMicrokernelTester()
1171     .batch_size(4)
1172     .Test(xnn_f32_vlrelu_ukernel__scalar_x4, xnn_init_f32_lrelu_scalar_params);
1173 }
1174 
TEST(F32_VLRELU__SCALAR_X4,batch_div_4)1175 TEST(F32_VLRELU__SCALAR_X4, batch_div_4) {
1176   for (size_t batch_size = 8; batch_size < 40; batch_size += 4) {
1177     VUnaryMicrokernelTester()
1178       .batch_size(batch_size)
1179       .Test(xnn_f32_vlrelu_ukernel__scalar_x4, xnn_init_f32_lrelu_scalar_params);
1180   }
1181 }
1182 
TEST(F32_VLRELU__SCALAR_X4,batch_lt_4)1183 TEST(F32_VLRELU__SCALAR_X4, batch_lt_4) {
1184   for (size_t batch_size = 1; batch_size < 4; batch_size++) {
1185     VUnaryMicrokernelTester()
1186       .batch_size(batch_size)
1187       .Test(xnn_f32_vlrelu_ukernel__scalar_x4, xnn_init_f32_lrelu_scalar_params);
1188   }
1189 }
1190 
TEST(F32_VLRELU__SCALAR_X4,batch_gt_4)1191 TEST(F32_VLRELU__SCALAR_X4, batch_gt_4) {
1192   for (size_t batch_size = 5; batch_size < 8; batch_size++) {
1193     VUnaryMicrokernelTester()
1194       .batch_size(batch_size)
1195       .Test(xnn_f32_vlrelu_ukernel__scalar_x4, xnn_init_f32_lrelu_scalar_params);
1196   }
1197 }
1198 
TEST(F32_VLRELU__SCALAR_X4,inplace)1199 TEST(F32_VLRELU__SCALAR_X4, inplace) {
1200   for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1201     VUnaryMicrokernelTester()
1202       .batch_size(batch_size)
1203       .inplace(true)
1204       .Test(xnn_f32_vlrelu_ukernel__scalar_x4, xnn_init_f32_lrelu_scalar_params);
1205   }
1206 }
1207 
TEST(F32_VLRELU__SCALAR_X4,slope)1208 TEST(F32_VLRELU__SCALAR_X4, slope) {
1209   for (float slope : std::vector<float>({-0.7f, 0.3f, 1.3f})) {
1210     for (size_t batch_size = 1; batch_size <= 20; batch_size += 3) {
1211       VUnaryMicrokernelTester()
1212         .batch_size(batch_size)
1213         .slope(slope)
1214         .Test(xnn_f32_vlrelu_ukernel__scalar_x4, xnn_init_f32_lrelu_scalar_params);
1215     }
1216   }
1217 }
1218