@@ -14,8 +14,8 @@ class simdkvsort : public ::testing::Test {
1414public:
1515 simdkvsort ()
1616 {
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 );
1919#ifdef XSS_USE_OPENMP
2020 // These extended tests are only needed for the OpenMP logic
2121 arrsize_long.push_back (10'000 );
@@ -63,6 +63,9 @@ bool is_kv_sorted(
6363{
6464 auto cmp_eq = compare<T1, std::equal_to<T1>>();
6565
66+ // Always true for arrays of zero length
67+ if (size == 0 ) return true ;
68+
6669 // First check keys are exactly identical
6770 for (size_t i = 0 ; i < size; i++) {
6871 if (!cmp_eq (keys_comp[i], keys_ref[i])) { return false ; }
@@ -237,7 +240,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
237240 for (auto type : this ->arrtype ) {
238241 bool hasnan = is_nan_test (type);
239242 for (auto size : this ->arrsize ) {
240- size_t k = rand () % size;
243+ size_t k = size != 0 ? rand () % size : 0 ;
241244
242245 std::vector<T1> key = get_array<T1>(type, size);
243246 std::vector<T2> val = get_array<T2>(type, size);
@@ -250,6 +253,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
250253 // Test select by using it as part of partial_sort
251254 x86simdsort::keyvalue_select (
252255 key.data (), val.data (), k, size, hasnan, false );
256+ if (size == 0 ) continue ;
253257 IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type);
254258 xss::scalar::keyvalue_qsort (
255259 key.data (), val.data (), k, hasnan, false );
@@ -281,7 +285,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
281285 for (auto type : this ->arrtype ) {
282286 bool hasnan = is_nan_test (type);
283287 for (auto size : this ->arrsize ) {
284- size_t k = rand () % size;
288+ size_t k = size != 0 ? rand () % size : 0 ;
285289
286290 std::vector<T1> key = get_array<T1>(type, size);
287291 std::vector<T2> val = get_array<T2>(type, size);
@@ -294,6 +298,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
294298 // Test select by using it as part of partial_sort
295299 x86simdsort::keyvalue_select (
296300 key.data (), val.data (), k, size, hasnan, true );
301+ if (size == 0 ) continue ;
297302 IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type, true );
298303 xss::scalar::keyvalue_qsort (
299304 key.data (), val.data (), k, hasnan, true );
@@ -324,14 +329,15 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_ascending)
324329 for (auto type : this ->arrtype ) {
325330 bool hasnan = is_nan_test (type);
326331 for (auto size : this ->arrsize ) {
327- size_t k = rand () % size;
332+ size_t k = size != 0 ? rand () % size : 0 ;
328333
329334 std::vector<T1> key = get_array<T1>(type, size);
330335 std::vector<T2> val = get_array<T2>(type, size);
331336 std::vector<T1> key_bckp = key;
332337 std::vector<T2> val_bckp = val;
333338 x86simdsort::keyvalue_partial_sort (
334339 key.data (), val.data (), k, size, hasnan, false );
340+ if (size == 0 ) continue ;
335341 xss::scalar::keyvalue_qsort (
336342 key_bckp.data (), val_bckp.data (), size, hasnan, false );
337343
@@ -361,14 +367,15 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_descending)
361367 for (auto type : this ->arrtype ) {
362368 bool hasnan = is_nan_test (type);
363369 for (auto size : this ->arrsize ) {
364- size_t k = rand () % size;
370+ size_t k = size != 0 ? rand () % size : 0 ;
365371
366372 std::vector<T1> key = get_array<T1>(type, size);
367373 std::vector<T2> val = get_array<T2>(type, size);
368374 std::vector<T1> key_bckp = key;
369375 std::vector<T2> val_bckp = val;
370376 x86simdsort::keyvalue_partial_sort (
371377 key.data (), val.data (), k, size, hasnan, true );
378+ if (size == 0 ) continue ;
372379 xss::scalar::keyvalue_qsort (
373380 key_bckp.data (), val_bckp.data (), size, hasnan, true );
374381
0 commit comments