1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
12 // template<class InputIterator>
13 // basic_string(InputIterator begin, InputIterator end,
14 // const Allocator& a = Allocator());
21 #include "test_macros.h"
22 #include "test_allocator.h"
23 #include "../input_iterator.h"
24 #include "min_allocator.h"
28 test(It first, It last)
30 typedef typename std::iterator_traits<It>::value_type charT;
31 typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S;
32 typedef typename S::traits_type T;
33 typedef typename S::allocator_type A;
35 LIBCPP_ASSERT(s2.__invariants());
36 assert(s2.size() == static_cast<std::size_t>(std::distance(first, last)));
38 for (It it = first; it != last; ++it, ++i)
40 assert(s2.get_allocator() == A());
41 assert(s2.capacity() >= s2.size());
44 template <class It, class A>
46 test(It first, It last, const A& a)
48 typedef typename std::iterator_traits<It>::value_type charT;
49 typedef std::basic_string<charT, std::char_traits<charT>, A> S;
50 typedef typename S::traits_type T;
52 LIBCPP_ASSERT(s2.__invariants());
53 assert(s2.size() == static_cast<std::size_t>(std::distance(first, last)));
55 for (It it = first; it != last; ++it, ++i)
57 assert(s2.get_allocator() == a);
58 assert(s2.capacity() >= s2.size());
64 typedef test_allocator<char> A;
65 const char* s = "12345678901234567890123456789012345678901234567890";
79 test(input_iterator<const char*>(s), input_iterator<const char*>(s));
80 test(input_iterator<const char*>(s), input_iterator<const char*>(s), A(2));
82 test(input_iterator<const char*>(s), input_iterator<const char*>(s+1));
83 test(input_iterator<const char*>(s), input_iterator<const char*>(s+1), A(2));
85 test(input_iterator<const char*>(s), input_iterator<const char*>(s+10));
86 test(input_iterator<const char*>(s), input_iterator<const char*>(s+10), A(2));
88 test(input_iterator<const char*>(s), input_iterator<const char*>(s+50));
89 test(input_iterator<const char*>(s), input_iterator<const char*>(s+50), A(2));
91 #if TEST_STD_VER >= 11
93 typedef min_allocator<char> A;
94 const char* s = "12345678901234567890123456789012345678901234567890";
108 test(input_iterator<const char*>(s), input_iterator<const char*>(s));
109 test(input_iterator<const char*>(s), input_iterator<const char*>(s), A());
111 test(input_iterator<const char*>(s), input_iterator<const char*>(s+1));
112 test(input_iterator<const char*>(s), input_iterator<const char*>(s+1), A());
114 test(input_iterator<const char*>(s), input_iterator<const char*>(s+10));
115 test(input_iterator<const char*>(s), input_iterator<const char*>(s+10), A());
117 test(input_iterator<const char*>(s), input_iterator<const char*>(s+50));
118 test(input_iterator<const char*>(s), input_iterator<const char*>(s+50), A());