1*7b20e05cSzoecarver //===----------------------------------------------------------------------===// 2*7b20e05cSzoecarver // 3*7b20e05cSzoecarver // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*7b20e05cSzoecarver // See https://llvm.org/LICENSE.txt for license information. 5*7b20e05cSzoecarver // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*7b20e05cSzoecarver // 7*7b20e05cSzoecarver //===----------------------------------------------------------------------===// 8*7b20e05cSzoecarver 9*7b20e05cSzoecarver // UNSUPPORTED: c++03, c++11, c++14, c++17 10*7b20e05cSzoecarver // UNSUPPORTED: libcpp-has-no-incomplete-ranges 11*7b20e05cSzoecarver 12*7b20e05cSzoecarver // constexpr W operator[](difference_type n) const 13*7b20e05cSzoecarver // requires advanceable<W>; 14*7b20e05cSzoecarver 15*7b20e05cSzoecarver #include <ranges> 16*7b20e05cSzoecarver #include <cassert> 17*7b20e05cSzoecarver 18*7b20e05cSzoecarver #include "test_macros.h" 19*7b20e05cSzoecarver #include "../types.h" 20*7b20e05cSzoecarver 21*7b20e05cSzoecarver template<class T> testType()22*7b20e05cSzoecarverconstexpr void testType() { 23*7b20e05cSzoecarver { 24*7b20e05cSzoecarver std::ranges::iota_view<T> io(T(0)); 25*7b20e05cSzoecarver auto iter = io.begin(); 26*7b20e05cSzoecarver for (int i = 0; i < 100; ++i) 27*7b20e05cSzoecarver assert(iter[i] == T(i)); 28*7b20e05cSzoecarver } 29*7b20e05cSzoecarver { 30*7b20e05cSzoecarver std::ranges::iota_view<T> io(T(10)); 31*7b20e05cSzoecarver auto iter = io.begin(); 32*7b20e05cSzoecarver for (int i = 0; i < 100; ++i) 33*7b20e05cSzoecarver assert(iter[i] == T(i + 10)); 34*7b20e05cSzoecarver } 35*7b20e05cSzoecarver { 36*7b20e05cSzoecarver const std::ranges::iota_view<T> io(T(0)); 37*7b20e05cSzoecarver auto iter = io.begin(); 38*7b20e05cSzoecarver for (int i = 0; i < 100; ++i) 39*7b20e05cSzoecarver assert(iter[i] == T(i)); 40*7b20e05cSzoecarver } 41*7b20e05cSzoecarver { 42*7b20e05cSzoecarver const std::ranges::iota_view<T> io(T(10)); 43*7b20e05cSzoecarver auto iter = io.begin(); 44*7b20e05cSzoecarver for (int i = 0; i < 100; ++i) 45*7b20e05cSzoecarver assert(iter[i] == T(i + 10)); 46*7b20e05cSzoecarver } 47*7b20e05cSzoecarver } 48*7b20e05cSzoecarver test()49*7b20e05cSzoecarverconstexpr bool test() { 50*7b20e05cSzoecarver testType<SomeInt>(); 51*7b20e05cSzoecarver testType<signed long>(); 52*7b20e05cSzoecarver testType<unsigned long>(); 53*7b20e05cSzoecarver testType<int>(); 54*7b20e05cSzoecarver testType<unsigned>(); 55*7b20e05cSzoecarver testType<short>(); 56*7b20e05cSzoecarver testType<unsigned short>(); 57*7b20e05cSzoecarver 58*7b20e05cSzoecarver return true; 59*7b20e05cSzoecarver } 60*7b20e05cSzoecarver main(int,char **)61*7b20e05cSzoecarverint main(int, char**) { 62*7b20e05cSzoecarver test(); 63*7b20e05cSzoecarver static_assert(test()); 64*7b20e05cSzoecarver 65*7b20e05cSzoecarver return 0; 66*7b20e05cSzoecarver } 67