diff options
| author | Marshall Clow <mclow.lists@gmail.com> | 2018-01-03 04:37:30 +0000 |
|---|---|---|
| committer | Marshall Clow <mclow.lists@gmail.com> | 2018-01-03 04:37:30 +0000 |
| commit | 12e17b19bab419f11070f504017b6ff3f86d673b (patch) | |
| tree | c29acb00f30ca8aba9e2a2088ed7c8afb5aa48b7 /libcxx/test/std/containers/sequences/list | |
| parent | b5153ef7e825eef4f6f5d2650ba7459c71b5682d (diff) | |
| download | bcm5719-llvm-12e17b19bab419f11070f504017b6ff3f86d673b.tar.gz bcm5719-llvm-12e17b19bab419f11070f504017b6ff3f86d673b.zip | |
Mark LWG2824 as complete. We already did it, but I added a test to be sure
llvm-svn: 321689
Diffstat (limited to 'libcxx/test/std/containers/sequences/list')
| -rw-r--r-- | libcxx/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/libcxx/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp b/libcxx/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp index 517eb62ccae..c8966f6fc8d 100644 --- a/libcxx/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp +++ b/libcxx/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp @@ -13,10 +13,29 @@ #include <list> #include <functional> +#include <algorithm> // for is_permutation #include <cassert> #include "min_allocator.h" + +#ifndef TEST_HAS_NO_EXCEPTIONS +template <typename T> +struct throwingLess { + throwingLess() : num_(1) {} + throwingLess(int num) : num_(num) {} + + bool operator() (const T& lhs, const T& rhs) const + { + if ( --num_ == 0) throw 1; + return lhs < rhs; + } + + mutable int num_; + }; +#endif + + int main() { { @@ -26,6 +45,28 @@ int main() c1.sort(std::greater<int>()); assert(c1 == std::list<int>(a2, a2+sizeof(a2)/sizeof(a2[0]))); } + +// Test with throwing comparison; make sure that nothing is lost. +// This is (sort of) LWG #2824 +#ifndef TEST_HAS_NO_EXCEPTIONS + { + int a1[] = {4, 8, 1, 0, 5, 7, 2, 3, 6, 11, 10, 9}; + const int sz = sizeof(a1)/sizeof(a1[0]); + for (int i = 0; i < 10; ++i) + { + std::list<int> c1(a1, a1 + sz); + try + { + throwingLess<int> comp(i); + c1.sort(std::cref(comp)); + } + catch (int) {} + assert((c1.size() == sz)); + assert((std::is_permutation(c1.begin(), c1.end(), a1))); + } + } +#endif + #if TEST_STD_VER >= 11 { int a1[] = {4, 8, 1, 0, 5, 7, 2, 3, 6, 11, 10, 9}; |

