[libcxx] r328758 - Move libc++ pair/tuple assign test to libcxx/ test directory.

Eric Fiselier via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 28 20:30:00 PDT 2018


Author: ericwf
Date: Wed Mar 28 20:30:00 2018
New Revision: 328758

URL: http://llvm.org/viewvc/llvm-project?rev=328758&view=rev
Log:
Move libc++ pair/tuple assign test to libcxx/ test directory.

Libc++ implements the pair& operator=(pair<U, V>) assignment operator
using a single template that handles assignment from all tuple-like types.

This patch moves the test for that to the libcxx test directory since
it's non-standard. It also adds additional tests to the std/.../pair
directory to test the standard behavior this template implements.

Added:
    libcxx/trunk/test/libcxx/utilities/utility/pairs/pairs.pair/assign_tuple_like.pass.cpp
      - copied, changed from r328751, libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_tuple.pass.cpp
Removed:
    libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_tuple.pass.cpp
Modified:
    libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_const_pair_U_V.pass.cpp
    libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_rv_pair_U_V.pass.cpp

Copied: libcxx/trunk/test/libcxx/utilities/utility/pairs/pairs.pair/assign_tuple_like.pass.cpp (from r328751, libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_tuple.pass.cpp)
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx/utilities/utility/pairs/pairs.pair/assign_tuple_like.pass.cpp?p2=libcxx/trunk/test/libcxx/utilities/utility/pairs/pairs.pair/assign_tuple_like.pass.cpp&p1=libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_tuple.pass.cpp&r1=328751&r2=328758&rev=328758&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_tuple.pass.cpp (original)
+++ libcxx/trunk/test/libcxx/utilities/utility/pairs/pairs.pair/assign_tuple_like.pass.cpp Wed Mar 28 20:30:00 2018
@@ -21,58 +21,22 @@
 #include <memory>
 #include <cassert>
 
+#include "archetypes.hpp"
+
 // Clang warns about missing braces when initializing std::array.
 #if defined(__clang__)
 #pragma clang diagnostic ignored "-Wmissing-braces"
 #endif
 
-struct CountingType {
-  static int constructed;
-  static int copy_constructed;
-  static int move_constructed;
-  static int assigned;
-  static int copy_assigned;
-  static int move_assigned;
-  static void reset() {
-      constructed = copy_constructed = move_constructed = 0;
-      assigned = copy_assigned = move_assigned = 0;
-  }
-  CountingType() : value(0) { ++constructed; }
-  CountingType(int v) : value(v) { ++constructed; }
-  CountingType(CountingType const& o) : value(o.value) { ++constructed; ++copy_constructed; }
-  CountingType(CountingType&& o) : value(o.value) { ++constructed; ++move_constructed; o.value = -1;}
-
-  CountingType& operator=(CountingType const& o) {
-      ++assigned;
-      ++copy_assigned;
-      value = o.value;
-      return *this;
-  }
-  CountingType& operator=(CountingType&& o) {
-      ++assigned;
-      ++move_assigned;
-      value = o.value;
-      o.value = -1;
-      return *this;
-  }
-  int value;
-};
-int CountingType::constructed;
-int CountingType::copy_constructed;
-int CountingType::move_constructed;
-int CountingType::assigned;
-int CountingType::copy_assigned;
-int CountingType::move_assigned;
-
 int main()
 {
-    using C = CountingType;
+    using C = TestTypes::TestType;
     {
        using P = std::pair<int, C>;
        using T = std::tuple<int, C>;
        T t(42, C{42});
        P p(101, C{101});
-       C::reset();
+       C::reset_constructors();
        p = t;
        assert(C::constructed == 0);
        assert(C::assigned == 1);
@@ -86,7 +50,7 @@ int main()
        using T = std::tuple<int, C>;
        T t(42, -42);
        P p(101, 101);
-       C::reset();
+       C::reset_constructors();
        p = std::move(t);
        assert(C::constructed == 0);
        assert(C::assigned == 1);
@@ -100,7 +64,7 @@ int main()
        using T = std::array<C, 2>;
        T t = {42, -42};
        P p{101, 101};
-       C::reset();
+       C::reset_constructors();
        p = t;
        assert(C::constructed == 0);
        assert(C::assigned == 2);
@@ -114,7 +78,7 @@ int main()
        using T = std::array<C, 2>;
        T t = {42, -42};
        P p{101, 101};
-       C::reset();
+       C::reset_constructors();
        p = t;
        assert(C::constructed == 0);
        assert(C::assigned == 2);
@@ -128,7 +92,7 @@ int main()
        using T = std::array<C, 2>;
        T t = {42, -42};
        P p{101, 101};
-       C::reset();
+       C::reset_constructors();
        p = std::move(t);
        assert(C::constructed == 0);
        assert(C::assigned == 2);

Modified: libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_const_pair_U_V.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_const_pair_U_V.pass.cpp?rev=328758&r1=328757&r2=328758&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_const_pair_U_V.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_const_pair_U_V.pass.cpp Wed Mar 28 20:30:00 2018
@@ -16,6 +16,11 @@
 #include <utility>
 #include <cassert>
 
+#include "test_macros.h"
+#if TEST_STD_VER >= 11
+#include "archetypes.hpp"
+#endif
+
 int main()
 {
     {
@@ -27,4 +32,21 @@ int main()
         assert(p2.first == 3);
         assert(p2.second == 4);
     }
+#if TEST_STD_VER >= 11
+    {
+       using C = TestTypes::TestType;
+       using P = std::pair<int, C>;
+       using T = std::pair<long, C>;
+       const T t(42, -42);
+       P p(101, 101);
+       C::reset_constructors();
+       p = t;
+       assert(C::constructed == 0);
+       assert(C::assigned == 1);
+       assert(C::copy_assigned == 1);
+       assert(C::move_assigned == 0atu);
+       assert(p.first == 42);
+       assert(p.second.value == -42);
+    }
+#endif
 }

Modified: libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_rv_pair_U_V.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_rv_pair_U_V.pass.cpp?rev=328758&r1=328757&r2=328758&view=diff
==============================================================================
--- libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_rv_pair_U_V.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_rv_pair_U_V.pass.cpp Wed Mar 28 20:30:00 2018
@@ -18,6 +18,7 @@
 #include <utility>
 #include <memory>
 #include <cassert>
+#include <archetypes.hpp>
 
 struct Base
 {
@@ -40,4 +41,19 @@ int main()
         assert(p2.first == nullptr);
         assert(p2.second == 4);
     }
+    {
+       using C = TestTypes::TestType;
+       using P = std::pair<int, C>;
+       using T = std::pair<long, C>;
+       T t(42, -42);
+       P p(101, 101);
+       C::reset_constructors();
+       p = std::move(t);
+       assert(C::constructed == 0);
+       assert(C::assigned == 1);
+       assert(C::copy_assigned == 0);
+       assert(C::move_assigned == 1);
+       assert(p.first == 42);
+       assert(p.second.value == -42);
+    }
 }

Removed: libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_tuple.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_tuple.pass.cpp?rev=328757&view=auto
==============================================================================
--- libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_tuple.pass.cpp (original)
+++ libcxx/trunk/test/std/utilities/utility/pairs/pairs.pair/assign_tuple.pass.cpp (removed)
@@ -1,140 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-//                     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.
-//
-//===----------------------------------------------------------------------===//
-
-// UNSUPPORTED: c++98, c++03
-
-// <utility>
-
-// template <class T1, class T2> struct pair
-
-// template<class U, class V> pair& operator=(tuple<U, V>&& p);
-
-#include <utility>
-#include <tuple>
-#include <array>
-#include <memory>
-#include <cassert>
-
-// Clang warns about missing braces when initializing std::array.
-#if defined(__clang__)
-#pragma clang diagnostic ignored "-Wmissing-braces"
-#endif
-
-struct CountingType {
-  static int constructed;
-  static int copy_constructed;
-  static int move_constructed;
-  static int assigned;
-  static int copy_assigned;
-  static int move_assigned;
-  static void reset() {
-      constructed = copy_constructed = move_constructed = 0;
-      assigned = copy_assigned = move_assigned = 0;
-  }
-  CountingType() : value(0) { ++constructed; }
-  CountingType(int v) : value(v) { ++constructed; }
-  CountingType(CountingType const& o) : value(o.value) { ++constructed; ++copy_constructed; }
-  CountingType(CountingType&& o) : value(o.value) { ++constructed; ++move_constructed; o.value = -1;}
-
-  CountingType& operator=(CountingType const& o) {
-      ++assigned;
-      ++copy_assigned;
-      value = o.value;
-      return *this;
-  }
-  CountingType& operator=(CountingType&& o) {
-      ++assigned;
-      ++move_assigned;
-      value = o.value;
-      o.value = -1;
-      return *this;
-  }
-  int value;
-};
-int CountingType::constructed;
-int CountingType::copy_constructed;
-int CountingType::move_constructed;
-int CountingType::assigned;
-int CountingType::copy_assigned;
-int CountingType::move_assigned;
-
-int main()
-{
-    using C = CountingType;
-    {
-       using P = std::pair<int, C>;
-       using T = std::tuple<int, C>;
-       T t(42, C{42});
-       P p(101, C{101});
-       C::reset();
-       p = t;
-       assert(C::constructed == 0);
-       assert(C::assigned == 1);
-       assert(C::copy_assigned == 1);
-       assert(C::move_assigned == 0);
-       assert(p.first == 42);
-       assert(p.second.value == 42);
-    }
-    {
-       using P = std::pair<int, C>;
-       using T = std::tuple<int, C>;
-       T t(42, -42);
-       P p(101, 101);
-       C::reset();
-       p = std::move(t);
-       assert(C::constructed == 0);
-       assert(C::assigned == 1);
-       assert(C::copy_assigned == 0);
-       assert(C::move_assigned == 1);
-       assert(p.first == 42);
-       assert(p.second.value == -42);
-    }
-    {
-       using P = std::pair<C, C>;
-       using T = std::array<C, 2>;
-       T t = {42, -42};
-       P p{101, 101};
-       C::reset();
-       p = t;
-       assert(C::constructed == 0);
-       assert(C::assigned == 2);
-       assert(C::copy_assigned == 2);
-       assert(C::move_assigned == 0);
-       assert(p.first.value == 42);
-       assert(p.second.value == -42);
-    }
-    {
-       using P = std::pair<C, C>;
-       using T = std::array<C, 2>;
-       T t = {42, -42};
-       P p{101, 101};
-       C::reset();
-       p = t;
-       assert(C::constructed == 0);
-       assert(C::assigned == 2);
-       assert(C::copy_assigned == 2);
-       assert(C::move_assigned == 0);
-       assert(p.first.value == 42);
-       assert(p.second.value == -42);
-    }
-    {
-       using P = std::pair<C, C>;
-       using T = std::array<C, 2>;
-       T t = {42, -42};
-       P p{101, 101};
-       C::reset();
-       p = std::move(t);
-       assert(C::constructed == 0);
-       assert(C::assigned == 2);
-       assert(C::copy_assigned == 0);
-       assert(C::move_assigned == 2);
-       assert(p.first.value == 42);
-       assert(p.second.value == -42);
-    }
-}




More information about the cfe-commits mailing list