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