brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 6abbef5 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#include "test_macros.h"12 13TEST_CLANG_DIAGNOSTIC_IGNORED("-Wsign-compare")14TEST_GCC_DIAGNOSTIC_IGNORED("-Wsign-compare")15TEST_MSVC_DIAGNOSTIC_IGNORED(4018 4389) // various "signed/unsigned mismatch"16 17// constexpr auto end() const;18// constexpr iterator end() const requires same_as<W, Bound>;19 20#include <cassert>21#include <ranges>22#include <utility>23 24#include "types.h"25 26template<class T, class U>27constexpr void testType(U u) {28  {29    std::ranges::iota_view<T, U> io(T(0), u);30    assert(std::ranges::next(io.begin(), 10) == io.end());31  }32  {33    std::ranges::iota_view<T, U> io(T(10), u);34    assert(io.begin() == io.end());35    assert(io.begin() == std::move(io).end());36  }37  {38    const std::ranges::iota_view<T, U> io(T(0), u);39    assert(std::ranges::next(io.begin(), 10) == io.end());40    assert(std::ranges::next(io.begin(), 10) == std::move(io).end());41  }42  {43    const std::ranges::iota_view<T, U> io(T(10), u);44    assert(io.begin() == io.end());45  }46 47  {48    std::ranges::iota_view<T> io(T(0), std::unreachable_sentinel);49    assert(io.begin() != io.end());50    assert(std::ranges::next(io.begin()) != io.end());51    assert(std::ranges::next(io.begin(), 10) != io.end());52  }53  {54    const std::ranges::iota_view<T> io(T(0), std::unreachable_sentinel);55    assert(io.begin() != io.end());56    assert(std::ranges::next(io.begin()) != io.end());57    assert(std::ranges::next(io.begin(), 10) != io.end());58  }59}60 61constexpr bool test() {62  testType<SomeInt>(SomeInt(10));63  testType<SomeInt>(IntComparableWith(SomeInt(10)));64  testType<signed long>(IntComparableWith<signed long>(10));65  testType<unsigned long>(IntComparableWith<unsigned long>(10));66  testType<int>(IntComparableWith<int>(10));67  testType<int>(int(10));68  testType<int>(unsigned(10));69  testType<unsigned>(unsigned(10));70  testType<unsigned>(int(10));71  testType<unsigned>(IntComparableWith<unsigned>(10));72  testType<short>(short(10));73  testType<short>(IntComparableWith<short>(10));74  testType<unsigned short>(IntComparableWith<unsigned short>(10));75 76  return true;77}78 79int main(int, char**) {80  test();81  static_assert(test());82 83  return 0;84}85