15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65a83710eSEric Fiselier //
75a83710eSEric Fiselier //===----------------------------------------------------------------------===//
85a83710eSEric Fiselier
95a83710eSEric Fiselier // <list>
105a83710eSEric Fiselier
115a83710eSEric Fiselier // iterator begin();
125a83710eSEric Fiselier // iterator end();
135a83710eSEric Fiselier // const_iterator begin() const;
145a83710eSEric Fiselier // const_iterator end() const;
155a83710eSEric Fiselier // const_iterator cbegin() const;
165a83710eSEric Fiselier // const_iterator cend() const;
175a83710eSEric Fiselier
185a83710eSEric Fiselier #include <list>
195a83710eSEric Fiselier #include <cassert>
205a83710eSEric Fiselier #include <iterator>
215a83710eSEric Fiselier
220f901c7eSStephan T. Lavavej #include "test_macros.h"
235a83710eSEric Fiselier #include "min_allocator.h"
245a83710eSEric Fiselier
255a83710eSEric Fiselier struct A
265a83710eSEric Fiselier {
275a83710eSEric Fiselier int first;
285a83710eSEric Fiselier int second;
295a83710eSEric Fiselier };
305a83710eSEric Fiselier
main(int,char **)31*2df59c50SJF Bastien int main(int, char**)
325a83710eSEric Fiselier {
335a83710eSEric Fiselier {
345a83710eSEric Fiselier typedef int T;
355a83710eSEric Fiselier typedef std::list<T> C;
365a83710eSEric Fiselier C c;
375a83710eSEric Fiselier C::iterator i = c.begin();
385a83710eSEric Fiselier C::iterator j = c.end();
395a83710eSEric Fiselier assert(std::distance(i, j) == 0);
405a83710eSEric Fiselier assert(i == j);
415a83710eSEric Fiselier }
425a83710eSEric Fiselier {
435a83710eSEric Fiselier typedef int T;
445a83710eSEric Fiselier typedef std::list<T> C;
455a83710eSEric Fiselier const C c;
465a83710eSEric Fiselier C::const_iterator i = c.begin();
475a83710eSEric Fiselier C::const_iterator j = c.end();
485a83710eSEric Fiselier assert(std::distance(i, j) == 0);
495a83710eSEric Fiselier assert(i == j);
505a83710eSEric Fiselier }
515a83710eSEric Fiselier {
525a83710eSEric Fiselier typedef int T;
535a83710eSEric Fiselier typedef std::list<T> C;
545a83710eSEric Fiselier C c;
555a83710eSEric Fiselier C::const_iterator i = c.cbegin();
565a83710eSEric Fiselier C::const_iterator j = c.cend();
575a83710eSEric Fiselier assert(std::distance(i, j) == 0);
585a83710eSEric Fiselier assert(i == j);
595a83710eSEric Fiselier assert(i == c.end());
605a83710eSEric Fiselier }
615a83710eSEric Fiselier {
625a83710eSEric Fiselier typedef int T;
635a83710eSEric Fiselier typedef std::list<T> C;
645a83710eSEric Fiselier const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
655a83710eSEric Fiselier C c(std::begin(t), std::end(t));
665a83710eSEric Fiselier C::iterator i = c.begin();
675a83710eSEric Fiselier assert(*i == 0);
685a83710eSEric Fiselier ++i;
695a83710eSEric Fiselier assert(*i == 1);
705a83710eSEric Fiselier *i = 10;
715a83710eSEric Fiselier assert(*i == 10);
725a83710eSEric Fiselier assert(std::distance(c.begin(), c.end()) == 10);
735a83710eSEric Fiselier }
745a83710eSEric Fiselier {
755a83710eSEric Fiselier typedef int T;
765a83710eSEric Fiselier typedef std::list<T> C;
775a83710eSEric Fiselier C::iterator i;
785a83710eSEric Fiselier C::const_iterator j;
795a83710eSEric Fiselier }
80f2f2a639SEric Fiselier #if TEST_STD_VER >= 11
815a83710eSEric Fiselier {
825a83710eSEric Fiselier typedef int T;
835a83710eSEric Fiselier typedef std::list<T, min_allocator<T>> C;
845a83710eSEric Fiselier C c;
855a83710eSEric Fiselier C::iterator i = c.begin();
865a83710eSEric Fiselier C::iterator j = c.end();
875a83710eSEric Fiselier assert(std::distance(i, j) == 0);
885a83710eSEric Fiselier assert(i == j);
895a83710eSEric Fiselier }
905a83710eSEric Fiselier {
915a83710eSEric Fiselier typedef int T;
925a83710eSEric Fiselier typedef std::list<T, min_allocator<T>> C;
935a83710eSEric Fiselier const C c;
945a83710eSEric Fiselier C::const_iterator i = c.begin();
955a83710eSEric Fiselier C::const_iterator j = c.end();
965a83710eSEric Fiselier assert(std::distance(i, j) == 0);
975a83710eSEric Fiselier assert(i == j);
985a83710eSEric Fiselier }
995a83710eSEric Fiselier {
1005a83710eSEric Fiselier typedef int T;
1015a83710eSEric Fiselier typedef std::list<T, min_allocator<T>> C;
1025a83710eSEric Fiselier C c;
1035a83710eSEric Fiselier C::const_iterator i = c.cbegin();
1045a83710eSEric Fiselier C::const_iterator j = c.cend();
1055a83710eSEric Fiselier assert(std::distance(i, j) == 0);
1065a83710eSEric Fiselier assert(i == j);
1075a83710eSEric Fiselier assert(i == c.end());
1085a83710eSEric Fiselier }
1095a83710eSEric Fiselier {
1105a83710eSEric Fiselier typedef int T;
1115a83710eSEric Fiselier typedef std::list<T, min_allocator<T>> C;
1125a83710eSEric Fiselier const T t[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
1135a83710eSEric Fiselier C c(std::begin(t), std::end(t));
1145a83710eSEric Fiselier C::iterator i = c.begin();
1155a83710eSEric Fiselier assert(*i == 0);
1165a83710eSEric Fiselier ++i;
1175a83710eSEric Fiselier assert(*i == 1);
1185a83710eSEric Fiselier *i = 10;
1195a83710eSEric Fiselier assert(*i == 10);
1205a83710eSEric Fiselier assert(std::distance(c.begin(), c.end()) == 10);
1215a83710eSEric Fiselier }
1225a83710eSEric Fiselier {
1235a83710eSEric Fiselier typedef int T;
1245a83710eSEric Fiselier typedef std::list<T, min_allocator<T>> C;
1255a83710eSEric Fiselier C::iterator i;
1265a83710eSEric Fiselier C::const_iterator j;
1275a83710eSEric Fiselier }
1285a83710eSEric Fiselier {
1295a83710eSEric Fiselier typedef A T;
1305a83710eSEric Fiselier typedef std::list<T, min_allocator<T>> C;
1315a83710eSEric Fiselier C c = {A{1, 2}};
1325a83710eSEric Fiselier C::iterator i = c.begin();
1335a83710eSEric Fiselier i->first = 3;
1345a83710eSEric Fiselier C::const_iterator j = i;
1355a83710eSEric Fiselier assert(j->first == 3);
1365a83710eSEric Fiselier }
1375a83710eSEric Fiselier #endif
1380f901c7eSStephan T. Lavavej #if TEST_STD_VER > 11
1395a83710eSEric Fiselier {
1405a83710eSEric Fiselier std::list<int>::iterator ii1{}, ii2{};
1415a83710eSEric Fiselier std::list<int>::iterator ii4 = ii1;
1425a83710eSEric Fiselier std::list<int>::const_iterator cii{};
1435a83710eSEric Fiselier assert ( ii1 == ii2 );
1445a83710eSEric Fiselier assert ( ii1 == ii4 );
1455a83710eSEric Fiselier
1465a83710eSEric Fiselier assert (!(ii1 != ii2 ));
1475a83710eSEric Fiselier
1485a83710eSEric Fiselier assert ( (ii1 == cii ));
1495a83710eSEric Fiselier assert ( (cii == ii1 ));
1505a83710eSEric Fiselier assert (!(ii1 != cii ));
1515a83710eSEric Fiselier assert (!(cii != ii1 ));
1525a83710eSEric Fiselier }
1535a83710eSEric Fiselier #endif
1545a83710eSEric Fiselier
155*2df59c50SJF Bastien
156*2df59c50SJF Bastien return 0;
1575a83710eSEric Fiselier }
158