annotate gcc/ordered-hash-map-tests.cc @ 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
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 /* Unit tests for ordered-hash-map.h.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 Copyright (C) 2015-2020 Free Software Foundation, Inc.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 This file is part of GCC.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 GCC is free software; you can redistribute it and/or modify it under
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 the terms of the GNU General Public License as published by the Free
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 Software Foundation; either version 3, or (at your option) any later
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 version.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 for more details.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 along with GCC; see the file COPYING3. If not see
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 <http://www.gnu.org/licenses/>. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 #include "config.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 #include "system.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 #include "coretypes.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 #include "tm.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 #include "opts.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 #include "hash-set.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 #include "fixed-value.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 #include "alias.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 #include "flags.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29 #include "symtab.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 #include "tree-core.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 #include "stor-layout.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 #include "tree.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 #include "stringpool.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 #include "ordered-hash-map.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 #include "selftest.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 #if CHECKING_P
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 namespace selftest {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 /* Populate *OUT_KVS with the key/value pairs of M. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 template <typename HashMap, typename Key, typename Value>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 static void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 get_kv_pairs (const HashMap &m,
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 auto_vec<std::pair<Key, Value> > *out_kvs)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48 for (typename HashMap::iterator iter = m.begin ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 iter != m.end ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50 ++iter)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 out_kvs->safe_push (std::make_pair ((*iter).first, (*iter).second));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 /* Construct an ordered_hash_map <const char *, int> and verify that
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 various operations work correctly. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 static void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 test_map_of_strings_to_int ()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 ordered_hash_map <const char *, int> m;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 const char *ostrich = "ostrich";
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 const char *elephant = "elephant";
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 const char *ant = "ant";
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 const char *spider = "spider";
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 const char *millipede = "Illacme plenipes";
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67 const char *eric = "half a bee";
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69 /* A fresh hash_map should be empty. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70 ASSERT_EQ (0, m.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 ASSERT_EQ (NULL, m.get (ostrich));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73 /* Populate the hash_map. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 ASSERT_EQ (false, m.put (ostrich, 2));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75 ASSERT_EQ (false, m.put (elephant, 4));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
76 ASSERT_EQ (false, m.put (ant, 6));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
77 ASSERT_EQ (false, m.put (spider, 8));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
78 ASSERT_EQ (false, m.put (millipede, 750));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
79 ASSERT_EQ (false, m.put (eric, 3));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
80
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
81 /* Verify that we can recover the stored values. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
82 ASSERT_EQ (6, m.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
83 ASSERT_EQ (2, *m.get (ostrich));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
84 ASSERT_EQ (4, *m.get (elephant));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
85 ASSERT_EQ (6, *m.get (ant));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
86 ASSERT_EQ (8, *m.get (spider));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
87 ASSERT_EQ (750, *m.get (millipede));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
88 ASSERT_EQ (3, *m.get (eric));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
89
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
90 /* Verify that the order of insertion is preserved. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
91 auto_vec<std::pair<const char *, int> > kvs;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
92 get_kv_pairs (m, &kvs);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
93 ASSERT_EQ (kvs.length (), 6);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
94 ASSERT_EQ (kvs[0].first, ostrich);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
95 ASSERT_EQ (kvs[0].second, 2);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
96 ASSERT_EQ (kvs[1].first, elephant);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
97 ASSERT_EQ (kvs[1].second, 4);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
98 ASSERT_EQ (kvs[2].first, ant);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
99 ASSERT_EQ (kvs[2].second, 6);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
100 ASSERT_EQ (kvs[3].first, spider);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
101 ASSERT_EQ (kvs[3].second, 8);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
102 ASSERT_EQ (kvs[4].first, millipede);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
103 ASSERT_EQ (kvs[4].second, 750);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
104 ASSERT_EQ (kvs[5].first, eric);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
105 ASSERT_EQ (kvs[5].second, 3);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
106 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
107
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
108 /* Construct an ordered_hash_map using int_hash and verify that various
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
109 operations work correctly. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
110
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
111 static void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
112 test_map_of_int_to_strings ()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
113 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
114 const int EMPTY = -1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
115 const int DELETED = -2;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
116 typedef int_hash <int, EMPTY, DELETED> int_hash_t;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
117 ordered_hash_map <int_hash_t, const char *> m;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
118
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
119 const char *ostrich = "ostrich";
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
120 const char *elephant = "elephant";
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
121 const char *ant = "ant";
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
122 const char *spider = "spider";
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
123 const char *millipede = "Illacme plenipes";
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
124 const char *eric = "half a bee";
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
125
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
126 /* A fresh hash_map should be empty. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
127 ASSERT_EQ (0, m.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
128 ASSERT_EQ (NULL, m.get (2));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
129
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
130 /* Populate the hash_map. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
131 ASSERT_EQ (false, m.put (2, ostrich));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
132 ASSERT_EQ (false, m.put (4, elephant));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
133 ASSERT_EQ (false, m.put (6, ant));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
134 ASSERT_EQ (false, m.put (8, spider));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
135 ASSERT_EQ (false, m.put (750, millipede));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
136 ASSERT_EQ (false, m.put (3, eric));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
137
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
138 /* Verify that we can recover the stored values. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
139 ASSERT_EQ (6, m.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
140 ASSERT_EQ (*m.get (2), ostrich);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
141 ASSERT_EQ (*m.get (4), elephant);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
142 ASSERT_EQ (*m.get (6), ant);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
143 ASSERT_EQ (*m.get (8), spider);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
144 ASSERT_EQ (*m.get (750), millipede);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
145 ASSERT_EQ (*m.get (3), eric);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
146
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
147 /* Verify that the order of insertion is preserved. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
148 auto_vec<std::pair<int, const char *> > kvs;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
149 get_kv_pairs (m, &kvs);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
150 ASSERT_EQ (kvs.length (), 6);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
151 ASSERT_EQ (kvs[0].first, 2);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
152 ASSERT_EQ (kvs[0].second, ostrich);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
153 ASSERT_EQ (kvs[1].first, 4);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
154 ASSERT_EQ (kvs[1].second, elephant);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
155 ASSERT_EQ (kvs[2].first, 6);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
156 ASSERT_EQ (kvs[2].second, ant);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
157 ASSERT_EQ (kvs[3].first, 8);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
158 ASSERT_EQ (kvs[3].second, spider);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
159 ASSERT_EQ (kvs[4].first, 750);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
160 ASSERT_EQ (kvs[4].second, millipede);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
161 ASSERT_EQ (kvs[5].first, 3);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
162 ASSERT_EQ (kvs[5].second, eric);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
163 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
164
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
165 /* Verify that we can remove items from an ordered_hash_map. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
166
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
167 static void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
168 test_removal ()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
169 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
170 ordered_hash_map <const char *, int> m;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
171
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
172 const char *ostrich = "ostrich";
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
173 ASSERT_EQ (false, m.put (ostrich, 2));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
174
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
175 ASSERT_EQ (1, m.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
176 ASSERT_EQ (2, *m.get (ostrich));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
177
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
178 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
179 auto_vec<std::pair<const char *, int> > kvs;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
180 get_kv_pairs (m, &kvs);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
181 ASSERT_EQ (kvs.length (), 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
182 ASSERT_EQ (kvs[0].first, ostrich);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
183 ASSERT_EQ (kvs[0].second, 2);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
184 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
185
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
186 m.remove (ostrich);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
187
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
188 ASSERT_EQ (0, m.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
189 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
190 auto_vec<std::pair<const char *, int> > kvs;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
191 get_kv_pairs (m, &kvs);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
192 ASSERT_EQ (kvs.length (), 0);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
193 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
194
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
195 /* Reinsertion (with a different value). */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
196 ASSERT_EQ (false, m.put (ostrich, 42));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
197 ASSERT_EQ (1, m.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
198 ASSERT_EQ (42, *m.get (ostrich));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
199 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
200 auto_vec<std::pair<const char *, int> > kvs;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
201 get_kv_pairs (m, &kvs);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
202 ASSERT_EQ (kvs.length (), 1);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
203 ASSERT_EQ (kvs[0].first, ostrich);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
204 ASSERT_EQ (kvs[0].second, 42);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
205 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
206 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
207
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
208 /* Verify that ordered_hash_map's copy-ctor works. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
209
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
210 static void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
211 test_copy_ctor ()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
212 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
213 ordered_hash_map <const char *, int> m;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
214
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
215 const char *ostrich = "ostrich";
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
216 ASSERT_EQ (false, m.put (ostrich, 2));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
217
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
218 ASSERT_EQ (1, m.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
219 ASSERT_EQ (2, *m.get (ostrich));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
220
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
221 ordered_hash_map <const char *, int> copy (m);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
222 ASSERT_EQ (1, copy.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
223 ASSERT_EQ (2, *copy.get (ostrich));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
224
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
225 /* Remove from source. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
226 m.remove (ostrich);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
227 ASSERT_EQ (0, m.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
228
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
229 /* Copy should be unaffected. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
230 ASSERT_EQ (1, copy.elements ());
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
231 ASSERT_EQ (2, *copy.get (ostrich));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
232 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
233
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
234 /* Run all of the selftests within this file. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
235
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
236 void
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
237 ordered_hash_map_tests_cc_tests ()
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
238 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
239 test_map_of_strings_to_int ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
240 test_map_of_int_to_strings ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
241 test_removal ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
242 test_copy_ctor ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
243 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
244
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
245 } // namespace selftest
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
246
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
247 #endif /* CHECKING_P */