[v3 patch] Improve some container allocator tests

Jonathan Wakely jwakely.gcc@gmail.com
Wed Nov 20 01:41:00 GMT 2013


This adds { dg-do compile } to some tests that only use static_assert
and adjusts the swap overloads so that all commented-out assertions
can be enabled.

2013-11-19  Jonathan Wakely  <jwakely.gcc@gmail.com>

        * testsuite/23_containers/forward_list/allocator/noexcept.cc: Change
        to compile-only test. Adjust swap overload to handle rebound
        allocators.
        * testsuite/23_containers/map/allocator/noexcept.cc: Likewise.
        * testsuite/23_containers/multimap/allocator/noexcept.cc: Likewise.
        * testsuite/23_containers/multiset/allocator/noexcept.cc: Likewise.
        * testsuite/23_containers/set/allocator/noexcept.cc: Likewise.
        * testsuite/23_containers/unordered_map/allocator/noexcept.cc:
        Likewise.
        * testsuite/23_containers/unordered_multimap/allocator/noexcept.cc:
        Likewise.
        * testsuite/23_containers/unordered_multiset/allocator/noexcept.cc:
        Likewise.
        * testsuite/23_containers/unordered_set/allocator/noexcept.cc:
        Likewise.
        * testsuite/23_containers/vector/allocator/noexcept.cc: Likewise.
        * testsuite/23_containers/vector/allocator/swap.cc: Add elements
        before swapping.

Tested x86_64-linux, committed to trunk.
-------------- next part --------------
commit b42b8217157bb210dbae39d75f07e0e756a4ded1
Author: Jonathan Wakely <jwakely.gcc@gmail.com>
Date:   Tue Nov 19 20:39:14 2013 +0000

    	* testsuite/23_containers/forward_list/allocator/noexcept.cc: Change
    	to compile-only test. Adjust swap overload to handle rebound
    	allocators.
    	* testsuite/23_containers/map/allocator/noexcept.cc: Likewise.
    	* testsuite/23_containers/multimap/allocator/noexcept.cc: Likewise.
    	* testsuite/23_containers/multiset/allocator/noexcept.cc: Likewise.
    	* testsuite/23_containers/set/allocator/noexcept.cc: Likewise.
    	* testsuite/23_containers/unordered_map/allocator/noexcept.cc:
    	Likewise.
    	* testsuite/23_containers/unordered_multimap/allocator/noexcept.cc:
    	Likewise.
    	* testsuite/23_containers/unordered_multiset/allocator/noexcept.cc:
    	Likewise.
    	* testsuite/23_containers/unordered_set/allocator/noexcept.cc:
    	Likewise.
    	* testsuite/23_containers/vector/allocator/noexcept.cc: Likewise.
    	* testsuite/23_containers/vector/allocator/swap.cc: Add elements
    	before swapping.

diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/allocator/noexcept.cc b/libstdc++-v3/testsuite/23_containers/forward_list/allocator/noexcept.cc
index 0ee1670..635fb77 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/allocator/noexcept.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/allocator/noexcept.cc
@@ -15,23 +15,21 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
+// { dg-do compile }
 // { dg-options "-std=gnu++0x" }
 
 #include <forward_list>
-#include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
 
 struct T { int i; };
 
 namespace __gnu_test
 {
-  inline void
-  swap(propagating_allocator<T, true>& l, propagating_allocator<T, true>& r)
-  noexcept(false)
-  {
-    typedef uneq_allocator<T> base_alloc;
-    swap(static_cast<base_alloc&>(l), static_cast<base_alloc&>(r));
-  }
+  template<typename U>
+    inline void
+    swap(propagating_allocator<U, true>& l, propagating_allocator<U, true>& r)
+    noexcept(false)
+    { }
 }
 
 using __gnu_test::propagating_allocator;
@@ -64,13 +62,5 @@ void test03()
   test_type v1(alloc_type(1));
   test_type v2(alloc_type(2));
   static_assert( noexcept( v1 = std::move(v2) ), "Move assign cannot throw" );
-  // static_assert( !noexcept( v1.swap(v2) ), "Swap can throw" );
-}
-
-int main()
-{
-  test01();
-  test02();
-  test03();
-  return 0;
+  static_assert( !noexcept( v1.swap(v2) ), "Swap can throw" );
 }
diff --git a/libstdc++-v3/testsuite/23_containers/map/allocator/noexcept.cc b/libstdc++-v3/testsuite/23_containers/map/allocator/noexcept.cc
index 832a28a..4bd3f57 100644
--- a/libstdc++-v3/testsuite/23_containers/map/allocator/noexcept.cc
+++ b/libstdc++-v3/testsuite/23_containers/map/allocator/noexcept.cc
@@ -15,10 +15,10 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
+// { dg-do compile }
 // { dg-options "-std=gnu++11" }
 
 #include <map>
-#include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
 
 struct T { int i; };
@@ -31,14 +31,11 @@ struct U { };
 
 namespace __gnu_test
 {
-  inline void
-  swap(propagating_allocator<std::pair<const T, U>, true>& l,
-       propagating_allocator<std::pair<const T, U>, true>& r)
-  noexcept(false)
-  {
-    typedef uneq_allocator<std::pair<const T, U>> base_alloc;
-    swap(static_cast<base_alloc&>(l), static_cast<base_alloc&>(r));
-  }
+  template<typename U>
+    inline void
+    swap(propagating_allocator<U, true>& l, propagating_allocator<U, true>& r)
+    noexcept(false)
+    { }
 }
 
 using __gnu_test::propagating_allocator;
@@ -73,11 +70,3 @@ void test03()
   static_assert( noexcept( v1 = std::move(v2) ), "Move assign cannot throw" );
   static_assert( !noexcept( v1.swap(v2) ), "Swap can throw" );
 }
-
-int main()
-{
-  test01();
-  test02();
-  test03();
-  return 0;
-}
diff --git a/libstdc++-v3/testsuite/23_containers/multimap/allocator/noexcept.cc b/libstdc++-v3/testsuite/23_containers/multimap/allocator/noexcept.cc
index aee4dc9..9913acb 100644
--- a/libstdc++-v3/testsuite/23_containers/multimap/allocator/noexcept.cc
+++ b/libstdc++-v3/testsuite/23_containers/multimap/allocator/noexcept.cc
@@ -15,10 +15,10 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
+// { dg-do compile }
 // { dg-options "-std=gnu++11" }
 
 #include <map>
-#include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
 
 struct T { int i; };
@@ -31,14 +31,11 @@ struct U { };
 
 namespace __gnu_test
 {
-  inline void
-  swap(propagating_allocator<std::pair<const T, U>, true>& l,
-       propagating_allocator<std::pair<const T, U>, true>& r)
-  noexcept(false)
-  {
-    typedef uneq_allocator<std::pair<const T, U>> base_alloc;
-    swap(static_cast<base_alloc&>(l), static_cast<base_alloc&>(r));
-  }
+  template<typename U>
+    inline void
+    swap(propagating_allocator<U, true>& l, propagating_allocator<U, true>& r)
+    noexcept(false)
+    { }
 }
 
 using __gnu_test::propagating_allocator;
@@ -73,11 +70,3 @@ void test03()
   static_assert( noexcept( v1 = std::move(v2) ), "Move assign cannot throw" );
   static_assert( !noexcept( v1.swap(v2) ), "Swap can throw" );
 }
-
-int main()
-{
-  test01();
-  test02();
-  test03();
-  return 0;
-}
diff --git a/libstdc++-v3/testsuite/23_containers/multiset/allocator/noexcept.cc b/libstdc++-v3/testsuite/23_containers/multiset/allocator/noexcept.cc
index 89b0053..d429313 100644
--- a/libstdc++-v3/testsuite/23_containers/multiset/allocator/noexcept.cc
+++ b/libstdc++-v3/testsuite/23_containers/multiset/allocator/noexcept.cc
@@ -15,6 +15,7 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
+// { dg-do compile }
 // { dg-options "-std=gnu++11" }
 
 #include <set>
@@ -29,14 +30,11 @@ using Cmp = std::less<T>;
 
 namespace __gnu_test
 {
-  inline void
-  swap(propagating_allocator<T, true>& l,
-       propagating_allocator<T, true>& r)
-  noexcept(false)
-  {
-    typedef uneq_allocator<T> base_alloc;
-    swap(static_cast<base_alloc&>(l), static_cast<base_alloc&>(r));
-  }
+  template<typename U>
+    inline void
+    swap(propagating_allocator<U, true>& l, propagating_allocator<U, true>& r)
+    noexcept(false)
+    { }
 }
 
 using __gnu_test::propagating_allocator;
@@ -71,11 +69,3 @@ void test03()
   static_assert( noexcept( v1 = std::move(v2) ), "Move assign cannot throw" );
   static_assert( !noexcept( v1.swap(v2) ), "Swap can throw" );
 }
-
-int main()
-{
-  test01();
-  test02();
-  test03();
-  return 0;
-}
diff --git a/libstdc++-v3/testsuite/23_containers/set/allocator/noexcept.cc b/libstdc++-v3/testsuite/23_containers/set/allocator/noexcept.cc
index 07adbc0..f8389d6 100644
--- a/libstdc++-v3/testsuite/23_containers/set/allocator/noexcept.cc
+++ b/libstdc++-v3/testsuite/23_containers/set/allocator/noexcept.cc
@@ -15,10 +15,10 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
+// { dg-do compile }
 // { dg-options "-std=gnu++11" }
 
 #include <set>
-#include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
 
 struct T { int i; };
@@ -29,14 +29,11 @@ using Cmp = std::less<T>;
 
 namespace __gnu_test
 {
-  inline void
-  swap(propagating_allocator<T, true>& l,
-       propagating_allocator<T, true>& r)
-  noexcept(false)
-  {
-    typedef uneq_allocator<T> base_alloc;
-    swap(static_cast<base_alloc&>(l), static_cast<base_alloc&>(r));
-  }
+  template<typename U>
+    inline void
+    swap(propagating_allocator<U, true>& l, propagating_allocator<U, true>& r)
+    noexcept(false)
+    { }
 }
 
 using __gnu_test::propagating_allocator;
@@ -71,11 +68,3 @@ void test03()
   static_assert( noexcept( v1 = std::move(v2) ), "Move assign cannot throw" );
   static_assert( !noexcept( v1.swap(v2) ), "Swap can throw" );
 }
-
-int main()
-{
-  test01();
-  test02();
-  test03();
-  return 0;
-}
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/allocator/noexcept.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/allocator/noexcept.cc
index 47eb61d..64c46f2 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_map/allocator/noexcept.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/allocator/noexcept.cc
@@ -15,10 +15,10 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
+// { dg-do compile }
 // { dg-options "-std=c++11" }
 
 #include <unordered_map>
-#include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
 
 struct T { int i; };
@@ -37,13 +37,11 @@ struct equal_to
 
 namespace __gnu_test
 {
-  inline void
-  swap(propagating_allocator<T, true>& l, propagating_allocator<T, true>& r)
-  noexcept(false)
-  {
-    typedef uneq_allocator<T> base_alloc;
-    swap(static_cast<base_alloc&>(l), static_cast<base_alloc&>(r));
-  }
+  template<typename U>
+    inline void
+    swap(propagating_allocator<U, true>& l, propagating_allocator<U, true>& r)
+    noexcept(false)
+    { }
 }
 
 using __gnu_test::propagating_allocator;
@@ -76,13 +74,5 @@ void test03()
   test_type v1(alloc_type(1));
   test_type v2(alloc_type(2));
   static_assert( noexcept( v1 = std::move(v2) ), "Move assign cannot throw" );
-  // static_assert( !noexcept( v1.swap(v2) ), "Swap can throw" );
-}
-
-int main()
-{
-  test01();
-  test02();
-  test03();
-  return 0;
+  static_assert( !noexcept( v1.swap(v2) ), "Swap can throw" );
 }
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/noexcept.cc b/libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/noexcept.cc
index de16cbd..fe6fc6e 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/noexcept.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multimap/allocator/noexcept.cc
@@ -15,10 +15,10 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
+// { dg-do compile }
 // { dg-options "-std=c++11" }
 
 #include <unordered_map>
-#include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
 
 struct T { int i; };
@@ -37,13 +37,11 @@ struct equal_to
 
 namespace __gnu_test
 {
-  inline void
-  swap(propagating_allocator<T, true>& l, propagating_allocator<T, true>& r)
-  noexcept(false)
-  {
-    typedef uneq_allocator<T> base_alloc;
-    swap(static_cast<base_alloc&>(l), static_cast<base_alloc&>(r));
-  }
+  template<typename U>
+    inline void
+    swap(propagating_allocator<U, true>& l, propagating_allocator<U, true>& r)
+    noexcept(false)
+    { }
 }
 
 using __gnu_test::propagating_allocator;
@@ -76,13 +74,5 @@ void test03()
   test_type v1(alloc_type(1));
   test_type v2(alloc_type(2));
   static_assert( noexcept( v1 = std::move(v2) ), "Move assign cannot throw" );
-  // static_assert( !noexcept( v1.swap(v2) ), "Swap can throw" );
-}
-
-int main()
-{
-  test01();
-  test02();
-  test03();
-  return 0;
+  static_assert( !noexcept( v1.swap(v2) ), "Swap can throw" );
 }
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/noexcept.cc b/libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/noexcept.cc
index 5d69e07..2c7e853 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/noexcept.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_multiset/allocator/noexcept.cc
@@ -15,10 +15,10 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
+// { dg-do compile }
 // { dg-options "-std=c++11" }
 
 #include <unordered_set>
-#include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
 
 struct T { int i; };
@@ -37,13 +37,11 @@ struct equal_to
 
 namespace __gnu_test
 {
-  inline void
-  swap(propagating_allocator<T, true>& l, propagating_allocator<T, true>& r)
-  noexcept(false)
-  {
-    typedef uneq_allocator<T> base_alloc;
-    swap(static_cast<base_alloc&>(l), static_cast<base_alloc&>(r));
-  }
+  template<typename U>
+    inline void
+    swap(propagating_allocator<U, true>& l, propagating_allocator<U, true>& r)
+    noexcept(false)
+    { }
 }
 
 using __gnu_test::propagating_allocator;
@@ -76,13 +74,5 @@ void test03()
   test_type v1(alloc_type(1));
   test_type v2(alloc_type(2));
   static_assert( noexcept( v1 = std::move(v2) ), "Move assign cannot throw" );
-  // static_assert( !noexcept( v1.swap(v2) ), "Swap can throw" );
-}
-
-int main()
-{
-  test01();
-  test02();
-  test03();
-  return 0;
+  static_assert( !noexcept( v1.swap(v2) ), "Swap can throw" );
 }
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/noexcept.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/noexcept.cc
index 0f73126..5ada755 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/noexcept.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/noexcept.cc
@@ -15,10 +15,10 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
+// { dg-do compile }
 // { dg-options "-std=c++11" }
 
 #include <unordered_set>
-#include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
 
 struct T { int i; };
@@ -37,13 +37,11 @@ struct equal_to
 
 namespace __gnu_test
 {
-  inline void
-  swap(propagating_allocator<T, true>& l, propagating_allocator<T, true>& r)
-  noexcept(false)
-  {
-    typedef uneq_allocator<T> base_alloc;
-    swap(static_cast<base_alloc&>(l), static_cast<base_alloc&>(r));
-  }
+  template<typename U>
+    inline void
+    swap(propagating_allocator<U, true>& l, propagating_allocator<U, true>& r)
+    noexcept(false)
+    { }
 }
 
 using __gnu_test::propagating_allocator;
@@ -76,13 +74,5 @@ void test03()
   test_type v1(alloc_type(1));
   test_type v2(alloc_type(2));
   static_assert( noexcept( v1 = std::move(v2) ), "Move assign cannot throw" );
-  // static_assert( !noexcept( v1.swap(v2) ), "Swap can throw" );
-}
-
-int main()
-{
-  test01();
-  test02();
-  test03();
-  return 0;
+  static_assert( !noexcept( v1.swap(v2) ), "Swap can throw" );
 }
diff --git a/libstdc++-v3/testsuite/23_containers/vector/allocator/noexcept.cc b/libstdc++-v3/testsuite/23_containers/vector/allocator/noexcept.cc
index a805a4f..3123143 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/allocator/noexcept.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/allocator/noexcept.cc
@@ -15,23 +15,21 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
+// { dg-do compile }
 // { dg-options "-std=gnu++0x" }
 
 #include <vector>
-#include <testsuite_hooks.h>
 #include <testsuite_allocator.h>
  
 struct T { int i; };
 
 namespace __gnu_test
 {
-  inline void
-  swap(propagating_allocator<T, true>& l, propagating_allocator<T, true>& r)
-  noexcept(false)
-  {
-    typedef uneq_allocator<T> base_alloc;
-    swap(static_cast<base_alloc&>(l), static_cast<base_alloc&>(r));
-  }
+  template<typename U>
+    inline void
+    swap(propagating_allocator<U, true>& l, propagating_allocator<U, true>& r)
+    noexcept(false)
+    { }
 }
 
 using __gnu_test::propagating_allocator;
@@ -66,11 +64,3 @@ void test03()
   static_assert( noexcept( v1 = std::move(v2) ), "Move assign cannot throw" );
   static_assert( !noexcept( v1.swap(v2) ), "Swap can throw" );
 }
-
-int main()
-{
-  test01();
-  test02();
-  test03();
-  return 0;
-}
diff --git a/libstdc++-v3/testsuite/23_containers/vector/allocator/swap.cc b/libstdc++-v3/testsuite/23_containers/vector/allocator/swap.cc
index ce44cf8..ba44267 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/allocator/swap.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/allocator/swap.cc
@@ -64,7 +64,9 @@ void test02()
   typedef propagating_allocator<T, true> alloc_type;
   typedef std::vector<T, alloc_type> test_type;
   test_type v1(alloc_type(1));
+  v1.push_back(T());
   test_type v2(alloc_type(2));
+  v2.push_back(T());
   std::swap(v1, v2);
   VERIFY(2 == v1.get_allocator().get_personality());
   VERIFY(1 == v2.get_allocator().get_personality());


More information about the Gcc-patches mailing list