brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 80a24ba Raw
161 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// <unordered_set>10 11// template <class Value, class Hash = hash<Value>, class Pred = equal_to<Value>,12//           class Alloc = allocator<Value>>13// class unordered_set14 15// size_type erase(const key_type& k);16 17#include <unordered_set>18#include <string>19#include <cassert>20 21#include "test_macros.h"22#include "min_allocator.h"23 24#if TEST_STD_VER >= 1125template <typename Unordered>26bool only_deletions(const Unordered& whole, const Unordered& part) {27  typename Unordered::const_iterator w = whole.begin();28  typename Unordered::const_iterator p = part.begin();29 30  while (w != whole.end() && p != part.end()) {31    if (*w == *p)32      p++;33    w++;34  }35 36  return p == part.end();37}38#endif39 40int main(int, char**) {41  {42    typedef std::unordered_set<int> C;43    typedef int P;44    P a[] = {P(1), P(2), P(3), P(4), P(1), P(2)};45    C c(a, a + sizeof(a) / sizeof(a[0]));46    assert(c.erase(5) == 0);47    assert(c.size() == 4);48    assert(c.count(1) == 1);49    assert(c.count(2) == 1);50    assert(c.count(3) == 1);51    assert(c.count(4) == 1);52 53    assert(c.erase(2) == 1);54    assert(c.size() == 3);55    assert(c.count(1) == 1);56    assert(c.count(3) == 1);57    assert(c.count(4) == 1);58 59    assert(c.erase(2) == 0);60    assert(c.size() == 3);61    assert(c.count(1) == 1);62    assert(c.count(3) == 1);63    assert(c.count(4) == 1);64 65    assert(c.erase(4) == 1);66    assert(c.size() == 2);67    assert(c.count(1) == 1);68    assert(c.count(3) == 1);69 70    assert(c.erase(4) == 0);71    assert(c.size() == 2);72    assert(c.count(1) == 1);73    assert(c.count(3) == 1);74 75    assert(c.erase(1) == 1);76    assert(c.size() == 1);77    assert(c.count(3) == 1);78 79    assert(c.erase(1) == 0);80    assert(c.size() == 1);81    assert(c.count(3) == 1);82 83    assert(c.erase(3) == 1);84    assert(c.size() == 0);85 86    assert(c.erase(3) == 0);87    assert(c.size() == 0);88  }89#if TEST_STD_VER >= 1190  {91    typedef std::unordered_set<int, std::hash<int>, std::equal_to<int>, min_allocator<int>> C;92    typedef int P;93    P a[] = {P(1), P(2), P(3), P(4), P(1), P(2)};94    C c(a, a + sizeof(a) / sizeof(a[0]));95    assert(c.erase(5) == 0);96    assert(c.size() == 4);97    assert(c.count(1) == 1);98    assert(c.count(2) == 1);99    assert(c.count(3) == 1);100    assert(c.count(4) == 1);101 102    assert(c.erase(2) == 1);103    assert(c.size() == 3);104    assert(c.count(1) == 1);105    assert(c.count(3) == 1);106    assert(c.count(4) == 1);107 108    assert(c.erase(2) == 0);109    assert(c.size() == 3);110    assert(c.count(1) == 1);111    assert(c.count(3) == 1);112    assert(c.count(4) == 1);113 114    assert(c.erase(4) == 1);115    assert(c.size() == 2);116    assert(c.count(1) == 1);117    assert(c.count(3) == 1);118 119    assert(c.erase(4) == 0);120    assert(c.size() == 2);121    assert(c.count(1) == 1);122    assert(c.count(3) == 1);123 124    assert(c.erase(1) == 1);125    assert(c.size() == 1);126    assert(c.count(3) == 1);127 128    assert(c.erase(1) == 0);129    assert(c.size() == 1);130    assert(c.count(3) == 1);131 132    assert(c.erase(3) == 1);133    assert(c.size() == 0);134 135    assert(c.erase(3) == 0);136    assert(c.size() == 0);137  }138  {139    typedef std::unordered_set<int> C;140    C m, m2;141    for (int i = 0; i < 10; ++i) {142      m.insert(i);143      m2.insert(i);144    }145 146    C::iterator i = m2.begin();147    int ctr       = 0;148    while (i != m2.end()) {149      if (ctr++ % 2 == 0)150        m2.erase(i++);151      else152        ++i;153    }154 155    assert(only_deletions(m, m2));156  }157#endif158 159  return 0;160}161