• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "test_macros.h"
30 
31 #if defined(TEST_COMPILER_CLANG)
32 #pragma clang diagnostic ignored "-Wtautological-compare"
33 #elif defined(TEST_COMPILER_C1XX)
34 #pragma warning(disable: 6294) // Ill-defined for-loop:  initial condition does not satisfy test.  Loop body not executed.
35 #endif
36 
37 template <std::size_t N>
38 std::bitset<N>
make_bitset()39 make_bitset()
40 {
41     std::bitset<N> v;
42     for (std::size_t i = 0; i < N; ++i)
43         v[i] = static_cast<bool>(std::rand() & 1);
44     return v;
45 }
46 
47 template <std::size_t N>
test_to_string()48 void test_to_string()
49 {
50 {
51     std::bitset<N> v = make_bitset<N>();
52     {
53     std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >();
54     for (std::size_t i = 0; i < N; ++i)
55         if (v[i])
56             assert(s[N - 1 - i] == '1');
57         else
58             assert(s[N - 1 - i] == '0');
59     }
60     {
61     std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t> >();
62     for (std::size_t i = 0; i < N; ++i)
63         if (v[i])
64             assert(s[N - 1 - i] == '1');
65         else
66             assert(s[N - 1 - i] == '0');
67     }
68     {
69     std::string s = v.template to_string<char>();
70     for (std::size_t i = 0; i < N; ++i)
71         if (v[i])
72             assert(s[N - 1 - i] == '1');
73         else
74             assert(s[N - 1 - i] == '0');
75     }
76     {
77     std::string s = v.to_string();
78     for (std::size_t i = 0; i < N; ++i)
79         if (v[i])
80             assert(s[N - 1 - i] == '1');
81         else
82             assert(s[N - 1 - i] == '0');
83     }
84 }
85 {
86     std::bitset<N> v = make_bitset<N>();
87     {
88     std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >('0');
89     for (std::size_t i = 0; i < N; ++i)
90         if (v[i])
91             assert(s[N - 1 - i] == '1');
92         else
93             assert(s[N - 1 - i] == '0');
94     }
95     {
96     std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t> >('0');
97     for (std::size_t i = 0; i < N; ++i)
98         if (v[i])
99             assert(s[N - 1 - i] == '1');
100         else
101             assert(s[N - 1 - i] == '0');
102     }
103     {
104     std::string s = v.template to_string<char>('0');
105     for (std::size_t i = 0; i < N; ++i)
106         if (v[i])
107             assert(s[N - 1 - i] == '1');
108         else
109             assert(s[N - 1 - i] == '0');
110     }
111     {
112     std::string s = v.to_string('0');
113     for (std::size_t i = 0; i < N; ++i)
114         if (v[i])
115             assert(s[N - 1 - i] == '1');
116         else
117             assert(s[N - 1 - i] == '0');
118     }
119 }
120 {
121     std::bitset<N> v = make_bitset<N>();
122     {
123     std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >('0', '1');
124     for (std::size_t i = 0; i < N; ++i)
125         if (v[i])
126             assert(s[N - 1 - i] == '1');
127         else
128             assert(s[N - 1 - i] == '0');
129     }
130     {
131     std::wstring s = v.template to_string<wchar_t, std::char_traits<wchar_t> >('0', '1');
132     for (std::size_t i = 0; i < N; ++i)
133         if (v[i])
134             assert(s[N - 1 - i] == '1');
135         else
136             assert(s[N - 1 - i] == '0');
137     }
138     {
139     std::string s = v.template to_string<char>('0', '1');
140     for (std::size_t i = 0; i < N; ++i)
141         if (v[i])
142             assert(s[N - 1 - i] == '1');
143         else
144             assert(s[N - 1 - i] == '0');
145     }
146     {
147     std::string s = v.to_string('0', '1');
148     for (std::size_t i = 0; i < N; ++i)
149         if (v[i])
150             assert(s[N - 1 - i] == '1');
151         else
152             assert(s[N - 1 - i] == '0');
153     }
154 }
155 }
156 
main()157 int main()
158 {
159     test_to_string<0>();
160     test_to_string<1>();
161     test_to_string<31>();
162     test_to_string<32>();
163     test_to_string<33>();
164     test_to_string<63>();
165     test_to_string<64>();
166     test_to_string<65>();
167     test_to_string<1000>();
168 }
169