brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · b41a189 Raw
168 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// <list>10 11// iterator       begin();        // constexpr since C++2612// iterator       end();          // constexpr since C++2613// const_iterator begin()  const; // constexpr since C++2614// const_iterator end()    const; // constexpr since C++2615// const_iterator cbegin() const; // constexpr since C++2616// const_iterator cend()   const; // constexpr since C++2617 18#include <list>19#include <cassert>20#include <iterator>21 22#include "test_macros.h"23#include "min_allocator.h"24 25struct A {26  int first;27  int second;28};29 30TEST_CONSTEXPR_CXX26 bool test() {31  {32    typedef int T;33    typedef std::list<T> C;34    C c;35    C::iterator i = c.begin();36    C::iterator j = c.end();37    assert(std::distance(i, j) == 0);38    assert(i == j);39  }40  {41    typedef int T;42    typedef std::list<T> C;43    const C c;44    C::const_iterator i = c.begin();45    C::const_iterator j = c.end();46    assert(std::distance(i, j) == 0);47    assert(i == j);48  }49  {50    typedef int T;51    typedef std::list<T> C;52    C c;53    C::const_iterator i = c.cbegin();54    C::const_iterator j = c.cend();55    assert(std::distance(i, j) == 0);56    assert(i == j);57    assert(i == c.end());58  }59  {60    typedef int T;61    typedef std::list<T> C;62    const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};63    C c(std::begin(t), std::end(t));64    C::iterator i = c.begin();65    assert(*i == 0);66    ++i;67    assert(*i == 1);68    *i = 10;69    assert(*i == 10);70    assert(std::distance(c.begin(), c.end()) == 10);71  }72  {73    typedef int T;74    typedef std::list<T> C;75    C::iterator i;76    C::const_iterator j;77    (void)i;78    (void)j;79  }80#if TEST_STD_VER >= 1181  {82    typedef int T;83    typedef std::list<T, min_allocator<T>> C;84    C c;85    C::iterator i = c.begin();86    C::iterator j = c.end();87    assert(std::distance(i, j) == 0);88    assert(i == j);89  }90  {91    typedef int T;92    typedef std::list<T, min_allocator<T>> C;93    const C c;94    C::const_iterator i = c.begin();95    C::const_iterator j = c.end();96    assert(std::distance(i, j) == 0);97    assert(i == j);98  }99  {100    typedef int T;101    typedef std::list<T, min_allocator<T>> C;102    C c;103    C::const_iterator i = c.cbegin();104    C::const_iterator j = c.cend();105    assert(std::distance(i, j) == 0);106    assert(i == j);107    assert(i == c.end());108  }109  {110    typedef int T;111    typedef std::list<T, min_allocator<T>> C;112    const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};113    C c(std::begin(t), std::end(t));114    C::iterator i = c.begin();115    assert(*i == 0);116    ++i;117    assert(*i == 1);118    *i = 10;119    assert(*i == 10);120    assert(std::distance(c.begin(), c.end()) == 10);121  }122  {123    typedef int T;124    typedef std::list<T, min_allocator<T>> C;125    C::iterator i;126    C::const_iterator j;127    (void)i;128    (void)j;129  }130  {131    typedef A T;132    typedef std::list<T, min_allocator<T>> C;133    C c                 = {A{1, 2}};134    C::iterator i       = c.begin();135    i->first            = 3;136    C::const_iterator j = i;137    assert(j->first == 3);138  }139#endif140#if TEST_STD_VER > 11141  {142    std::list<int>::iterator ii1{}, ii2{};143    std::list<int>::iterator ii4 = ii1;144    std::list<int>::const_iterator cii{};145    assert(ii1 == ii2);146    assert(ii1 == ii4);147 148    assert(!(ii1 != ii2));149 150    assert((ii1 == cii));151    assert((cii == ii1));152    assert(!(ii1 != cii));153    assert(!(cii != ii1));154  }155#endif156 157  return true;158}159 160int main(int, char**) {161  assert(test());162#if TEST_STD_VER >= 26163  static_assert(test());164#endif165 166  return 0;167}168