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