diff --git a/libcxx/docs/Status/Cxx23Issues.csv b/libcxx/docs/Status/Cxx23Issues.csv index 189f8452e0678..d81b47014395a 100644 --- a/libcxx/docs/Status/Cxx23Issues.csv +++ b/libcxx/docs/Status/Cxx23Issues.csv @@ -1,7 +1,7 @@ "Issue #","Issue Name","Meeting","Status","First released version","Notes" "`LWG2839 `__","Self-move-assignment of library types, again","2020-11 (Virtual)","|Nothing To Do|","","" "`LWG3117 `__","Missing ``packaged_task`` deduction guides","2020-11 (Virtual)","|Complete|","16","" -"`LWG3143 `__","``monotonic_buffer_resource`` growth policy is unclear","2020-11 (Virtual)","","","" +"`LWG3143 `__","``monotonic_buffer_resource`` growth policy is unclear","2020-11 (Virtual)","|Complete|","16","" "`LWG3195 `__","What is the stored pointer value of an empty ``weak_ptr``?","2020-11 (Virtual)","|Nothing To Do|","","" "`LWG3211 `__","``std::tuple<>`` should be trivially constructible","2020-11 (Virtual)","|Complete|","9","" "`LWG3236 `__","Random access iterator requirements lack limiting relational operators domain to comparing those from the same range","2020-11 (Virtual)","|Nothing To Do|","","" diff --git a/libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/allocate_in_geometric_progression.pass.cpp b/libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/allocate_growth_factor.pass.cpp similarity index 71% rename from libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/allocate_in_geometric_progression.pass.cpp rename to libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/allocate_growth_factor.pass.cpp index 7892b182297ea..580892b427173 100644 --- a/libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/allocate_in_geometric_progression.pass.cpp +++ b/libcxx/test/std/utilities/utility/mem.res/mem.res.monotonic.buffer/mem.res.monotonic.buffer.mem/allocate_growth_factor.pass.cpp @@ -20,30 +20,38 @@ #include "count_new.h" #include "test_macros.h" -void test_geometric_progression() { - // mem.res.monotonic.buffer 1.3 - // Each additional buffer is larger than the previous one, following a - // geometric progression. - +void test_growth_factor() { + // Each additional buffer is larger than the previous one globalMemCounter.reset(); std::pmr::monotonic_buffer_resource mono1(100, std::pmr::new_delete_resource()); std::pmr::memory_resource& r1 = mono1; assert(globalMemCounter.checkNewCalledEq(0)); std::size_t next_buffer_size = 100; - void* ret = r1.allocate(10, 1); + void* ret = r1.allocate(10, 1); assert(ret != nullptr); assert(globalMemCounter.checkNewCalledEq(1)); assert(globalMemCounter.last_new_size >= next_buffer_size); - next_buffer_size = globalMemCounter.last_new_size + 1; + next_buffer_size = globalMemCounter.last_new_size; int new_called = 1; while (new_called < 5) { ret = r1.allocate(10, 1); if (globalMemCounter.new_called > new_called) { assert(globalMemCounter.new_called == new_called + 1); + +#ifndef _LIBCPP_VERSION assert(globalMemCounter.last_new_size >= next_buffer_size); next_buffer_size = globalMemCounter.last_new_size + 1; +#else + constexpr auto foot_size{4 * sizeof(void*)}; + // LWG 3143: https://cplusplus.github.io/LWG/issue3143 + // Since implementations does geometric progression. + // a libc++ specific test. + next_buffer_size = next_buffer_size * 2 - foot_size; + assert(globalMemCounter.last_new_size == next_buffer_size); +#endif // _LIBCPP_VERSION + new_called += 1; } } @@ -51,7 +59,7 @@ void test_geometric_progression() { int main(int, char**) { #if TEST_SUPPORTS_LIBRARY_INTERNAL_ALLOCATIONS && !defined(DISABLE_NEW_COUNT) - test_geometric_progression(); + test_growth_factor(); #endif return 0;