| //===----------------------------------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| // UNSUPPORTED: c++03, c++11, c++14, c++17 |
| // UNSUPPORTED: libcpp-no-concepts |
| // UNSUPPORTED: libcpp-has-no-incomplete-ranges |
| |
| // class std::ranges::subrange; |
| |
| #include <ranges> |
| |
| #include <cassert> |
| #include "test_macros.h" |
| #include "test_iterators.h" |
| #include "types.h" |
| |
| constexpr bool test() { |
| std::ranges::subrange<int*> a(globalBuff, globalBuff + 8, 8); |
| auto a1 = a.next(); |
| assert(a1.begin() == globalBuff + 1); |
| assert(a1.size() == 7); |
| auto a5 = a.next(5); |
| assert(a5.begin() == globalBuff + 5); |
| assert(a5.size() == 3); |
| auto a4 = a5.prev(); |
| assert(a4.begin() == globalBuff + 4); |
| assert(a4.size() == 4); |
| |
| std::ranges::subrange<InputIter> b(InputIter(globalBuff), InputIter(globalBuff + 8)); |
| auto b1 = std::move(b).next(); |
| assert(b1.begin().base() == globalBuff + 1); |
| |
| std::ranges::subrange<BidirIter> c(BidirIter(globalBuff + 4), BidirIter(globalBuff + 8)); |
| auto c1 = c.prev(); |
| assert(c1.begin().base() == globalBuff + 3); |
| auto c2 = c.prev(4); |
| assert(c2.begin().base() == globalBuff); |
| |
| std::ranges::subrange<BidirIter> d(BidirIter(globalBuff + 4), BidirIter(globalBuff + 8)); |
| auto d1 = d.advance(4); |
| assert(d1.begin().base() == globalBuff + 8); |
| assert(d1.empty()); |
| auto d2 = d1.advance(-4); |
| assert(d2.begin().base() == globalBuff + 4); |
| |
| return true; |
| } |
| |
| int main(int, char**) { |
| test(); |
| static_assert(test()); |
| |
| return 0; |
| } |