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