@@ -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 );
@@ -56,6 +56,9 @@ bool is_kv_sorted(
56
56
{
57
57
auto cmp_eq = compare<T1, std::equal_to<T1>>();
58
58
59
+ // Always true for arrays of zero length
60
+ if (size == 0 ) return true ;
61
+
59
62
// First check keys are exactly identical
60
63
for (size_t i = 0 ; i < size; i++) {
61
64
if (!cmp_eq (keys_comp[i], keys_ref[i])) { return false ; }
@@ -220,7 +223,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
220
223
for (auto type : this ->arrtype ) {
221
224
bool hasnan = (type == " rand_with_nan" ) ? true : false ;
222
225
for (auto size : this ->arrsize ) {
223
- size_t k = rand () % size;
226
+ size_t k = size != 0 ? rand () % size : 0 ;
224
227
225
228
std::vector<T1> key = get_array<T1>(type, size);
226
229
std::vector<T2> val = get_array<T2>(type, size);
@@ -233,6 +236,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
233
236
// Test select by using it as part of partial_sort
234
237
x86simdsort::keyvalue_select (
235
238
key.data (), val.data (), k, size, hasnan, false );
239
+ if (size == 0 ) continue ;
236
240
IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type);
237
241
xss::scalar::keyvalue_qsort (
238
242
key.data (), val.data (), k, hasnan, false );
@@ -263,7 +267,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
263
267
for (auto type : this ->arrtype ) {
264
268
bool hasnan = (type == " rand_with_nan" ) ? true : false ;
265
269
for (auto size : this ->arrsize ) {
266
- size_t k = rand () % size;
270
+ size_t k = size != 0 ? rand () % size : 0 ;
267
271
268
272
std::vector<T1> key = get_array<T1>(type, size);
269
273
std::vector<T2> val = get_array<T2>(type, size);
@@ -276,6 +280,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
276
280
// Test select by using it as part of partial_sort
277
281
x86simdsort::keyvalue_select (
278
282
key.data (), val.data (), k, size, hasnan, true );
283
+ if (size == 0 ) continue ;
279
284
IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type, true );
280
285
xss::scalar::keyvalue_qsort (
281
286
key.data (), val.data (), k, hasnan, true );
@@ -306,14 +311,15 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_ascending)
306
311
for (auto type : this ->arrtype ) {
307
312
bool hasnan = (type == " rand_with_nan" ) ? true : false ;
308
313
for (auto size : this ->arrsize ) {
309
- size_t k = rand () % size;
314
+ size_t k = size != 0 ? rand () % size : 0 ;
310
315
311
316
std::vector<T1> key = get_array<T1>(type, size);
312
317
std::vector<T2> val = get_array<T2>(type, size);
313
318
std::vector<T1> key_bckp = key;
314
319
std::vector<T2> val_bckp = val;
315
320
x86simdsort::keyvalue_partial_sort (
316
321
key.data (), val.data (), k, size, hasnan, false );
322
+ if (size == 0 ) continue ;
317
323
xss::scalar::keyvalue_qsort (
318
324
key_bckp.data (), val_bckp.data (), size, hasnan, false );
319
325
@@ -343,14 +349,15 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_descending)
343
349
for (auto type : this ->arrtype ) {
344
350
bool hasnan = (type == " rand_with_nan" ) ? true : false ;
345
351
for (auto size : this ->arrsize ) {
346
- size_t k = rand () % size;
352
+ size_t k = size != 0 ? rand () % size : 0 ;
347
353
348
354
std::vector<T1> key = get_array<T1>(type, size);
349
355
std::vector<T2> val = get_array<T2>(type, size);
350
356
std::vector<T1> key_bckp = key;
351
357
std::vector<T2> val_bckp = val;
352
358
x86simdsort::keyvalue_partial_sort (
353
359
key.data (), val.data (), k, size, hasnan, true );
360
+ if (size == 0 ) continue ;
354
361
xss::scalar::keyvalue_qsort (
355
362
key_bckp.data (), val_bckp.data (), size, hasnan, true );
356
363
0 commit comments