//===----------------------------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// // // reverse_iterator rbegin(); // reverse_iterator rend(); // const_reverse_iterator rbegin() const; // const_reverse_iterator rend() const; // const_reverse_iterator crbegin() const; // const_reverse_iterator crend() const; #include #include #include #include "min_allocator.h" template TEST_CONSTEXPR_CXX20 void check_vector_reverse_iterators() { { Vector vec; assert(vec.rbegin() == vec.rend()); assert(vec.crbegin() == vec.crend()); } { const int n = 10; Vector vec; const Vector& cvec = vec; vec.reserve(n); for (int i = 0; i < n; ++i) vec.push_back(i); { int iterations = 0; for (typename Vector::const_reverse_iterator it = vec.crbegin(); it != vec.crend(); ++it) { assert(*it == (n - iterations - 1)); ++iterations; } assert(iterations == n); } { assert(cvec.rbegin() == vec.crbegin()); assert(cvec.rend() == vec.crend()); } { int iterations = 0; for (typename Vector::reverse_iterator it = vec.rbegin(); it != vec.rend(); ++it) { assert(*it == (n - iterations - 1)); *it = 40; assert(*it == 40); ++iterations; } assert(iterations == n); } assert(std::distance(vec.rbegin(), vec.rend()) == n); assert(std::distance(cvec.rbegin(), cvec.rend()) == n); assert(std::distance(vec.crbegin(), vec.crend()) == n); assert(std::distance(cvec.crbegin(), cvec.crend()) == n); } } TEST_CONSTEXPR_CXX20 bool test() { check_vector_reverse_iterators >(); #if TEST_STD_VER >= 11 check_vector_reverse_iterators > >(); #endif return true; } int main(int, char**) { test(); #if TEST_STD_VER > 17 static_assert(test()); #endif return 0; }