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