Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion libcxx/docs/Status/Cxx23Issues.csv
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"Issue #","Issue Name","Meeting","Status","First released version","Notes"
"`LWG2839 <https://wg21.link/LWG2839>`__","Self-move-assignment of library types, again","2020-11 (Virtual)","|Nothing To Do|","",""
"`LWG3117 <https://wg21.link/LWG3117>`__","Missing ``packaged_task`` deduction guides","2020-11 (Virtual)","|Complete|","16",""
"`LWG3143 <https://wg21.link/LWG3143>`__","``monotonic_buffer_resource`` growth policy is unclear","2020-11 (Virtual)","","",""
"`LWG3143 <https://wg21.link/LWG3143>`__","``monotonic_buffer_resource`` growth policy is unclear","2020-11 (Virtual)","|Complete|","16",""
"`LWG3195 <https://wg21.link/LWG3195>`__","What is the stored pointer value of an empty ``weak_ptr``?","2020-11 (Virtual)","|Nothing To Do|","",""
"`LWG3211 <https://wg21.link/LWG3211>`__","``std::tuple<>`` should be trivially constructible","2020-11 (Virtual)","|Complete|","9",""
"`LWG3236 <https://wg21.link/LWG3236>`__","Random access iterator requirements lack limiting relational operators domain to comparing those from the same range","2020-11 (Virtual)","|Nothing To Do|","",""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,38 +20,46 @@
#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;
}
}
}

int main(int, char**) {
#if TEST_SUPPORTS_LIBRARY_INTERNAL_ALLOCATIONS && !defined(DISABLE_NEW_COUNT)
test_geometric_progression();
test_growth_factor();
#endif

return 0;
Expand Down
Loading