From 3cc37fb1039f5895f9c35cf4fe1dea8e88a5a566 Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Fri, 16 May 2025 20:50:08 +0300 Subject: [PATCH 1/9] libc++ test: update MinSequenceContainer.h to make some tests pass on MSVC STL --- libcxx/test/support/MinSequenceContainer.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libcxx/test/support/MinSequenceContainer.h b/libcxx/test/support/MinSequenceContainer.h index 6e61aff06344b..b17ced6dfc2ff 100644 --- a/libcxx/test/support/MinSequenceContainer.h +++ b/libcxx/test/support/MinSequenceContainer.h @@ -28,6 +28,13 @@ struct MinSequenceContainer { template explicit MinSequenceContainer(It first, It last) : data_(first, last) {} MinSequenceContainer(std::initializer_list il) : data_(il) {} + + template + void assign(It first, It last) { + data_.assign(first, last); + } + void assign(std::initializer_list il) { data_.assign(il); } + void assign(size_type n, value_type t) { data_.assign(n, t); } iterator begin() { return iterator(data_.data()); } const_iterator begin() const { return const_iterator(data_.data()); } const_iterator cbegin() const { return const_iterator(data_.data()); } @@ -47,6 +54,8 @@ struct MinSequenceContainer { return from_vector_iterator(data_.insert(to_vector_iterator(p), std::move(value))); } + iterator insert_range(const_iterator p, auto rg) { return data_.insert_range((to_vector_iterator(p), rg); } + iterator erase(const_iterator first, const_iterator last) { return from_vector_iterator(data_.erase(to_vector_iterator(first), to_vector_iterator(last))); } From 80c9da7280cab868d5ea2c0550a85b91d8b9e41a Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Fri, 16 May 2025 20:57:31 +0300 Subject: [PATCH 2/9] Update MinSequenceContainer.h --- libcxx/test/support/MinSequenceContainer.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libcxx/test/support/MinSequenceContainer.h b/libcxx/test/support/MinSequenceContainer.h index b17ced6dfc2ff..db875b9243579 100644 --- a/libcxx/test/support/MinSequenceContainer.h +++ b/libcxx/test/support/MinSequenceContainer.h @@ -54,7 +54,8 @@ struct MinSequenceContainer { return from_vector_iterator(data_.insert(to_vector_iterator(p), std::move(value))); } - iterator insert_range(const_iterator p, auto rg) { return data_.insert_range((to_vector_iterator(p), rg); } + iterator insert_range(const_iterator p, auto rg) { return data_.insert_range((to_vector_iterator(p), rg); + } iterator erase(const_iterator first, const_iterator last) { return from_vector_iterator(data_.erase(to_vector_iterator(first), to_vector_iterator(last))); From 3a0bcac1b8a8ae983fe92f2feff03f18981efb60 Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Fri, 16 May 2025 21:13:31 +0300 Subject: [PATCH 3/9] remove extra `(` --- libcxx/test/support/MinSequenceContainer.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/libcxx/test/support/MinSequenceContainer.h b/libcxx/test/support/MinSequenceContainer.h index db875b9243579..3a7d4df7fb058 100644 --- a/libcxx/test/support/MinSequenceContainer.h +++ b/libcxx/test/support/MinSequenceContainer.h @@ -54,8 +54,7 @@ struct MinSequenceContainer { return from_vector_iterator(data_.insert(to_vector_iterator(p), std::move(value))); } - iterator insert_range(const_iterator p, auto rg) { return data_.insert_range((to_vector_iterator(p), rg); - } + iterator insert_range(const_iterator p, auto rg) { return data_.insert_range(to_vector_iterator(p), rg); } iterator erase(const_iterator first, const_iterator last) { return from_vector_iterator(data_.erase(to_vector_iterator(first), to_vector_iterator(last))); From a32c5975a4f0f114e167aa397d7685d5569b4bdf Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Fri, 16 May 2025 22:06:42 +0300 Subject: [PATCH 4/9] convert iterator back --- libcxx/test/support/MinSequenceContainer.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libcxx/test/support/MinSequenceContainer.h b/libcxx/test/support/MinSequenceContainer.h index 3a7d4df7fb058..ef61f20b9665f 100644 --- a/libcxx/test/support/MinSequenceContainer.h +++ b/libcxx/test/support/MinSequenceContainer.h @@ -54,7 +54,9 @@ struct MinSequenceContainer { return from_vector_iterator(data_.insert(to_vector_iterator(p), std::move(value))); } - iterator insert_range(const_iterator p, auto rg) { return data_.insert_range(to_vector_iterator(p), rg); } + iterator insert_range(const_iterator p, auto rg) { + return from_vector_iterator(data_.insert_range(to_vector_iterator(p), rg)); + } iterator erase(const_iterator first, const_iterator last) { return from_vector_iterator(data_.erase(to_vector_iterator(first), to_vector_iterator(last))); From 7e22b537f74b9cdb2a93f5556eab933693514fe4 Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Fri, 16 May 2025 22:26:02 +0300 Subject: [PATCH 5/9] feature test --- libcxx/test/support/MinSequenceContainer.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libcxx/test/support/MinSequenceContainer.h b/libcxx/test/support/MinSequenceContainer.h index ef61f20b9665f..74306d7143bf6 100644 --- a/libcxx/test/support/MinSequenceContainer.h +++ b/libcxx/test/support/MinSequenceContainer.h @@ -54,9 +54,11 @@ struct MinSequenceContainer { return from_vector_iterator(data_.insert(to_vector_iterator(p), std::move(value))); } +#if defined(__cpp_lib_containers_ranges) && __cpp_lib_containers_ranges >= 202202L iterator insert_range(const_iterator p, auto rg) { return from_vector_iterator(data_.insert_range(to_vector_iterator(p), rg)); } +#endif // defined(__cpp_lib_containers_ranges) && __cpp_lib_containers_ranges >= 202202L iterator erase(const_iterator first, const_iterator last) { return from_vector_iterator(data_.erase(to_vector_iterator(first), to_vector_iterator(last))); From 14932833b9007fcab3463553c818b1d3e98abb37 Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Fri, 16 May 2025 22:35:23 +0300 Subject: [PATCH 6/9] perfect forward --- libcxx/test/support/MinSequenceContainer.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libcxx/test/support/MinSequenceContainer.h b/libcxx/test/support/MinSequenceContainer.h index 74306d7143bf6..387c95476059d 100644 --- a/libcxx/test/support/MinSequenceContainer.h +++ b/libcxx/test/support/MinSequenceContainer.h @@ -55,8 +55,9 @@ struct MinSequenceContainer { } #if defined(__cpp_lib_containers_ranges) && __cpp_lib_containers_ranges >= 202202L - iterator insert_range(const_iterator p, auto rg) { - return from_vector_iterator(data_.insert_range(to_vector_iterator(p), rg)); + template + iterator insert_range(const_iterator p, Rng&& rg) { + return from_vector_iterator(data_.insert_range(to_vector_iterator(p), std::forward(rg))); } #endif // defined(__cpp_lib_containers_ranges) && __cpp_lib_containers_ranges >= 202202L From cf832bf82d27fc1550511d14874ca23e632871dc Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Sat, 17 May 2025 13:04:48 +0300 Subject: [PATCH 7/9] code review feedback --- libcxx/test/support/MinSequenceContainer.h | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/libcxx/test/support/MinSequenceContainer.h b/libcxx/test/support/MinSequenceContainer.h index 387c95476059d..ccc17b79288bc 100644 --- a/libcxx/test/support/MinSequenceContainer.h +++ b/libcxx/test/support/MinSequenceContainer.h @@ -54,12 +54,10 @@ struct MinSequenceContainer { return from_vector_iterator(data_.insert(to_vector_iterator(p), std::move(value))); } -#if defined(__cpp_lib_containers_ranges) && __cpp_lib_containers_ranges >= 202202L - template - iterator insert_range(const_iterator p, Rng&& rg) { - return from_vector_iterator(data_.insert_range(to_vector_iterator(p), std::forward(rg))); + template + iterator insert_range(const_iterator p, Range&& rg) { + return from_vector_iterator(data_.insert_range(to_vector_iterator(p), std::forward(rg))); } -#endif // defined(__cpp_lib_containers_ranges) && __cpp_lib_containers_ranges >= 202202L iterator erase(const_iterator first, const_iterator last) { return from_vector_iterator(data_.erase(to_vector_iterator(first), to_vector_iterator(last))); From 5a76bc5fded185ad4b5eeada827798f3f3a55f71 Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Sat, 17 May 2025 15:04:55 +0300 Subject: [PATCH 8/9] conditionally have `insert_range` --- libcxx/test/support/MinSequenceContainer.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libcxx/test/support/MinSequenceContainer.h b/libcxx/test/support/MinSequenceContainer.h index ccc17b79288bc..168d91ebcd8ac 100644 --- a/libcxx/test/support/MinSequenceContainer.h +++ b/libcxx/test/support/MinSequenceContainer.h @@ -54,10 +54,12 @@ struct MinSequenceContainer { return from_vector_iterator(data_.insert(to_vector_iterator(p), std::move(value))); } +#if !defined(_LIBCPP_VERSION) // libc++ supports pre-C++23 containers as an extension template iterator insert_range(const_iterator p, Range&& rg) { return from_vector_iterator(data_.insert_range(to_vector_iterator(p), std::forward(rg))); } +#endif // !defined(_LIBCPP_VERSION) iterator erase(const_iterator first, const_iterator last) { return from_vector_iterator(data_.erase(to_vector_iterator(first), to_vector_iterator(last))); From 50e852b21b9f44945c866ba2ca772a60fe73773c Mon Sep 17 00:00:00 2001 From: Alex Guteniev Date: Sat, 17 May 2025 15:13:56 +0300 Subject: [PATCH 9/9] use `insert_range` unconditionally --- libcxx/test/support/MinSequenceContainer.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/libcxx/test/support/MinSequenceContainer.h b/libcxx/test/support/MinSequenceContainer.h index 168d91ebcd8ac..ccc17b79288bc 100644 --- a/libcxx/test/support/MinSequenceContainer.h +++ b/libcxx/test/support/MinSequenceContainer.h @@ -54,12 +54,10 @@ struct MinSequenceContainer { return from_vector_iterator(data_.insert(to_vector_iterator(p), std::move(value))); } -#if !defined(_LIBCPP_VERSION) // libc++ supports pre-C++23 containers as an extension template iterator insert_range(const_iterator p, Range&& rg) { return from_vector_iterator(data_.insert_range(to_vector_iterator(p), std::forward(rg))); } -#endif // !defined(_LIBCPP_VERSION) iterator erase(const_iterator first, const_iterator last) { return from_vector_iterator(data_.erase(to_vector_iterator(first), to_vector_iterator(last)));