diff options
Diffstat (limited to 'libcxx/test/strings/basic.string/string.access')
9 files changed, 347 insertions, 0 deletions
diff --git a/libcxx/test/strings/basic.string/string.access/back.pass.cpp b/libcxx/test/strings/basic.string/string.access/back.pass.cpp index f241d4d9125..9c4800e3abf 100644 --- a/libcxx/test/strings/basic.string/string.access/back.pass.cpp +++ b/libcxx/test/strings/basic.string/string.access/back.pass.cpp @@ -12,6 +12,10 @@ // const charT& back() const; // charT& back(); +#ifdef _LIBCPP_DEBUG2 +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) +#endif + #include <string> #include <cassert> @@ -42,4 +46,11 @@ int main() test(S("1234567890123456789012345678901234567890")); } #endif +#ifdef _LIBCPP_DEBUG2 + { + std::string s; + char c = s.back(); + assert(false); + } +#endif } diff --git a/libcxx/test/strings/basic.string/string.access/db_back.pass.cpp b/libcxx/test/strings/basic.string/string.access/db_back.pass.cpp new file mode 100644 index 00000000000..95b0ab05cb9 --- /dev/null +++ b/libcxx/test/strings/basic.string/string.access/db_back.pass.cpp @@ -0,0 +1,54 @@ +//===----------------------------------------------------------------------===// +// +// 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> + +// Call back() on empty container. + +#if _LIBCPP_DEBUG2 >= 1 + +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) + +#include <string> +#include <cassert> +#include <iterator> +#include <exception> +#include <cstdlib> + +#include "../min_allocator.h" + +int main() +{ + { + typedef std::string S; + S s(1, '\0'); + assert(s.back() == 0); + s.clear(); + assert(s.back() == 0); + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; + S s(1, '\0'); + assert(s.back() == 0); + s.clear(); + assert(s.back() == 0); + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.access/db_cback.pass.cpp b/libcxx/test/strings/basic.string/string.access/db_cback.pass.cpp new file mode 100644 index 00000000000..8a7fe5967ef --- /dev/null +++ b/libcxx/test/strings/basic.string/string.access/db_cback.pass.cpp @@ -0,0 +1,50 @@ +//===----------------------------------------------------------------------===// +// +// 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> + +// Call back() on empty const container. + +#if _LIBCPP_DEBUG2 >= 1 + +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) + +#include <string> +#include <cassert> +#include <iterator> +#include <exception> +#include <cstdlib> + +#include "../min_allocator.h" + +int main() +{ + { + typedef std::string S; + const S s; + assert(s.back() == 0); + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; + const S s; + assert(s.back() == 0); + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.access/db_cfront.pass.cpp b/libcxx/test/strings/basic.string/string.access/db_cfront.pass.cpp new file mode 100644 index 00000000000..55e90e32e6b --- /dev/null +++ b/libcxx/test/strings/basic.string/string.access/db_cfront.pass.cpp @@ -0,0 +1,50 @@ +//===----------------------------------------------------------------------===// +// +// 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> + +// Call front() on empty const container. + +#if _LIBCPP_DEBUG2 >= 1 + +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) + +#include <string> +#include <cassert> +#include <iterator> +#include <exception> +#include <cstdlib> + +#include "../min_allocator.h" + +int main() +{ + { + typedef std::string S; + const S s; + assert(s.front() == 0); + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; + const S s; + assert(s.front() == 0); + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.access/db_cindex.pass.cpp b/libcxx/test/strings/basic.string/string.access/db_cindex.pass.cpp new file mode 100644 index 00000000000..c8e4f79ce1d --- /dev/null +++ b/libcxx/test/strings/basic.string/string.access/db_cindex.pass.cpp @@ -0,0 +1,52 @@ +//===----------------------------------------------------------------------===// +// +// 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> + +// Index const string out of bounds. + +#if _LIBCPP_DEBUG2 >= 1 + +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) + +#include <string> +#include <cassert> +#include <iterator> +#include <exception> +#include <cstdlib> + +#include "../min_allocator.h" + +int main() +{ + { + typedef std::string S; + const S s; + assert(s[0] == 0); + assert(s[1] == 0); + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; + const S s; + assert(s[0] == 0); + assert(s[1] == 0); + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.access/db_front.pass.cpp b/libcxx/test/strings/basic.string/string.access/db_front.pass.cpp new file mode 100644 index 00000000000..e0de8f54ec4 --- /dev/null +++ b/libcxx/test/strings/basic.string/string.access/db_front.pass.cpp @@ -0,0 +1,54 @@ +//===----------------------------------------------------------------------===// +// +// 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> + +// Call front() on empty container. + +#if _LIBCPP_DEBUG2 >= 1 + +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) + +#include <string> +#include <cassert> +#include <iterator> +#include <exception> +#include <cstdlib> + +#include "../min_allocator.h" + +int main() +{ + { + typedef std::string S; + S s(1, '\0'); + assert(s.front() == 0); + s.clear(); + assert(s.front() == 0); + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; + S s(1, '\0'); + assert(s.front() == 0); + s.clear(); + assert(s.front() == 0); + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.access/db_index.pass.cpp b/libcxx/test/strings/basic.string/string.access/db_index.pass.cpp new file mode 100644 index 00000000000..ecd0fbcf72c --- /dev/null +++ b/libcxx/test/strings/basic.string/string.access/db_index.pass.cpp @@ -0,0 +1,52 @@ +//===----------------------------------------------------------------------===// +// +// 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> + +// Index string out of bounds. + +#if _LIBCPP_DEBUG2 >= 1 + +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) + +#include <string> +#include <cassert> +#include <iterator> +#include <exception> +#include <cstdlib> + +#include "../min_allocator.h" + +int main() +{ + { + typedef std::string S; + S s; + assert(s[0] == 0); + assert(s[1] == 0); + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; + S s; + assert(s[0] == 0); + assert(s[1] == 0); + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.access/front.pass.cpp b/libcxx/test/strings/basic.string/string.access/front.pass.cpp index ecfafb54bd0..fdeb16d8d1c 100644 --- a/libcxx/test/strings/basic.string/string.access/front.pass.cpp +++ b/libcxx/test/strings/basic.string/string.access/front.pass.cpp @@ -12,6 +12,10 @@ // const charT& front() const; // charT& front(); +#ifdef _LIBCPP_DEBUG2 +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) +#endif + #include <string> #include <cassert> @@ -42,4 +46,11 @@ int main() test(S("1234567890123456789012345678901234567890")); } #endif +#ifdef _LIBCPP_DEBUG2 + { + std::string s; + char c = s.front(); + assert(false); + } +#endif } diff --git a/libcxx/test/strings/basic.string/string.access/index.pass.cpp b/libcxx/test/strings/basic.string/string.access/index.pass.cpp index b5643533b00..76709fea899 100644 --- a/libcxx/test/strings/basic.string/string.access/index.pass.cpp +++ b/libcxx/test/strings/basic.string/string.access/index.pass.cpp @@ -12,6 +12,10 @@ // const_reference operator[](size_type pos) const; // reference operator[](size_type pos); +#ifdef _LIBCPP_DEBUG2 +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) +#endif + #include <string> #include <cassert> @@ -47,4 +51,13 @@ int main() assert(s2[0] == '\0'); } #endif +#ifdef _LIBCPP_DEBUG2 + { + std::string s; + char c = s[0]; + assert(c == '\0'); + c = s[1]; + assert(false); + } +#endif } |