blob: df5ec4afb84e82af16d50ea1918522c925ebc7e4 [file] [log] [blame]
Howard Hinnantc52f43e2010-08-22 00:59:46 +00001//===----------------------------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
Howard Hinnantb64f8b02010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnantc52f43e2010-08-22 00:59:46 +00007//
8//===----------------------------------------------------------------------===//
9
Howard Hinnant34d6b192010-11-17 21:53:14 +000010// template <class charT>
11// explicit bitset(const charT* str,
12// typename basic_string<charT>::size_type n = basic_string<charT>::npos,
13// charT zero = charT('0'), charT one = charT('1'));
Howard Hinnantc52f43e2010-08-22 00:59:46 +000014
15#include <bitset>
16#include <cassert>
Marshall Clow2af7d422015-07-16 22:13:26 +000017#include <algorithm> // for 'min' and 'max'
18#include <stdexcept> // for 'invalid_argument'
Howard Hinnantc52f43e2010-08-22 00:59:46 +000019
Howard Hinnant97ecd642011-05-17 19:12:55 +000020#pragma clang diagnostic ignored "-Wtautological-compare"
21
Howard Hinnantc52f43e2010-08-22 00:59:46 +000022template <std::size_t N>
23void test_char_pointer_ctor()
24{
25 {
26 try
27 {
28 std::bitset<N> v("xxx1010101010xxxx");
29 assert(false);
30 }
31 catch (std::invalid_argument&)
32 {
33 }
34 }
35
36 {
37 const char str[] ="1010101010";
38 std::bitset<N> v(str);
39 std::size_t M = std::min<std::size_t>(N, 10);
40 for (std::size_t i = 0; i < M; ++i)
41 assert(v[i] == (str[M - 1 - i] == '1'));
42 for (std::size_t i = 10; i < N; ++i)
43 assert(v[i] == false);
44 }
45}
46
47int main()
48{
49 test_char_pointer_ctor<0>();
50 test_char_pointer_ctor<1>();
51 test_char_pointer_ctor<31>();
52 test_char_pointer_ctor<32>();
53 test_char_pointer_ctor<33>();
54 test_char_pointer_ctor<63>();
55 test_char_pointer_ctor<64>();
56 test_char_pointer_ctor<65>();
57 test_char_pointer_ctor<1000>();
58}