summaryrefslogtreecommitdiffstats
path: root/libcxx/test/strings/basic.string/string.capacity
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2014-11-14 03:16:12 +0000
committerEric Fiselier <eric@efcs.ca>2014-11-14 03:16:12 +0000
commit950a166710db5ca1ff25f8ed5fd2be3c210e1a81 (patch)
treebc1ecd09cb4290af5f5d404e52d7915aeb6352d3 /libcxx/test/strings/basic.string/string.capacity
parent4c12c6cf3b08151ca44e84669f96942da6809c28 (diff)
downloadbcm5719-llvm-950a166710db5ca1ff25f8ed5fd2be3c210e1a81.tar.gz
bcm5719-llvm-950a166710db5ca1ff25f8ed5fd2be3c210e1a81.zip
Split string capacity test into two parts and mark one part as UNSUPPORTED when using sanitizers.
The test is split such that: - max_size.pass.cpp tests that string::resize() fails to allocator for max_size and max_size -1 - over_max_size.pass.cpp tests that string::resize() throws a length error for max_size + 1 The test was split into two because max_size.pass.cpp cannot pass with sanitizers but over_max_size.pass.cpp can. llvm-svn: 221969
Diffstat (limited to 'libcxx/test/strings/basic.string/string.capacity')
-rw-r--r--libcxx/test/strings/basic.string/string.capacity/max_size.pass.cpp19
-rw-r--r--libcxx/test/strings/basic.string/string.capacity/over_max_size.pass.cpp47
2 files changed, 54 insertions, 12 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 e6a3aa42dde..f42642563bd 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
@@ -11,6 +11,13 @@
// size_type max_size() const;
+// NOTE: asan and msan will fail for one of two reasons
+// 1. If allocator_may_return_null=0 then they will fail because the allocation
+// returns null.
+// 2. If allocator_may_return_null=1 then they will fail because the allocation
+// is too large to succeed.
+// UNSUPPORTED: asan, msan
+
#include <string>
#include <cassert>
@@ -40,23 +47,11 @@ test2(const S& s)
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()
diff --git a/libcxx/test/strings/basic.string/string.capacity/over_max_size.pass.cpp b/libcxx/test/strings/basic.string/string.capacity/over_max_size.pass.cpp
new file mode 100644
index 00000000000..bbadb9ccc5a
--- /dev/null
+++ b/libcxx/test/strings/basic.string/string.capacity/over_max_size.pass.cpp
@@ -0,0 +1,47 @@
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// <string>
+
+// size_type max_size() const;
+
+#include <string>
+#include <cassert>
+
+#include "min_allocator.h"
+
+template <class S>
+void
+test(const S& s)
+{
+ assert(s.max_size() >= s.size());
+ S s2(s);
+ const size_t sz = s2.max_size() + 1;
+ try { s2.resize(sz, 'x'); }
+ catch ( const std::length_error & ) { return ; }
+ assert ( false );
+}
+
+int main()
+{
+ {
+ typedef std::string S;
+ test(S());
+ test(S("123"));
+ test(S("12345678901234567890123456789012345678901234567890"));
+ }
+#if __cplusplus >= 201103L
+ {
+ typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
+ test(S());
+ test(S("123"));
+ test(S("12345678901234567890123456789012345678901234567890"));
+ }
+#endif
+}
OpenPOWER on IntegriCloud