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 // test: 11 12 // template <class charT, class traits, class Allocator> 13 // basic_string<charT, traits, Allocator> 14 // to_string(charT zero = charT('0'), charT one = charT('1')) const; 15 // 16 // template <class charT, class traits> 17 // basic_string<charT, traits, allocator<charT> > to_string() const; 18 // 19 // template <class charT> 20 // basic_string<charT, char_traits<charT>, allocator<charT> > to_string() const; 21 // 22 // basic_string<char, char_traits<char>, allocator<char> > to_string() const; 23 24 #include <bitset> 25 #include <string> 26 #include <cstdlib> 27 #include <cassert> 28 29 #pragma clang diagnostic ignored "-Wtautological-compare" 30 31 template <std::size_t N> 32 std::bitset<N> 33 make_bitset() 34 { 35 std::bitset<N> v; 36 for (std::size_t i = 0; i < N; ++i) 37 v[i] = static_cast<bool>(std::rand() & 1); 38 return v; 39 } 40 41 template <std::size_t N> 42 void test_to_string() 43 { 44 { 45 std::bitset<N> v = make_bitset<N>(); 46 { 47 std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >(); 48 for (std::size_t i = 0; i < N; ++i) 49 if (v[i]) 50 assert(s[N - 1 - i] == '1'); 51 else 52 assert(s[N - 1 - i] == '0'); 53 } 54 { 55 std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t> >(); 56 for (std::size_t i = 0; i < N; ++i) 57 if (v[i]) 58 assert(s[N - 1 - i] == '1'); 59 else 60 assert(s[N - 1 - i] == '0'); 61 } 62 { 63 std::string s = v.template to_string<char>(); 64 for (std::size_t i = 0; i < N; ++i) 65 if (v[i]) 66 assert(s[N - 1 - i] == '1'); 67 else 68 assert(s[N - 1 - i] == '0'); 69 } 70 { 71 std::string s = v.to_string(); 72 for (std::size_t i = 0; i < N; ++i) 73 if (v[i]) 74 assert(s[N - 1 - i] == '1'); 75 else 76 assert(s[N - 1 - i] == '0'); 77 } 78 } 79 { 80 std::bitset<N> v = make_bitset<N>(); 81 { 82 std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >('0'); 83 for (std::size_t i = 0; i < N; ++i) 84 if (v[i]) 85 assert(s[N - 1 - i] == '1'); 86 else 87 assert(s[N - 1 - i] == '0'); 88 } 89 { 90 std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t> >('0'); 91 for (std::size_t i = 0; i < N; ++i) 92 if (v[i]) 93 assert(s[N - 1 - i] == '1'); 94 else 95 assert(s[N - 1 - i] == '0'); 96 } 97 { 98 std::string s = v.template to_string<char>('0'); 99 for (std::size_t i = 0; i < N; ++i) 100 if (v[i]) 101 assert(s[N - 1 - i] == '1'); 102 else 103 assert(s[N - 1 - i] == '0'); 104 } 105 { 106 std::string s = v.to_string('0'); 107 for (std::size_t i = 0; i < N; ++i) 108 if (v[i]) 109 assert(s[N - 1 - i] == '1'); 110 else 111 assert(s[N - 1 - i] == '0'); 112 } 113 } 114 { 115 std::bitset<N> v = make_bitset<N>(); 116 { 117 std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >('0', '1'); 118 for (std::size_t i = 0; i < N; ++i) 119 if (v[i]) 120 assert(s[N - 1 - i] == '1'); 121 else 122 assert(s[N - 1 - i] == '0'); 123 } 124 { 125 std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t> >('0', '1'); 126 for (std::size_t i = 0; i < N; ++i) 127 if (v[i]) 128 assert(s[N - 1 - i] == '1'); 129 else 130 assert(s[N - 1 - i] == '0'); 131 } 132 { 133 std::string s = v.template to_string<char>('0', '1'); 134 for (std::size_t i = 0; i < N; ++i) 135 if (v[i]) 136 assert(s[N - 1 - i] == '1'); 137 else 138 assert(s[N - 1 - i] == '0'); 139 } 140 { 141 std::string s = v.to_string('0', '1'); 142 for (std::size_t i = 0; i < N; ++i) 143 if (v[i]) 144 assert(s[N - 1 - i] == '1'); 145 else 146 assert(s[N - 1 - i] == '0'); 147 } 148 } 149 } 150 151 int main() 152 { 153 test_to_string<0>(); 154 test_to_string<1>(); 155 test_to_string<31>(); 156 test_to_string<32>(); 157 test_to_string<33>(); 158 test_to_string<63>(); 159 test_to_string<64>(); 160 test_to_string<65>(); 161 test_to_string<1000>(); 162 } 163