diff options
Diffstat (limited to 'libcxx/test/utilities')
| -rw-r--r-- | libcxx/test/utilities/tuple/tuple.tuple/tuple.creation/tuple_cat.pass.cpp | 105 |
1 files changed, 90 insertions, 15 deletions
diff --git a/libcxx/test/utilities/tuple/tuple.tuple/tuple.creation/tuple_cat.pass.cpp b/libcxx/test/utilities/tuple/tuple.tuple/tuple.creation/tuple_cat.pass.cpp index 7a84c78aa8d..7cfc736fb79 100644 --- a/libcxx/test/utilities/tuple/tuple.tuple/tuple.creation/tuple_cat.pass.cpp +++ b/libcxx/test/utilities/tuple/tuple.tuple/tuple.creation/tuple_cat.pass.cpp @@ -11,23 +11,11 @@ // template <class... Types> class tuple; -// template <class... TTypes, class... UTypes> -// tuple<TTypes..., UTypes...> -// tuple_cat(const tuple<TTypes...>& t, const tuple<UTypes...>& u); -// -// template <class... TTypes, class... UTypes> -// tuple<TTypes..., UTypes...> -// tuple_cat(const tuple<TTypes...>&& t, const tuple<UTypes...>& u); -// -// template <class... TTypes, class... UTypes> -// tuple<TTypes..., UTypes...> -// tuple_cat(const tuple<TTypes...>& t, const tuple<UTypes...>&& u); -// -// template <class... TTypes, class... UTypes> -// tuple<TTypes..., UTypes...> -// tuple_cat(const tuple<TTypes...>&& t, const tuple<UTypes...>&& u); +// template <class... Tuples> tuple<CTypes...> tuple_cat(Tuples&&... tpls); #include <tuple> +#include <utility> +#include <array> #include <string> #include <cassert> @@ -36,6 +24,43 @@ 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<int, 0>()); + } + + { + std::tuple<int> t1(1); + std::tuple<int> t = std::tuple_cat(t1); + assert(std::get<0>(t) == 1); + } + { + std::tuple<int, MoveOnly> t = + std::tuple_cat(std::tuple<int, MoveOnly>(1, 2)); + assert(std::get<0>(t) == 1); + assert(std::get<1>(t) == 2); + } + { + std::tuple<int, int, int> t = std::tuple_cat(std::array<int, 3>()); + assert(std::get<0>(t) == 0); + assert(std::get<1>(t) == 0); + assert(std::get<2>(t) == 0); + } + { + std::tuple<int, MoveOnly> t = std::tuple_cat(std::pair<int, MoveOnly>(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); @@ -112,4 +137,54 @@ int main() assert(std::get<2>(t3) == nullptr); assert(std::get<3>(t3) == 4); } + + { + std::tuple<MoveOnly, MoveOnly> t1(1, 2); + std::tuple<int*, MoveOnly> t2(nullptr, 4); + std::tuple<MoveOnly, MoveOnly, int*, MoveOnly> 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<MoveOnly, MoveOnly> t1(1, 2); + std::tuple<int*, MoveOnly> t2(nullptr, 4); + std::tuple<MoveOnly, MoveOnly, int*, MoveOnly> 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<MoveOnly, MoveOnly> t1(1, 2); + std::tuple<int*, MoveOnly> t2(nullptr, 4); + std::tuple<MoveOnly, MoveOnly, int*, MoveOnly> 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<MoveOnly, MoveOnly> t1(1, 2); + std::tuple<int*, MoveOnly> t2(nullptr, 4); + std::tuple<MoveOnly, MoveOnly, int*, MoveOnly, int> t3 = + std::tuple_cat(std::move(t1), + std::move(t2), + std::tuple<int>(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); + } } |

