brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · b5b6916 Raw
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