@@ -14,8 +14,8 @@ class simdkvsort : public ::testing::Test {
14
14
public:
15
15
simdkvsort ()
16
16
{
17
- std::iota (arrsize.begin (), arrsize.end (), 1 );
18
- std::iota (arrsize_long.begin (), arrsize_long.end (), 1 );
17
+ std::iota (arrsize.begin (), arrsize.end (), 0 );
18
+ std::iota (arrsize_long.begin (), arrsize_long.end (), 0 );
19
19
#ifdef XSS_USE_OPENMP
20
20
// These extended tests are only needed for the OpenMP logic
21
21
arrsize_long.push_back (10'000 );
@@ -63,6 +63,9 @@ bool is_kv_sorted(
63
63
{
64
64
auto cmp_eq = compare<T1, std::equal_to<T1>>();
65
65
66
+ // Always true for arrays of zero length
67
+ if (size == 0 ) return true ;
68
+
66
69
// First check keys are exactly identical
67
70
for (size_t i = 0 ; i < size; i++) {
68
71
if (!cmp_eq (keys_comp[i], keys_ref[i])) { return false ; }
@@ -178,8 +181,10 @@ TYPED_TEST_P(simdkvsort, test_kvsort_ascending)
178
181
std::vector<T2> val = get_array<T2>(type, size);
179
182
std::vector<T1> key_bckp = key;
180
183
std::vector<T2> val_bckp = val;
184
+
181
185
x86simdsort::keyvalue_qsort (
182
186
key.data (), val.data (), size, hasnan, false );
187
+ #ifndef XSS_ASAN_CI_NOCHECK
183
188
xss::scalar::keyvalue_qsort (
184
189
key_bckp.data (), val_bckp.data (), size, hasnan, false );
185
190
@@ -189,7 +194,7 @@ TYPED_TEST_P(simdkvsort, test_kvsort_ascending)
189
194
val_bckp.data (),
190
195
size);
191
196
ASSERT_EQ (is_kv_sorted_, true );
192
-
197
+ # endif
193
198
key.clear ();
194
199
val.clear ();
195
200
key_bckp.clear ();
@@ -209,8 +214,10 @@ TYPED_TEST_P(simdkvsort, test_kvsort_descending)
209
214
std::vector<T2> val = get_array<T2>(type, size);
210
215
std::vector<T1> key_bckp = key;
211
216
std::vector<T2> val_bckp = val;
217
+
212
218
x86simdsort::keyvalue_qsort (
213
219
key.data (), val.data (), size, hasnan, true );
220
+ #ifndef XSS_ASAN_CI_NOCHECK
214
221
xss::scalar::keyvalue_qsort (
215
222
key_bckp.data (), val_bckp.data (), size, hasnan, true );
216
223
@@ -220,7 +227,7 @@ TYPED_TEST_P(simdkvsort, test_kvsort_descending)
220
227
val_bckp.data (),
221
228
size);
222
229
ASSERT_EQ (is_kv_sorted_, true );
223
-
230
+ # endif
224
231
key.clear ();
225
232
val.clear ();
226
233
key_bckp.clear ();
@@ -237,19 +244,21 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
237
244
for (auto type : this ->arrtype ) {
238
245
bool hasnan = is_nan_test (type);
239
246
for (auto size : this ->arrsize ) {
240
- size_t k = rand () % size;
247
+ size_t k = size != 0 ? rand () % size : 0 ;
241
248
242
249
std::vector<T1> key = get_array<T1>(type, size);
243
250
std::vector<T2> val = get_array<T2>(type, size);
244
251
std::vector<T1> key_bckp = key;
245
252
std::vector<T2> val_bckp = val;
246
253
254
+ x86simdsort::keyvalue_select (
255
+ key.data (), val.data (), k, size, hasnan, false );
256
+ #ifndef XSS_ASAN_CI_NOCHECK
247
257
xss::scalar::keyvalue_qsort (
248
258
key_bckp.data (), val_bckp.data (), size, hasnan, false );
249
259
250
260
// Test select by using it as part of partial_sort
251
- x86simdsort::keyvalue_select (
252
- key.data (), val.data (), k, size, hasnan, false );
261
+ if (size == 0 ) continue ;
253
262
IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type);
254
263
xss::scalar::keyvalue_qsort (
255
264
key.data (), val.data (), k, hasnan, false );
@@ -264,7 +273,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
264
273
size,
265
274
k);
266
275
ASSERT_EQ (is_kv_partialsorted_, true );
267
-
276
+ # endif
268
277
key.clear ();
269
278
val.clear ();
270
279
key_bckp.clear ();
@@ -281,19 +290,21 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
281
290
for (auto type : this ->arrtype ) {
282
291
bool hasnan = is_nan_test (type);
283
292
for (auto size : this ->arrsize ) {
284
- size_t k = rand () % size;
293
+ size_t k = size != 0 ? rand () % size : 0 ;
285
294
286
295
std::vector<T1> key = get_array<T1>(type, size);
287
296
std::vector<T2> val = get_array<T2>(type, size);
288
297
std::vector<T1> key_bckp = key;
289
298
std::vector<T2> val_bckp = val;
290
299
300
+ x86simdsort::keyvalue_select (
301
+ key.data (), val.data (), k, size, hasnan, true );
302
+ #ifndef XSS_ASAN_CI_NOCHECK
291
303
xss::scalar::keyvalue_qsort (
292
304
key_bckp.data (), val_bckp.data (), size, hasnan, true );
293
305
294
306
// Test select by using it as part of partial_sort
295
- x86simdsort::keyvalue_select (
296
- key.data (), val.data (), k, size, hasnan, true );
307
+ if (size == 0 ) continue ;
297
308
IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type, true );
298
309
xss::scalar::keyvalue_qsort (
299
310
key.data (), val.data (), k, hasnan, true );
@@ -308,7 +319,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
308
319
size,
309
320
k);
310
321
ASSERT_EQ (is_kv_partialsorted_, true );
311
-
322
+ # endif
312
323
key.clear ();
313
324
val.clear ();
314
325
key_bckp.clear ();
@@ -324,14 +335,17 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_ascending)
324
335
for (auto type : this ->arrtype ) {
325
336
bool hasnan = is_nan_test (type);
326
337
for (auto size : this ->arrsize ) {
327
- size_t k = rand () % size;
338
+ size_t k = size != 0 ? rand () % size : 0 ;
328
339
329
340
std::vector<T1> key = get_array<T1>(type, size);
330
341
std::vector<T2> val = get_array<T2>(type, size);
331
342
std::vector<T1> key_bckp = key;
332
343
std::vector<T2> val_bckp = val;
344
+
333
345
x86simdsort::keyvalue_partial_sort (
334
346
key.data (), val.data (), k, size, hasnan, false );
347
+ #ifndef XSS_ASAN_CI_NOCHECK
348
+ if (size == 0 ) continue ;
335
349
xss::scalar::keyvalue_qsort (
336
350
key_bckp.data (), val_bckp.data (), size, hasnan, false );
337
351
@@ -345,7 +359,7 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_ascending)
345
359
size,
346
360
k);
347
361
ASSERT_EQ (is_kv_partialsorted_, true );
348
-
362
+ # endif
349
363
key.clear ();
350
364
val.clear ();
351
365
key_bckp.clear ();
@@ -361,14 +375,17 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_descending)
361
375
for (auto type : this ->arrtype ) {
362
376
bool hasnan = is_nan_test (type);
363
377
for (auto size : this ->arrsize ) {
364
- size_t k = rand () % size;
378
+ size_t k = size != 0 ? rand () % size : 0 ;
365
379
366
380
std::vector<T1> key = get_array<T1>(type, size);
367
381
std::vector<T2> val = get_array<T2>(type, size);
368
382
std::vector<T1> key_bckp = key;
369
383
std::vector<T2> val_bckp = val;
384
+
370
385
x86simdsort::keyvalue_partial_sort (
371
386
key.data (), val.data (), k, size, hasnan, true );
387
+ #ifndef XSS_ASAN_CI_NOCHECK
388
+ if (size == 0 ) continue ;
372
389
xss::scalar::keyvalue_qsort (
373
390
key_bckp.data (), val_bckp.data (), size, hasnan, true );
374
391
@@ -382,7 +399,7 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_descending)
382
399
size,
383
400
k);
384
401
ASSERT_EQ (is_kv_partialsorted_, true );
385
-
402
+ # endif
386
403
key.clear ();
387
404
val.clear ();
388
405
key_bckp.clear ();
0 commit comments