1 #define SIMDE_TEST_ARM_NEON_INSN cagt
2 
3 #include "test-neon.h"
4 #include "../../../simde/arm/neon/cagt.h"
5 
6 static int
test_simde_vcagts_f32(SIMDE_MUNIT_TEST_ARGS)7 test_simde_vcagts_f32 (SIMDE_MUNIT_TEST_ARGS) {
8 #if 1
9   static const struct {
10     simde_float32 a;
11     simde_float32 b;
12     uint32_t r;
13   } test_vec[] = {
14     #if !defined(SIMDE_FAST_NANS)
15     {            SIMDE_MATH_NANF,
16       SIMDE_FLOAT32_C(     0.52),
17       UINT32_C(         0) },
18     { SIMDE_FLOAT32_C(   705.02),
19                  SIMDE_MATH_NANF,
20       UINT32_C(         0) },
21     {            SIMDE_MATH_NANF,
22                  SIMDE_MATH_NANF,
23       UINT32_C(         0) },
24     #endif
25 
26     { SIMDE_FLOAT32_C(     8.79),
27       SIMDE_FLOAT32_C(   792.83),
28       UINT32_C(         0) },
29     { SIMDE_FLOAT32_C(  -399.97),
30       SIMDE_FLOAT32_C(  -256.84),
31                 UINT32_MAX },
32     { SIMDE_FLOAT32_C(   231.75),
33       SIMDE_FLOAT32_C(  -411.54),
34       UINT32_C(         0) },
35     { SIMDE_FLOAT32_C(   864.59),
36       SIMDE_FLOAT32_C(  -881.95),
37       UINT32_C(         0) },
38     { SIMDE_FLOAT32_C(  -814.20),
39       SIMDE_FLOAT32_C(   479.81),
40                 UINT32_MAX },
41     { SIMDE_FLOAT32_C(   263.32),
42       SIMDE_FLOAT32_C(  -797.51),
43       UINT32_C(         0) },
44     { SIMDE_FLOAT32_C(   321.47),
45       SIMDE_FLOAT32_C(   -74.97),
46                 UINT32_MAX },
47     { SIMDE_FLOAT32_C(   -57.92),
48       SIMDE_FLOAT32_C(   535.57),
49       UINT32_C(         0) }
50   };
51 
52   for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
53     uint32_t r = simde_vcagts_f32(test_vec[i].a, test_vec[i].b);
54 
55     simde_assert_equal_u32(r, test_vec[i].r);
56   }
57 
58   return 0;
59 #else
60   fputc('\n', stdout);
61   for (int i = 0 ; i < 8 ; i++) {
62     simde_float32_t a = simde_test_codegen_random_f32(-1000.0f, 1000.0f);
63     simde_float32_t b = simde_test_codegen_random_f32(-1000.0f, 1000.0f);
64     uint32_t r = simde_vcagts_f32(a, b);
65 
66     simde_test_codegen_write_f32(2, a, SIMDE_TEST_VEC_POS_FIRST);
67     simde_test_codegen_write_f32(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
68     simde_test_codegen_write_u32(2, r, SIMDE_TEST_VEC_POS_LAST);
69   }
70   return 1;
71 #endif
72 }
73 
74 static int
test_simde_vcagtd_f64(SIMDE_MUNIT_TEST_ARGS)75 test_simde_vcagtd_f64 (SIMDE_MUNIT_TEST_ARGS) {
76 #if 1
77   static const struct {
78     simde_float64 a;
79     simde_float64 b;
80     uint64_t r;
81   } test_vec[] = {
82     #if !defined(SIMDE_FAST_NANS)
83     {              SIMDE_MATH_NAN,
84       SIMDE_FLOAT64_C(     0.52),
85       UINT64_C(         0) },
86     { SIMDE_FLOAT64_C(   705.02),
87                   SIMDE_MATH_NAN,
88       UINT64_C(         0) },
89     {             SIMDE_MATH_NAN,
90                   SIMDE_MATH_NAN,
91       UINT64_C(         0) },
92     #endif
93 
94     { SIMDE_FLOAT64_C(  -111.66),
95       SIMDE_FLOAT64_C(  -149.68),
96       UINT64_C(                   0) },
97     { SIMDE_FLOAT64_C(  -365.17),
98       SIMDE_FLOAT64_C(  -219.70),
99                          UINT64_MAX },
100     { SIMDE_FLOAT64_C(   -45.32),
101       SIMDE_FLOAT64_C(   606.55),
102       UINT64_C(                   0) },
103     { SIMDE_FLOAT64_C(  -324.50),
104       SIMDE_FLOAT64_C(  -332.43),
105       UINT64_C(                   0) },
106     { SIMDE_FLOAT64_C(   611.77),
107       SIMDE_FLOAT64_C(   425.54),
108                          UINT64_MAX },
109     { SIMDE_FLOAT64_C(   910.11),
110       SIMDE_FLOAT64_C(   648.44),
111                          UINT64_MAX },
112     { SIMDE_FLOAT64_C(   572.56),
113       SIMDE_FLOAT64_C(  -409.05),
114                          UINT64_MAX },
115     { SIMDE_FLOAT64_C(   265.81),
116       SIMDE_FLOAT64_C(  -418.65),
117       UINT64_C(                   0) }
118   };
119 
120   for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
121     uint64_t r = simde_vcagtd_f64(test_vec[i].a, test_vec[i].b);
122 
123     simde_assert_equal_u64(r, test_vec[i].r);
124   }
125 
126   return 0;
127 #else
128   fputc('\n', stdout);
129   for (int i = 0 ; i < 8 ; i++) {
130     simde_float64_t a = simde_test_codegen_random_f64(-1000.0, 1000.0);
131     simde_float64_t b = simde_test_codegen_random_f64(-1000.0, 1000.0);
132     uint64_t r = simde_vcagtd_f64(a, b);
133 
134     simde_test_codegen_write_f64(2, a, SIMDE_TEST_VEC_POS_FIRST);
135     simde_test_codegen_write_f64(2, b, SIMDE_TEST_VEC_POS_MIDDLE);
136     simde_test_codegen_write_u64(2, r, SIMDE_TEST_VEC_POS_LAST);
137   }
138   return 1;
139 #endif
140 }
141 
142 static int
test_simde_vcagt_f32(SIMDE_MUNIT_TEST_ARGS)143 test_simde_vcagt_f32 (SIMDE_MUNIT_TEST_ARGS) {
144   struct {
145     simde_float32 a[2];
146     simde_float32 b[2];
147     uint32_t r[2];
148   } test_vec[] = {
149     { { SIMDE_FLOAT32_C(   311.69), SIMDE_FLOAT32_C(  -932.68) },
150       { SIMDE_FLOAT32_C(    98.33), SIMDE_FLOAT32_C(  -552.98) },
151       {           UINT32_MAX,           UINT32_MAX } },
152     { { SIMDE_FLOAT32_C(   959.61), SIMDE_FLOAT32_C(   617.75) },
153       { SIMDE_FLOAT32_C(  -197.11), SIMDE_FLOAT32_C(   562.98) },
154       {           UINT32_MAX,           UINT32_MAX } },
155     { { SIMDE_FLOAT32_C(   468.98), SIMDE_FLOAT32_C(  -916.49) },
156       { SIMDE_FLOAT32_C(   965.35), SIMDE_FLOAT32_C(   700.25) },
157       { UINT32_C(         0),           UINT32_MAX } },
158     { { SIMDE_FLOAT32_C(  -647.13), SIMDE_FLOAT32_C(  -147.35) },
159       { SIMDE_FLOAT32_C(  -117.68), SIMDE_FLOAT32_C(  -241.37) },
160       {           UINT32_MAX, UINT32_C(         0) } },
161     { { SIMDE_FLOAT32_C(  -664.10), SIMDE_FLOAT32_C(  -976.12) },
162       { SIMDE_FLOAT32_C(   874.22), SIMDE_FLOAT32_C(   -12.94) },
163       { UINT32_C(         0),           UINT32_MAX } },
164     { { SIMDE_FLOAT32_C(    25.04), SIMDE_FLOAT32_C(  -125.75) },
165       { SIMDE_FLOAT32_C(   212.15), SIMDE_FLOAT32_C(   782.89) },
166       { UINT32_C(         0), UINT32_C(         0) } },
167     { { SIMDE_FLOAT32_C(   561.17), SIMDE_FLOAT32_C(   217.87) },
168       { SIMDE_FLOAT32_C(  -238.74), SIMDE_FLOAT32_C(   679.32) },
169       {           UINT32_MAX, UINT32_C(         0) } },
170     { { SIMDE_FLOAT32_C(  -965.46), SIMDE_FLOAT32_C(  -738.96) },
171       { SIMDE_FLOAT32_C(  -711.74), SIMDE_FLOAT32_C(   346.23) },
172       {           UINT32_MAX,           UINT32_MAX } },
173   };
174 
175   for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
176     simde_float32x2_t a = simde_vld1_f32(test_vec[i].a);
177     simde_float32x2_t b = simde_vld1_f32(test_vec[i].b);
178     simde_uint32x2_t r = simde_vcagt_f32(a, b);
179 
180     simde_test_arm_neon_assert_equal_u32x2(r, simde_vld1_u32(test_vec[i].r));
181   }
182 
183   return 0;
184 }
185 
186 static int
test_simde_vcagt_f64(SIMDE_MUNIT_TEST_ARGS)187 test_simde_vcagt_f64 (SIMDE_MUNIT_TEST_ARGS) {
188   struct {
189     simde_float64 a[1];
190     simde_float64 b[1];
191     uint64_t r[1];
192   } test_vec[] = {
193     { { SIMDE_FLOAT64_C(    85.26) },
194       { SIMDE_FLOAT64_C(   122.65) },
195       { UINT64_C(                   0) } },
196     { { SIMDE_FLOAT64_C(  -500.89) },
197       { SIMDE_FLOAT64_C(   936.69) },
198       { UINT64_C(                   0) } },
199     { { SIMDE_FLOAT64_C(   594.89) },
200       { SIMDE_FLOAT64_C(   788.77) },
201       { UINT64_C(                   0) } },
202     { { SIMDE_FLOAT64_C(   543.70) },
203       { SIMDE_FLOAT64_C(  -150.09) },
204       {                    UINT64_MAX } },
205     { { SIMDE_FLOAT64_C(  -875.02) },
206       { SIMDE_FLOAT64_C(   442.69) },
207       {                    UINT64_MAX } },
208     { { SIMDE_FLOAT64_C(   673.76) },
209       { SIMDE_FLOAT64_C(   217.24) },
210       {                    UINT64_MAX } },
211     { { SIMDE_FLOAT64_C(   789.39) },
212       { SIMDE_FLOAT64_C(   718.78) },
213       {                    UINT64_MAX } },
214     { { SIMDE_FLOAT64_C(  -511.44) },
215       { SIMDE_FLOAT64_C(   752.01) },
216       { UINT64_C(                   0) } },
217   };
218 
219   for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
220     simde_float64x1_t a = simde_vld1_f64(test_vec[i].a);
221     simde_float64x1_t b = simde_vld1_f64(test_vec[i].b);
222     simde_uint64x1_t r = simde_vcagt_f64(a, b);
223 
224     simde_test_arm_neon_assert_equal_u64x1(r, simde_vld1_u64(test_vec[i].r));
225   }
226 
227   return 0;
228 }
229 
230 static int
test_simde_vcagtq_f32(SIMDE_MUNIT_TEST_ARGS)231 test_simde_vcagtq_f32 (SIMDE_MUNIT_TEST_ARGS) {
232   struct {
233     simde_float32 a[4];
234     simde_float32 b[4];
235     uint32_t r[4];
236   } test_vec[] = {
237     { { SIMDE_FLOAT32_C(   880.25), SIMDE_FLOAT32_C(   497.37), SIMDE_FLOAT32_C(   188.18), SIMDE_FLOAT32_C(  -214.92) },
238       { SIMDE_FLOAT32_C(  -292.63), SIMDE_FLOAT32_C(   165.21), SIMDE_FLOAT32_C(  -507.32), SIMDE_FLOAT32_C(  -554.07) },
239       {           UINT32_MAX,           UINT32_MAX, UINT32_C(         0), UINT32_C(         0) } },
240     { { SIMDE_FLOAT32_C(    21.58), SIMDE_FLOAT32_C(  -187.66), SIMDE_FLOAT32_C(    52.34), SIMDE_FLOAT32_C(   522.72) },
241       { SIMDE_FLOAT32_C(   805.10), SIMDE_FLOAT32_C(  -357.26), SIMDE_FLOAT32_C(   451.59), SIMDE_FLOAT32_C(   744.08) },
242       { UINT32_C(         0), UINT32_C(         0), UINT32_C(         0), UINT32_C(         0) } },
243     { { SIMDE_FLOAT32_C(   113.67), SIMDE_FLOAT32_C(   334.71), SIMDE_FLOAT32_C(   489.01), SIMDE_FLOAT32_C(   347.72) },
244       { SIMDE_FLOAT32_C(  -991.50), SIMDE_FLOAT32_C(  -625.74), SIMDE_FLOAT32_C(  -356.50), SIMDE_FLOAT32_C(   848.94) },
245       { UINT32_C(         0), UINT32_C(         0),           UINT32_MAX, UINT32_C(         0) } },
246     { { SIMDE_FLOAT32_C(    90.46), SIMDE_FLOAT32_C(   858.14), SIMDE_FLOAT32_C(  -123.29), SIMDE_FLOAT32_C(  -917.86) },
247       { SIMDE_FLOAT32_C(  -788.14), SIMDE_FLOAT32_C(   739.22), SIMDE_FLOAT32_C(   572.18), SIMDE_FLOAT32_C(  -907.90) },
248       { UINT32_C(         0),           UINT32_MAX, UINT32_C(         0),           UINT32_MAX } },
249     { { SIMDE_FLOAT32_C(   236.59), SIMDE_FLOAT32_C(  -239.64), SIMDE_FLOAT32_C(  -122.81), SIMDE_FLOAT32_C(   943.97) },
250       { SIMDE_FLOAT32_C(   925.57), SIMDE_FLOAT32_C(   369.86), SIMDE_FLOAT32_C(  -610.11), SIMDE_FLOAT32_C(   -52.85) },
251       { UINT32_C(         0), UINT32_C(         0), UINT32_C(         0),           UINT32_MAX } },
252     { { SIMDE_FLOAT32_C(  -817.80), SIMDE_FLOAT32_C(   442.23), SIMDE_FLOAT32_C(  -530.12), SIMDE_FLOAT32_C(   987.30) },
253       { SIMDE_FLOAT32_C(  -915.03), SIMDE_FLOAT32_C(   921.46), SIMDE_FLOAT32_C(   731.38), SIMDE_FLOAT32_C(   198.64) },
254       { UINT32_C(         0), UINT32_C(         0), UINT32_C(         0),           UINT32_MAX } },
255     { { SIMDE_FLOAT32_C(   256.18), SIMDE_FLOAT32_C(   220.39), SIMDE_FLOAT32_C(  -453.64), SIMDE_FLOAT32_C(   264.67) },
256       { SIMDE_FLOAT32_C(   594.64), SIMDE_FLOAT32_C(   189.87), SIMDE_FLOAT32_C(   113.62), SIMDE_FLOAT32_C(  -314.89) },
257       { UINT32_C(         0),           UINT32_MAX,           UINT32_MAX, UINT32_C(         0) } },
258     { { SIMDE_FLOAT32_C(    48.01), SIMDE_FLOAT32_C(   990.32), SIMDE_FLOAT32_C(  -232.76), SIMDE_FLOAT32_C(   259.86) },
259       { SIMDE_FLOAT32_C(   729.55), SIMDE_FLOAT32_C(  -660.58), SIMDE_FLOAT32_C(   351.97), SIMDE_FLOAT32_C(   -33.86) },
260       { UINT32_C(         0),           UINT32_MAX, UINT32_C(         0),           UINT32_MAX } },
261   };
262 
263   for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
264     simde_float32x4_t a = simde_vld1q_f32(test_vec[i].a);
265     simde_float32x4_t b = simde_vld1q_f32(test_vec[i].b);
266     simde_uint32x4_t r = simde_vcagtq_f32(a, b);
267     simde_test_arm_neon_assert_equal_u32x4(r, simde_vld1q_u32(test_vec[i].r));
268   }
269 
270   return 0;
271 }
272 
273 static int
test_simde_vcagtq_f64(SIMDE_MUNIT_TEST_ARGS)274 test_simde_vcagtq_f64 (SIMDE_MUNIT_TEST_ARGS) {
275   struct {
276     simde_float64 a[2];
277     simde_float64 b[2];
278     uint64_t r[2];
279   } test_vec[] = {
280     { { SIMDE_FLOAT64_C(   230.31), SIMDE_FLOAT64_C(  -618.28) },
281       { SIMDE_FLOAT64_C(   180.85), SIMDE_FLOAT64_C(   444.53) },
282       {                    UINT64_MAX,                    UINT64_MAX } },
283     { { SIMDE_FLOAT64_C(   217.53), SIMDE_FLOAT64_C(  -615.67) },
284       { SIMDE_FLOAT64_C(   629.35), SIMDE_FLOAT64_C(  -484.75) },
285       { UINT64_C(                   0),                    UINT64_MAX } },
286     { { SIMDE_FLOAT64_C(   170.44), SIMDE_FLOAT64_C(  -454.09) },
287       { SIMDE_FLOAT64_C(   330.58), SIMDE_FLOAT64_C(   520.13) },
288       { UINT64_C(                   0), UINT64_C(                   0) } },
289     { { SIMDE_FLOAT64_C(  -764.76), SIMDE_FLOAT64_C(  -650.22) },
290       { SIMDE_FLOAT64_C(   -78.50), SIMDE_FLOAT64_C(   683.38) },
291       {                    UINT64_MAX, UINT64_C(                   0) } },
292     { { SIMDE_FLOAT64_C(  -812.10), SIMDE_FLOAT64_C(   401.95) },
293       { SIMDE_FLOAT64_C(  -416.07), SIMDE_FLOAT64_C(   983.29) },
294       {                    UINT64_MAX, UINT64_C(                   0) } },
295     { { SIMDE_FLOAT64_C(  -496.16), SIMDE_FLOAT64_C(   249.85) },
296       { SIMDE_FLOAT64_C(    57.13), SIMDE_FLOAT64_C(  -909.73) },
297       {                    UINT64_MAX, UINT64_C(                   0) } },
298     { { SIMDE_FLOAT64_C(  -537.53), SIMDE_FLOAT64_C(   707.06) },
299       { SIMDE_FLOAT64_C(   -45.84), SIMDE_FLOAT64_C(  -807.07) },
300       {                    UINT64_MAX, UINT64_C(                   0) } },
301     { { SIMDE_FLOAT64_C(   -27.41), SIMDE_FLOAT64_C(   231.88) },
302       { SIMDE_FLOAT64_C(  -442.67), SIMDE_FLOAT64_C(  -797.10) },
303       { UINT64_C(                   0), UINT64_C(                   0) } },
304   };
305 
306   for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
307     simde_float64x2_t a = simde_vld1q_f64(test_vec[i].a);
308     simde_float64x2_t b = simde_vld1q_f64(test_vec[i].b);
309     simde_uint64x2_t r = simde_vcagtq_f64(a, b);
310 
311     simde_test_arm_neon_assert_equal_u64x2(r, simde_vld1q_u64(test_vec[i].r));
312   }
313 
314   return 0;
315 }
316 
317 SIMDE_TEST_FUNC_LIST_BEGIN
318 SIMDE_TEST_FUNC_LIST_ENTRY(vcagts_f32)
319 SIMDE_TEST_FUNC_LIST_ENTRY(vcagtd_f64)
320 
321 SIMDE_TEST_FUNC_LIST_ENTRY(vcagt_f32)
322 SIMDE_TEST_FUNC_LIST_ENTRY(vcagt_f64)
323 
324 SIMDE_TEST_FUNC_LIST_ENTRY(vcagtq_f32)
325 SIMDE_TEST_FUNC_LIST_ENTRY(vcagtq_f64)
326 SIMDE_TEST_FUNC_LIST_END
327 
328 #include "test-neon-footer.h"
329