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 bitset(string, pos, n, zero, one);
11
12 #include <bitset>
13 #include <cassert>
14
15 #pragma clang diagnostic ignored "-Wtautological-compare"
16
17 template <std::size_t N>
test_string_ctor()18 void test_string_ctor()
19 {
20 {
21 try
22 {
23 std::string str("xxx1010101010xxxx");
24 std::bitset<N> v(str, str.size()+1, 10);
25 assert(false);
26 }
27 catch (std::out_of_range&)
28 {
29 }
30 }
31
32 {
33 try
34 {
35 std::string str("xxx1010101010xxxx");
36 std::bitset<N> v(str, 2, 10);
37 assert(false);
38 }
39 catch (std::invalid_argument&)
40 {
41 }
42 }
43
44 {
45 std::string str("xxx1010101010xxxx");
46 std::bitset<N> v(str, 3, 10);
47 std::size_t M = std::min<std::size_t>(N, 10);
48 for (std::size_t i = 0; i < M; ++i)
49 assert(v[i] == (str[3 + M - 1 - i] == '1'));
50 for (std::size_t i = 10; i < N; ++i)
51 assert(v[i] == false);
52 }
53
54 {
55 try
56 {
57 std::string str("xxxbababababaxxxx");
58 std::bitset<N> v(str, 2, 10, 'a', 'b');
59 assert(false);
60 }
61 catch (std::invalid_argument&)
62 {
63 }
64 }
65
66 {
67 std::string str("xxxbababababaxxxx");
68 std::bitset<N> v(str, 3, 10, 'a', 'b');
69 std::size_t M = std::min<std::size_t>(N, 10);
70 for (std::size_t i = 0; i < M; ++i)
71 assert(v[i] == (str[3 + M - 1 - i] == 'b'));
72 for (std::size_t i = 10; i < N; ++i)
73 assert(v[i] == false);
74 }
75 }
76
main()77 int main()
78 {
79 test_string_ctor<0>();
80 test_string_ctor<1>();
81 test_string_ctor<31>();
82 test_string_ctor<32>();
83 test_string_ctor<33>();
84 test_string_ctor<63>();
85 test_string_ctor<64>();
86 test_string_ctor<65>();
87 test_string_ctor<1000>();
88 }
89