int main() { int i = 0; std::partial_sort(&i, &i, &i); assert(i == 0); test_larger_sorts(10); test_larger_sorts(256); test_larger_sorts(257); test_larger_sorts(499); test_larger_sorts(500); test_larger_sorts(997); test_larger_sorts(1000); test_larger_sorts(1009); #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES { std::vector<std::unique_ptr<int> > v(1000); for (int i = 0; i < v.size(); ++i) v[i].reset(new int(i)); std::partial_sort(v.begin(), v.begin() + v.size()/2, v.end(), indirect_less()); for (int i = 0; i < v.size()/2; ++i) assert(*v[i] == i); } #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES }
void test_larger_sorts(unsigned N) { test_larger_sorts(N, 0); test_larger_sorts(N, 1); test_larger_sorts(N, 2); test_larger_sorts(N, 3); test_larger_sorts(N, N/2-1); test_larger_sorts(N, N/2); test_larger_sorts(N, N/2+1); test_larger_sorts(N, N-2); test_larger_sorts(N, N-1); test_larger_sorts(N, N); }
void test_larger_sorts(int N) { test_larger_sorts(N, 0); test_larger_sorts(N, 1); test_larger_sorts(N, 2); test_larger_sorts(N, 3); test_larger_sorts(N, N/2-1); test_larger_sorts(N, N/2); test_larger_sorts(N, N/2+1); test_larger_sorts(N, N-2); test_larger_sorts(N, N-1); test_larger_sorts(N, N); }
int main() { int i = 0; int * res = ranges::partial_sort(&i, &i, &i); CHECK(i == 0); CHECK(res == &i); test_larger_sorts(10); test_larger_sorts(256); test_larger_sorts(257); test_larger_sorts(499); test_larger_sorts(500); test_larger_sorts(997); test_larger_sorts(1000); test_larger_sorts(1009); // Check move-only types { std::vector<std::unique_ptr<int> > v(1000); for(int i = 0; i < (int)v.size(); ++i) v[i].reset(new int((int)v.size() - i - 1)); ranges::partial_sort(v, v.begin() + v.size()/2, indirect_less()); for(int i = 0; i < (int)v.size()/2; ++i) CHECK(*v[i] == i); } // Check projections { std::vector<S> v(1000, S{}); for(int i = 0; (std::size_t)i < v.size(); ++i) { v[i].i = (int)v.size() - i - 1; v[i].j = i; } ranges::partial_sort(v, v.begin() + v.size()/2, std::less<int>{}, &S::i); for(int i = 0; (std::size_t)i < v.size()/2; ++i) { CHECK(v[i].i == i); CHECK((std::size_t)v[i].j == v.size() - i - 1); } } return ::test_result(); }
int main() { // test null range int d = 0; std::stable_sort(&d, &d); // exhaustively test all possibilities up to length 8 test_sort_<1>(); test_sort_<2>(); test_sort_<3>(); test_sort_<4>(); test_sort_<5>(); test_sort_<6>(); test_sort_<7>(); test_sort_<8>(); test_larger_sorts(256); test_larger_sorts(257); test_larger_sorts(499); test_larger_sorts(500); test_larger_sorts(997); test_larger_sorts(1000); test_larger_sorts(1009); }
int main() { // test null range int d = 0; int * r = ranges::stable_sort(&d, &d); CHECK(r == &d); // exhaustively test all possibilities up to length 8 test_sort_<1>(); test_sort_<2>(); test_sort_<3>(); test_sort_<4>(); test_sort_<5>(); test_sort_<6>(); test_sort_<7>(); test_sort_<8>(); test_larger_sorts(15); test_larger_sorts(16); test_larger_sorts(17); test_larger_sorts(256); test_larger_sorts(257); test_larger_sorts(499); test_larger_sorts(500); test_larger_sorts(997); test_larger_sorts(1000); test_larger_sorts(1009); // Check move-only types { std::vector<std::unique_ptr<int> > v(1000); for(int i = 0; (std::size_t)i < v.size(); ++i) v[i].reset(new int(v.size() - i - 1)); ranges::stable_sort(v, indirect_less()); for(int i = 0; (std::size_t)i < v.size(); ++i) CHECK(*v[i] == i); } // Check projections { std::vector<S> v(1000, S{}); for(int i = 0; (std::size_t)i < v.size(); ++i) { v[i].i = v.size() - i - 1; v[i].j = i; } ranges::stable_sort(v, std::less<int>{}, &S::i); for(int i = 0; (std::size_t)i < v.size(); ++i) { CHECK(v[i].i == i); CHECK((std::size_t)v[i].j == v.size() - i - 1); } } // Check rvalue range { std::vector<S> v(1000, S{}); for(int i = 0; (std::size_t)i < v.size(); ++i) { v[i].i = v.size() - i - 1; v[i].j = i; } CHECK(ranges::stable_sort(ranges::view::all(v), std::less<int>{}, &S::i).get_unsafe() == v.end()); for(int i = 0; (std::size_t)i < v.size(); ++i) { CHECK(v[i].i == i); CHECK((std::size_t)v[i].j == v.size() - i - 1); } } return ::test_result(); }