@@ -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 ; }
@@ -237,7 +240,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
237
240
for (auto type : this ->arrtype ) {
238
241
bool hasnan = is_nan_test (type);
239
242
for (auto size : this ->arrsize ) {
240
- size_t k = rand () % size;
243
+ size_t k = size != 0 ? rand () % size : 0 ;
241
244
242
245
std::vector<T1> key = get_array<T1>(type, size);
243
246
std::vector<T2> val = get_array<T2>(type, size);
@@ -250,6 +253,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
250
253
// Test select by using it as part of partial_sort
251
254
x86simdsort::keyvalue_select (
252
255
key.data (), val.data (), k, size, hasnan, false );
256
+ if (size == 0 ) continue ;
253
257
IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type);
254
258
xss::scalar::keyvalue_qsort (
255
259
key.data (), val.data (), k, hasnan, false );
@@ -281,7 +285,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
281
285
for (auto type : this ->arrtype ) {
282
286
bool hasnan = is_nan_test (type);
283
287
for (auto size : this ->arrsize ) {
284
- size_t k = rand () % size;
288
+ size_t k = size != 0 ? rand () % size : 0 ;
285
289
286
290
std::vector<T1> key = get_array<T1>(type, size);
287
291
std::vector<T2> val = get_array<T2>(type, size);
@@ -294,6 +298,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
294
298
// Test select by using it as part of partial_sort
295
299
x86simdsort::keyvalue_select (
296
300
key.data (), val.data (), k, size, hasnan, true );
301
+ if (size == 0 ) continue ;
297
302
IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type, true );
298
303
xss::scalar::keyvalue_qsort (
299
304
key.data (), val.data (), k, hasnan, true );
@@ -324,14 +329,15 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_ascending)
324
329
for (auto type : this ->arrtype ) {
325
330
bool hasnan = is_nan_test (type);
326
331
for (auto size : this ->arrsize ) {
327
- size_t k = rand () % size;
332
+ size_t k = size != 0 ? rand () % size : 0 ;
328
333
329
334
std::vector<T1> key = get_array<T1>(type, size);
330
335
std::vector<T2> val = get_array<T2>(type, size);
331
336
std::vector<T1> key_bckp = key;
332
337
std::vector<T2> val_bckp = val;
333
338
x86simdsort::keyvalue_partial_sort (
334
339
key.data (), val.data (), k, size, hasnan, false );
340
+ if (size == 0 ) continue ;
335
341
xss::scalar::keyvalue_qsort (
336
342
key_bckp.data (), val_bckp.data (), size, hasnan, false );
337
343
@@ -361,14 +367,15 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_descending)
361
367
for (auto type : this ->arrtype ) {
362
368
bool hasnan = is_nan_test (type);
363
369
for (auto size : this ->arrsize ) {
364
- size_t k = rand () % size;
370
+ size_t k = size != 0 ? rand () % size : 0 ;
365
371
366
372
std::vector<T1> key = get_array<T1>(type, size);
367
373
std::vector<T2> val = get_array<T2>(type, size);
368
374
std::vector<T1> key_bckp = key;
369
375
std::vector<T2> val_bckp = val;
370
376
x86simdsort::keyvalue_partial_sort (
371
377
key.data (), val.data (), k, size, hasnan, true );
378
+ if (size == 0 ) continue ;
372
379
xss::scalar::keyvalue_qsort (
373
380
key_bckp.data (), val_bckp.data (), size, hasnan, true );
374
381
0 commit comments