left_shift.pass.cpp revision 97ecd6491374d756bd9c6da9ef84ab173f5049d6
1760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org//===----------------------------------------------------------------------===//
2760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org//
3760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org//                     The LLVM Compiler Infrastructure
4760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org//
5760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org// This file is dual licensed under the MIT and the University of Illinois Open
6760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org// Source Licenses. See LICENSE.TXT for details.
7760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org//
8760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org//===----------------------------------------------------------------------===//
9760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org
10760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org// test bitset<N> operator<<(size_t pos) const;
11760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org
12760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include <bitset>
13760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include <cstdlib>
14760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include <cassert>
15760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org
16760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#pragma clang diagnostic ignored "-Wtautological-compare"
17760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org
18760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgtemplate <std::size_t N>
19760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstd::bitset<N>
20760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgmake_bitset()
21760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{
22760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    std::bitset<N> v;
23760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    for (std::size_t i = 0; i < N; ++i)
24760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org        v[i] = static_cast<bool>(std::rand() & 1);
25760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    return v;
26760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org}
27760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org
28760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgtemplate <std::size_t N>
29760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgvoid test_left_shift()
30760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{
31760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    for (std::size_t s = 0; s <= N+1; ++s)
32760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    {
33760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org        std::bitset<N> v1 = make_bitset<N>();
34760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org        std::bitset<N> v2 = v1;
35760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org        assert((v1 <<= s) == (v2 << s));
36760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    }
37760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org}
38760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org
39760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgint main()
40760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{
41760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    test_left_shift<0>();
42760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    test_left_shift<1>();
43760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    test_left_shift<31>();
44760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    test_left_shift<32>();
45760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    test_left_shift<33>();
46760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    test_left_shift<63>();
47760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    test_left_shift<64>();
48760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    test_left_shift<65>();
49760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org    test_left_shift<1000>();
50760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org}
51760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org