brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · d1bf5b2 Raw
68 lines · cpp
1//===----------------------------------------------------------------------===//2//3// 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-exception6//7//===----------------------------------------------------------------------===//8 9// constexpr bool operator[](size_t pos) const; // constexpr since C++2310 11#include <bitset>12#include <cassert>13#include <cstddef>14#include <vector>15 16#include "../bitset_test_cases.h"17#include "test_macros.h"18 19template <std::size_t N>20TEST_CONSTEXPR_CXX23 void test_index_const() {21  std::vector<std::bitset<N> > const cases = get_test_cases<N>();22  for (std::size_t c = 0; c != cases.size(); ++c) {23    std::bitset<N> const v = cases[c];24    if (v.size() > 0) {25      assert(v[N / 2] == v.test(N / 2));26    }27  }28#if !defined(_LIBCPP_VERSION) || defined(_LIBCPP_ABI_BITSET_VECTOR_BOOL_CONST_SUBSCRIPT_RETURN_BOOL)29  ASSERT_SAME_TYPE(decltype(cases[0][0]), bool);30#else31  ASSERT_SAME_TYPE(decltype(cases[0][0]), typename std::bitset<N>::__const_reference);32#endif33}34 35TEST_CONSTEXPR_CXX23 bool test() {36  test_index_const<0>();37  test_index_const<1>();38  test_index_const<31>();39  test_index_const<32>();40  test_index_const<33>();41  test_index_const<63>();42  test_index_const<64>();43  test_index_const<65>();44 45  std::bitset<1> set_;46  set_[0]         = false;47  const auto& set = set_;48  auto b          = set[0];49  set_[0]         = true;50#if !defined(_LIBCPP_VERSION) || defined(_LIBCPP_ABI_BITSET_VECTOR_BOOL_CONST_SUBSCRIPT_RETURN_BOOL)51  assert(!b);52#else53  assert(b);54#endif55 56  return true;57}58 59int main(int, char**) {60  test();61  test_index_const<1000>(); // not in constexpr because of constexpr evaluation step limits62#if TEST_STD_VER > 2063  static_assert(test());64#endif65 66  return 0;67}68