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