|
11 | 11 |
|
12 | 12 | // void shrink_to_fit();
|
13 | 13 |
|
| 14 | +// XFAIL: FROZEN-CXX03-HEADERS-FIXME |
| 15 | + |
14 | 16 | #include <cassert>
|
| 17 | +#include <climits> |
15 | 18 | #include <vector>
|
16 | 19 |
|
17 | 20 | #include "increasing_allocator.h"
|
|
20 | 23 |
|
21 | 24 | TEST_CONSTEXPR_CXX20 bool tests() {
|
22 | 25 | {
|
23 |
| - std::vector<bool> v(100); |
| 26 | + using C = std::vector<bool>; |
| 27 | + C v(100); |
24 | 28 | v.push_back(1);
|
| 29 | + v.clear(); |
25 | 30 | v.shrink_to_fit();
|
26 |
| - assert(v.capacity() >= 101); |
27 |
| - assert(v.size() >= 101); |
| 31 | + assert(v.capacity() == 0); |
| 32 | + assert(v.size() == 0); |
28 | 33 | }
|
29 |
| -#if TEST_STD_VER >= 11 |
30 | 34 | {
|
31 |
| - std::vector<bool, min_allocator<bool>> v(100); |
| 35 | + using C = std::vector<bool, min_allocator<bool> >; |
| 36 | + C v(100); |
32 | 37 | v.push_back(1);
|
| 38 | + C::size_type before_cap = v.capacity(); |
33 | 39 | v.shrink_to_fit();
|
34 | 40 | assert(v.capacity() >= 101);
|
35 |
| - assert(v.size() >= 101); |
| 41 | + assert(v.capacity() <= before_cap); |
| 42 | + assert(v.size() == 101); |
| 43 | + } |
| 44 | + { |
| 45 | + using C = std::vector<bool>; |
| 46 | + unsigned bits_per_word = static_cast<unsigned>(sizeof(C::__storage_type) * CHAR_BIT); |
| 47 | + C v(bits_per_word); |
| 48 | + v.push_back(1); |
| 49 | + assert(v.capacity() == bits_per_word * 2); |
| 50 | + assert(v.size() == bits_per_word + 1); |
| 51 | + v.pop_back(); |
| 52 | + v.shrink_to_fit(); |
| 53 | + assert(v.capacity() == bits_per_word); |
| 54 | + assert(v.size() == bits_per_word); |
| 55 | + } |
| 56 | + { |
| 57 | + using C = std::vector<bool>; |
| 58 | + unsigned bits_per_word = static_cast<unsigned>(sizeof(C::__storage_type) * CHAR_BIT); |
| 59 | + C v; |
| 60 | + v.reserve(bits_per_word * 2); |
| 61 | + v.push_back(1); |
| 62 | + assert(v.capacity() == bits_per_word * 2); |
| 63 | + assert(v.size() == 1); |
| 64 | + v.shrink_to_fit(); |
| 65 | + assert(v.capacity() == bits_per_word); |
| 66 | + assert(v.size() == 1); |
36 | 67 | }
|
37 |
| -#endif |
38 | 68 |
|
39 | 69 | return true;
|
40 | 70 | }
|
|
0 commit comments