diff --git a/libcxx/test/libcxx/containers/container.adaptors/flat.multiset/insert_range.pass.cpp b/libcxx/test/libcxx/containers/container.adaptors/flat.multiset/insert_range.pass.cpp index 3ca021c2ac650..d69b05a4dee5d 100644 --- a/libcxx/test/libcxx/containers/container.adaptors/flat.multiset/insert_range.pass.cpp +++ b/libcxx/test/libcxx/containers/container.adaptors/flat.multiset/insert_range.pass.cpp @@ -16,24 +16,27 @@ // out there are in that situation. // https://github.com/llvm/llvm-project/issues/136656 +#include +#include #include #include #include #include -#include "MinSequenceContainer.h" +#include "../flat_helpers.h" #include "test_macros.h" void test() { - MinSequenceContainer v; + NotQuiteSequenceContainer v; std::flat_multiset s(v); std::istringstream ints("0 1 1 0"); auto r = std::ranges::subrange(std::istream_iterator(ints), std::istream_iterator()) | std::views::transform([](int i) { return i * i; }); static_assert( - ![](auto& t) { return requires { t.insert_range(r); }; }(v), + ![](auto& t) { return requires { t.insert_range(t.end(), r); }; }(v), "This test is to test the case where the underlying container does not provide insert_range"); s.insert_range(r); + assert(std::ranges::equal(s, std::vector{0, 0, 1, 1})); } int main(int, char**) { diff --git a/libcxx/test/libcxx/containers/container.adaptors/flat.set/insert_range.pass.cpp b/libcxx/test/libcxx/containers/container.adaptors/flat.set/insert_range.pass.cpp index 8023e251ccb17..35b9737e85106 100644 --- a/libcxx/test/libcxx/containers/container.adaptors/flat.set/insert_range.pass.cpp +++ b/libcxx/test/libcxx/containers/container.adaptors/flat.set/insert_range.pass.cpp @@ -16,24 +16,27 @@ // out there are in that situation. // https://github.com/llvm/llvm-project/issues/136656 +#include +#include #include #include #include #include -#include "MinSequenceContainer.h" +#include "../flat_helpers.h" #include "test_macros.h" void test() { - MinSequenceContainer v; + NotQuiteSequenceContainer v; std::flat_set s(v); std::istringstream ints("0 1 1 0"); auto r = std::ranges::subrange(std::istream_iterator(ints), std::istream_iterator()) | std::views::transform([](int i) { return i * i; }); static_assert( - ![](auto& t) { return requires { t.insert_range(r); }; }(v), + ![](auto& t) { return requires { t.insert_range(t.end(), r); }; }(v), "This test is to test the case where the underlying container does not provide insert_range"); s.insert_range(r); + assert(std::ranges::equal(s, std::vector{0, 1})); } int main(int, char**) { diff --git a/libcxx/test/libcxx/containers/container.adaptors/flat_helpers.h b/libcxx/test/libcxx/containers/container.adaptors/flat_helpers.h index 1242c29715daa..cc59f59cc4ecc 100644 --- a/libcxx/test/libcxx/containers/container.adaptors/flat_helpers.h +++ b/libcxx/test/libcxx/containers/container.adaptors/flat_helpers.h @@ -9,6 +9,8 @@ #ifndef TEST_LIBCXX_CONTAINERS_CONTAINER_ADAPTORS_FLAT_HELPERS_H #define TEST_LIBCXX_CONTAINERS_CONTAINER_ADAPTORS_FLAT_HELPERS_H +#include + struct TrackCopyMove { mutable int copy_count = 0; int move_count = 0; @@ -37,4 +39,10 @@ struct TrackCopyMove { constexpr bool operator<(const TrackCopyMove&) const { return false; } }; +template +struct NotQuiteSequenceContainer : std::vector { + // hide the name insert_range + void insert_range() = delete; +}; + #endif // TEST_LIBCXX_CONTAINERS_CONTAINER_ADAPTORS_FLAT_HELPERS_H