//===----------------------------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// // template // struct __bounded_iter; // // Arithmetic operators #include <__cxx03/__iterator/bounded_iter.h> #include #include "test_iterators.h" #include "test_macros.h" template TEST_CONSTEXPR_CXX14 bool tests() { int array[] = {40, 41, 42, 43, 44}; int* b = array + 0; int* e = array + 5; // ++it { std::__bounded_iter iter = std::__make_bounded_iter(Iter(b), Iter(b), Iter(e)); std::__bounded_iter& result = ++iter; assert(&result == &iter); assert(*iter == 41); } // it++ { std::__bounded_iter iter = std::__make_bounded_iter(Iter(b), Iter(b), Iter(e)); std::__bounded_iter result = iter++; assert(*result == 40); assert(*iter == 41); } // --it { std::__bounded_iter iter = std::__make_bounded_iter(Iter(b + 3), Iter(b), Iter(e)); std::__bounded_iter& result = --iter; assert(&result == &iter); assert(*iter == 42); } // it-- { std::__bounded_iter iter = std::__make_bounded_iter(Iter(b + 3), Iter(b), Iter(e)); std::__bounded_iter result = iter--; assert(*result == 43); assert(*iter == 42); } // it += n { std::__bounded_iter iter = std::__make_bounded_iter(Iter(b), Iter(b), Iter(e)); std::__bounded_iter& result = (iter += 3); assert(&result == &iter); assert(*iter == 43); } // it + n { std::__bounded_iter iter = std::__make_bounded_iter(Iter(b), Iter(b), Iter(e)); std::__bounded_iter result = iter + 3; assert(*iter == 40); assert(*result == 43); } // n + it { std::__bounded_iter iter = std::__make_bounded_iter(Iter(b), Iter(b), Iter(e)); std::__bounded_iter result = 3 + iter; assert(*iter == 40); assert(*result == 43); } // it -= n { std::__bounded_iter iter = std::__make_bounded_iter(Iter(b + 3), Iter(b), Iter(e)); std::__bounded_iter& result = (iter -= 3); assert(&result == &iter); assert(*iter == 40); } // it - n { std::__bounded_iter iter = std::__make_bounded_iter(Iter(b + 3), Iter(b), Iter(e)); std::__bounded_iter result = iter - 3; assert(*iter == 43); assert(*result == 40); } // it - it { std::__bounded_iter iter1 = std::__make_bounded_iter(Iter(b), Iter(b), Iter(e)); std::__bounded_iter iter2 = std::__make_bounded_iter(Iter(e), Iter(b), Iter(e)); std::ptrdiff_t result = iter2 - iter1; assert(result == 5); } return true; } int main(int, char**) { tests(); return 0; }