@@ -14,7 +14,7 @@ class simdkvsort : public ::testing::Test {
14
14
public:
15
15
simdkvsort ()
16
16
{
17
- std::iota (arrsize.begin (), arrsize.end (), 1 );
17
+ std::iota (arrsize.begin (), arrsize.end (), 0 );
18
18
arrsize.push_back (10'000 );
19
19
arrsize.push_back (100'000 );
20
20
arrsize.push_back (1'000'000 );
@@ -58,6 +58,9 @@ bool is_kv_sorted(
58
58
{
59
59
auto cmp_eq = compare<T1, std::equal_to<T1>>();
60
60
61
+ // Always true for arrays of zero length
62
+ if (size == 0 ) return true ;
63
+
61
64
// First check keys are exactly identical
62
65
for (size_t i = 0 ; i < size; i++) {
63
66
if (!cmp_eq (keys_comp[i], keys_ref[i])) { return false ; }
@@ -232,7 +235,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
232
235
for (auto type : this ->arrtype ) {
233
236
bool hasnan = is_nan_test (type);
234
237
for (auto size : this ->arrsize ) {
235
- size_t k = rand () % size;
238
+ size_t k = size != 0 ? rand () % size : 0 ;
236
239
237
240
std::vector<T1> key = get_array<T1>(type, size);
238
241
std::vector<T2> val = get_array<T2>(type, size);
@@ -245,6 +248,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
245
248
// Test select by using it as part of partial_sort
246
249
x86simdsort::keyvalue_select (
247
250
key.data (), val.data (), k, size, hasnan, false );
251
+ if (size == 0 ) continue ;
248
252
IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type);
249
253
xss::scalar::keyvalue_qsort (
250
254
key.data (), val.data (), k, hasnan, false );
@@ -276,7 +280,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
276
280
for (auto type : this ->arrtype ) {
277
281
bool hasnan = is_nan_test (type);
278
282
for (auto size : this ->arrsize ) {
279
- size_t k = rand () % size;
283
+ size_t k = size != 0 ? rand () % size : 0 ;
280
284
281
285
std::vector<T1> key = get_array<T1>(type, size);
282
286
std::vector<T2> val = get_array<T2>(type, size);
@@ -289,6 +293,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
289
293
// Test select by using it as part of partial_sort
290
294
x86simdsort::keyvalue_select (
291
295
key.data (), val.data (), k, size, hasnan, true );
296
+ if (size == 0 ) continue ;
292
297
IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type, true );
293
298
xss::scalar::keyvalue_qsort (
294
299
key.data (), val.data (), k, hasnan, true );
@@ -319,14 +324,15 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_ascending)
319
324
for (auto type : this ->arrtype ) {
320
325
bool hasnan = is_nan_test (type);
321
326
for (auto size : this ->arrsize ) {
322
- size_t k = rand () % size;
327
+ size_t k = size != 0 ? rand () % size : 0 ;
323
328
324
329
std::vector<T1> key = get_array<T1>(type, size);
325
330
std::vector<T2> val = get_array<T2>(type, size);
326
331
std::vector<T1> key_bckp = key;
327
332
std::vector<T2> val_bckp = val;
328
333
x86simdsort::keyvalue_partial_sort (
329
334
key.data (), val.data (), k, size, hasnan, false );
335
+ if (size == 0 ) continue ;
330
336
xss::scalar::keyvalue_qsort (
331
337
key_bckp.data (), val_bckp.data (), size, hasnan, false );
332
338
@@ -356,14 +362,15 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_descending)
356
362
for (auto type : this ->arrtype ) {
357
363
bool hasnan = is_nan_test (type);
358
364
for (auto size : this ->arrsize ) {
359
- size_t k = rand () % size;
365
+ size_t k = size != 0 ? rand () % size : 0 ;
360
366
361
367
std::vector<T1> key = get_array<T1>(type, size);
362
368
std::vector<T2> val = get_array<T2>(type, size);
363
369
std::vector<T1> key_bckp = key;
364
370
std::vector<T2> val_bckp = val;
365
371
x86simdsort::keyvalue_partial_sort (
366
372
key.data (), val.data (), k, size, hasnan, true );
373
+ if (size == 0 ) continue ;
367
374
xss::scalar::keyvalue_qsort (
368
375
key_bckp.data (), val_bckp.data (), size, hasnan, true );
369
376
0 commit comments