[libcxx-commits] [libcxx] [libc++][ranges] elements_view get() forward declarations - tests (PR #82323)

Hristo Hristov via libcxx-commits libcxx-commits at lists.llvm.org
Tue Feb 20 00:56:59 PST 2024


https://github.com/H-G-Hristov created https://github.com/llvm/llvm-project/pull/82323

A follow-up to:
[libc++][ranges] elements_view (re-)add get() forward declarations
https://github.com/llvm/llvm-project/pull/82236

>From b4def10ea2203f48de62a0aabf27a4068c5db83c Mon Sep 17 00:00:00 2001
From: Hristo Hristov <hghristov.rmm at gmail.com>
Date: Tue, 20 Feb 2024 10:51:01 +0200
Subject: [PATCH] [libc++][ranges] elements_view get() forward declarations -
 tests

---
 .../sequences/array/array.tuple/get.pass.cpp  | 22 +++++++++++++++
 .../complex.number/complex.tuple/get.pass.cpp |  2 +-
 .../tuple.elem/get_non_const.pass.cpp         | 27 ++++++++++++++++---
 .../pairs/pair.astuple/get_non_const.pass.cpp | 24 ++++++++++++++++-
 4 files changed, 70 insertions(+), 5 deletions(-)

diff --git a/libcxx/test/std/containers/sequences/array/array.tuple/get.pass.cpp b/libcxx/test/std/containers/sequences/array/array.tuple/get.pass.cpp
index 04bb1313996df3..bd0e522068c697 100644
--- a/libcxx/test/std/containers/sequences/array/array.tuple/get.pass.cpp
+++ b/libcxx/test/std/containers/sequences/array/array.tuple/get.pass.cpp
@@ -12,6 +12,9 @@
 
 #include <array>
 #include <cassert>
+#include <concepts>
+#include <ranges>
+#include <vector>
 
 #include "test_macros.h"
 
@@ -58,6 +61,25 @@ TEST_CONSTEXPR_CXX14 bool tests()
         assert(std::get<2>(tempArray(1, 2, 3)) == 3);
     }
 
+#if TEST_STD_VER >= 20
+    // `get()` allows using `array` with ranges
+    {
+      std::array<int, 2> arr[]{{27, 28}, {82, 94}};
+
+      std::same_as<std::vector<int>> decltype(auto) nums0{
+          arr | std::views::elements<0> | std::ranges::to<std::vector<int>>()};
+      assert(nums0.size() == 2);
+      assert(nums0[0] == 27);
+      assert(nums0[1] == 82);
+
+      std::same_as<std::vector<int>> decltype(auto) nums1{
+          arr | std::views::elements<1> | std::ranges::to<std::vector<int>>()};
+      assert(nums1.size() == 2);
+      assert(nums1[0] == 28);
+      assert(nums1[1] == 94);
+    }
+#endif
+
     return true;
 }
 
diff --git a/libcxx/test/std/numerics/complex.number/complex.tuple/get.pass.cpp b/libcxx/test/std/numerics/complex.number/complex.tuple/get.pass.cpp
index bd514a672cdcc8..c09457f08daa73 100644
--- a/libcxx/test/std/numerics/complex.number/complex.tuple/get.pass.cpp
+++ b/libcxx/test/std/numerics/complex.number/complex.tuple/get.pass.cpp
@@ -111,7 +111,7 @@ constexpr void test() {
 
     std::same_as<std::vector<T>> decltype(auto) imags{
         arr | std::views::elements<1> | std::ranges::to<std::vector<T>>()};
-    assert(reals.size() == 2);
+    assert(imags.size() == 2);
     assert(imags[0] == T{28});
     assert(imags[1] == T{94});
   }
diff --git a/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.elem/get_non_const.pass.cpp b/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.elem/get_non_const.pass.cpp
index e32b2fe57b0188..52697cb5aaa655 100644
--- a/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.elem/get_non_const.pass.cpp
+++ b/libcxx/test/std/utilities/tuple/tuple.tuple/tuple.elem/get_non_const.pass.cpp
@@ -16,9 +16,12 @@
 
 // UNSUPPORTED: c++03
 
-#include <tuple>
-#include <string>
 #include <cassert>
+#include <concepts>
+#include <ranges>
+#include <string>
+#include <tuple>
+#include <vector>
 
 #include "test_macros.h"
 
@@ -81,6 +84,24 @@ int main(int, char**)
     }
 #endif
 
+#if TEST_STD_VER >= 20
+    // `get()` allows using `tuple` with ranges
+    {
+      std::tuple<int, std::string> arr[]{{27, "hkt"}, {28, "zmt"}};
+
+      std::same_as<std::vector<int>> decltype(auto) numbers{
+          arr | std::views::elements<0> | std::ranges::to<std::vector<int>>()};
+      assert(numbers.size() == 2);
+      assert(numbers[0] == 27);
+      assert(numbers[1] == 28);
+
+      std::same_as<std::vector<std::string>> decltype(auto) strings{
+          arr | std::views::elements<1> | std::ranges::to<std::vector<std::string>>()};
+      assert(strings.size() == 2);
+      assert(strings[0] == "hkt");
+      assert(strings[1] == "zmt");
+    }
+#endif
 
-  return 0;
+    return 0;
 }
diff --git a/libcxx/test/std/utilities/utility/pairs/pair.astuple/get_non_const.pass.cpp b/libcxx/test/std/utilities/utility/pairs/pair.astuple/get_non_const.pass.cpp
index 6119cd5c8ce970..2374dbdee2d830 100644
--- a/libcxx/test/std/utilities/utility/pairs/pair.astuple/get_non_const.pass.cpp
+++ b/libcxx/test/std/utilities/utility/pairs/pair.astuple/get_non_const.pass.cpp
@@ -14,8 +14,12 @@
 //     typename tuple_element<I, std::pair<T1, T2> >::type&
 //     get(pair<T1, T2>&);
 
-#include <utility>
 #include <cassert>
+#include <concepts>
+#include <ranges>
+#include <string>
+#include <vector>
+#include <utility>
 
 #include "test_macros.h"
 
@@ -49,6 +53,24 @@ int main(int, char**)
     }
 #endif
 
+#if TEST_STD_VER >= 20
+    // `get()` allows using `pair` with ranges
+    {
+      std::pair<int, std::string> arr[]{{27, "hkt"}, {28, "zmt"}};
+
+      std::same_as<std::vector<int>> decltype(auto) numbers{
+          arr | std::views::elements<0> | std::ranges::to<std::vector<int>>()};
+      assert(numbers.size() == 2);
+      assert(numbers[0] == 27);
+      assert(numbers[1] == 28);
+
+      std::same_as<std::vector<std::string>> decltype(auto) strings{
+          arr | std::views::elements<1> | std::ranges::to<std::vector<std::string>>()};
+      assert(strings.size() == 2);
+      assert(strings[0] == "hkt");
+      assert(strings[1] == "zmt");
+    }
+#endif
 
   return 0;
 }



More information about the libcxx-commits mailing list