blob: df3ee16be7e15d8ab23645c7a98d61b4a8a24df9 [file] [log] [blame]
Howard Hinnant94b2dd02010-08-22 00:59:46 +00001//===----------------------------------------------------------------------===//
2//
Chandler Carruth57b08b02019-01-19 10:56:40 +00003// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Howard Hinnant94b2dd02010-08-22 00:59:46 +00006//
7//===----------------------------------------------------------------------===//
8
9// test constexpr bool test(size_t pos) const;
10
11#include <bitset>
12#include <cstdlib>
13#include <cassert>
Billy Robert O'Neal IIIed2f9a62018-08-08 00:40:32 +000014#include <stdexcept>
Howard Hinnant94b2dd02010-08-22 00:59:46 +000015
Roger Ferrer Ibanezaee391b2016-11-10 16:54:55 +000016#include "test_macros.h"
17
Stephan T. Lavaveje803cc52017-05-05 23:51:39 +000018#if defined(TEST_COMPILER_C1XX)
19#pragma warning(disable: 6294) // Ill-defined for-loop: initial condition does not satisfy test. Loop body not executed.
20#endif
21
Howard Hinnant94b2dd02010-08-22 00:59:46 +000022template <std::size_t N>
23std::bitset<N>
24make_bitset()
25{
26 std::bitset<N> v;
27 for (std::size_t i = 0; i < N; ++i)
28 v[i] = static_cast<bool>(std::rand() & 1);
29 return v;
30}
31
32template <std::size_t N>
Roger Ferrer Ibanezaee391b2016-11-10 16:54:55 +000033void test_test(bool test_throws)
Howard Hinnant94b2dd02010-08-22 00:59:46 +000034{
35 const std::bitset<N> v1 = make_bitset<N>();
Roger Ferrer Ibanezaee391b2016-11-10 16:54:55 +000036#ifdef TEST_HAS_NO_EXCEPTIONS
37 if (test_throws) return;
38#else
Howard Hinnant94b2dd02010-08-22 00:59:46 +000039 try
40 {
Roger Ferrer Ibanezaee391b2016-11-10 16:54:55 +000041#endif
Howard Hinnant94b2dd02010-08-22 00:59:46 +000042 bool b = v1.test(50);
43 if (50 >= v1.size())
44 assert(false);
45 assert(b == v1[50]);
Roger Ferrer Ibanezaee391b2016-11-10 16:54:55 +000046 assert(!test_throws);
47#ifndef TEST_HAS_NO_EXCEPTIONS
Howard Hinnant94b2dd02010-08-22 00:59:46 +000048 }
49 catch (std::out_of_range&)
50 {
Roger Ferrer Ibanezaee391b2016-11-10 16:54:55 +000051 assert(test_throws);
Howard Hinnant94b2dd02010-08-22 00:59:46 +000052 }
Roger Ferrer Ibanezaee391b2016-11-10 16:54:55 +000053#endif
Howard Hinnant94b2dd02010-08-22 00:59:46 +000054}
55
56int main()
57{
Roger Ferrer Ibanezaee391b2016-11-10 16:54:55 +000058 test_test<0>(true);
59 test_test<1>(true);
60 test_test<31>(true);
61 test_test<32>(true);
62 test_test<33>(true);
63 test_test<63>(false);
64 test_test<64>(false);
65 test_test<65>(false);
66 test_test<1000>(false);
Howard Hinnant94b2dd02010-08-22 00:59:46 +000067}