@@ -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 ; }
@@ -178,8 +181,10 @@ TYPED_TEST_P(simdkvsort, test_kvsort_ascending)
178181 std::vector<T2> val = get_array<T2>(type, size);
179182 std::vector<T1> key_bckp = key;
180183 std::vector<T2> val_bckp = val;
184+
181185 x86simdsort::keyvalue_qsort (
182186 key.data (), val.data (), size, hasnan, false );
187+ #ifndef XSS_ASAN_CI_NOCHECK
183188 xss::scalar::keyvalue_qsort (
184189 key_bckp.data (), val_bckp.data (), size, hasnan, false );
185190
@@ -189,7 +194,7 @@ TYPED_TEST_P(simdkvsort, test_kvsort_ascending)
189194 val_bckp.data (),
190195 size);
191196 ASSERT_EQ (is_kv_sorted_, true );
192-
197+ # endif
193198 key.clear ();
194199 val.clear ();
195200 key_bckp.clear ();
@@ -209,8 +214,10 @@ TYPED_TEST_P(simdkvsort, test_kvsort_descending)
209214 std::vector<T2> val = get_array<T2>(type, size);
210215 std::vector<T1> key_bckp = key;
211216 std::vector<T2> val_bckp = val;
217+
212218 x86simdsort::keyvalue_qsort (
213219 key.data (), val.data (), size, hasnan, true );
220+ #ifndef XSS_ASAN_CI_NOCHECK
214221 xss::scalar::keyvalue_qsort (
215222 key_bckp.data (), val_bckp.data (), size, hasnan, true );
216223
@@ -220,7 +227,7 @@ TYPED_TEST_P(simdkvsort, test_kvsort_descending)
220227 val_bckp.data (),
221228 size);
222229 ASSERT_EQ (is_kv_sorted_, true );
223-
230+ # endif
224231 key.clear ();
225232 val.clear ();
226233 key_bckp.clear ();
@@ -237,19 +244,21 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
237244 for (auto type : this ->arrtype ) {
238245 bool hasnan = is_nan_test (type);
239246 for (auto size : this ->arrsize ) {
240- size_t k = rand () % size;
247+ size_t k = size != 0 ? rand () % size : 0 ;
241248
242249 std::vector<T1> key = get_array<T1>(type, size);
243250 std::vector<T2> val = get_array<T2>(type, size);
244251 std::vector<T1> key_bckp = key;
245252 std::vector<T2> val_bckp = val;
246253
254+ x86simdsort::keyvalue_select (
255+ key.data (), val.data (), k, size, hasnan, false );
256+ #ifndef XSS_ASAN_CI_NOCHECK
247257 xss::scalar::keyvalue_qsort (
248258 key_bckp.data (), val_bckp.data (), size, hasnan, false );
249259
250260 // Test select by using it as part of partial_sort
251- x86simdsort::keyvalue_select (
252- key.data (), val.data (), k, size, hasnan, false );
261+ if (size == 0 ) continue ;
253262 IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type);
254263 xss::scalar::keyvalue_qsort (
255264 key.data (), val.data (), k, hasnan, false );
@@ -264,7 +273,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_ascending)
264273 size,
265274 k);
266275 ASSERT_EQ (is_kv_partialsorted_, true );
267-
276+ # endif
268277 key.clear ();
269278 val.clear ();
270279 key_bckp.clear ();
@@ -281,19 +290,21 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
281290 for (auto type : this ->arrtype ) {
282291 bool hasnan = is_nan_test (type);
283292 for (auto size : this ->arrsize ) {
284- size_t k = rand () % size;
293+ size_t k = size != 0 ? rand () % size : 0 ;
285294
286295 std::vector<T1> key = get_array<T1>(type, size);
287296 std::vector<T2> val = get_array<T2>(type, size);
288297 std::vector<T1> key_bckp = key;
289298 std::vector<T2> val_bckp = val;
290299
300+ x86simdsort::keyvalue_select (
301+ key.data (), val.data (), k, size, hasnan, true );
302+ #ifndef XSS_ASAN_CI_NOCHECK
291303 xss::scalar::keyvalue_qsort (
292304 key_bckp.data (), val_bckp.data (), size, hasnan, true );
293305
294306 // Test select by using it as part of partial_sort
295- x86simdsort::keyvalue_select (
296- key.data (), val.data (), k, size, hasnan, true );
307+ if (size == 0 ) continue ;
297308 IS_ARR_PARTITIONED<T1>(key, k, key_bckp[k], type, true );
298309 xss::scalar::keyvalue_qsort (
299310 key.data (), val.data (), k, hasnan, true );
@@ -308,7 +319,7 @@ TYPED_TEST_P(simdkvsort, test_kvselect_descending)
308319 size,
309320 k);
310321 ASSERT_EQ (is_kv_partialsorted_, true );
311-
322+ # endif
312323 key.clear ();
313324 val.clear ();
314325 key_bckp.clear ();
@@ -324,14 +335,17 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_ascending)
324335 for (auto type : this ->arrtype ) {
325336 bool hasnan = is_nan_test (type);
326337 for (auto size : this ->arrsize ) {
327- size_t k = rand () % size;
338+ size_t k = size != 0 ? rand () % size : 0 ;
328339
329340 std::vector<T1> key = get_array<T1>(type, size);
330341 std::vector<T2> val = get_array<T2>(type, size);
331342 std::vector<T1> key_bckp = key;
332343 std::vector<T2> val_bckp = val;
344+
333345 x86simdsort::keyvalue_partial_sort (
334346 key.data (), val.data (), k, size, hasnan, false );
347+ #ifndef XSS_ASAN_CI_NOCHECK
348+ if (size == 0 ) continue ;
335349 xss::scalar::keyvalue_qsort (
336350 key_bckp.data (), val_bckp.data (), size, hasnan, false );
337351
@@ -345,7 +359,7 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_ascending)
345359 size,
346360 k);
347361 ASSERT_EQ (is_kv_partialsorted_, true );
348-
362+ # endif
349363 key.clear ();
350364 val.clear ();
351365 key_bckp.clear ();
@@ -361,14 +375,17 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_descending)
361375 for (auto type : this ->arrtype ) {
362376 bool hasnan = is_nan_test (type);
363377 for (auto size : this ->arrsize ) {
364- size_t k = rand () % size;
378+ size_t k = size != 0 ? rand () % size : 0 ;
365379
366380 std::vector<T1> key = get_array<T1>(type, size);
367381 std::vector<T2> val = get_array<T2>(type, size);
368382 std::vector<T1> key_bckp = key;
369383 std::vector<T2> val_bckp = val;
384+
370385 x86simdsort::keyvalue_partial_sort (
371386 key.data (), val.data (), k, size, hasnan, true );
387+ #ifndef XSS_ASAN_CI_NOCHECK
388+ if (size == 0 ) continue ;
372389 xss::scalar::keyvalue_qsort (
373390 key_bckp.data (), val_bckp.data (), size, hasnan, true );
374391
@@ -382,7 +399,7 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_descending)
382399 size,
383400 k);
384401 ASSERT_EQ (is_kv_partialsorted_, true );
385-
402+ # endif
386403 key.clear ();
387404 val.clear ();
388405 key_bckp.clear ();
0 commit comments