|
20 | 20 | #include "count_new.h"
|
21 | 21 | #include "test_macros.h"
|
22 | 22 |
|
23 |
| -void test_geometric_progression() { |
| 23 | +// LWG 3143: https://cplusplus.github.io/LWG/issue3143 |
| 24 | +void test_growth_capacity() { |
24 | 25 | // mem.res.monotonic.buffer 1.3
|
25 |
| - // Each additional buffer is larger than the previous one, following a |
26 |
| - // geometric progression. |
| 26 | + // Each additional buffer is larger than the previous one |
| 27 | + |
| 28 | + constexpr auto foot_size{4 * sizeof(void*)}; |
27 | 29 |
|
28 | 30 | globalMemCounter.reset();
|
29 | 31 | std::pmr::monotonic_buffer_resource mono1(100, std::pmr::new_delete_resource());
|
30 | 32 | std::pmr::memory_resource& r1 = mono1;
|
31 | 33 |
|
32 | 34 | assert(globalMemCounter.checkNewCalledEq(0));
|
33 | 35 | std::size_t next_buffer_size = 100;
|
34 |
| - void* ret = r1.allocate(10, 1); |
| 36 | + void* ret = r1.allocate(10, 1); |
35 | 37 | assert(ret != nullptr);
|
36 | 38 | assert(globalMemCounter.checkNewCalledEq(1));
|
37 | 39 | assert(globalMemCounter.last_new_size >= next_buffer_size);
|
38 |
| - next_buffer_size = globalMemCounter.last_new_size + 1; |
| 40 | + next_buffer_size = globalMemCounter.last_new_size; |
39 | 41 |
|
40 | 42 | int new_called = 1;
|
41 | 43 | while (new_called < 5) {
|
42 | 44 | ret = r1.allocate(10, 1);
|
43 | 45 | if (globalMemCounter.new_called > new_called) {
|
44 | 46 | assert(globalMemCounter.new_called == new_called + 1);
|
45 |
| - assert(globalMemCounter.last_new_size >= next_buffer_size); |
46 |
| - next_buffer_size = globalMemCounter.last_new_size + 1; |
| 47 | + next_buffer_size = next_buffer_size * 2 - foot_size; |
| 48 | + assert(globalMemCounter.last_new_size == next_buffer_size); |
47 | 49 | new_called += 1;
|
48 | 50 | }
|
49 | 51 | }
|
50 | 52 | }
|
51 | 53 |
|
52 | 54 | int main(int, char**) {
|
53 | 55 | #if TEST_SUPPORTS_LIBRARY_INTERNAL_ALLOCATIONS && !defined(DISABLE_NEW_COUNT)
|
54 |
| - test_geometric_progression(); |
| 56 | + test_growth_capacity(); |
55 | 57 | #endif
|
56 | 58 |
|
57 | 59 | return 0;
|
|
0 commit comments