index.pass.cpp revision bc8d3f97eb5c958007f2713238472e0c1c8fe02c
147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org//===----------------------------------------------------------------------===//
247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org//
347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// ��������������������The LLVM Compiler Infrastructure
447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org//
547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// This file is distributed under the University of Illinois Open Source
647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// License. See LICENSE.TXT for details.
747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org//
847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org//===----------------------------------------------------------------------===//
947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org// test bitset<N>::reference operator[](size_t pos);
1147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <bitset>
1347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <cstdlib>
1447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org#include <cassert>
1547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
1647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgtemplate <std::size_t N>
1747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgstd::bitset<N>
1847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgmake_bitset()
1947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org{
2047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    std::bitset<N> v;
2147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    for (std::size_t i = 0; i < N; ++i)
2247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        v[i] = static_cast<bool>(std::rand() & 1);
2347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    return v;
2447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
2547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
2647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgtemplate <std::size_t N>
2747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgvoid test_index_const()
2847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org{
2947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    std::bitset<N> v1 = make_bitset<N>();
3047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    if (N > 0)
3147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    {
3247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        assert(v1[N/2] == v1.test(N/2));
3347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        typename std::bitset<N>::reference r = v1[N/2];
3447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        assert(r == v1.test(N/2));
3547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        typename std::bitset<N>::reference r2 = v1[N/2];
3647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        r = r2;
3747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        assert(r == v1.test(N/2));
3847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        r = false;
3947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        assert(r == false);
4047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        assert(v1.test(N/2) == false);
4147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        r = true;
4247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        assert(r == true);
4347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        assert(v1.test(N/2) == true);
4447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        bool b = ~r;
4547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        assert(r == true);
4647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        assert(v1.test(N/2) == true);
4747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        assert(b == false);
4847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        r.flip();
4947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        assert(r == false);
5047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org        assert(v1.test(N/2) == false);
5147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    }
5247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
5347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org
5447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.orgint main()
5547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org{
5647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    test_index_const<0>();
5747be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    test_index_const<1>();
5847be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    test_index_const<31>();
5947be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    test_index_const<32>();
6047be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    test_index_const<33>();
6147be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    test_index_const<63>();
6247be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    test_index_const<64>();
6347be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    test_index_const<65>();
6447be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org    test_index_const<1000>();
6547be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org}
6647be73b8629244d6bb63a28198f97f040ce53d21henrike@webrtc.org