brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 633d15f Raw
66 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// template<sized_sentinel_for<I> I2, sized_sentinel_for<I> S2>12//   requires sized_sentinel_for<S, I2>13// friend iter_difference_t<I2> operator-(14//   const common_iterator& x, const common_iterator<I2, S2>& y);15 16#include <iterator>17#include <cassert>18 19#include "test_macros.h"20#include "types.h"21 22void test() {23  int buffer[8] = {1, 2, 3, 4, 5, 6, 7, 8};24 25  {26    auto iter1 = random_access_iterator<int*>(buffer);27    auto commonIter1 = std::common_iterator<decltype(iter1), sized_sentinel_type<int*>>(iter1);28    auto commonSent1 = std::common_iterator<decltype(iter1), sized_sentinel_type<int*>>(sized_sentinel_type<int*>{buffer + 8});29    assert(commonIter1 - commonSent1 == -8);30    assert(commonSent1 - commonIter1 == 8);31    assert(commonIter1 - commonIter1 == 0);32    assert(commonSent1 - commonSent1 == 0);33  }34  {35    auto iter1 = simple_iterator<int*>(buffer);36    auto iter2 = comparable_iterator<int*>(buffer);37    auto commonIter1 = std::common_iterator<decltype(iter1), sized_sentinel_type<int*>>(iter1);38    auto commonIter2 = std::common_iterator<decltype(iter2), sized_sentinel_type<int*>>(iter2);39 40    assert(commonIter1 - commonIter2 == 0);41  }42  {43    auto iter1 = random_access_iterator<int*>(buffer);44    const auto commonIter1 = std::common_iterator<decltype(iter1), sized_sentinel_type<int*>>(iter1);45    const auto commonSent1 = std::common_iterator<decltype(iter1), sized_sentinel_type<int*>>(sized_sentinel_type<int*>{buffer + 8});46    assert(commonIter1 - commonSent1 == -8);47    assert(commonSent1 - commonIter1 == 8);48    assert(commonIter1 - commonIter1 == 0);49    assert(commonSent1 - commonSent1 == 0);50  }51  {52    auto iter1 = simple_iterator<int*>(buffer);53    auto iter2 = comparable_iterator<int*>(buffer);54    const auto commonIter1 = std::common_iterator<decltype(iter1), sized_sentinel_type<int*>>(iter1);55    const auto commonIter2 = std::common_iterator<decltype(iter2), sized_sentinel_type<int*>>(iter2);56 57    assert(commonIter1 - commonIter2 == 0);58  }59}60 61int main(int, char**) {62  test();63 64  return 0;65}66