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 #include "test_macros.h" 18 19 template <std::size_t N> 20 void test_string_ctor() 21 { 22 #ifndef TEST_HAS_NO_EXCEPTIONS 23 { 24 try { 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 try { 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 try { 45 std::string str("xxxbababababaxxxx"); 46 std::bitset<N> v(str, 2, 10, 'a', 'b'); 47 assert(false); 48 } 49 catch (std::invalid_argument&) 50 { 51 } 52 } 53 #endif // TEST_HAS_NO_EXCEPTIONS 54 { 55 std::string str("xxx1010101010xxxx"); 56 std::bitset<N> v(str, 3, 10); 57 std::size_t M = std::min<std::size_t>(N, 10); 58 for (std::size_t i = 0; i < M; ++i) 59 assert(v[i] == (str[3 + M - 1 - i] == '1')); 60 for (std::size_t i = 10; i < N; ++i) 61 assert(v[i] == false); 62 } 63 { 64 std::string str("xxxbababababaxxxx"); 65 std::bitset<N> v(str, 3, 10, 'a', 'b'); 66 std::size_t M = std::min<std::size_t>(N, 10); 67 for (std::size_t i = 0; i < M; ++i) 68 assert(v[i] == (str[3 + M - 1 - i] == 'b')); 69 for (std::size_t i = 10; i < N; ++i) 70 assert(v[i] == false); 71 } 72 } 73 74 int main() 75 { 76 test_string_ctor<0>(); 77 test_string_ctor<1>(); 78 test_string_ctor<31>(); 79 test_string_ctor<32>(); 80 test_string_ctor<33>(); 81 test_string_ctor<63>(); 82 test_string_ctor<64>(); 83 test_string_ctor<65>(); 84 test_string_ctor<1000>(); 85 } 86