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 #include "test_macros.h"
     18 
     19 #if defined(TEST_COMPILER_C1XX)
     20 #pragma warning(disable: 6294) // Ill-defined for-loop:  initial condition does not satisfy test.  Loop body not executed.
     21 #endif
     22 
     23 template <std::size_t N>
     24 void test_string_ctor()
     25 {
     26 #ifndef TEST_HAS_NO_EXCEPTIONS
     27     {
     28         try {
     29             std::string str("xxx1010101010xxxx");
     30             std::bitset<N> v(str, str.size()+1, 10);
     31             assert(false);
     32         }
     33         catch (std::out_of_range&)
     34         {
     35         }
     36     }
     37     {
     38         try {
     39             std::string str("xxx1010101010xxxx");
     40             std::bitset<N> v(str, 2, 10);
     41             assert(false);
     42         }
     43         catch (std::invalid_argument&)
     44         {
     45         }
     46     }
     47     {
     48         try {
     49             std::string str("xxxbababababaxxxx");
     50             std::bitset<N> v(str, 2, 10, 'a', 'b');
     51             assert(false);
     52         }
     53         catch (std::invalid_argument&)
     54         {
     55         }
     56     }
     57 #endif // TEST_HAS_NO_EXCEPTIONS
     58     {
     59         std::string str("xxx1010101010xxxx");
     60         std::bitset<N> v(str, 3, 10);
     61         std::size_t M = std::min<std::size_t>(N, 10);
     62         for (std::size_t i = 0; i < M; ++i)
     63             assert(v[i] == (str[3 + M - 1 - i] == '1'));
     64         for (std::size_t i = 10; i < N; ++i)
     65             assert(v[i] == false);
     66     }
     67     {
     68         std::string str("xxxbababababaxxxx");
     69         std::bitset<N> v(str, 3, 10, 'a', 'b');
     70         std::size_t M = std::min<std::size_t>(N, 10);
     71         for (std::size_t i = 0; i < M; ++i)
     72             assert(v[i] == (str[3 + M - 1 - i] == 'b'));
     73         for (std::size_t i = 10; i < N; ++i)
     74             assert(v[i] == false);
     75     }
     76 }
     77 
     78 int main()
     79 {
     80     test_string_ctor<0>();
     81     test_string_ctor<1>();
     82     test_string_ctor<31>();
     83     test_string_ctor<32>();
     84     test_string_ctor<33>();
     85     test_string_ctor<63>();
     86     test_string_ctor<64>();
     87     test_string_ctor<65>();
     88     test_string_ctor<1000>();
     89 }
     90