brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 3d0133e Raw
53 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// <deque>10 11// void pop_back()12 13//  Erasing items from the beginning or the end of a deque shall not invalidate iterators14//  to items that were not erased.15 16#include "asan_testing.h"17#include <deque>18#include <cassert>19 20#include "test_macros.h"21 22template <typename C>23void test(C c) {24  typename C::iterator it1 = c.begin();25  typename C::iterator it2 = c.end() - 2;26 27  c.pop_back();28 29  typename C::iterator it3 = c.begin();30  typename C::iterator it4 = c.end() - 1;31  assert(it1 == it3);32  assert(*it1 == *it3);33  assert(&*it1 == &*it3);34  assert(it2 == it4);35  assert(*it2 == *it4);36  assert(&*it2 == &*it4);37  LIBCPP_ASSERT(is_double_ended_contiguous_container_asan_correct(c));38}39 40int main(int, char**) {41  std::deque<int> queue;42  for (int i = 0; i < 4098; ++i)43    queue.push_back(i);44 45  while (queue.size() > 1) {46    test(queue);47    queue.pop_back();48    LIBCPP_ASSERT(is_double_ended_contiguous_container_asan_correct(queue));49  }50 51  return 0;52}53