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