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 #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