@@ -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" 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" 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" 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" 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" 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" 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" 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