summaryrefslogtreecommitdiffstats
path: root/libcxx/test
diff options
context:
space:
mode:
Diffstat (limited to 'libcxx/test')
-rw-r--r--libcxx/test/containers/associative/map/map.cons/default_noexcept.pass.cpp2
-rw-r--r--libcxx/test/containers/associative/map/map.cons/dtor_noexcept.pass.cpp2
-rw-r--r--libcxx/test/containers/associative/map/map.cons/move_assign_noexcept.pass.cpp2
-rw-r--r--libcxx/test/containers/associative/map/map.cons/move_noexcept.pass.cpp2
-rw-r--r--libcxx/test/containers/associative/map/map.special/swap_noexcept.pass.cpp2
-rw-r--r--libcxx/test/containers/associative/multimap/multimap.cons/default_noexcept.pass.cpp2
-rw-r--r--libcxx/test/containers/associative/multimap/multimap.cons/dtor_noexcept.pass.cpp2
-rw-r--r--libcxx/test/containers/associative/multimap/multimap.cons/move_assign_noexcept.pass.cpp2
-rw-r--r--libcxx/test/containers/associative/multimap/multimap.cons/move_noexcept.pass.cpp2
-rw-r--r--libcxx/test/containers/associative/multimap/multimap.special/swap_noexcept.pass.cpp2
-rw-r--r--libcxx/test/containers/associative/multiset/multiset.cons/default_noexcept.pass.cpp53
-rw-r--r--libcxx/test/containers/associative/multiset/multiset.cons/dtor_noexcept.pass.cpp51
-rw-r--r--libcxx/test/containers/associative/multiset/multiset.cons/move_assign_noexcept.pass.cpp53
-rw-r--r--libcxx/test/containers/associative/multiset/multiset.cons/move_noexcept.pass.cpp51
-rw-r--r--libcxx/test/containers/associative/multiset/multiset.special/swap_noexcept.pass.cpp60
-rw-r--r--libcxx/test/containers/associative/set/set.cons/default_noexcept.pass.cpp53
-rw-r--r--libcxx/test/containers/associative/set/set.cons/dtor_noexcept.pass.cpp51
-rw-r--r--libcxx/test/containers/associative/set/set.cons/move_assign_noexcept.pass.cpp53
-rw-r--r--libcxx/test/containers/associative/set/set.cons/move_noexcept.pass.cpp51
-rw-r--r--libcxx/test/containers/associative/set/set.special/non_member_swap.pass.cpp4
-rw-r--r--libcxx/test/containers/associative/set/set.special/swap_noexcept.pass.cpp60
21 files changed, 548 insertions, 12 deletions
diff --git a/libcxx/test/containers/associative/map/map.cons/default_noexcept.pass.cpp b/libcxx/test/containers/associative/map/map.cons/default_noexcept.pass.cpp
index 4e497b92a23..d673c6d673e 100644
--- a/libcxx/test/containers/associative/map/map.cons/default_noexcept.pass.cpp
+++ b/libcxx/test/containers/associative/map/map.cons/default_noexcept.pass.cpp
@@ -42,7 +42,7 @@ int main()
static_assert(std::is_nothrow_default_constructible<C>::value, "");
}
{
- typedef std::map<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ typedef std::map<MoveOnly, MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
static_assert(!std::is_nothrow_default_constructible<C>::value, "");
}
{
diff --git a/libcxx/test/containers/associative/map/map.cons/dtor_noexcept.pass.cpp b/libcxx/test/containers/associative/map/map.cons/dtor_noexcept.pass.cpp
index c3b99707c87..a563371aca9 100644
--- a/libcxx/test/containers/associative/map/map.cons/dtor_noexcept.pass.cpp
+++ b/libcxx/test/containers/associative/map/map.cons/dtor_noexcept.pass.cpp
@@ -40,7 +40,7 @@ int main()
static_assert(std::is_nothrow_destructible<C>::value, "");
}
{
- typedef std::map<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ typedef std::map<MoveOnly, MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
static_assert(std::is_nothrow_destructible<C>::value, "");
}
{
diff --git a/libcxx/test/containers/associative/map/map.cons/move_assign_noexcept.pass.cpp b/libcxx/test/containers/associative/map/map.cons/move_assign_noexcept.pass.cpp
index 4a35a9227de..3bc1e68585f 100644
--- a/libcxx/test/containers/associative/map/map.cons/move_assign_noexcept.pass.cpp
+++ b/libcxx/test/containers/associative/map/map.cons/move_assign_noexcept.pass.cpp
@@ -42,7 +42,7 @@ int main()
static_assert(!std::is_nothrow_move_assignable<C>::value, "");
}
{
- typedef std::map<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ typedef std::map<MoveOnly, MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
static_assert(std::is_nothrow_move_assignable<C>::value, "");
}
{
diff --git a/libcxx/test/containers/associative/map/map.cons/move_noexcept.pass.cpp b/libcxx/test/containers/associative/map/map.cons/move_noexcept.pass.cpp
index 18b595fd739..e9ec1202927 100644
--- a/libcxx/test/containers/associative/map/map.cons/move_noexcept.pass.cpp
+++ b/libcxx/test/containers/associative/map/map.cons/move_noexcept.pass.cpp
@@ -40,7 +40,7 @@ int main()
static_assert(std::is_nothrow_move_constructible<C>::value, "");
}
{
- typedef std::map<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ typedef std::map<MoveOnly, MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
static_assert(std::is_nothrow_move_constructible<C>::value, "");
}
{
diff --git a/libcxx/test/containers/associative/map/map.special/swap_noexcept.pass.cpp b/libcxx/test/containers/associative/map/map.special/swap_noexcept.pass.cpp
index 5f75032ea59..ef2ef040379 100644
--- a/libcxx/test/containers/associative/map/map.special/swap_noexcept.pass.cpp
+++ b/libcxx/test/containers/associative/map/map.special/swap_noexcept.pass.cpp
@@ -47,7 +47,7 @@ int main()
static_assert(noexcept(swap(c1, c2)), "");
}
{
- typedef std::map<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ typedef std::map<MoveOnly, MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
C c1, c2;
static_assert(noexcept(swap(c1, c2)), "");
}
diff --git a/libcxx/test/containers/associative/multimap/multimap.cons/default_noexcept.pass.cpp b/libcxx/test/containers/associative/multimap/multimap.cons/default_noexcept.pass.cpp
index 56f119a2201..a144ba9406d 100644
--- a/libcxx/test/containers/associative/multimap/multimap.cons/default_noexcept.pass.cpp
+++ b/libcxx/test/containers/associative/multimap/multimap.cons/default_noexcept.pass.cpp
@@ -42,7 +42,7 @@ int main()
static_assert(std::is_nothrow_default_constructible<C>::value, "");
}
{
- typedef std::multimap<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ typedef std::multimap<MoveOnly, MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
static_assert(!std::is_nothrow_default_constructible<C>::value, "");
}
{
diff --git a/libcxx/test/containers/associative/multimap/multimap.cons/dtor_noexcept.pass.cpp b/libcxx/test/containers/associative/multimap/multimap.cons/dtor_noexcept.pass.cpp
index f1d8afdc33d..14e3f6400c2 100644
--- a/libcxx/test/containers/associative/multimap/multimap.cons/dtor_noexcept.pass.cpp
+++ b/libcxx/test/containers/associative/multimap/multimap.cons/dtor_noexcept.pass.cpp
@@ -40,7 +40,7 @@ int main()
static_assert(std::is_nothrow_destructible<C>::value, "");
}
{
- typedef std::multimap<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ typedef std::multimap<MoveOnly, MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
static_assert(std::is_nothrow_destructible<C>::value, "");
}
{
diff --git a/libcxx/test/containers/associative/multimap/multimap.cons/move_assign_noexcept.pass.cpp b/libcxx/test/containers/associative/multimap/multimap.cons/move_assign_noexcept.pass.cpp
index cada1b1d7b0..ddb4e484bd2 100644
--- a/libcxx/test/containers/associative/multimap/multimap.cons/move_assign_noexcept.pass.cpp
+++ b/libcxx/test/containers/associative/multimap/multimap.cons/move_assign_noexcept.pass.cpp
@@ -42,7 +42,7 @@ int main()
static_assert(!std::is_nothrow_move_assignable<C>::value, "");
}
{
- typedef std::multimap<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ typedef std::multimap<MoveOnly, MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
static_assert(std::is_nothrow_move_assignable<C>::value, "");
}
{
diff --git a/libcxx/test/containers/associative/multimap/multimap.cons/move_noexcept.pass.cpp b/libcxx/test/containers/associative/multimap/multimap.cons/move_noexcept.pass.cpp
index 2f0b9ccc8cf..6ea06994940 100644
--- a/libcxx/test/containers/associative/multimap/multimap.cons/move_noexcept.pass.cpp
+++ b/libcxx/test/containers/associative/multimap/multimap.cons/move_noexcept.pass.cpp
@@ -40,7 +40,7 @@ int main()
static_assert(std::is_nothrow_move_constructible<C>::value, "");
}
{
- typedef std::multimap<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ typedef std::multimap<MoveOnly, MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
static_assert(std::is_nothrow_move_constructible<C>::value, "");
}
{
diff --git a/libcxx/test/containers/associative/multimap/multimap.special/swap_noexcept.pass.cpp b/libcxx/test/containers/associative/multimap/multimap.special/swap_noexcept.pass.cpp
index 2aa901a8ac2..b07d56a2158 100644
--- a/libcxx/test/containers/associative/multimap/multimap.special/swap_noexcept.pass.cpp
+++ b/libcxx/test/containers/associative/multimap/multimap.special/swap_noexcept.pass.cpp
@@ -47,7 +47,7 @@ int main()
static_assert(noexcept(swap(c1, c2)), "");
}
{
- typedef std::multimap<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ typedef std::multimap<MoveOnly, MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
C c1, c2;
static_assert(noexcept(swap(c1, c2)), "");
}
diff --git a/libcxx/test/containers/associative/multiset/multiset.cons/default_noexcept.pass.cpp b/libcxx/test/containers/associative/multiset/multiset.cons/default_noexcept.pass.cpp
new file mode 100644
index 00000000000..2e3e56ef5ef
--- /dev/null
+++ b/libcxx/test/containers/associative/multiset/multiset.cons/default_noexcept.pass.cpp
@@ -0,0 +1,53 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <set>
+
+// multiset()
+// noexcept(
+// is_nothrow_default_constructible<allocator_type>::value &&
+// is_nothrow_default_constructible<key_compare>::value &&
+// is_nothrow_copy_constructible<key_compare>::value);
+
+// This tests a conforming extension
+
+#include <set>
+#include <cassert>
+
+#include "../../../MoveOnly.h"
+#include "../../../test_allocator.h"
+
+template <class T>
+struct some_comp
+{
+ typedef T value_type;
+ some_comp();
+};
+
+int main()
+{
+#if __has_feature(cxx_noexcept)
+ {
+ typedef std::multiset<MoveOnly> C;
+ static_assert(std::is_nothrow_default_constructible<C>::value, "");
+ }
+ {
+ typedef std::multiset<MoveOnly, std::less<MoveOnly>, test_allocator<MoveOnly>> C;
+ static_assert(std::is_nothrow_default_constructible<C>::value, "");
+ }
+ {
+ typedef std::multiset<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ static_assert(!std::is_nothrow_default_constructible<C>::value, "");
+ }
+ {
+ typedef std::multiset<MoveOnly, some_comp<MoveOnly>> C;
+ static_assert(!std::is_nothrow_default_constructible<C>::value, "");
+ }
+#endif
+}
diff --git a/libcxx/test/containers/associative/multiset/multiset.cons/dtor_noexcept.pass.cpp b/libcxx/test/containers/associative/multiset/multiset.cons/dtor_noexcept.pass.cpp
new file mode 100644
index 00000000000..f04ae9457e1
--- /dev/null
+++ b/libcxx/test/containers/associative/multiset/multiset.cons/dtor_noexcept.pass.cpp
@@ -0,0 +1,51 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <set>
+
+// ~multiset() // implied noexcept;
+
+#include <set>
+#include <cassert>
+
+#include "../../../MoveOnly.h"
+#include "../../../test_allocator.h"
+
+#if __has_feature(cxx_noexcept)
+
+template <class T>
+struct some_comp
+{
+ typedef T value_type;
+ ~some_comp() noexcept(false);
+};
+
+#endif
+
+int main()
+{
+#if __has_feature(cxx_noexcept)
+ {
+ typedef std::multiset<MoveOnly> C;
+ static_assert(std::is_nothrow_destructible<C>::value, "");
+ }
+ {
+ typedef std::multiset<MoveOnly, std::less<MoveOnly>, test_allocator<MoveOnly>> C;
+ static_assert(std::is_nothrow_destructible<C>::value, "");
+ }
+ {
+ typedef std::multiset<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ static_assert(std::is_nothrow_destructible<C>::value, "");
+ }
+ {
+ typedef std::multiset<MoveOnly, some_comp<MoveOnly>> C;
+ static_assert(!std::is_nothrow_destructible<C>::value, "");
+ }
+#endif
+}
diff --git a/libcxx/test/containers/associative/multiset/multiset.cons/move_assign_noexcept.pass.cpp b/libcxx/test/containers/associative/multiset/multiset.cons/move_assign_noexcept.pass.cpp
new file mode 100644
index 00000000000..e5ce3498164
--- /dev/null
+++ b/libcxx/test/containers/associative/multiset/multiset.cons/move_assign_noexcept.pass.cpp
@@ -0,0 +1,53 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <set>
+
+// multiset& operator=(multiset&& c)
+// noexcept(
+// allocator_type::propagate_on_container_move_assignment::value &&
+// is_nothrow_move_assignable<allocator_type>::value &&
+// is_nothrow_move_assignable<key_compare>::value);
+
+// This tests a conforming extension
+
+#include <set>
+#include <cassert>
+
+#include "../../../MoveOnly.h"
+#include "../../../test_allocator.h"
+
+template <class T>
+struct some_comp
+{
+ typedef T value_type;
+ some_comp& operator=(const some_comp&);
+};
+
+int main()
+{
+#if __has_feature(cxx_noexcept)
+ {
+ typedef std::multiset<MoveOnly> C;
+ static_assert(std::is_nothrow_move_assignable<C>::value, "");
+ }
+ {
+ typedef std::multiset<MoveOnly, std::less<MoveOnly>, test_allocator<MoveOnly>> C;
+ static_assert(!std::is_nothrow_move_assignable<C>::value, "");
+ }
+ {
+ typedef std::multiset<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ static_assert(std::is_nothrow_move_assignable<C>::value, "");
+ }
+ {
+ typedef std::multiset<MoveOnly, some_comp<MoveOnly>> C;
+ static_assert(!std::is_nothrow_move_assignable<C>::value, "");
+ }
+#endif
+}
diff --git a/libcxx/test/containers/associative/multiset/multiset.cons/move_noexcept.pass.cpp b/libcxx/test/containers/associative/multiset/multiset.cons/move_noexcept.pass.cpp
new file mode 100644
index 00000000000..8f2b49604ca
--- /dev/null
+++ b/libcxx/test/containers/associative/multiset/multiset.cons/move_noexcept.pass.cpp
@@ -0,0 +1,51 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <set>
+
+// multiset(multiset&&)
+// noexcept(is_nothrow_move_constructible<allocator_type>::value &&
+// is_nothrow_move_constructible<key_compare>::value);
+
+// This tests a conforming extension
+
+#include <set>
+#include <cassert>
+
+#include "../../../MoveOnly.h"
+#include "../../../test_allocator.h"
+
+template <class T>
+struct some_comp
+{
+ typedef T value_type;
+ some_comp(const some_comp&);
+};
+
+int main()
+{
+#if __has_feature(cxx_noexcept)
+ {
+ typedef std::multiset<MoveOnly> C;
+ static_assert(std::is_nothrow_move_constructible<C>::value, "");
+ }
+ {
+ typedef std::multiset<MoveOnly, std::less<MoveOnly>, test_allocator<MoveOnly>> C;
+ static_assert(std::is_nothrow_move_constructible<C>::value, "");
+ }
+ {
+ typedef std::multiset<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ static_assert(std::is_nothrow_move_constructible<C>::value, "");
+ }
+ {
+ typedef std::multiset<MoveOnly, some_comp<MoveOnly>> C;
+ static_assert(!std::is_nothrow_move_constructible<C>::value, "");
+ }
+#endif
+}
diff --git a/libcxx/test/containers/associative/multiset/multiset.special/swap_noexcept.pass.cpp b/libcxx/test/containers/associative/multiset/multiset.special/swap_noexcept.pass.cpp
new file mode 100644
index 00000000000..dd2878706be
--- /dev/null
+++ b/libcxx/test/containers/associative/multiset/multiset.special/swap_noexcept.pass.cpp
@@ -0,0 +1,60 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <set>
+
+// void swap(multiset& c)
+// noexcept(!allocator_type::propagate_on_container_swap::value ||
+// __is_nothrow_swappable<allocator_type>::value);
+
+// This tests a conforming extension
+
+#include <set>
+#include <cassert>
+
+#include "../../../MoveOnly.h"
+#include "../../../test_allocator.h"
+
+template <class T>
+struct some_comp
+{
+ typedef T value_type;
+
+ some_comp() {}
+ some_comp(const some_comp&) {}
+ void deallocate(void*, unsigned) {}
+
+ typedef std::true_type propagate_on_container_swap;
+};
+
+int main()
+{
+#if __has_feature(cxx_noexcept)
+ {
+ typedef std::multiset<MoveOnly> C;
+ C c1, c2;
+ static_assert(noexcept(swap(c1, c2)), "");
+ }
+ {
+ typedef std::multiset<MoveOnly, std::less<MoveOnly>, test_allocator<MoveOnly>> C;
+ C c1, c2;
+ static_assert(noexcept(swap(c1, c2)), "");
+ }
+ {
+ typedef std::multiset<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ C c1, c2;
+ static_assert(noexcept(swap(c1, c2)), "");
+ }
+ {
+ typedef std::multiset<MoveOnly, some_comp<MoveOnly>> C;
+ C c1, c2;
+ static_assert(!noexcept(swap(c1, c2)), "");
+ }
+#endif
+}
diff --git a/libcxx/test/containers/associative/set/set.cons/default_noexcept.pass.cpp b/libcxx/test/containers/associative/set/set.cons/default_noexcept.pass.cpp
new file mode 100644
index 00000000000..6cf394e6454
--- /dev/null
+++ b/libcxx/test/containers/associative/set/set.cons/default_noexcept.pass.cpp
@@ -0,0 +1,53 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <set>
+
+// set()
+// noexcept(
+// is_nothrow_default_constructible<allocator_type>::value &&
+// is_nothrow_default_constructible<key_compare>::value &&
+// is_nothrow_copy_constructible<key_compare>::value);
+
+// This tests a conforming extension
+
+#include <set>
+#include <cassert>
+
+#include "../../../MoveOnly.h"
+#include "../../../test_allocator.h"
+
+template <class T>
+struct some_comp
+{
+ typedef T value_type;
+ some_comp();
+};
+
+int main()
+{
+#if __has_feature(cxx_noexcept)
+ {
+ typedef std::set<MoveOnly> C;
+ static_assert(std::is_nothrow_default_constructible<C>::value, "");
+ }
+ {
+ typedef std::set<MoveOnly, std::less<MoveOnly>, test_allocator<MoveOnly>> C;
+ static_assert(std::is_nothrow_default_constructible<C>::value, "");
+ }
+ {
+ typedef std::set<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ static_assert(!std::is_nothrow_default_constructible<C>::value, "");
+ }
+ {
+ typedef std::set<MoveOnly, some_comp<MoveOnly>> C;
+ static_assert(!std::is_nothrow_default_constructible<C>::value, "");
+ }
+#endif
+}
diff --git a/libcxx/test/containers/associative/set/set.cons/dtor_noexcept.pass.cpp b/libcxx/test/containers/associative/set/set.cons/dtor_noexcept.pass.cpp
new file mode 100644
index 00000000000..66adff0a836
--- /dev/null
+++ b/libcxx/test/containers/associative/set/set.cons/dtor_noexcept.pass.cpp
@@ -0,0 +1,51 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <set>
+
+// ~set() // implied noexcept;
+
+#include <set>
+#include <cassert>
+
+#include "../../../MoveOnly.h"
+#include "../../../test_allocator.h"
+
+#if __has_feature(cxx_noexcept)
+
+template <class T>
+struct some_comp
+{
+ typedef T value_type;
+ ~some_comp() noexcept(false);
+};
+
+#endif
+
+int main()
+{
+#if __has_feature(cxx_noexcept)
+ {
+ typedef std::set<MoveOnly> C;
+ static_assert(std::is_nothrow_destructible<C>::value, "");
+ }
+ {
+ typedef std::set<MoveOnly, std::less<MoveOnly>, test_allocator<MoveOnly>> C;
+ static_assert(std::is_nothrow_destructible<C>::value, "");
+ }
+ {
+ typedef std::set<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ static_assert(std::is_nothrow_destructible<C>::value, "");
+ }
+ {
+ typedef std::set<MoveOnly, some_comp<MoveOnly>> C;
+ static_assert(!std::is_nothrow_destructible<C>::value, "");
+ }
+#endif
+}
diff --git a/libcxx/test/containers/associative/set/set.cons/move_assign_noexcept.pass.cpp b/libcxx/test/containers/associative/set/set.cons/move_assign_noexcept.pass.cpp
new file mode 100644
index 00000000000..35683b1b67e
--- /dev/null
+++ b/libcxx/test/containers/associative/set/set.cons/move_assign_noexcept.pass.cpp
@@ -0,0 +1,53 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <set>
+
+// set& operator=(set&& c)
+// noexcept(
+// allocator_type::propagate_on_container_move_assignment::value &&
+// is_nothrow_move_assignable<allocator_type>::value &&
+// is_nothrow_move_assignable<key_compare>::value);
+
+// This tests a conforming extension
+
+#include <set>
+#include <cassert>
+
+#include "../../../MoveOnly.h"
+#include "../../../test_allocator.h"
+
+template <class T>
+struct some_comp
+{
+ typedef T value_type;
+ some_comp& operator=(const some_comp&);
+};
+
+int main()
+{
+#if __has_feature(cxx_noexcept)
+ {
+ typedef std::set<MoveOnly> C;
+ static_assert(std::is_nothrow_move_assignable<C>::value, "");
+ }
+ {
+ typedef std::set<MoveOnly, std::less<MoveOnly>, test_allocator<MoveOnly>> C;
+ static_assert(!std::is_nothrow_move_assignable<C>::value, "");
+ }
+ {
+ typedef std::set<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ static_assert(std::is_nothrow_move_assignable<C>::value, "");
+ }
+ {
+ typedef std::set<MoveOnly, some_comp<MoveOnly>> C;
+ static_assert(!std::is_nothrow_move_assignable<C>::value, "");
+ }
+#endif
+}
diff --git a/libcxx/test/containers/associative/set/set.cons/move_noexcept.pass.cpp b/libcxx/test/containers/associative/set/set.cons/move_noexcept.pass.cpp
new file mode 100644
index 00000000000..c3df4cace68
--- /dev/null
+++ b/libcxx/test/containers/associative/set/set.cons/move_noexcept.pass.cpp
@@ -0,0 +1,51 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <set>
+
+// set(set&&)
+// noexcept(is_nothrow_move_constructible<allocator_type>::value &&
+// is_nothrow_move_constructible<key_compare>::value);
+
+// This tests a conforming extension
+
+#include <set>
+#include <cassert>
+
+#include "../../../MoveOnly.h"
+#include "../../../test_allocator.h"
+
+template <class T>
+struct some_comp
+{
+ typedef T value_type;
+ some_comp(const some_comp&);
+};
+
+int main()
+{
+#if __has_feature(cxx_noexcept)
+ {
+ typedef std::set<MoveOnly> C;
+ static_assert(std::is_nothrow_move_constructible<C>::value, "");
+ }
+ {
+ typedef std::set<MoveOnly, std::less<MoveOnly>, test_allocator<MoveOnly>> C;
+ static_assert(std::is_nothrow_move_constructible<C>::value, "");
+ }
+ {
+ typedef std::set<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ static_assert(std::is_nothrow_move_constructible<C>::value, "");
+ }
+ {
+ typedef std::set<MoveOnly, some_comp<MoveOnly>> C;
+ static_assert(!std::is_nothrow_move_constructible<C>::value, "");
+ }
+#endif
+}
diff --git a/libcxx/test/containers/associative/set/set.special/non_member_swap.pass.cpp b/libcxx/test/containers/associative/set/set.special/non_member_swap.pass.cpp
index 00e19a7dbdf..6f7d0bf5a98 100644
--- a/libcxx/test/containers/associative/set/set.special/non_member_swap.pass.cpp
+++ b/libcxx/test/containers/associative/set/set.special/non_member_swap.pass.cpp
@@ -109,7 +109,7 @@ int main()
{
typedef test_allocator<V> A;
typedef test_compare<std::less<int> > C;
- typedef std::multiset<int, C, A> M;
+ typedef std::set<int, C, A> M;
V ar1[] =
{
1,
@@ -143,7 +143,7 @@ int main()
{
typedef other_allocator<V> A;
typedef test_compare<std::less<int> > C;
- typedef std::multiset<int, C, A> M;
+ typedef std::set<int, C, A> M;
V ar1[] =
{
1,
diff --git a/libcxx/test/containers/associative/set/set.special/swap_noexcept.pass.cpp b/libcxx/test/containers/associative/set/set.special/swap_noexcept.pass.cpp
new file mode 100644
index 00000000000..2ce1d8c5eae
--- /dev/null
+++ b/libcxx/test/containers/associative/set/set.special/swap_noexcept.pass.cpp
@@ -0,0 +1,60 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <set>
+
+// void swap(set& c)
+// noexcept(!allocator_type::propagate_on_container_swap::value ||
+// __is_nothrow_swappable<allocator_type>::value);
+
+// This tests a conforming extension
+
+#include <set>
+#include <cassert>
+
+#include "../../../MoveOnly.h"
+#include "../../../test_allocator.h"
+
+template <class T>
+struct some_comp
+{
+ typedef T value_type;
+
+ some_comp() {}
+ some_comp(const some_comp&) {}
+ void deallocate(void*, unsigned) {}
+
+ typedef std::true_type propagate_on_container_swap;
+};
+
+int main()
+{
+#if __has_feature(cxx_noexcept)
+ {
+ typedef std::set<MoveOnly> C;
+ C c1, c2;
+ static_assert(noexcept(swap(c1, c2)), "");
+ }
+ {
+ typedef std::set<MoveOnly, std::less<MoveOnly>, test_allocator<MoveOnly>> C;
+ C c1, c2;
+ static_assert(noexcept(swap(c1, c2)), "");
+ }
+ {
+ typedef std::set<MoveOnly, std::less<MoveOnly>, other_allocator<MoveOnly>> C;
+ C c1, c2;
+ static_assert(noexcept(swap(c1, c2)), "");
+ }
+ {
+ typedef std::set<MoveOnly, some_comp<MoveOnly>> C;
+ C c1, c2;
+ static_assert(!noexcept(swap(c1, c2)), "");
+ }
+#endif
+}
OpenPOWER on IntegriCloud