@@ -14,7 +14,7 @@ class simdkvsort : public ::testing::Test {
1414public:
1515 simdkvsort ()
1616 {
17- std::iota (arrsize.begin (), arrsize.end (), 1 );
17+ std::iota (arrsize.begin (), arrsize.end (), 0 );
1818 arrsize.push_back (10'000 );
1919 arrsize.push_back (100'000 );
2020 arrsize.push_back (1'000'000 );
@@ -58,6 +58,9 @@ bool is_kv_sorted(
5858{
5959 auto cmp_eq = compare<T1, std::equal_to<T1>>();
6060
61+ // Always true for arrays of zero length
62+ if (size == 0 ) return true ;
63+
6164 // First check keys are exactly identical
6265 for (size_t i = 0 ; i < size; i++) {
6366 if (!cmp_eq (keys_comp[i], keys_ref[i])) { return false ; }
@@ -232,7 +235,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
232235 for (auto type : this ->arrtype ) {
233236 bool hasnan = is_nan_test (type);
234237 for (auto size : this ->arrsize ) {
235- size_t k = rand () % size;
238+ size_t k = size != 0 ? rand () % size : 0 ;
236239
237240 std::vector<T1> key = get_array<T1>(type, size);
238241 std::vector<T2> val = get_array<T2>(type, size);
@@ -245,6 +248,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
245248 // Test select by using it as part of partial_sort
246249 x86simdsort::keyvalue_select (
247250 key.data (), val.data (), k, size, hasnan, false );
251+ if (size == 0 ) continue ;
248252 IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type);
249253 xss::scalar::keyvalue_qsort (
250254 key.data (), val.data (), k, hasnan, false );
@@ -276,7 +280,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
276280 for (auto type : this ->arrtype ) {
277281 bool hasnan = is_nan_test (type);
278282 for (auto size : this ->arrsize ) {
279- size_t k = rand () % size;
283+ size_t k = size != 0 ? rand () % size : 0 ;
280284
281285 std::vector<T1> key = get_array<T1>(type, size);
282286 std::vector<T2> val = get_array<T2>(type, size);
@@ -289,6 +293,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
289293 // Test select by using it as part of partial_sort
290294 x86simdsort::keyvalue_select (
291295 key.data (), val.data (), k, size, hasnan, true );
296+ if (size == 0 ) continue ;
292297 IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type, true );
293298 xss::scalar::keyvalue_qsort (
294299 key.data (), val.data (), k, hasnan, true );
@@ -319,14 +324,15 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_ascending)
319324 for (auto type : this ->arrtype ) {
320325 bool hasnan = is_nan_test (type);
321326 for (auto size : this ->arrsize ) {
322- size_t k = rand () % size;
327+ size_t k = size != 0 ? rand () % size : 0 ;
323328
324329 std::vector<T1> key = get_array<T1>(type, size);
325330 std::vector<T2> val = get_array<T2>(type, size);
326331 std::vector<T1> key_bckp = key;
327332 std::vector<T2> val_bckp = val;
328333 x86simdsort::keyvalue_partial_sort (
329334 key.data (), val.data (), k, size, hasnan, false );
335+ if (size == 0 ) continue ;
330336 xss::scalar::keyvalue_qsort (
331337 key_bckp.data (), val_bckp.data (), size, hasnan, false );
332338
@@ -356,14 +362,15 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_descending)
356362 for (auto type : this ->arrtype ) {
357363 bool hasnan = is_nan_test (type);
358364 for (auto size : this ->arrsize ) {
359- size_t k = rand () % size;
365+ size_t k = size != 0 ? rand () % size : 0 ;
360366
361367 std::vector<T1> key = get_array<T1>(type, size);
362368 std::vector<T2> val = get_array<T2>(type, size);
363369 std::vector<T1> key_bckp = key;
364370 std::vector<T2> val_bckp = val;
365371 x86simdsort::keyvalue_partial_sort (
366372 key.data (), val.data (), k, size, hasnan, true );
373+ if (size == 0 ) continue ;
367374 xss::scalar::keyvalue_qsort (
368375 key_bckp.data (), val_bckp.data (), size, hasnan, true );
369376
0 commit comments