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-exception
6//
7//===----------------------------------------------------------------------===//
8
9// <list>
10
11// iterator erase(const_iterator first, const_iterator last);
12
13#include <list>
14#include <cassert>
15
16#include "test_macros.h"
17#include "min_allocator.h"
18
19int main(int, char**) {
20 int a1[] = {1, 2, 3};
21 {
22 std::list<int> l1(a1, a1 + 3);
23 std::list<int>::iterator i = l1.erase(first: l1.cbegin(), last: l1.cbegin());
24 assert(l1.size() == 3);
25 assert(std::distance(l1.cbegin(), l1.cend()) == 3);
26 assert(i == l1.begin());
27 }
28 {
29 std::list<int> l1(a1, a1 + 3);
30 std::list<int>::iterator i = l1.erase(first: l1.cbegin(), last: std::next(x: l1.cbegin()));
31 assert(l1.size() == 2);
32 assert(std::distance(l1.cbegin(), l1.cend()) == 2);
33 assert(i == l1.begin());
34 assert(l1 == std::list<int>(a1 + 1, a1 + 3));
35 }
36 {
37 std::list<int> l1(a1, a1 + 3);
38 std::list<int>::iterator i = l1.erase(first: l1.cbegin(), last: std::next(x: l1.cbegin(), n: 2));
39 assert(l1.size() == 1);
40 assert(std::distance(l1.cbegin(), l1.cend()) == 1);
41 assert(i == l1.begin());
42 assert(l1 == std::list<int>(a1 + 2, a1 + 3));
43 }
44 {
45 std::list<int> l1(a1, a1 + 3);
46 std::list<int>::iterator i = l1.erase(first: l1.cbegin(), last: std::next(x: l1.cbegin(), n: 3));
47 assert(l1.size() == 0);
48 assert(std::distance(l1.cbegin(), l1.cend()) == 0);
49 assert(i == l1.begin());
50 }
51#if TEST_STD_VER >= 11
52 {
53 std::list<int, min_allocator<int>> l1(a1, a1 + 3);
54 std::list<int, min_allocator<int>>::iterator i = l1.erase(l1.cbegin(), l1.cbegin());
55 assert(l1.size() == 3);
56 assert(std::distance(l1.cbegin(), l1.cend()) == 3);
57 assert(i == l1.begin());
58 }
59 {
60 std::list<int, min_allocator<int>> l1(a1, a1 + 3);
61 std::list<int, min_allocator<int>>::iterator i = l1.erase(l1.cbegin(), std::next(l1.cbegin()));
62 assert(l1.size() == 2);
63 assert(std::distance(l1.cbegin(), l1.cend()) == 2);
64 assert(i == l1.begin());
65 assert((l1 == std::list<int, min_allocator<int>>(a1 + 1, a1 + 3)));
66 }
67 {
68 std::list<int, min_allocator<int>> l1(a1, a1 + 3);
69 std::list<int, min_allocator<int>>::iterator i = l1.erase(l1.cbegin(), std::next(l1.cbegin(), 2));
70 assert(l1.size() == 1);
71 assert(std::distance(l1.cbegin(), l1.cend()) == 1);
72 assert(i == l1.begin());
73 assert((l1 == std::list<int, min_allocator<int>>(a1 + 2, a1 + 3)));
74 }
75 {
76 std::list<int, min_allocator<int>> l1(a1, a1 + 3);
77 std::list<int, min_allocator<int>>::iterator i = l1.erase(l1.cbegin(), std::next(l1.cbegin(), 3));
78 assert(l1.size() == 0);
79 assert(std::distance(l1.cbegin(), l1.cend()) == 0);
80 assert(i == l1.begin());
81 }
82#endif
83
84 return 0;
85}
86

source code of libcxx/test/std/containers/sequences/list/list.modifiers/erase_iter_iter.pass.cpp