105 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// template <class _Iterator>10// struct __bounded_iter;11//12// Arithmetic operators13 14#include <__cxx03/__iterator/bounded_iter.h>15#include <cstddef>16 17#include "test_iterators.h"18#include "test_macros.h"19 20template <class Iter>21TEST_CONSTEXPR_CXX14 bool tests() {22 int array[] = {40, 41, 42, 43, 44};23 int* b = array + 0;24 int* e = array + 5;25 26 // ++it27 {28 std::__bounded_iter<Iter> iter = std::__make_bounded_iter(Iter(b), Iter(b), Iter(e));29 std::__bounded_iter<Iter>& result = ++iter;30 assert(&result == &iter);31 assert(*iter == 41);32 }33 // it++34 {35 std::__bounded_iter<Iter> iter = std::__make_bounded_iter(Iter(b), Iter(b), Iter(e));36 std::__bounded_iter<Iter> result = iter++;37 assert(*result == 40);38 assert(*iter == 41);39 }40 // --it41 {42 std::__bounded_iter<Iter> iter = std::__make_bounded_iter(Iter(b + 3), Iter(b), Iter(e));43 std::__bounded_iter<Iter>& result = --iter;44 assert(&result == &iter);45 assert(*iter == 42);46 }47 // it--48 {49 std::__bounded_iter<Iter> iter = std::__make_bounded_iter(Iter(b + 3), Iter(b), Iter(e));50 std::__bounded_iter<Iter> result = iter--;51 assert(*result == 43);52 assert(*iter == 42);53 }54 // it += n55 {56 std::__bounded_iter<Iter> iter = std::__make_bounded_iter(Iter(b), Iter(b), Iter(e));57 std::__bounded_iter<Iter>& result = (iter += 3);58 assert(&result == &iter);59 assert(*iter == 43);60 }61 // it + n62 {63 std::__bounded_iter<Iter> iter = std::__make_bounded_iter(Iter(b), Iter(b), Iter(e));64 std::__bounded_iter<Iter> result = iter + 3;65 assert(*iter == 40);66 assert(*result == 43);67 }68 // n + it69 {70 std::__bounded_iter<Iter> iter = std::__make_bounded_iter(Iter(b), Iter(b), Iter(e));71 std::__bounded_iter<Iter> result = 3 + iter;72 assert(*iter == 40);73 assert(*result == 43);74 }75 // it -= n76 {77 std::__bounded_iter<Iter> iter = std::__make_bounded_iter(Iter(b + 3), Iter(b), Iter(e));78 std::__bounded_iter<Iter>& result = (iter -= 3);79 assert(&result == &iter);80 assert(*iter == 40);81 }82 // it - n83 {84 std::__bounded_iter<Iter> iter = std::__make_bounded_iter(Iter(b + 3), Iter(b), Iter(e));85 std::__bounded_iter<Iter> result = iter - 3;86 assert(*iter == 43);87 assert(*result == 40);88 }89 // it - it90 {91 std::__bounded_iter<Iter> iter1 = std::__make_bounded_iter(Iter(b), Iter(b), Iter(e));92 std::__bounded_iter<Iter> iter2 = std::__make_bounded_iter(Iter(e), Iter(b), Iter(e));93 std::ptrdiff_t result = iter2 - iter1;94 assert(result == 5);95 }96 97 return true;98}99 100int main(int, char**) {101 tests<int*>();102 103 return 0;104}105