annotate gcc/hash-set-tests.c @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* Unit tests for hash-set.h.
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 Copyright (C) 2015-2020 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 This file is part of GCC.
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 GCC is free software; you can redistribute it and/or modify it under
kono
parents:
diff changeset
7 the terms of the GNU General Public License as published by the Free
kono
parents:
diff changeset
8 Software Foundation; either version 3, or (at your option) any later
kono
parents:
diff changeset
9 version.
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
kono
parents:
diff changeset
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
kono
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
kono
parents:
diff changeset
14 for more details.
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
kono
parents:
diff changeset
17 along with GCC; see the file COPYING3. If not see
kono
parents:
diff changeset
18 <http://www.gnu.org/licenses/>. */
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 #include "config.h"
kono
parents:
diff changeset
21 #include "system.h"
kono
parents:
diff changeset
22 #include "coretypes.h"
kono
parents:
diff changeset
23 #include "tm.h"
kono
parents:
diff changeset
24 #include "opts.h"
kono
parents:
diff changeset
25 #include "hash-set.h"
kono
parents:
diff changeset
26 #include "selftest.h"
kono
parents:
diff changeset
27
kono
parents:
diff changeset
28 #if CHECKING_P
kono
parents:
diff changeset
29
kono
parents:
diff changeset
30 namespace selftest {
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 /* Construct a hash_set <const char *> and verify that various operations
kono
parents:
diff changeset
33 work correctly. */
kono
parents:
diff changeset
34
kono
parents:
diff changeset
35 static void
kono
parents:
diff changeset
36 test_set_of_strings ()
kono
parents:
diff changeset
37 {
kono
parents:
diff changeset
38 hash_set <const char *> s;
kono
parents:
diff changeset
39 ASSERT_EQ (0, s.elements ());
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 const char *red = "red";
kono
parents:
diff changeset
42 const char *green = "green";
kono
parents:
diff changeset
43 const char *blue = "blue";
kono
parents:
diff changeset
44
kono
parents:
diff changeset
45 ASSERT_EQ (false, s.contains (red));
kono
parents:
diff changeset
46
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
47 for (hash_set<const char *>::iterator it = s.begin (); it != s.end (); ++it)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
48 ASSERT_EQ (true, false);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
49
111
kono
parents:
diff changeset
50 /* Populate the hash_set. */
kono
parents:
diff changeset
51 ASSERT_EQ (false, s.add (red));
kono
parents:
diff changeset
52 ASSERT_EQ (false, s.add (green));
kono
parents:
diff changeset
53 ASSERT_EQ (false, s.add (blue));
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
54 ASSERT_EQ (true, s.add (green));
111
kono
parents:
diff changeset
55
kono
parents:
diff changeset
56 /* Verify that the values are now within the set. */
kono
parents:
diff changeset
57 ASSERT_EQ (true, s.contains (red));
kono
parents:
diff changeset
58 ASSERT_EQ (true, s.contains (green));
kono
parents:
diff changeset
59 ASSERT_EQ (true, s.contains (blue));
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
60 ASSERT_EQ (3, s.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
61
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
62 /* Test removal. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
63 s.remove (red);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
64 ASSERT_EQ (false, s.contains (red));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
65 ASSERT_EQ (true, s.contains (green));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
66 ASSERT_EQ (true, s.contains (blue));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
67 ASSERT_EQ (2, s.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
68
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
69 s.remove (red);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
70 ASSERT_EQ (false, s.contains (red));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
71 ASSERT_EQ (true, s.contains (green));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
72 ASSERT_EQ (true, s.contains (blue));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
73 ASSERT_EQ (2, s.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
74
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
75 int seen = 0;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
76 for (hash_set<const char *>::iterator it = s.begin (); it != s.end (); ++it)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
77 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
78 int n = *it == green;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
79 if (n == 0)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
80 ASSERT_EQ (*it, blue);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
81 ASSERT_EQ (seen & (1 << n), 0);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
82 seen |= 1 << n;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
83 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
84 ASSERT_EQ (seen, 3);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
85
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
86 hash_set <const char *, true> t;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
87 ASSERT_EQ (0, t.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
88
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
89 ASSERT_EQ (false, t.contains (red));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
90
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
91 for (hash_set<const char *, true>::iterator it = t.begin ();
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
92 it != t.end (); ++it)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
93 ASSERT_EQ (true, false);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
94
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
95 /* Populate the hash_set. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
96 ASSERT_EQ (false, t.add (red));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
97 ASSERT_EQ (false, t.add (green));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
98 ASSERT_EQ (false, t.add (blue));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
99 ASSERT_EQ (true, t.add (green));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
100
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
101 /* Verify that the values are now within the set. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
102 ASSERT_EQ (true, t.contains (red));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
103 ASSERT_EQ (true, t.contains (green));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
104 ASSERT_EQ (true, t.contains (blue));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
105 ASSERT_EQ (3, t.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
106
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
107 seen = 0;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
108 for (hash_set<const char *, true>::iterator it = t.begin ();
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
109 it != t.end (); ++it)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
110 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
111 int n = 2;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
112 if (*it == green)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
113 n = 0;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
114 else if (*it == blue)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
115 n = 1;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
116 else
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
117 ASSERT_EQ (*it, red);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
118 ASSERT_EQ (seen & (1 << n), 0);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
119 seen |= 1 << n;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
120 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
121 ASSERT_EQ (seen, 7);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
122
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
123 /* Test removal. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
124 t.remove (red);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
125 ASSERT_EQ (false, t.contains (red));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
126 ASSERT_EQ (true, t.contains (green));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
127 ASSERT_EQ (true, t.contains (blue));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
128 ASSERT_EQ (2, t.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
129
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
130 t.remove (red);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
131 ASSERT_EQ (false, t.contains (red));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
132 ASSERT_EQ (true, t.contains (green));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
133 ASSERT_EQ (true, t.contains (blue));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
134 ASSERT_EQ (2, t.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
135 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
136
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
137 typedef class hash_set_test_value_t
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
138 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
139 public:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
140 static int ndefault;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
141 static int ncopy;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
142 static int nassign;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
143 static int ndtor;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
144
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
145 hash_set_test_value_t (int v = 1): pval (&val), val (v)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
146 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
147 ++ndefault;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
148 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
149
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
150 hash_set_test_value_t (const hash_set_test_value_t &rhs)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
151 : pval (&val), val (rhs.val)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
152 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
153 ++ncopy;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
154 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
155
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
156 hash_set_test_value_t& operator= (const hash_set_test_value_t &rhs)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
157 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
158 ++nassign;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
159 val = rhs.val;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
160 return *this;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
161 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
162
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
163 ~hash_set_test_value_t ()
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
164 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
165 /* Verify that the value hasn't been corrupted. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
166 gcc_assert (*pval > 0);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
167 gcc_assert (pval == &val);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
168 *pval = -3;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
169 ++ndtor;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
170 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
171
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
172 int *pval;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
173 int val;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
174 } val_t;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
175
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
176 int val_t::ndefault;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
177 int val_t::ncopy;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
178 int val_t::nassign;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
179 int val_t::ndtor;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
180
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
181 struct value_hash_traits: int_hash<int, -1, -2>
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
182 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
183 typedef int_hash<int, -1, -2> base_type;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
184 typedef val_t value_type;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
185 typedef value_type compare_type;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
186
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
187 static hashval_t hash (const value_type &v)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
188 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
189 return base_type::hash (v.val);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
190 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
191
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
192 static bool equal (const value_type &a, const compare_type &b)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
193 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
194 return base_type::equal (a.val, b.val);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
195 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
196
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
197 static void mark_deleted (value_type &v)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
198 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
199 base_type::mark_deleted (v.val);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
200 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
201
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
202 static const bool empty_zero_p = false;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
203
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
204 static void mark_empty (value_type &v)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
205 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
206 base_type::mark_empty (v.val);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
207 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
208
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
209 static bool is_deleted (const value_type &v)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
210 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
211 return base_type::is_deleted (v.val);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
212 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
213
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
214 static bool is_empty (const value_type &v)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
215 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
216 return base_type::is_empty (v.val);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
217 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
218
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
219 static void remove (value_type &v)
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
220 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
221 v.~value_type ();
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
222 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
223 };
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
224
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
225 static void
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
226 test_set_of_type_with_ctor_and_dtor ()
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
227 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
228 typedef hash_set <val_t, false, value_hash_traits> Set;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
229
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
230 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
231 Set s;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
232 (void)&s;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
233 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
234
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
235 ASSERT_TRUE (val_t::ndefault == 0);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
236 ASSERT_TRUE (val_t::ncopy == 0);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
237 ASSERT_TRUE (val_t::nassign == 0);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
238 ASSERT_TRUE (val_t::ndtor == 0);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
239
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
240 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
241 Set s;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
242 ASSERT_EQ (false, s.add (val_t ()));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
243 ASSERT_EQ (true, 1 == s.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
244 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
245
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
246 ASSERT_TRUE (val_t::ndefault + val_t::ncopy == val_t::ndtor);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
247
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
248 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
249 Set s;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
250 ASSERT_EQ (false, s.add (val_t ()));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
251 ASSERT_EQ (true, s.add (val_t ()));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
252 ASSERT_EQ (true, 1 == s.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
253 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
254
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
255 ASSERT_TRUE (val_t::ndefault + val_t::ncopy == val_t::ndtor);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
256
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
257 {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
258 Set s;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
259 val_t v1 (1), v2 (2), v3 (3);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
260 int ndefault = val_t::ndefault;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
261 int nassign = val_t::nassign;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
262
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
263 ASSERT_EQ (false, s.add (v1));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
264 ASSERT_EQ (true, s.contains (v1));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
265 ASSERT_EQ (true, 1 == s.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
266
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
267 ASSERT_EQ (false, s.add (v2));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
268 ASSERT_EQ (true, s.contains (v2));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
269 ASSERT_EQ (true, 2 == s.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
270
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
271 ASSERT_EQ (false, s.add (v3));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
272 ASSERT_EQ (true, s.contains (v3));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
273 ASSERT_EQ (true, 3 == s.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
274
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
275 ASSERT_EQ (true, s.add (v2));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
276 ASSERT_EQ (true, s.contains (v2));
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
277 ASSERT_EQ (true, 3 == s.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
278
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
279 s.remove (v2);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
280 ASSERT_EQ (true, 2 == s.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
281 s.remove (v3);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
282 ASSERT_EQ (true, 1 == s.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
283
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
284 /* Verify that no default ctors or assignment operators have
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
285 been called. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
286 ASSERT_EQ (true, ndefault == val_t::ndefault);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
287 ASSERT_EQ (true, nassign == val_t::nassign);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
288 }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
289
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
290 ASSERT_TRUE (val_t::ndefault + val_t::ncopy == val_t::ndtor);
111
kono
parents:
diff changeset
291 }
kono
parents:
diff changeset
292
kono
parents:
diff changeset
293 /* Run all of the selftests within this file. */
kono
parents:
diff changeset
294
kono
parents:
diff changeset
295 void
kono
parents:
diff changeset
296 hash_set_tests_c_tests ()
kono
parents:
diff changeset
297 {
kono
parents:
diff changeset
298 test_set_of_strings ();
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
299 test_set_of_type_with_ctor_and_dtor ();
111
kono
parents:
diff changeset
300 }
kono
parents:
diff changeset
301
kono
parents:
diff changeset
302 } // namespace selftest
kono
parents:
diff changeset
303
kono
parents:
diff changeset
304 #endif /* #if CHECKING_P */