1211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant//===----------------------------------------------------------------------===// 2211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// 3211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// The LLVM Compiler Infrastructure 4211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// 5211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// 8211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant//===----------------------------------------------------------------------===// 9211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant 10211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// <list> 11211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant 12211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// iterator begin(); 13211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// iterator end(); 14211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// const_iterator begin() const; 15211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// const_iterator end() const; 16211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// const_iterator cbegin() const; 17211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant// const_iterator cend() const; 18211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant 19211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant#include <list> 20211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant#include <cassert> 21211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant#include <iterator> 22211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant 23e619862dbf0c4a46db6e3d816bcafcfef6e85977Stephan T. Lavavej#include "test_macros.h" 24061d0cc4db18d17bf01ed14c5db0be098205bd47Marshall Clow#include "min_allocator.h" 2529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant 2629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnantstruct A 2729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant{ 2829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant int first; 2929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant int second; 3029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant}; 3129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant 32211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnantint main() 33211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant{ 34211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant { 35211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant typedef int T; 36211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant typedef std::list<T> C; 37211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant C c; 38211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant C::iterator i = c.begin(); 39211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant C::iterator j = c.end(); 40211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant assert(std::distance(i, j) == 0); 41211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant assert(i == j); 42211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant } 43211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant { 44211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant typedef int T; 45211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant typedef std::list<T> C; 46211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant const C c; 47211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant C::const_iterator i = c.begin(); 48211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant C::const_iterator j = c.end(); 49211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant assert(std::distance(i, j) == 0); 50211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant assert(i == j); 51211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant } 52211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant { 53211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant typedef int T; 54211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant typedef std::list<T> C; 55211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant C c; 56211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant C::const_iterator i = c.cbegin(); 57211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant C::const_iterator j = c.cend(); 58211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant assert(std::distance(i, j) == 0); 59211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant assert(i == j); 60211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant assert(i == c.end()); 61211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant } 62211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant { 63211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant typedef int T; 64211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant typedef std::list<T> C; 65211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 66211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant C c(std::begin(t), std::end(t)); 67211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant C::iterator i = c.begin(); 68211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant assert(*i == 0); 69211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant ++i; 70211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant assert(*i == 1); 71211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant *i = 10; 72211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant assert(*i == 10); 73211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant assert(std::distance(c.begin(), c.end()) == 10); 74211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant } 75211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant { 76211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant typedef int T; 77211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant typedef std::list<T> C; 78211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant C::iterator i; 79211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant C::const_iterator j; 80211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant } 81d24c465beaec2fe9a0e365e6379cd5d3acaeb2caEric Fiselier#if TEST_STD_VER >= 11 8229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant { 8329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant typedef int T; 8429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant typedef std::list<T, min_allocator<T>> C; 8529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant C c; 8629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant C::iterator i = c.begin(); 8729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant C::iterator j = c.end(); 8829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant assert(std::distance(i, j) == 0); 8929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant assert(i == j); 9029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant } 9129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant { 9229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant typedef int T; 9329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant typedef std::list<T, min_allocator<T>> C; 9429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant const C c; 9529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant C::const_iterator i = c.begin(); 9629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant C::const_iterator j = c.end(); 9729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant assert(std::distance(i, j) == 0); 9829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant assert(i == j); 9929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant } 10029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant { 10129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant typedef int T; 10229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant typedef std::list<T, min_allocator<T>> C; 10329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant C c; 10429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant C::const_iterator i = c.cbegin(); 10529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant C::const_iterator j = c.cend(); 10629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant assert(std::distance(i, j) == 0); 10729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant assert(i == j); 10829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant assert(i == c.end()); 10929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant } 11029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant { 11129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant typedef int T; 11229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant typedef std::list<T, min_allocator<T>> C; 11329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 11429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant C c(std::begin(t), std::end(t)); 11529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant C::iterator i = c.begin(); 11629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant assert(*i == 0); 11729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant ++i; 11829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant assert(*i == 1); 11929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant *i = 10; 12029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant assert(*i == 10); 12129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant assert(std::distance(c.begin(), c.end()) == 10); 12229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant } 12329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant { 12429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant typedef int T; 12529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant typedef std::list<T, min_allocator<T>> C; 12629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant C::iterator i; 12729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant C::const_iterator j; 12829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant } 12929f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant { 13029f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant typedef A T; 13129f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant typedef std::list<T, min_allocator<T>> C; 13229f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant C c = {A{1, 2}}; 13329f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant C::iterator i = c.begin(); 13429f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant i->first = 3; 13529f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant C::const_iterator j = i; 13629f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant assert(j->first == 3); 13729f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant } 13829f7432ff3a5c503a98a66ae46dd571b651c88b5Howard Hinnant#endif 139e619862dbf0c4a46db6e3d816bcafcfef6e85977Stephan T. Lavavej#if TEST_STD_VER > 11 14065d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow { 14165d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow std::list<int>::iterator ii1{}, ii2{}; 14265d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow std::list<int>::iterator ii4 = ii1; 14365d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow std::list<int>::const_iterator cii{}; 14465d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow assert ( ii1 == ii2 ); 14565d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow assert ( ii1 == ii4 ); 14665d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow 1479863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow assert (!(ii1 != ii2 )); 1489863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow 1499863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow assert ( (ii1 == cii )); 1509863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow assert ( (cii == ii1 )); 1519863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow assert (!(ii1 != cii )); 1529863083ee04fe80e227976bc90dbc01806bdf3d9Marshall Clow assert (!(cii != ii1 )); 15365d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow } 15465d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow#endif 15565d2e6a39202efb1db3826224d7050393f79acf0Marshall Clow 156211f0ee1be4a4eaa0fab353904a8986af3f39e50Howard Hinnant} 157