Skip to content

Commit 93b625e

Browse files
author
Raghuveer Devulapalli
committed
Remove duplicate code in IS_ARR_PARTITIONED
1 parent 9d508c1 commit 93b625e

File tree

1 file changed

+27
-49
lines changed

1 file changed

+27
-49
lines changed

tests/test-qsort-common.h

Lines changed: 27 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -49,60 +49,38 @@ void IS_ARR_PARTITIONED(std::vector<T> arr,
4949
std::string type,
5050
bool descending = false)
5151
{
52-
if (!descending) {
53-
auto cmp_eq = compare<T, std::equal_to<T>>();
54-
auto cmp_less = compare<T, std::less<T>>();
55-
56-
auto cmp_leq = compare<T, std::less_equal<T>>();
57-
auto cmp_geq = compare<T, std::greater_equal<T>>();
52+
std::function<bool(T, T)> cmp_eq, cmp_less, cmp_leq, cmp_geq;
53+
cmp_eq = compare<T, std::equal_to<T>>();
5854

59-
// 1) arr[k] == sorted[k]; use memcmp to handle nan
60-
if (!cmp_eq(arr[k], true_kth)) {
61-
REPORT_FAIL("kth element is incorrect", arr.size(), type, k);
62-
}
63-
// ( 2) Elements to the left of k should be atmost arr[k]
64-
if (k >= 1) {
65-
T max_left = *std::max_element(
66-
arr.begin(), arr.begin() + k - 1, cmp_less);
67-
if (!cmp_geq(arr[k], max_left)) {
68-
REPORT_FAIL("incorrect left partition", arr.size(), type, k);
69-
}
70-
}
71-
// 3) Elements to the right of k should be atleast arr[k]
72-
if (k != (size_t)(arr.size() - 1)) {
73-
T min_right = *std::min_element(
74-
arr.begin() + k + 1, arr.end(), cmp_less);
75-
if (!cmp_leq(arr[k], min_right)) {
76-
REPORT_FAIL("incorrect right partition", arr.size(), type, k);
77-
}
78-
}
55+
if (!descending) {
56+
cmp_less = compare<T, std::less<T>>();
57+
cmp_leq = compare<T, std::less_equal<T>>();
58+
cmp_geq = compare<T, std::greater_equal<T>>();
7959
}
8060
else {
81-
auto cmp_eq = compare<T, std::equal_to<T>>();
82-
auto cmp_less = compare<T, std::greater<T>>();
83-
84-
auto cmp_leq = compare<T, std::greater_equal<T>>();
85-
auto cmp_geq = compare<T, std::less_equal<T>>();
61+
cmp_less = compare<T, std::greater<T>>();
62+
cmp_leq = compare<T, std::greater_equal<T>>();
63+
cmp_geq = compare<T, std::less_equal<T>>();
64+
}
8665

87-
// 1) arr[k] == sorted[k]; use memcmp to handle nan
88-
if (!cmp_eq(arr[k], true_kth)) {
89-
REPORT_FAIL("kth element is incorrect", arr.size(), type, k);
90-
}
91-
// ( 2) Elements to the left of k should be atleast arr[k]
92-
if (k >= 1) {
93-
T max_left = *std::max_element(
94-
arr.begin(), arr.begin() + k - 1, cmp_less);
95-
if (!cmp_geq(arr[k], max_left)) {
96-
REPORT_FAIL("incorrect left partition", arr.size(), type, k);
97-
}
66+
// 1) arr[k] == sorted[k]; use memcmp to handle nan
67+
if (!cmp_eq(arr[k], true_kth)) {
68+
REPORT_FAIL("kth element is incorrect", arr.size(), type, k);
69+
}
70+
// ( 2) Elements to the left of k should be atmost arr[k]
71+
if (k >= 1) {
72+
T max_left = *std::max_element(
73+
arr.begin(), arr.begin() + k - 1, cmp_less);
74+
if (!cmp_geq(arr[k], max_left)) {
75+
REPORT_FAIL("incorrect left partition", arr.size(), type, k);
9876
}
99-
// 3) Elements to the right of k should be atmost arr[k]
100-
if (k != (size_t)(arr.size() - 1)) {
101-
T min_right = *std::min_element(
102-
arr.begin() + k + 1, arr.end(), cmp_less);
103-
if (!cmp_leq(arr[k], min_right)) {
104-
REPORT_FAIL("incorrect right partition", arr.size(), type, k);
105-
}
77+
}
78+
// 3) Elements to the right of k should be atleast arr[k]
79+
if (k != (size_t)(arr.size() - 1)) {
80+
T min_right = *std::min_element(
81+
arr.begin() + k + 1, arr.end(), cmp_less);
82+
if (!cmp_leq(arr[k], min_right)) {
83+
REPORT_FAIL("incorrect right partition", arr.size(), type, k);
10684
}
10785
}
10886
}

0 commit comments

Comments
 (0)