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); - } -} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits