@@ -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 );
@@ -56,6 +56,9 @@ bool is_kv_sorted(
5656{
5757 auto cmp_eq = compare<T1, std::equal_to<T1>>();
5858
59+ // Always true for arrays of zero length
60+ if (size == 0 ) return true ;
61+
5962 // First check keys are exactly identical
6063 for (size_t i = 0 ; i < size; i++) {
6164 if (!cmp_eq (keys_comp[i], keys_ref[i])) { return false ; }
@@ -220,7 +223,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
220223 for (auto type : this ->arrtype ) {
221224 bool hasnan = (type == " rand_with_nan" ) ? true : false ;
222225 for (auto size : this ->arrsize ) {
223- size_t k = rand () % size;
226+ size_t k = size != 0 ? rand () % size : 0 ;
224227
225228 std::vector<T1> key = get_array<T1>(type, size);
226229 std::vector<T2> val = get_array<T2>(type, size);
@@ -233,6 +236,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
233236 // Test select by using it as part of partial_sort
234237 x86simdsort::keyvalue_select (
235238 key.data (), val.data (), k, size, hasnan, false );
239+ if (size == 0 ) continue ;
236240 IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type);
237241 xss::scalar::keyvalue_qsort (
238242 key.data (), val.data (), k, hasnan, false );
@@ -263,7 +267,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
263267 for (auto type : this ->arrtype ) {
264268 bool hasnan = (type == " rand_with_nan" ) ? true : false ;
265269 for (auto size : this ->arrsize ) {
266- size_t k = rand () % size;
270+ size_t k = size != 0 ? rand () % size : 0 ;
267271
268272 std::vector<T1> key = get_array<T1>(type, size);
269273 std::vector<T2> val = get_array<T2>(type, size);
@@ -276,6 +280,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
276280 // Test select by using it as part of partial_sort
277281 x86simdsort::keyvalue_select (
278282 key.data (), val.data (), k, size, hasnan, true );
283+ if (size == 0 ) continue ;
279284 IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type, true );
280285 xss::scalar::keyvalue_qsort (
281286 key.data (), val.data (), k, hasnan, true );
@@ -306,14 +311,15 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_ascending)
306311 for (auto type : this ->arrtype ) {
307312 bool hasnan = (type == " rand_with_nan" ) ? true : false ;
308313 for (auto size : this ->arrsize ) {
309- size_t k = rand () % size;
314+ size_t k = size != 0 ? rand () % size : 0 ;
310315
311316 std::vector<T1> key = get_array<T1>(type, size);
312317 std::vector<T2> val = get_array<T2>(type, size);
313318 std::vector<T1> key_bckp = key;
314319 std::vector<T2> val_bckp = val;
315320 x86simdsort::keyvalue_partial_sort (
316321 key.data (), val.data (), k, size, hasnan, false );
322+ if (size == 0 ) continue ;
317323 xss::scalar::keyvalue_qsort (
318324 key_bckp.data (), val_bckp.data (), size, hasnan, false );
319325
@@ -343,14 +349,15 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_descending)
343349 for (auto type : this ->arrtype ) {
344350 bool hasnan = (type == " rand_with_nan" ) ? true : false ;
345351 for (auto size : this ->arrsize ) {
346- size_t k = rand () % size;
352+ size_t k = size != 0 ? rand () % size : 0 ;
347353
348354 std::vector<T1> key = get_array<T1>(type, size);
349355 std::vector<T2> val = get_array<T2>(type, size);
350356 std::vector<T1> key_bckp = key;
351357 std::vector<T2> val_bckp = val;
352358 x86simdsort::keyvalue_partial_sort (
353359 key.data (), val.data (), k, size, hasnan, true );
360+ if (size == 0 ) continue ;
354361 xss::scalar::keyvalue_qsort (
355362 key_bckp.data (), val_bckp.data (), size, hasnan, true );
356363
0 commit comments