brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 7b33a6b Raw
80 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// friend constexpr bool operator==(const iterator& x, const sentinel& y);12 13#include <algorithm>14#include <cassert>15#include <concepts>16#include <ranges>17 18#include "test_iterators.h"19 20template <class Iter>21constexpr void testOne() {22  using Sent      = sentinel_wrapper<Iter>;23  using Range     = std::ranges::subrange<Iter, Sent>;24  using SplitView = std::ranges::split_view<Range, std::ranges::single_view<int>>;25  static_assert(!std::ranges::common_range<SplitView>);26 27  {28    // simple test29    {30      int buffer[] = {0, 1, 2, -1, 4, 5, 6};31      Range input(Iter{buffer}, Sent{Iter{buffer + 7}});32      SplitView sv(input, -1);33      auto b = sv.begin();34      auto e = sv.end();35 36      assert(!(b == e));37      assert(b != e);38 39      std::advance(b, 2);40      assert(b == e);41      assert(!(b != e));42    }43 44    // iterator at trailing empty position should not equal to end45    {46      int buffer[] = {0, 1, 2, -1};47      Range input(Iter{buffer}, Sent{Iter{buffer + 4}});48      SplitView sv(input, -1);49      auto b = sv.begin();50      auto e = sv.end();51 52      ++b; // cur points to end but trailing_empty is true53 54      assert(b != e);55      assert(!(b == e));56 57      ++b;58      assert(b == e);59      assert(!(b != e));60    }61  }62}63 64constexpr bool test() {65  testOne<forward_iterator<int*>>();66  testOne<bidirectional_iterator<int*>>();67  testOne<random_access_iterator<int*>>();68  testOne<contiguous_iterator<int*>>();69  testOne<int*>();70 71  return true;72}73 74int main(int, char**) {75  test();76  static_assert(test());77 78  return 0;79}80