1//===----------------------------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is dual licensed under the MIT and the University of Illinois Open 6// Source Licenses. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// <string> 11 12// basic_string(size_type n, charT c, const Allocator& a = Allocator()); 13 14#include <string> 15#include <stdexcept> 16#include <algorithm> 17#include <cassert> 18 19#include "test_allocator.h" 20#include "min_allocator.h" 21 22template <class charT> 23void 24test(unsigned n, charT c) 25{ 26 typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S; 27 typedef typename S::traits_type T; 28 typedef typename S::allocator_type A; 29 S s2(n, c); 30 assert(s2.__invariants()); 31 assert(s2.size() == n); 32 for (unsigned i = 0; i < n; ++i) 33 assert(s2[i] == c); 34 assert(s2.get_allocator() == A()); 35 assert(s2.capacity() >= s2.size()); 36} 37 38template <class charT, class A> 39void 40test(unsigned n, charT c, const A& a) 41{ 42 typedef std::basic_string<charT, std::char_traits<charT>, A> S; 43 typedef typename S::traits_type T; 44 S s2(n, c, a); 45 assert(s2.__invariants()); 46 assert(s2.size() == n); 47 for (unsigned i = 0; i < n; ++i) 48 assert(s2[i] == c); 49 assert(s2.get_allocator() == a); 50 assert(s2.capacity() >= s2.size()); 51} 52 53template <class Tp> 54void 55test(Tp n, Tp c) 56{ 57 typedef char charT; 58 typedef std::basic_string<charT, std::char_traits<charT>, test_allocator<charT> > S; 59 typedef typename S::traits_type T; 60 typedef typename S::allocator_type A; 61 S s2(n, c); 62 assert(s2.__invariants()); 63 assert(s2.size() == n); 64 for (unsigned i = 0; i < n; ++i) 65 assert(s2[i] == c); 66 assert(s2.get_allocator() == A()); 67 assert(s2.capacity() >= s2.size()); 68} 69 70template <class Tp, class A> 71void 72test(Tp n, Tp c, const A& a) 73{ 74 typedef char charT; 75 typedef std::basic_string<charT, std::char_traits<charT>, A> S; 76 typedef typename S::traits_type T; 77 S s2(n, c, a); 78 assert(s2.__invariants()); 79 assert(s2.size() == n); 80 for (unsigned i = 0; i < n; ++i) 81 assert(s2[i] == c); 82 assert(s2.get_allocator() == a); 83 assert(s2.capacity() >= s2.size()); 84} 85 86int main() 87{ 88 { 89 typedef test_allocator<char> A; 90 typedef std::basic_string<char, std::char_traits<char>, A> S; 91 92 test(0, 'a'); 93 test(0, 'a', A(2)); 94 95 test(1, 'a'); 96 test(1, 'a', A(2)); 97 98 test(10, 'a'); 99 test(10, 'a', A(2)); 100 101 test(100, 'a'); 102 test(100, 'a', A(2)); 103 104 test(100, 65); 105 test(100, 65, A(3)); 106 } 107#if __cplusplus >= 201103L 108 { 109 typedef min_allocator<char> A; 110 typedef std::basic_string<char, std::char_traits<char>, A> S; 111 112 test(0, 'a'); 113 test(0, 'a', A()); 114 115 test(1, 'a'); 116 test(1, 'a', A()); 117 118 test(10, 'a'); 119 test(10, 'a', A()); 120 121 test(100, 'a'); 122 test(100, 'a', A()); 123 124 test(100, 65); 125 test(100, 65, A()); 126 } 127#endif 128} 129