brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · 34e70f2 Raw
130 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// pair<iterator, bool> insert(value_type&& x);16 17#include <unordered_set>18#include <cassert>19 20#include "test_macros.h"21#include "MoveOnly.h"22#include "min_allocator.h"23 24int main(int, char**) {25  {26    typedef std::unordered_set<double> C;27    typedef std::pair<C::iterator, bool> R;28    typedef double P;29    C c;30    R r = c.insert(P(3.5));31    assert(c.size() == 1);32    assert(*r.first == 3.5);33    assert(r.second);34 35    r = c.insert(P(3.5));36    assert(c.size() == 1);37    assert(*r.first == 3.5);38    assert(!r.second);39 40    r = c.insert(P(4.5));41    assert(c.size() == 2);42    assert(*r.first == 4.5);43    assert(r.second);44 45    r = c.insert(P(5.5));46    assert(c.size() == 3);47    assert(*r.first == 5.5);48    assert(r.second);49  }50#if TEST_STD_VER >= 1151  {52    typedef std::unordered_set<MoveOnly> C;53    typedef std::pair<C::iterator, bool> R;54    typedef MoveOnly P;55    C c;56    R r = c.insert(P(3));57    assert(c.size() == 1);58    assert(*r.first == 3);59    assert(r.second);60 61    r = c.insert(P(3));62    assert(c.size() == 1);63    assert(*r.first == 3);64    assert(!r.second);65 66    r = c.insert(P(4));67    assert(c.size() == 2);68    assert(*r.first == 4);69    assert(r.second);70 71    r = c.insert(P(5));72    assert(c.size() == 3);73    assert(*r.first == 5);74    assert(r.second);75  }76  {77    typedef std::unordered_set<double, std::hash<double>, std::equal_to<double>, min_allocator<double>> C;78    typedef std::pair<C::iterator, bool> R;79    typedef double P;80    C c;81    R r = c.insert(P(3.5));82    assert(c.size() == 1);83    assert(*r.first == 3.5);84    assert(r.second);85 86    r = c.insert(P(3.5));87    assert(c.size() == 1);88    assert(*r.first == 3.5);89    assert(!r.second);90 91    r = c.insert(P(4.5));92    assert(c.size() == 2);93    assert(*r.first == 4.5);94    assert(r.second);95 96    r = c.insert(P(5.5));97    assert(c.size() == 3);98    assert(*r.first == 5.5);99    assert(r.second);100  }101  {102    typedef std::unordered_set<MoveOnly, std::hash<MoveOnly>, std::equal_to<MoveOnly>, min_allocator<MoveOnly>> C;103    typedef std::pair<C::iterator, bool> R;104    typedef MoveOnly P;105    C c;106    R r = c.insert(P(3));107    assert(c.size() == 1);108    assert(*r.first == 3);109    assert(r.second);110 111    r = c.insert(P(3));112    assert(c.size() == 1);113    assert(*r.first == 3);114    assert(!r.second);115 116    r = c.insert(P(4));117    assert(c.size() == 2);118    assert(*r.first == 4);119    assert(r.second);120 121    r = c.insert(P(5));122    assert(c.size() == 3);123    assert(*r.first == 5);124    assert(r.second);125  }126#endif // TEST_STD_VER >= 11127 128  return 0;129}130