diff options
Diffstat (limited to 'libcxx/test/strings/basic.string')
-rw-r--r-- | libcxx/test/strings/basic.string/string.capacity/max_size.pass.cpp | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/libcxx/test/strings/basic.string/string.capacity/max_size.pass.cpp b/libcxx/test/strings/basic.string/string.capacity/max_size.pass.cpp index f9b228412c7..0fe7f123c89 100644 --- a/libcxx/test/strings/basic.string/string.capacity/max_size.pass.cpp +++ b/libcxx/test/strings/basic.string/string.capacity/max_size.pass.cpp @@ -18,15 +18,45 @@ template <class S> void -test(const S& s) +test1(const S& s) { - assert(s.max_size() >= s.size()); - { - S s2; - try { s2.resize(s2.max_size() - 1, 'x'); } + S s2(s); + const size_t sz = s2.max_size() - 1; + try { s2.resize(sz, 'x'); } catch ( const std::bad_alloc & ) { return ; } + assert ( s2.size() == sz ); +} + +template <class S> +void +test2(const S& s) +{ + S s2(s); + const size_t sz = s2.max_size(); + try { s2.resize(sz, 'x'); } + catch ( const std::bad_alloc & ) { return ; } + assert ( s.size() == sz ); +} + +template <class S> +void +test3(const S& s) +{ + S s2(s); + const size_t sz = s2.max_size() + 1; + try { s2.resize(sz, 'x'); } + catch ( const std::length_error & ) { return ; } assert ( false ); - } +} + +template <class S> +void +test(const S& s) +{ + assert(s.max_size() >= s.size()); + test1(s); + test2(s); + test3(s); } int main() |