diff options
Diffstat (limited to 'libcxx/test')
32 files changed, 1094 insertions, 5 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 } diff --git a/libcxx/test/strings/basic.string/string.iterators/db_iterators_2.pass.cpp b/libcxx/test/strings/basic.string/string.iterators/db_iterators_2.pass.cpp new file mode 100644 index 00000000000..41d9224cff6 --- /dev/null +++ b/libcxx/test/strings/basic.string/string.iterators/db_iterators_2.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> + +// Compare iterators from different containers with <. + +#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 s1; + S s2; + bool b = s1.begin() < s2.begin(); + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; + S s1; + S s2; + bool b = s1.begin() < s2.begin(); + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.iterators/db_iterators_3.pass.cpp b/libcxx/test/strings/basic.string/string.iterators/db_iterators_3.pass.cpp new file mode 100644 index 00000000000..733a277722a --- /dev/null +++ b/libcxx/test/strings/basic.string/string.iterators/db_iterators_3.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> + +// Subtract iterators from different containers with <. + +#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 s1; + S s2; + int i = s1.begin() - s2.begin(); + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; + S s1; + S s2; + int i = s1.begin() - s2.begin(); + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.iterators/db_iterators_4.pass.cpp b/libcxx/test/strings/basic.string/string.iterators/db_iterators_4.pass.cpp new file mode 100644 index 00000000000..9668e86619a --- /dev/null +++ b/libcxx/test/strings/basic.string/string.iterators/db_iterators_4.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> + +// Index iterator 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 C; + C c(1, '\0'); + C::iterator i = c.begin(); + assert(i[0] == 0); + assert(i[1] == 0); + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> C; + C c(1, '\0'); + C::iterator i = c.begin(); + assert(i[0] == 0); + assert(i[1] == 0); + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.iterators/db_iterators_5.pass.cpp b/libcxx/test/strings/basic.string/string.iterators/db_iterators_5.pass.cpp new file mode 100644 index 00000000000..2c355441db0 --- /dev/null +++ b/libcxx/test/strings/basic.string/string.iterators/db_iterators_5.pass.cpp @@ -0,0 +1,58 @@ +//===----------------------------------------------------------------------===// +// +// 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> + +// Add to iterator 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 C; + C c(1, '\0'); + C::iterator i = c.begin(); + i += 1; + assert(i == c.end()); + i = c.begin(); + i += 2; + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> C; + C c(1, '\0'); + C::iterator i = c.begin(); + i += 1; + assert(i == c.end()); + i = c.begin(); + i += 2; + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.iterators/db_iterators_6.pass.cpp b/libcxx/test/strings/basic.string/string.iterators/db_iterators_6.pass.cpp new file mode 100644 index 00000000000..bded5e6c7c9 --- /dev/null +++ b/libcxx/test/strings/basic.string/string.iterators/db_iterators_6.pass.cpp @@ -0,0 +1,56 @@ +//===----------------------------------------------------------------------===// +// +// 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> + +// Decrement iterator prior to begin. + +#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 C; + C c(1, '\0'); + C::iterator i = c.end(); + --i; + assert(i == c.begin()); + --i; + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> C; + C c(1, '\0'); + C::iterator i = c.end(); + --i; + assert(i == c.begin()); + --i; + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.iterators/db_iterators_7.pass.cpp b/libcxx/test/strings/basic.string/string.iterators/db_iterators_7.pass.cpp new file mode 100644 index 00000000000..7d8a219e0fe --- /dev/null +++ b/libcxx/test/strings/basic.string/string.iterators/db_iterators_7.pass.cpp @@ -0,0 +1,56 @@ +//===----------------------------------------------------------------------===// +// +// 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> + +// Increment iterator past end. + +#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 C; + C c(1, '\0'); + C::iterator i = c.begin(); + ++i; + assert(i == c.end()); + ++i; + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> C; + C c(1, '\0'); + C::iterator i = c.begin(); + ++i; + assert(i == c.end()); + ++i; + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.iterators/db_iterators_8.pass.cpp b/libcxx/test/strings/basic.string/string.iterators/db_iterators_8.pass.cpp new file mode 100644 index 00000000000..ed0fe1ae4c5 --- /dev/null +++ b/libcxx/test/strings/basic.string/string.iterators/db_iterators_8.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> + +// Dereference non-dereferenceable iterator. + +#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 C; + C c(1, '\0'); + C::iterator i = c.end(); + char j = *i; + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> C; + C c(1, '\0'); + C::iterator i = c.end(); + char j = *i; + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_db1.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_db1.pass.cpp new file mode 100644 index 00000000000..15f647d7891 --- /dev/null +++ b/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_db1.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 erase(const_iterator position) with end() + +#if _LIBCPP_DEBUG2 >= 1 + +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) + +#include <string> +#include <cassert> +#include <cstdlib> +#include <exception> + +#include "../../min_allocator.h" + +int main() +{ + { + std::string l1("123"); + std::string::const_iterator i = l1.end(); + l1.erase(i); + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; + S l1("123"); + S::const_iterator i = l1.end(); + l1.erase(i); + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_db2.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_db2.pass.cpp new file mode 100644 index 00000000000..e3d812723de --- /dev/null +++ b/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_db2.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> + +// Call erase(const_iterator position) with iterator from another container + +#if _LIBCPP_DEBUG2 >= 1 + +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) + +#include <string> +#include <cassert> +#include <cstdlib> +#include <exception> + +#include "../../min_allocator.h" + +int main() +{ + { + std::string l1("123"); + std::string l2("123"); + std::string::const_iterator i = l2.begin(); + l1.erase(i); + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; + S l1("123"); + S l2("123"); + S::const_iterator i = l2.begin(); + l1.erase(i); + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db1.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db1.pass.cpp new file mode 100644 index 00000000000..be0a7238943 --- /dev/null +++ b/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db1.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 erase(const_iterator first, const_iterator last); with first iterator from another container + +#if _LIBCPP_DEBUG2 >= 1 + +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) + +#include <string> +#include <cassert> +#include <exception> +#include <cstdlib> + +#include "../../min_allocator.h" + +int main() +{ + { + std::string l1("123"); + std::string l2("123"); + std::string::iterator i = l1.erase(l2.cbegin(), l1.cbegin()+1); + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; + S l1("123"); + S l2("123"); + S::iterator i = l1.erase(l2.cbegin(), l1.cbegin()+1); + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db2.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db2.pass.cpp new file mode 100644 index 00000000000..dfc29ef92fc --- /dev/null +++ b/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db2.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 erase(const_iterator first, const_iterator last); with second iterator from another container + +#if _LIBCPP_DEBUG2 >= 1 + +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) + +#include <string> +#include <cassert> +#include <exception> +#include <cstdlib> + +#include "../../min_allocator.h" + +int main() +{ + { + std::string l1("123"); + std::string l2("123"); + std::string::iterator i = l1.erase(l1.cbegin(), l2.cbegin()+1); + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; + S l1("123"); + S l2("123"); + S::iterator i = l1.erase(l1.cbegin(), l2.cbegin()+1); + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db3.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db3.pass.cpp new file mode 100644 index 00000000000..7c8792bd03a --- /dev/null +++ b/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db3.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 erase(const_iterator first, const_iterator last); with both iterators from another container + +#if _LIBCPP_DEBUG2 >= 1 + +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) + +#include <string> +#include <cassert> +#include <exception> +#include <cstdlib> + +#include "../../min_allocator.h" + +int main() +{ + { + std::string l1("123"); + std::string l2("123"); + std::string::iterator i = l1.erase(l2.cbegin(), l2.cbegin()+1); + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; + S l1("123"); + S l2("123"); + S::iterator i = l1.erase(l2.cbegin(), l2.cbegin()+1); + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db4.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db4.pass.cpp new file mode 100644 index 00000000000..a0e8d375321 --- /dev/null +++ b/libcxx/test/strings/basic.string/string.modifiers/string_erase/erase_iter_iter_db4.pass.cpp @@ -0,0 +1,48 @@ +//===----------------------------------------------------------------------===// +// +// 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 erase(const_iterator first, const_iterator last); with a bad range + +#if _LIBCPP_DEBUG2 >= 1 + +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) + +#include <string> +#include <cassert> +#include <exception> +#include <cstdlib> + +#include "../../min_allocator.h" + +int main() +{ + { + std::string l1("123"); + std::string::iterator i = l1.erase(l1.cbegin()+1, l1.cbegin()); + assert(false); + } +#if __cplusplus >= 201103L + { + typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S; + S l1("123"); + S::iterator i = l1.erase(l1.cbegin()+1, l1.cbegin()); + assert(false); + } +#endif +} + +#else + +int main() +{ +} + +#endif diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_erase/pop_back.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_erase/pop_back.pass.cpp index aaff5b6debb..d7c32bea663 100644 --- a/libcxx/test/strings/basic.string/string.modifiers/string_erase/pop_back.pass.cpp +++ b/libcxx/test/strings/basic.string/string.modifiers/string_erase/pop_back.pass.cpp @@ -11,6 +11,10 @@ // void pop_back(); +#if _LIBCPP_DEBUG2 >= 1 +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) +#endif + #include <string> #include <cassert> @@ -41,4 +45,11 @@ int main() test(S("abcdefghijklmnopqrst"), S("abcdefghijklmnopqrs")); } #endif +#if _LIBCPP_DEBUG2 >= 1 + { + std::string s; + s.pop_back(); + assert(false); + } +#endif } diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_insert/iter_char.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_insert/iter_char.pass.cpp index ec696feeff4..47b6c5ffebd 100644 --- a/libcxx/test/strings/basic.string/string.modifiers/string_insert/iter_char.pass.cpp +++ b/libcxx/test/strings/basic.string/string.modifiers/string_insert/iter_char.pass.cpp @@ -11,6 +11,10 @@ // iterator insert(const_iterator p, charT c); +#if _LIBCPP_DEBUG2 >= 1 +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) +#endif + #include <string> #include <stdexcept> #include <cassert> @@ -72,4 +76,13 @@ int main() test(s, s.begin()+6, 'C', S("a567ABC1432dcb")); } #endif +#if _LIBCPP_DEBUG2 >= 1 + { + typedef std::string S; + S s; + S s2; + s.insert(s2.begin(), '1'); + assert(false); + } +#endif } diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_insert/iter_initializer_list.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_insert/iter_initializer_list.pass.cpp index 4e24935743e..798452d0653 100644 --- a/libcxx/test/strings/basic.string/string.modifiers/string_insert/iter_initializer_list.pass.cpp +++ b/libcxx/test/strings/basic.string/string.modifiers/string_insert/iter_initializer_list.pass.cpp @@ -11,6 +11,10 @@ // iterator insert(const_iterator p, initializer_list<charT> il); +#if _LIBCPP_DEBUG2 >= 1 +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) +#endif + #include <string> #include <cassert> @@ -34,5 +38,13 @@ int main() assert(s == "123abc456"); } #endif +#if _LIBCPP_DEBUG2 >= 1 + { + std::string s; + std::string s2; + s.insert(s2.begin(), {'a', 'b', 'c'}); + assert(false); + } +#endif #endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS } diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp index 0eb3216e0d5..ec915984439 100644 --- a/libcxx/test/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp +++ b/libcxx/test/strings/basic.string/string.modifiers/string_insert/iter_iter_iter.pass.cpp @@ -12,6 +12,10 @@ // template<class InputIterator> // iterator insert(const_iterator p, InputIterator first, InputIterator last); +#if _LIBCPP_DEBUG2 >= 1 +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) +#endif + #include <string> #include <cassert> @@ -123,4 +127,14 @@ int main() S("12345678901234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")); } #endif +#if _LIBCPP_DEBUG2 >= 1 + { + std::string v; + std::string v2; + char a[] = "123"; + const int N = sizeof(a)/sizeof(a[0]); + std::string::iterator i = v.insert(v2.cbegin() + 10, a, a+N); + assert(false); + } +#endif } diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_insert/iter_size_char.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_insert/iter_size_char.pass.cpp index a3e5d29ee1e..7951f195135 100644 --- a/libcxx/test/strings/basic.string/string.modifiers/string_insert/iter_size_char.pass.cpp +++ b/libcxx/test/strings/basic.string/string.modifiers/string_insert/iter_size_char.pass.cpp @@ -11,6 +11,10 @@ // iterator insert(const_iterator p, size_type n, charT c); +#if _LIBCPP_DEBUG2 >= 1 +#define _LIBCPP_ASSERT(x, m) ((x) ? (void)0 : std::exit(0)) +#endif + #include <string> #include <cassert> @@ -166,4 +170,12 @@ int main() test(S("abcdefghijklmnopqrst"), 20, 20, '1', S("abcdefghijklmnopqrst11111111111111111111")); } #endif +#if _LIBCPP_DEBUG2 >= 1 + { + std::string s; + std::string s2; + s.insert(s2.begin(), 1, 'a'); + assert(false); + } +#endif } diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp index 37262f13c77..bdc4519305b 100644 --- a/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp +++ b/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp @@ -26,10 +26,10 @@ test(S s, typename S::size_type pos1, typename S::size_type n1, It f, It l, S ex typename S::size_type old_size = s.size(); typename S::const_iterator first = s.begin() + pos1; typename S::const_iterator last = s.begin() + pos1 + n1; + typename S::size_type xlen = last - first; s.replace(first, last, f, l); assert(s.__invariants()); assert(s == expected); - typename S::size_type xlen = last - first; typename S::size_type rlen = std::distance(f, l); assert(s.size() == old_size - xlen + rlen); } diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp index 58a4b20c2f2..6d552f0e747 100644 --- a/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp +++ b/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp @@ -27,10 +27,10 @@ test(S s, typename S::size_type pos1, typename S::size_type n1, const typename S typename S::size_type old_size = s.size(); typename S::const_iterator first = s.begin() + pos1; typename S::const_iterator last = s.begin() + pos1 + n1; + typename S::size_type xlen = last - first; s.replace(first, last, str); assert(s.__invariants()); assert(s == expected); - typename S::size_type xlen = last - first; typename S::size_type rlen = S::traits_type::length(str); assert(s.size() == old_size - xlen + rlen); } diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp index 0ef59ed7771..a8968ef7a3a 100644 --- a/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp +++ b/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp @@ -28,10 +28,10 @@ test(S s, typename S::size_type pos1, typename S::size_type n1, const typename S typename S::size_type old_size = s.size(); typename S::const_iterator first = s.begin() + pos1; typename S::const_iterator last = s.begin() + pos1 + n1; + typename S::size_type xlen = last - first; s.replace(first, last, str, n2); assert(s.__invariants()); assert(s == expected); - typename S::size_type xlen = last - first; typename S::size_type rlen = n2; assert(s.size() == old_size - xlen + rlen); } diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp index 6525607d7a7..b1b3d96ff94 100644 --- a/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp +++ b/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp @@ -28,10 +28,10 @@ test(S s, typename S::size_type pos1, typename S::size_type n1, typename S::size typename S::size_type old_size = s.size(); typename S::const_iterator first = s.begin() + pos1; typename S::const_iterator last = s.begin() + pos1 + n1; + typename S::size_type xlen = last - first; s.replace(first, last, n2, c); assert(s.__invariants()); assert(s == expected); - typename S::size_type xlen = last - first; typename S::size_type rlen = n2; assert(s.size() == old_size - xlen + rlen); } diff --git a/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp b/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp index 76db558c2e5..95ef8be2de3 100644 --- a/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp +++ b/libcxx/test/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp @@ -27,10 +27,10 @@ test(S s, typename S::size_type pos1, typename S::size_type n1, S str, S expecte typename S::size_type old_size = s.size(); typename S::const_iterator first = s.begin() + pos1; typename S::const_iterator last = s.begin() + pos1 + n1; + typename S::size_type xlen = last - first; s.replace(first, last, str); assert(s.__invariants()); assert(s == expected); - typename S::size_type xlen = last - first; typename S::size_type rlen = str.size(); assert(s.size() == old_size - xlen + rlen); } |