summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMarshall Clow <mclow.lists@gmail.com>2018-01-03 04:37:30 +0000
committerMarshall Clow <mclow.lists@gmail.com>2018-01-03 04:37:30 +0000
commit3e653d6c9b2a0e7dfbb25bfeb1bb81ca9ef8a60f (patch)
tree390cf0095340276dd843e025c14e545ba64b72ff /test
parent1fb741dfe2deb1fb518b87113f18cb7ac70fb34d (diff)
Mark LWG2824 as complete. We already did it, but I added a test to be sure
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@321689 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp b/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp
index 517eb62cc..c8966f6fc 100644
--- a/test/std/containers/sequences/list/list.ops/sort_comp.pass.cpp
+++ b/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};