From 5a83710e371fe68a06e6e3876c6a2c8b820a8976 Mon Sep 17 00:00:00 2001 From: Eric Fiselier Date: Sat, 20 Dec 2014 01:40:03 +0000 Subject: Move test into test/std subdirectory. llvm-svn: 224658 --- .../tuple.tuple/tuple.creation/tuple_cat.pass.cpp | 230 +++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 libcxx/test/std/utilities/tuple/tuple.tuple/tuple.creation/tuple_cat.pass.cpp (limited to 'libcxx/test/std/utilities/tuple/tuple.tuple/tuple.creation/tuple_cat.pass.cpp') diff --git a/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.creation/tuple_cat.pass.cpp b/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.creation/tuple_cat.pass.cpp new file mode 100644 index 00000000000..3fca5738929 --- /dev/null +++ b/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.creation/tuple_cat.pass.cpp @@ -0,0 +1,230 @@ +//===----------------------------------------------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +// + +// template class tuple; + +// template tuple tuple_cat(Tuples&&... tpls); + +#include +#include +#include +#include +#include + +#include "../MoveOnly.h" + +int main() +{ + { + std::tuple<> t = std::tuple_cat(); + } + { + std::tuple<> t1; + std::tuple<> t2 = std::tuple_cat(t1); + } + { + std::tuple<> t = std::tuple_cat(std::tuple<>()); + } + { + std::tuple<> t = std::tuple_cat(std::array()); + } + { + std::tuple t1(1); + std::tuple t = std::tuple_cat(t1); + assert(std::get<0>(t) == 1); + } + +#if _LIBCPP_STD_VER > 11 + { + constexpr std::tuple<> t = std::tuple_cat(); + } + { + constexpr std::tuple<> t1; + constexpr std::tuple<> t2 = std::tuple_cat(t1); + } + { + constexpr std::tuple<> t = std::tuple_cat(std::tuple<>()); + } + { + constexpr std::tuple<> t = std::tuple_cat(std::array()); + } + { + constexpr std::tuple t1(1); + constexpr std::tuple t = std::tuple_cat(t1); + static_assert(std::get<0>(t) == 1, ""); + } + { + constexpr std::tuple t1(1); + constexpr std::tuple t = std::tuple_cat(t1, t1); + static_assert(std::get<0>(t) == 1, ""); + static_assert(std::get<1>(t) == 1, ""); + } +#endif + { + std::tuple t = + std::tuple_cat(std::tuple(1, 2)); + assert(std::get<0>(t) == 1); + assert(std::get<1>(t) == 2); + } + { + std::tuple t = std::tuple_cat(std::array()); + assert(std::get<0>(t) == 0); + assert(std::get<1>(t) == 0); + assert(std::get<2>(t) == 0); + } + { + std::tuple t = std::tuple_cat(std::pair(2, 1)); + assert(std::get<0>(t) == 2); + assert(std::get<1>(t) == 1); + } + + { + std::tuple<> t1; + std::tuple<> t2; + std::tuple<> t3 = std::tuple_cat(t1, t2); + } + { + std::tuple<> t1; + std::tuple t2(2); + std::tuple t3 = std::tuple_cat(t1, t2); + assert(std::get<0>(t3) == 2); + } + { + std::tuple<> t1; + std::tuple t2(2); + std::tuple t3 = std::tuple_cat(t2, t1); + assert(std::get<0>(t3) == 2); + } + { + std::tuple t1; + std::tuple t2(2); + std::tuple t3 = std::tuple_cat(t1, t2); + assert(std::get<0>(t3) == nullptr); + assert(std::get<1>(t3) == 2); + } + { + std::tuple t1; + std::tuple t2(2); + std::tuple t3 = std::tuple_cat(t2, t1); + assert(std::get<0>(t3) == 2); + assert(std::get<1>(t3) == nullptr); + } + { + std::tuple t1; + std::tuple t2(2, 3.5); + std::tuple t3 = std::tuple_cat(t1, t2); + assert(std::get<0>(t3) == nullptr); + assert(std::get<1>(t3) == 2); + assert(std::get<2>(t3) == 3.5); + } + { + std::tuple t1; + std::tuple t2(2, 3.5); + std::tuple t3 = std::tuple_cat(t2, t1); + assert(std::get<0>(t3) == 2); + assert(std::get<1>(t3) == 3.5); + assert(std::get<2>(t3) == nullptr); + } + { + std::tuple t1(nullptr, 1); + std::tuple t2(2, 3.5); + std::tuple t3 = + std::tuple_cat(std::move(t1), t2); + assert(std::get<0>(t3) == nullptr); + assert(std::get<1>(t3) == 1); + assert(std::get<2>(t3) == 2); + assert(std::get<3>(t3) == 3.5); + } + { + std::tuple t1(nullptr, 1); + std::tuple t2(2, 3.5); + std::tuple t3 = + std::tuple_cat(t2, std::move(t1)); + assert(std::get<0>(t3) == 2); + assert(std::get<1>(t3) == 3.5); + assert(std::get<2>(t3) == nullptr); + assert(std::get<3>(t3) == 1); + } + { + std::tuple t1(1, 2); + std::tuple t2(nullptr, 4); + std::tuple t3 = + std::tuple_cat(std::move(t1), std::move(t2)); + assert(std::get<0>(t3) == 1); + assert(std::get<1>(t3) == 2); + assert(std::get<2>(t3) == nullptr); + assert(std::get<3>(t3) == 4); + } + + { + std::tuple t1(1, 2); + std::tuple t2(nullptr, 4); + std::tuple t3 = + std::tuple_cat(std::tuple<>(), + std::move(t1), + std::move(t2)); + assert(std::get<0>(t3) == 1); + assert(std::get<1>(t3) == 2); + assert(std::get<2>(t3) == nullptr); + assert(std::get<3>(t3) == 4); + } + { + std::tuple t1(1, 2); + std::tuple t2(nullptr, 4); + std::tuple t3 = + std::tuple_cat(std::move(t1), + std::tuple<>(), + std::move(t2)); + assert(std::get<0>(t3) == 1); + assert(std::get<1>(t3) == 2); + assert(std::get<2>(t3) == nullptr); + assert(std::get<3>(t3) == 4); + } + { + std::tuple t1(1, 2); + std::tuple t2(nullptr, 4); + std::tuple t3 = + std::tuple_cat(std::move(t1), + std::move(t2), + std::tuple<>()); + assert(std::get<0>(t3) == 1); + assert(std::get<1>(t3) == 2); + assert(std::get<2>(t3) == nullptr); + assert(std::get<3>(t3) == 4); + } + { + std::tuple t1(1, 2); + std::tuple t2(nullptr, 4); + std::tuple t3 = + std::tuple_cat(std::move(t1), + std::move(t2), + std::tuple(5)); + assert(std::get<0>(t3) == 1); + assert(std::get<1>(t3) == 2); + assert(std::get<2>(t3) == nullptr); + assert(std::get<3>(t3) == 4); + assert(std::get<4>(t3) == 5); + } + { + // See bug #19616. + auto t1 = std::tuple_cat( + std::make_tuple(std::make_tuple(1)), + std::make_tuple() + ); + assert(t1 == std::make_tuple(std::make_tuple(1))); + + auto t2 = std::tuple_cat( + std::make_tuple(std::make_tuple(1)), + std::make_tuple(std::make_tuple(2)) + ); + assert(t2 == std::make_tuple(std::make_tuple(1), std::make_tuple(2))); + } +} -- cgit v1.2.3