Skip to content

Commit f57e0ac

Browse files
committed
Simplified scalar logic for kv-select and key-value partial-sort
1 parent 56623b1 commit f57e0ac

File tree

2 files changed

+7
-81
lines changed

2 files changed

+7
-81
lines changed

lib/x86simdsort-scalar.h

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,9 @@ namespace scalar {
115115
bool hasnan,
116116
bool descending)
117117
{
118-
if (k == 0) return;
119-
// Note that this does a full partial sort, not just a select
120-
std::vector<size_t> arg = argsort(key, arrsize, hasnan, descending);
121-
//arg.resize(k);
122-
123-
utils::apply_permutation_in_place(key, arg);
124-
utils::apply_permutation_in_place(val, arg);
118+
// Note that this does a full kv-sort
119+
UNUSED(k);
120+
keyvalue_qsort(key, val, arrsize, hasnan, descending);
125121
}
126122
template <typename T1, typename T2>
127123
void keyvalue_partial_sort(T1 *key,
@@ -131,12 +127,9 @@ namespace scalar {
131127
bool hasnan,
132128
bool descending)
133129
{
134-
if (k == 0) return;
135-
std::vector<size_t> arg = argsort(key, arrsize, hasnan, descending);
136-
//arg.resize(k);
137-
138-
utils::apply_permutation_in_place(key, arg);
139-
utils::apply_permutation_in_place(val, arg);
130+
// Note that this does a full kv-sort
131+
UNUSED(k);
132+
keyvalue_qsort(key, val, arrsize, hasnan, descending);
140133
}
141134

142135
} // namespace scalar

tests/test-keyvalue.cpp

Lines changed: 1 addition & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -369,80 +369,13 @@ TYPED_TEST_P(simdkvsort, test_kvpartial_sort_descending)
369369
}
370370
}
371371

372-
TYPED_TEST_P(simdkvsort, test_validator)
373-
{
374-
// Tests a few edge cases to verify the tests are working correctly and identifying it as functional
375-
using T1 = typename std::tuple_element<0, decltype(TypeParam())>::type;
376-
using T2 = typename std::tuple_element<1, decltype(TypeParam())>::type;
377-
378-
bool is_kv_equivalent;
379-
380-
std::vector<T1> key = {0, 0, 1, 1};
381-
std::vector<T2> val = {1, 2, 3, 4};
382-
std::vector<T1> key_bckp = key;
383-
std::vector<T2> val_bckp = val;
384-
385-
// Duplicate keys, but otherwise exactly identical
386-
is_kv_equivalent = is_kv_sorted<T1, T2>(key.data(),
387-
val.data(),
388-
key_bckp.data(),
389-
val_bckp.data(),
390-
key.size());
391-
ASSERT_EQ(is_kv_equivalent, true);
392-
393-
val = {2, 1, 4, 3};
394-
395-
// Now values are backwards, but this is still fine
396-
is_kv_equivalent = is_kv_sorted<T1, T2>(key.data(),
397-
val.data(),
398-
key_bckp.data(),
399-
val_bckp.data(),
400-
key.size());
401-
ASSERT_EQ(is_kv_equivalent, true);
402-
403-
val = {1, 3, 2, 4};
404-
405-
// Now values are mixed up, should fail
406-
is_kv_equivalent = is_kv_sorted<T1, T2>(key.data(),
407-
val.data(),
408-
key_bckp.data(),
409-
val_bckp.data(),
410-
key.size());
411-
ASSERT_EQ(is_kv_equivalent, false);
412-
413-
val = {1, 2, 3, 4};
414-
key = {0, 0, 0, 0};
415-
416-
// Now keys are messed up, should fail
417-
is_kv_equivalent = is_kv_sorted<T1, T2>(key.data(),
418-
val.data(),
419-
key_bckp.data(),
420-
val_bckp.data(),
421-
key.size());
422-
ASSERT_EQ(is_kv_equivalent, false);
423-
424-
key = {0, 0, 0, 0, 0, 0};
425-
key_bckp = key;
426-
val_bckp = {1, 2, 3, 4, 5, 6};
427-
val = {4, 3, 1, 6, 5, 2};
428-
429-
// All keys identical, simply reordered values
430-
is_kv_equivalent = is_kv_sorted<T1, T2>(key.data(),
431-
val.data(),
432-
key_bckp.data(),
433-
val_bckp.data(),
434-
key.size());
435-
ASSERT_EQ(is_kv_equivalent, true);
436-
}
437-
438372
REGISTER_TYPED_TEST_SUITE_P(simdkvsort,
439373
test_kvsort_ascending,
440374
test_kvsort_descending,
441375
test_kvselect_ascending,
442376
test_kvselect_descending,
443377
test_kvpartial_sort_ascending,
444-
test_kvpartial_sort_descending,
445-
test_validator);
378+
test_kvpartial_sort_descending);
446379

447380
#define CREATE_TUPLES(type) \
448381
std::tuple<double, type>, std::tuple<uint64_t, type>, \

0 commit comments

Comments
 (0)