summaryrefslogtreecommitdiffstats
path: root/libcxx/test/strings/basic.string/string.cons
diff options
context:
space:
mode:
Diffstat (limited to 'libcxx/test/strings/basic.string/string.cons')
-rw-r--r--libcxx/test/strings/basic.string/string.cons/alloc.pass.cpp74
-rw-r--r--libcxx/test/strings/basic.string/string.cons/char_assignment.pass.cpp49
-rw-r--r--libcxx/test/strings/basic.string/string.cons/copy.pass.cpp49
-rw-r--r--libcxx/test/strings/basic.string/string.cons/copy_alloc.pass.cpp49
-rw-r--r--libcxx/test/strings/basic.string/string.cons/copy_assignment.pass.cpp70
-rw-r--r--libcxx/test/strings/basic.string/string.cons/default_noexcept.pass.cpp45
-rw-r--r--libcxx/test/strings/basic.string/string.cons/dtor_noexcept.pass.cpp47
-rw-r--r--libcxx/test/strings/basic.string/string.cons/initializer_list.pass.cpp46
-rw-r--r--libcxx/test/strings/basic.string/string.cons/initializer_list_assignment.pass.cpp36
-rw-r--r--libcxx/test/strings/basic.string/string.cons/iter_alloc.pass.cpp119
-rw-r--r--libcxx/test/strings/basic.string/string.cons/move.pass.cpp57
-rw-r--r--libcxx/test/strings/basic.string/string.cons/move_alloc.pass.cpp68
-rw-r--r--libcxx/test/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp47
-rw-r--r--libcxx/test/strings/basic.string/string.cons/move_assignment.pass.cpp79
-rw-r--r--libcxx/test/strings/basic.string/string.cons/move_noexcept.pass.cpp45
-rw-r--r--libcxx/test/strings/basic.string/string.cons/pointer_alloc.pass.cpp89
-rw-r--r--libcxx/test/strings/basic.string/string.cons/pointer_assignment.pass.cpp72
-rw-r--r--libcxx/test/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp87
-rw-r--r--libcxx/test/strings/basic.string/string.cons/size_char_alloc.pass.cpp128
-rw-r--r--libcxx/test/strings/basic.string/string.cons/substr.pass.cpp173
20 files changed, 0 insertions, 1429 deletions
diff --git a/libcxx/test/strings/basic.string/string.cons/alloc.pass.cpp b/libcxx/test/strings/basic.string/string.cons/alloc.pass.cpp
deleted file mode 100644
index 512d1182755..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/alloc.pass.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// explicit basic_string(const Allocator& a = Allocator());
-
-#include <string>
-#include <cassert>
-
-#include "test_allocator.h"
-#include "min_allocator.h"
-
-template <class S>
-void
-test()
-{
- {
- S s;
- assert(s.__invariants());
- assert(s.data());
- assert(s.size() == 0);
- assert(s.capacity() >= s.size());
- assert(s.get_allocator() == typename S::allocator_type());
- }
- {
- S s(typename S::allocator_type(5));
- assert(s.__invariants());
- assert(s.data());
- assert(s.size() == 0);
- assert(s.capacity() >= s.size());
- assert(s.get_allocator() == typename S::allocator_type(5));
- }
-}
-
-#if __cplusplus >= 201103L
-
-template <class S>
-void
-test2()
-{
- {
- S s;
- assert(s.__invariants());
- assert(s.data());
- assert(s.size() == 0);
- assert(s.capacity() >= s.size());
- assert(s.get_allocator() == typename S::allocator_type());
- }
- {
- S s(typename S::allocator_type{});
- assert(s.__invariants());
- assert(s.data());
- assert(s.size() == 0);
- assert(s.capacity() >= s.size());
- assert(s.get_allocator() == typename S::allocator_type());
- }
-}
-
-#endif
-
-int main()
-{
- test<std::basic_string<char, std::char_traits<char>, test_allocator<char> > >();
-#if __cplusplus >= 201103L
- test2<std::basic_string<char, std::char_traits<char>, min_allocator<char> > >();
-#endif
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/char_assignment.pass.cpp b/libcxx/test/strings/basic.string/string.cons/char_assignment.pass.cpp
deleted file mode 100644
index 1c582bc5163..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/char_assignment.pass.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string<charT,traits,Allocator>& operator=(charT c);
-
-#include <string>
-#include <cassert>
-
-#include "min_allocator.h"
-
-template <class S>
-void
-test(S s1, typename S::value_type s2)
-{
- typedef typename S::traits_type T;
- s1 = s2;
- assert(s1.__invariants());
- assert(s1.size() == 1);
- assert(T::eq(s1[0], s2));
- assert(s1.capacity() >= s1.size());
-}
-
-int main()
-{
- {
- typedef std::string S;
- test(S(), 'a');
- test(S("1"), 'a');
- test(S("123456789"), 'a');
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"), 'a');
- }
-#if __cplusplus >= 201103L
- {
- typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
- test(S(), 'a');
- test(S("1"), 'a');
- test(S("123456789"), 'a');
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"), 'a');
- }
-#endif
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/copy.pass.cpp b/libcxx/test/strings/basic.string/string.cons/copy.pass.cpp
deleted file mode 100644
index 9c9fc323066..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/copy.pass.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string(const basic_string<charT,traits,Allocator>& str);
-
-#include <string>
-#include <cassert>
-
-#include "test_allocator.h"
-#include "min_allocator.h"
-
-template <class S>
-void
-test(S s1)
-{
- S s2 = s1;
- assert(s2.__invariants());
- assert(s2 == s1);
- assert(s2.capacity() >= s2.size());
- assert(s2.get_allocator() == s1.get_allocator());
-}
-
-int main()
-{
- {
- typedef test_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
- test(S(A(3)));
- test(S("1", A(5)));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)));
- }
-#if __cplusplus >= 201103L
- {
- typedef min_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
- test(S(A{}));
- test(S("1", A()));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()));
- }
-#endif
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/copy_alloc.pass.cpp b/libcxx/test/strings/basic.string/string.cons/copy_alloc.pass.cpp
deleted file mode 100644
index cf8021019a2..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/copy_alloc.pass.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string(const basic_string& str, const Allocator& alloc);
-
-#include <string>
-#include <cassert>
-
-#include "test_allocator.h"
-#include "min_allocator.h"
-
-template <class S>
-void
-test(S s1, const typename S::allocator_type& a)
-{
- S s2(s1, a);
- assert(s2.__invariants());
- assert(s2 == s1);
- assert(s2.capacity() >= s2.size());
- assert(s2.get_allocator() == a);
-}
-
-int main()
-{
- {
- typedef test_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
- test(S(), A(3));
- test(S("1"), A(5));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"), A(7));
- }
-#if __cplusplus >= 201103L
- {
- typedef min_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
- test(S(), A());
- test(S("1"), A());
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"), A());
- }
-#endif
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/copy_assignment.pass.cpp b/libcxx/test/strings/basic.string/string.cons/copy_assignment.pass.cpp
deleted file mode 100644
index ccb6c599974..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/copy_assignment.pass.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string<charT,traits,Allocator>&
-// operator=(const basic_string<charT,traits,Allocator>& str);
-
-#include <string>
-#include <cassert>
-
-#include "min_allocator.h"
-
-template <class S>
-void
-test(S s1, const S& s2)
-{
- s1 = s2;
- assert(s1.__invariants());
- assert(s1 == s2);
- assert(s1.capacity() >= s1.size());
-}
-
-int main()
-{
- {
- typedef std::string S;
- test(S(), S());
- test(S("1"), S());
- test(S(), S("1"));
- test(S("1"), S("2"));
- test(S("1"), S("2"));
-
- test(S(),
- S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
- test(S("123456789"),
- S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"),
- S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890123456789012345678901234567890"),
- S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
- }
-#if __cplusplus >= 201103L
- {
- typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
- test(S(), S());
- test(S("1"), S());
- test(S(), S("1"));
- test(S("1"), S("2"));
- test(S("1"), S("2"));
-
- test(S(),
- S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
- test(S("123456789"),
- S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"),
- S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890123456789012345678901234567890"),
- S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
- }
-#endif
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/default_noexcept.pass.cpp b/libcxx/test/strings/basic.string/string.cons/default_noexcept.pass.cpp
deleted file mode 100644
index f935db83d73..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/default_noexcept.pass.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string()
-// noexcept(is_nothrow_default_constructible<allocator_type>::value);
-
-// This tests a conforming extension
-
-#include <string>
-#include <cassert>
-
-#include "test_allocator.h"
-
-template <class T>
-struct some_alloc
-{
- typedef T value_type;
- some_alloc(const some_alloc&);
-};
-
-int main()
-{
-#if __has_feature(cxx_noexcept)
- {
- typedef std::string C;
- static_assert(std::is_nothrow_default_constructible<C>::value, "");
- }
- {
- typedef std::basic_string<char, std::char_traits<char>, test_allocator<char>> C;
- static_assert(std::is_nothrow_default_constructible<C>::value, "");
- }
- {
- typedef std::basic_string<char, std::char_traits<char>, some_alloc<char>> C;
- static_assert(!std::is_nothrow_default_constructible<C>::value, "");
- }
-#endif
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/dtor_noexcept.pass.cpp b/libcxx/test/strings/basic.string/string.cons/dtor_noexcept.pass.cpp
deleted file mode 100644
index b3cc127fbc4..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/dtor_noexcept.pass.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// ~basic_string() // implied noexcept;
-
-#include <string>
-#include <cassert>
-
-#include "test_allocator.h"
-
-#if __has_feature(cxx_noexcept)
-
-template <class T>
-struct some_alloc
-{
- typedef T value_type;
- some_alloc(const some_alloc&);
- ~some_alloc() noexcept(false);
-};
-
-#endif
-
-int main()
-{
-#if __has_feature(cxx_noexcept)
- {
- typedef std::string C;
- static_assert(std::is_nothrow_destructible<C>::value, "");
- }
- {
- typedef std::basic_string<char, std::char_traits<char>, test_allocator<char>> C;
- static_assert(std::is_nothrow_destructible<C>::value, "");
- }
- {
- typedef std::basic_string<char, std::char_traits<char>, some_alloc<char>> C;
- static_assert(!std::is_nothrow_destructible<C>::value, "");
- }
-#endif
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/initializer_list.pass.cpp b/libcxx/test/strings/basic.string/string.cons/initializer_list.pass.cpp
deleted file mode 100644
index d6ff8504e9d..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/initializer_list.pass.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string(initializer_list<charT> il, const Allocator& a = Allocator());
-
-#include <string>
-#include <cassert>
-
-#include "test_allocator.h"
-#include "min_allocator.h"
-
-int main()
-{
-#ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
- {
- std::string s = {'a', 'b', 'c'};
- assert(s == "abc");
- }
- {
- std::wstring s;
- s = {L'a', L'b', L'c'};
- assert(s == L"abc");
- }
-#if __cplusplus >= 201103L
- {
- typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
- S s = {'a', 'b', 'c'};
- assert(s == "abc");
- }
- {
- typedef std::basic_string<wchar_t, std::char_traits<wchar_t>, min_allocator<wchar_t>> S;
- S s;
- s = {L'a', L'b', L'c'};
- assert(s == L"abc");
- }
-#endif
-#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/initializer_list_assignment.pass.cpp b/libcxx/test/strings/basic.string/string.cons/initializer_list_assignment.pass.cpp
deleted file mode 100644
index 75307689535..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/initializer_list_assignment.pass.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string& operator=(initializer_list<charT> il);
-
-#include <string>
-#include <cassert>
-
-#include "min_allocator.h"
-
-int main()
-{
-#ifndef _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
- {
- std::string s;
- s = {'a', 'b', 'c'};
- assert(s == "abc");
- }
-#if __cplusplus >= 201103L
- {
- typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
- S s;
- s = {'a', 'b', 'c'};
- assert(s == "abc");
- }
-#endif
-#endif // _LIBCPP_HAS_NO_GENERALIZED_INITIALIZERS
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/iter_alloc.pass.cpp b/libcxx/test/strings/basic.string/string.cons/iter_alloc.pass.cpp
deleted file mode 100644
index 664cb80b10f..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/iter_alloc.pass.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// template<class InputIterator>
-// basic_string(InputIterator begin, InputIterator end,
-// const Allocator& a = Allocator());
-
-#include <string>
-#include <iterator>
-#include <cassert>
-
-#include "test_allocator.h"
-#include "../input_iterator.h"
-#include "min_allocator.h"
-
-template <class It>
-void
-test(It first, It last)
-{
- typedef typename std::iterator_traits<It>::value_type charT;
- typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
- typedef typename S::traits_type T;
- typedef typename S::allocator_type A;
- S s2(first, last);
- assert(s2.__invariants());
- assert(s2.size() == std::distance(first, last));
- unsigned i = 0;
- for (It it = first; it != last; ++it, ++i)
- assert(s2[i] == *it);
- assert(s2.get_allocator() == A());
- assert(s2.capacity() >= s2.size());
-}
-
-template <class It, class A>
-void
-test(It first, It last, const A& a)
-{
- typedef typename std::iterator_traits<It>::value_type charT;
- typedef std::basic_string<charT, std::char_traits<charT>, A> S;
- typedef typename S::traits_type T;
- S s2(first, last, a);
- assert(s2.__invariants());
- assert(s2.size() == std::distance(first, last));
- unsigned i = 0;
- for (It it = first; it != last; ++it, ++i)
- assert(s2[i] == *it);
- assert(s2.get_allocator() == a);
- assert(s2.capacity() >= s2.size());
-}
-
-int main()
-{
- {
- typedef test_allocator<char> A;
- const char* s = "12345678901234567890123456789012345678901234567890";
-
- test(s, s);
- test(s, s, A(2));
-
- test(s, s+1);
- test(s, s+1, A(2));
-
- test(s, s+10);
- test(s, s+10, A(2));
-
- test(s, s+50);
- test(s, s+50, A(2));
-
- test(input_iterator<const char*>(s), input_iterator<const char*>(s));
- test(input_iterator<const char*>(s), input_iterator<const char*>(s), A(2));
-
- test(input_iterator<const char*>(s), input_iterator<const char*>(s+1));
- test(input_iterator<const char*>(s), input_iterator<const char*>(s+1), A(2));
-
- test(input_iterator<const char*>(s), input_iterator<const char*>(s+10));
- test(input_iterator<const char*>(s), input_iterator<const char*>(s+10), A(2));
-
- test(input_iterator<const char*>(s), input_iterator<const char*>(s+50));
- test(input_iterator<const char*>(s), input_iterator<const char*>(s+50), A(2));
- }
-#if __cplusplus >= 201103L
- {
- typedef min_allocator<char> A;
- const char* s = "12345678901234567890123456789012345678901234567890";
-
- test(s, s);
- test(s, s, A());
-
- test(s, s+1);
- test(s, s+1, A());
-
- test(s, s+10);
- test(s, s+10, A());
-
- test(s, s+50);
- test(s, s+50, A());
-
- test(input_iterator<const char*>(s), input_iterator<const char*>(s));
- test(input_iterator<const char*>(s), input_iterator<const char*>(s), A());
-
- test(input_iterator<const char*>(s), input_iterator<const char*>(s+1));
- test(input_iterator<const char*>(s), input_iterator<const char*>(s+1), A());
-
- test(input_iterator<const char*>(s), input_iterator<const char*>(s+10));
- test(input_iterator<const char*>(s), input_iterator<const char*>(s+10), A());
-
- test(input_iterator<const char*>(s), input_iterator<const char*>(s+50));
- test(input_iterator<const char*>(s), input_iterator<const char*>(s+50), A());
- }
-#endif
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/move.pass.cpp b/libcxx/test/strings/basic.string/string.cons/move.pass.cpp
deleted file mode 100644
index b94f189ecb4..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/move.pass.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string(basic_string<charT,traits,Allocator>&& str);
-
-#include <string>
-#include <cassert>
-
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
-#include "test_allocator.h"
-#include "min_allocator.h"
-
-template <class S>
-void
-test(S s0)
-{
- S s1 = s0;
- S s2 = std::move(s0);
- assert(s2.__invariants());
- assert(s0.__invariants());
- assert(s2 == s1);
- assert(s2.capacity() >= s2.size());
- assert(s2.get_allocator() == s1.get_allocator());
-}
-
-#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
-int main()
-{
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
- {
- typedef test_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
- test(S(A(3)));
- test(S("1", A(5)));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)));
- }
-#if __cplusplus >= 201103L
- {
- typedef min_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
- test(S(A{}));
- test(S("1", A()));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()));
- }
-#endif
-#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/move_alloc.pass.cpp b/libcxx/test/strings/basic.string/string.cons/move_alloc.pass.cpp
deleted file mode 100644
index 1f9631449ee..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/move_alloc.pass.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string(basic_string&& str, const Allocator& alloc);
-
-#include <string>
-#include <cassert>
-
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
-#include "test_allocator.h"
-#include "min_allocator.h"
-
-
-template <class S>
-void
-test(S s0, const typename S::allocator_type& a)
-{
- S s1 = s0;
- S s2(std::move(s0), a);
- assert(s2.__invariants());
- assert(s0.__invariants());
- assert(s2 == s1);
- assert(s2.capacity() >= s2.size());
- assert(s2.get_allocator() == a);
-}
-
-#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
-int main()
-{
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
- {
- typedef test_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
- test(S(), A(3));
- test(S("1"), A(5));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"), A(7));
- }
-
- int alloc_count = test_alloc_base::alloc_count;
- {
- typedef test_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
- S s1 ( "Twas brillig, and the slivy toves did gyre and gymbal in the wabe" );
- S s2 (std::move(s1), A(1));
- }
- assert ( test_alloc_base::alloc_count == alloc_count );
-
-#if __cplusplus >= 201103L
- {
- typedef min_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
- test(S(), A());
- test(S("1"), A());
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"), A());
- }
-#endif
-#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp b/libcxx/test/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp
deleted file mode 100644
index 32c9514a915..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/move_assign_noexcept.pass.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string& operator=(basic_string&& c)
-// noexcept(
-// allocator_type::propagate_on_container_move_assignment::value &&
-// is_nothrow_move_assignable<allocator_type>::value);
-
-// This tests a conforming extension
-
-#include <string>
-#include <cassert>
-
-#include "test_allocator.h"
-
-template <class T>
-struct some_alloc
-{
- typedef T value_type;
- some_alloc(const some_alloc&);
-};
-
-int main()
-{
-#if __has_feature(cxx_noexcept)
- {
- typedef std::string C;
- static_assert(std::is_nothrow_move_assignable<C>::value, "");
- }
- {
- typedef std::basic_string<char, std::char_traits<char>, test_allocator<char>> C;
- static_assert(!std::is_nothrow_move_assignable<C>::value, "");
- }
- {
- typedef std::basic_string<char, std::char_traits<char>, some_alloc<char>> C;
- static_assert(!std::is_nothrow_move_assignable<C>::value, "");
- }
-#endif
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/move_assignment.pass.cpp b/libcxx/test/strings/basic.string/string.cons/move_assignment.pass.cpp
deleted file mode 100644
index 5bc1c8a9153..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/move_assignment.pass.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string<charT,traits,Allocator>&
-// operator=(basic_string<charT,traits,Allocator>&& str);
-
-#include <string>
-#include <cassert>
-
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
-#include "test_allocator.h"
-#include "min_allocator.h"
-
-template <class S>
-void
-test(S s1, S s2)
-{
- S s0 = s2;
- s1 = std::move(s2);
- assert(s1.__invariants());
- assert(s2.__invariants());
- assert(s1 == s0);
- assert(s1.capacity() >= s1.size());
-}
-
-#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
-int main()
-{
-#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
- {
- typedef std::string S;
- test(S(), S());
- test(S("1"), S());
- test(S(), S("1"));
- test(S("1"), S("2"));
- test(S("1"), S("2"));
-
- test(S(),
- S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
- test(S("123456789"),
- S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"),
- S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890123456789012345678901234567890"),
- S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
- }
-#if __cplusplus >= 201103L
- {
- typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
- test(S(), S());
- test(S("1"), S());
- test(S(), S("1"));
- test(S("1"), S("2"));
- test(S("1"), S("2"));
-
- test(S(),
- S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
- test(S("123456789"),
- S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"),
- S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890123456789012345678901234567890"),
- S("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"));
- }
-#endif
-#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/move_noexcept.pass.cpp b/libcxx/test/strings/basic.string/string.cons/move_noexcept.pass.cpp
deleted file mode 100644
index 556aabdc44a..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/move_noexcept.pass.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string(basic_string&&)
-// noexcept(is_nothrow_move_constructible<allocator_type>::value);
-
-// This tests a conforming extension
-
-#include <string>
-#include <cassert>
-
-#include "test_allocator.h"
-
-template <class T>
-struct some_alloc
-{
- typedef T value_type;
- some_alloc(const some_alloc&);
-};
-
-int main()
-{
-#if __has_feature(cxx_noexcept)
- {
- typedef std::string C;
- static_assert(std::is_nothrow_move_constructible<C>::value, "");
- }
- {
- typedef std::basic_string<char, std::char_traits<char>, test_allocator<char>> C;
- static_assert(std::is_nothrow_move_constructible<C>::value, "");
- }
- {
- typedef std::basic_string<char, std::char_traits<char>, some_alloc<char>> C;
- static_assert(!std::is_nothrow_move_constructible<C>::value, "");
- }
-#endif
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/pointer_alloc.pass.cpp b/libcxx/test/strings/basic.string/string.cons/pointer_alloc.pass.cpp
deleted file mode 100644
index f6e9e00e590..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/pointer_alloc.pass.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string(const charT* s, const Allocator& a = Allocator());
-
-#include <string>
-#include <stdexcept>
-#include <algorithm>
-#include <cassert>
-
-#include "test_allocator.h"
-#include "min_allocator.h"
-
-template <class charT>
-void
-test(const charT* s)
-{
- typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
- typedef typename S::traits_type T;
- typedef typename S::allocator_type A;
- unsigned n = T::length(s);
- S s2(s);
- assert(s2.__invariants());
- assert(s2.size() == n);
- assert(T::compare(s2.data(), s, n) == 0);
- assert(s2.get_allocator() == A());
- assert(s2.capacity() >= s2.size());
-}
-
-template <class charT, class A>
-void
-test(const charT* s, const A& a)
-{
- typedef std::basic_string<charT, std::char_traits<charT>, A> S;
- typedef typename S::traits_type T;
- unsigned n = T::length(s);
- S s2(s, a);
- assert(s2.__invariants());
- assert(s2.size() == n);
- assert(T::compare(s2.data(), s, n) == 0);
- assert(s2.get_allocator() == a);
- assert(s2.capacity() >= s2.size());
-}
-
-int main()
-{
- {
- typedef test_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
-
- test("");
- test("", A(2));
-
- test("1");
- test("1", A(2));
-
- test("1234567980");
- test("1234567980", A(2));
-
- test("123456798012345679801234567980123456798012345679801234567980");
- test("123456798012345679801234567980123456798012345679801234567980", A(2));
- }
-#if __cplusplus >= 201103L
- {
- typedef min_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
-
- test("");
- test("", A());
-
- test("1");
- test("1", A());
-
- test("1234567980");
- test("1234567980", A());
-
- test("123456798012345679801234567980123456798012345679801234567980");
- test("123456798012345679801234567980123456798012345679801234567980", A());
- }
-#endif
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/pointer_assignment.pass.cpp b/libcxx/test/strings/basic.string/string.cons/pointer_assignment.pass.cpp
deleted file mode 100644
index c691613379a..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/pointer_assignment.pass.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string<charT,traits,Allocator>&
-// operator=(const charT* s);
-
-#include <string>
-#include <cassert>
-
-#include "min_allocator.h"
-
-template <class S>
-void
-test(S s1, const typename S::value_type* s2)
-{
- typedef typename S::traits_type T;
- s1 = s2;
- assert(s1.__invariants());
- assert(s1.size() == T::length(s2));
- assert(T::compare(s1.data(), s2, s1.size()) == 0);
- assert(s1.capacity() >= s1.size());
-}
-
-int main()
-{
- {
- typedef std::string S;
- test(S(), "");
- test(S("1"), "");
- test(S(), "1");
- test(S("1"), "2");
- test(S("1"), "2");
-
- test(S(),
- "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
- test(S("123456789"),
- "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"),
- "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890123456789012345678901234567890"),
- "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
- }
-#if __cplusplus >= 201103L
- {
- typedef std::basic_string<char, std::char_traits<char>, min_allocator<char>> S;
- test(S(), "");
- test(S("1"), "");
- test(S(), "1");
- test(S("1"), "2");
- test(S("1"), "2");
-
- test(S(),
- "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
- test(S("123456789"),
- "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"),
- "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890"
- "1234567890123456789012345678901234567890123456789012345678901234567890"),
- "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
- }
-#endif
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp b/libcxx/test/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp
deleted file mode 100644
index f1f107af20b..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/pointer_size_alloc.pass.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string(const charT* s, size_type n, const Allocator& a = Allocator());
-
-#include <string>
-#include <stdexcept>
-#include <algorithm>
-#include <cassert>
-
-#include "test_allocator.h"
-#include "min_allocator.h"
-
-template <class charT>
-void
-test(const charT* s, unsigned n)
-{
- typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
- typedef typename S::traits_type T;
- typedef typename S::allocator_type A;
- S s2(s, n);
- assert(s2.__invariants());
- assert(s2.size() == n);
- assert(T::compare(s2.data(), s, n) == 0);
- assert(s2.get_allocator() == A());
- assert(s2.capacity() >= s2.size());
-}
-
-template <class charT, class A>
-void
-test(const charT* s, unsigned n, const A& a)
-{
- typedef std::basic_string<charT, std::char_traits<charT>, A> S;
- typedef typename S::traits_type T;
- S s2(s, n, a);
- assert(s2.__invariants());
- assert(s2.size() == n);
- assert(T::compare(s2.data(), s, n) == 0);
- assert(s2.get_allocator() == a);
- assert(s2.capacity() >= s2.size());
-}
-
-int main()
-{
- {
- typedef test_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
-
- test("", 0);
- test("", 0, A(2));
-
- test("1", 1);
- test("1", 1, A(2));
-
- test("1234567980", 10);
- test("1234567980", 10, A(2));
-
- test("123456798012345679801234567980123456798012345679801234567980", 60);
- test("123456798012345679801234567980123456798012345679801234567980", 60, A(2));
- }
-#if __cplusplus >= 201103L
- {
- typedef min_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
-
- test("", 0);
- test("", 0, A());
-
- test("1", 1);
- test("1", 1, A());
-
- test("1234567980", 10);
- test("1234567980", 10, A());
-
- test("123456798012345679801234567980123456798012345679801234567980", 60);
- test("123456798012345679801234567980123456798012345679801234567980", 60, A());
- }
-#endif
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/size_char_alloc.pass.cpp b/libcxx/test/strings/basic.string/string.cons/size_char_alloc.pass.cpp
deleted file mode 100644
index 4dfe9063a23..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/size_char_alloc.pass.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string(size_type n, charT c, const Allocator& a = Allocator());
-
-#include <string>
-#include <stdexcept>
-#include <algorithm>
-#include <cassert>
-
-#include "test_allocator.h"
-#include "min_allocator.h"
-
-template <class charT>
-void
-test(unsigned n, charT c)
-{
- typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
- typedef typename S::traits_type T;
- typedef typename S::allocator_type A;
- S s2(n, c);
- assert(s2.__invariants());
- assert(s2.size() == n);
- for (unsigned i = 0; i < n; ++i)
- assert(s2[i] == c);
- assert(s2.get_allocator() == A());
- assert(s2.capacity() >= s2.size());
-}
-
-template <class charT, class A>
-void
-test(unsigned n, charT c, const A& a)
-{
- typedef std::basic_string<charT, std::char_traits<charT>, A> S;
- typedef typename S::traits_type T;
- S s2(n, c, a);
- assert(s2.__invariants());
- assert(s2.size() == n);
- for (unsigned i = 0; i < n; ++i)
- assert(s2[i] == c);
- assert(s2.get_allocator() == a);
- assert(s2.capacity() >= s2.size());
-}
-
-template <class Tp>
-void
-test(Tp n, Tp c)
-{
- typedef char charT;
- typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
- typedef typename S::traits_type T;
- typedef typename S::allocator_type A;
- S s2(n, c);
- assert(s2.__invariants());
- assert(s2.size() == n);
- for (unsigned i = 0; i < n; ++i)
- assert(s2[i] == c);
- assert(s2.get_allocator() == A());
- assert(s2.capacity() >= s2.size());
-}
-
-template <class Tp, class A>
-void
-test(Tp n, Tp c, const A& a)
-{
- typedef char charT;
- typedef std::basic_string<charT, std::char_traits<charT>, A> S;
- typedef typename S::traits_type T;
- S s2(n, c, a);
- assert(s2.__invariants());
- assert(s2.size() == n);
- for (unsigned i = 0; i < n; ++i)
- assert(s2[i] == c);
- assert(s2.get_allocator() == a);
- assert(s2.capacity() >= s2.size());
-}
-
-int main()
-{
- {
- typedef test_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
-
- test(0, 'a');
- test(0, 'a', A(2));
-
- test(1, 'a');
- test(1, 'a', A(2));
-
- test(10, 'a');
- test(10, 'a', A(2));
-
- test(100, 'a');
- test(100, 'a', A(2));
-
- test(100, 65);
- test(100, 65, A(3));
- }
-#if __cplusplus >= 201103L
- {
- typedef min_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
-
- test(0, 'a');
- test(0, 'a', A());
-
- test(1, 'a');
- test(1, 'a', A());
-
- test(10, 'a');
- test(10, 'a', A());
-
- test(100, 'a');
- test(100, 'a', A());
-
- test(100, 65);
- test(100, 65, A());
- }
-#endif
-}
diff --git a/libcxx/test/strings/basic.string/string.cons/substr.pass.cpp b/libcxx/test/strings/basic.string/string.cons/substr.pass.cpp
deleted file mode 100644
index 2a9bf2ac88b..00000000000
--- a/libcxx/test/strings/basic.string/string.cons/substr.pass.cpp
+++ /dev/null
@@ -1,173 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// 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>
-
-// basic_string(const basic_string<charT,traits,Allocator>& str,
-// size_type pos, size_type n = npos,
-// const Allocator& a = Allocator());
-
-#include <string>
-#include <stdexcept>
-#include <algorithm>
-#include <cassert>
-
-#include "test_allocator.h"
-#include "min_allocator.h"
-
-template <class S>
-void
-test(S str, unsigned pos)
-{
- typedef typename S::traits_type T;
- typedef typename S::allocator_type A;
- try
- {
- S s2(str, pos);
- assert(s2.__invariants());
- assert(pos <= str.size());
- unsigned rlen = str.size() - pos;
- assert(s2.size() == rlen);
- assert(T::compare(s2.data(), str.data() + pos, rlen) == 0);
- assert(s2.get_allocator() == A());
- assert(s2.capacity() >= s2.size());
- }
- catch (std::out_of_range&)
- {
- assert(pos > str.size());
- }
-}
-
-template <class S>
-void
-test(S str, unsigned pos, unsigned n)
-{
- typedef typename S::traits_type T;
- typedef typename S::allocator_type A;
- try
- {
- S s2(str, pos, n);
- assert(s2.__invariants());
- assert(pos <= str.size());
- unsigned rlen = std::min<unsigned>(str.size() - pos, n);
- assert(s2.size() == rlen);
- assert(T::compare(s2.data(), str.data() + pos, rlen) == 0);
- assert(s2.get_allocator() == A());
- assert(s2.capacity() >= s2.size());
- }
- catch (std::out_of_range&)
- {
- assert(pos > str.size());
- }
-}
-
-template <class S>
-void
-test(S str, unsigned pos, unsigned n, const typename S::allocator_type& a)
-{
- typedef typename S::traits_type T;
- typedef typename S::allocator_type A;
- try
- {
- S s2(str, pos, n, a);
- assert(s2.__invariants());
- assert(pos <= str.size());
- unsigned rlen = std::min<unsigned>(str.size() - pos, n);
- assert(s2.size() == rlen);
- assert(T::compare(s2.data(), str.data() + pos, rlen) == 0);
- assert(s2.get_allocator() == a);
- assert(s2.capacity() >= s2.size());
- }
- catch (std::out_of_range&)
- {
- assert(pos > str.size());
- }
-}
-
-int main()
-{
- {
- typedef test_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
-
- test(S(A(3)), 0);
- test(S(A(3)), 1);
- test(S("1", A(5)), 0);
- test(S("1", A(5)), 1);
- test(S("1", A(5)), 2);
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), 0);
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), 5);
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), 50);
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), 500);
-
- test(S(A(3)), 0, 0);
- test(S(A(3)), 0, 1);
- test(S(A(3)), 1, 0);
- test(S(A(3)), 1, 1);
- test(S(A(3)), 1, 2);
- test(S("1", A(5)), 0, 0);
- test(S("1", A(5)), 0, 1);
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), 50, 0);
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), 50, 1);
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), 50, 10);
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), 50, 100);
-
- test(S(A(3)), 0, 0, A(4));
- test(S(A(3)), 0, 1, A(4));
- test(S(A(3)), 1, 0, A(4));
- test(S(A(3)), 1, 1, A(4));
- test(S(A(3)), 1, 2, A(4));
- test(S("1", A(5)), 0, 0, A(6));
- test(S("1", A(5)), 0, 1, A(6));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), 50, 0, A(8));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), 50, 1, A(8));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), 50, 10, A(8));
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), 50, 100, A(8));
- }
-#if __cplusplus >= 201103L
- {
- typedef min_allocator<char> A;
- typedef std::basic_string<char, std::char_traits<char>, A> S;
-
- test(S(A()), 0);
- test(S(A()), 1);
- test(S("1", A()), 0);
- test(S("1", A()), 1);
- test(S("1", A()), 2);
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 0);
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 5);
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 50);
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 500);
-
- test(S(A()), 0, 0);
- test(S(A()), 0, 1);
- test(S(A()), 1, 0);
- test(S(A()), 1, 1);
- test(S(A()), 1, 2);
- test(S("1", A()), 0, 0);
- test(S("1", A()), 0, 1);
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 50, 0);
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 50, 1);
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 50, 10);
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 50, 100);
-
- test(S(A()), 0, 0, A());
- test(S(A()), 0, 1, A());
- test(S(A()), 1, 0, A());
- test(S(A()), 1, 1, A());
- test(S(A()), 1, 2, A());
- test(S("1", A()), 0, 0, A());
- test(S("1", A()), 0, 1, A());
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 50, 0, A());
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 50, 1, A());
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 50, 10, A());
- test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 50, 100, A());
- }
-#endif
-}
OpenPOWER on IntegriCloud