brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 0565ed0 Raw
85 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// UNSUPPORTED: c++03, c++11, c++14, c++1710 11// constexpr auto end();12// constexpr auto end() const requires range<const V>;13 14#include <ranges>15 16#include <cassert>17#include <concepts>18#include <utility>19 20#include "test_macros.h"21#include "test_iterators.h"22#include "types.h"23 24constexpr bool test() {25  int buf[8] = {1, 2, 3, 4, 5, 6, 7, 8};26 27  {28    SizedRandomAccessView view{buf, buf + 8};29    std::ranges::common_view<SizedRandomAccessView> common(view);30    std::same_as<RandomAccessIter> auto end = common.end(); // Note this should NOT be the sentinel type.31    assert(base(end) == buf + 8);32  }33 34  // const version35  {36    SizedRandomAccessView view{buf, buf + 8};37    std::ranges::common_view<SizedRandomAccessView> const common(view);38    std::same_as<RandomAccessIter> auto end = common.end(); // Note this should NOT be the sentinel type.39    assert(base(end) == buf + 8);40  }41 42  return true;43}44 45int main(int, char**) {46  test();47  static_assert(test());48 49  {50    int buf[8] = {1, 2, 3, 4, 5, 6, 7, 8};51 52    using CommonForwardIter = std::common_iterator<ForwardIter, sized_sentinel<ForwardIter>>;53    using CommonIntIter = std::common_iterator<int*, sentinel_wrapper<int*>>;54 55    {56      SizedForwardView view{buf, buf + 8};57      std::ranges::common_view<SizedForwardView> common(view);58      std::same_as<CommonForwardIter> auto end = common.end();59      assert(end == CommonForwardIter(std::ranges::end(view)));60    }61    {62      CopyableView view{buf, buf + 8};63      std::ranges::common_view<CopyableView> common(view);64      std::same_as<CommonIntIter> auto end = common.end();65      assert(end == CommonIntIter(std::ranges::end(view)));66    }67 68    // const versions69    {70      SizedForwardView view{buf, buf + 8};71      std::ranges::common_view<SizedForwardView> const common(view);72      std::same_as<CommonForwardIter> auto end = common.end();73      assert(end == CommonForwardIter(std::ranges::end(view)));74    }75    {76      CopyableView view{buf, buf + 8};77      std::ranges::common_view<CopyableView> const common(view);78      std::same_as<CommonIntIter> auto end = common.end();79      assert(end == CommonIntIter(std::ranges::end(view)));80    }81  }82 83  return 0;84}85