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-exception
6//
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_set
14
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(x: P(3.5));
31 assert(c.size() == 1);
32 assert(*r.first == 3.5);
33 assert(r.second);
34
35 r = c.insert(x: P(3.5));
36 assert(c.size() == 1);
37 assert(*r.first == 3.5);
38 assert(!r.second);
39
40 r = c.insert(x: P(4.5));
41 assert(c.size() == 2);
42 assert(*r.first == 4.5);
43 assert(r.second);
44
45 r = c.insert(x: P(5.5));
46 assert(c.size() == 3);
47 assert(*r.first == 5.5);
48 assert(r.second);
49 }
50#if TEST_STD_VER >= 11
51 {
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 >= 11
127
128 return 0;
129}
130

source code of libcxx/test/std/containers/unord/unord.set/insert_rvalue.pass.cpp