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<N> operator>>(size_t pos) const;
11
12#include <bitset>
13#include <cstdlib>
14#include <cassert>
15
16#include "test_macros.h"
17
18#if defined(TEST_COMPILER_CLANG)
19#pragma clang diagnostic ignored "-Wtautological-compare"
20#elif defined(TEST_COMPILER_C1XX)
21#pragma warning(disable: 6294) // Ill-defined for-loop:  initial condition does not satisfy test.  Loop body not executed.
22#endif
23
24template <std::size_t N>
25std::bitset<N>
26make_bitset()
27{
28    std::bitset<N> v;
29    for (std::size_t i = 0; i < N; ++i)
30        v[i] = static_cast<bool>(std::rand() & 1);
31    return v;
32}
33
34template <std::size_t N>
35void test_right_shift()
36{
37    for (std::size_t s = 0; s <= N+1; ++s)
38    {
39        std::bitset<N> v1 = make_bitset<N>();
40        std::bitset<N> v2 = v1;
41        assert((v1 >>= s) == (v2 >> s));
42    }
43}
44
45int main()
46{
47    test_right_shift<0>();
48    test_right_shift<1>();
49    test_right_shift<31>();
50    test_right_shift<32>();
51    test_right_shift<33>();
52    test_right_shift<63>();
53    test_right_shift<64>();
54    test_right_shift<65>();
55    test_right_shift<1000>();
56}
57