]> git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/opentelemetry-cpp/third_party/nlohmann-json/test/src/unit-class_iterator.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / third_party / nlohmann-json / test / src / unit-class_iterator.cpp
1 /*
2 __ _____ _____ _____
3 __| | __| | | | JSON for Modern C++ (test suite)
4 | | |__ | | | | | | version 3.10.5
5 |_____|_____|_____|_|___| https://github.com/nlohmann/json
6
7 Licensed under the MIT License <http://opensource.org/licenses/MIT>.
8 SPDX-License-Identifier: MIT
9 Copyright (c) 2013-2022 Niels Lohmann <http://nlohmann.me>.
10
11 Permission is hereby granted, free of charge, to any person obtaining a copy
12 of this software and associated documentation files (the "Software"), to deal
13 in the Software without restriction, including without limitation the rights
14 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15 copies of the Software, and to permit persons to whom the Software is
16 furnished to do so, subject to the following conditions:
17
18 The above copyright notice and this permission notice shall be included in all
19 copies or substantial portions of the Software.
20
21 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27 SOFTWARE.
28 */
29
30 #include "doctest_compatibility.h"
31
32 #define JSON_TESTS_PRIVATE
33 #include <nlohmann/json.hpp>
34 using nlohmann::json;
35
36 TEST_CASE("iterator class")
37 {
38 SECTION("construction")
39 {
40 SECTION("constructor")
41 {
42 SECTION("null")
43 {
44 json j(json::value_t::null);
45 json::iterator it(&j);
46 }
47
48 SECTION("object")
49 {
50 json j(json::value_t::object);
51 json::iterator it(&j);
52 }
53
54 SECTION("array")
55 {
56 json j(json::value_t::array);
57 json::iterator it(&j);
58 }
59 }
60
61 SECTION("copy assignment")
62 {
63 json j(json::value_t::null);
64 json::iterator it(&j);
65 json::iterator it2(&j);
66 it2 = it;
67 }
68 }
69
70 SECTION("initialization")
71 {
72 SECTION("set_begin")
73 {
74 SECTION("null")
75 {
76 json j(json::value_t::null);
77 json::iterator it(&j);
78 it.set_begin();
79 CHECK((it == j.begin()));
80 }
81
82 SECTION("object")
83 {
84 json j(json::value_t::object);
85 json::iterator it(&j);
86 it.set_begin();
87 CHECK((it == j.begin()));
88 }
89
90 SECTION("array")
91 {
92 json j(json::value_t::array);
93 json::iterator it(&j);
94 it.set_begin();
95 CHECK((it == j.begin()));
96 }
97 }
98
99 SECTION("set_end")
100 {
101 SECTION("null")
102 {
103 json j(json::value_t::null);
104 json::iterator it(&j);
105 it.set_end();
106 CHECK((it == j.end()));
107 }
108
109 SECTION("object")
110 {
111 json j(json::value_t::object);
112 json::iterator it(&j);
113 it.set_end();
114 CHECK((it == j.end()));
115 }
116
117 SECTION("array")
118 {
119 json j(json::value_t::array);
120 json::iterator it(&j);
121 it.set_end();
122 CHECK((it == j.end()));
123 }
124 }
125 }
126
127 SECTION("element access")
128 {
129 SECTION("operator*")
130 {
131 SECTION("null")
132 {
133 json j(json::value_t::null);
134 json::iterator it = j.begin();
135 CHECK_THROWS_AS(*it, json::invalid_iterator&);
136 CHECK_THROWS_WITH(*it, "[json.exception.invalid_iterator.214] cannot get value");
137 }
138
139 SECTION("number")
140 {
141 json j(17);
142 json::iterator it = j.begin();
143 CHECK(*it == json(17));
144 it = j.end();
145 CHECK_THROWS_AS(*it, json::invalid_iterator&);
146 CHECK_THROWS_WITH(*it, "[json.exception.invalid_iterator.214] cannot get value");
147 }
148
149 SECTION("object")
150 {
151 json j({{"foo", "bar"}});
152 json::iterator it = j.begin();
153 CHECK(*it == json("bar"));
154 }
155
156 SECTION("array")
157 {
158 json j({1, 2, 3, 4});
159 json::iterator it = j.begin();
160 CHECK(*it == json(1));
161 }
162 }
163
164 SECTION("operator->")
165 {
166 SECTION("null")
167 {
168 json j(json::value_t::null);
169 json::iterator it = j.begin();
170 CHECK_THROWS_AS(std::string(it->type_name()), json::invalid_iterator&);
171 CHECK_THROWS_WITH(std::string(it->type_name()), "[json.exception.invalid_iterator.214] cannot get value");
172 }
173
174 SECTION("number")
175 {
176 json j(17);
177 json::iterator it = j.begin();
178 CHECK(std::string(it->type_name()) == "number");
179 it = j.end();
180 CHECK_THROWS_AS(std::string(it->type_name()), json::invalid_iterator&);
181 CHECK_THROWS_WITH(std::string(it->type_name()), "[json.exception.invalid_iterator.214] cannot get value");
182 }
183
184 SECTION("object")
185 {
186 json j({{"foo", "bar"}});
187 json::iterator it = j.begin();
188 CHECK(std::string(it->type_name()) == "string");
189 }
190
191 SECTION("array")
192 {
193 json j({1, 2, 3, 4});
194 json::iterator it = j.begin();
195 CHECK(std::string(it->type_name()) == "number");
196 }
197 }
198 }
199
200 SECTION("increment/decrement")
201 {
202 SECTION("post-increment")
203 {
204 SECTION("null")
205 {
206 json j(json::value_t::null);
207 json::iterator it = j.begin();
208 CHECK((it.m_it.primitive_iterator.m_it == 1));
209 it++;
210 CHECK((it.m_it.primitive_iterator.m_it != 0 && it.m_it.primitive_iterator.m_it != 1));
211 }
212
213 SECTION("number")
214 {
215 json j(17);
216 json::iterator it = j.begin();
217 CHECK((it.m_it.primitive_iterator.m_it == 0));
218 it++;
219 CHECK((it.m_it.primitive_iterator.m_it == 1));
220 it++;
221 CHECK((it.m_it.primitive_iterator.m_it != 0 && it.m_it.primitive_iterator.m_it != 1));
222 }
223
224 SECTION("object")
225 {
226 json j({{"foo", "bar"}});
227 json::iterator it = j.begin();
228 CHECK((it.m_it.object_iterator == it.m_object->m_value.object->begin()));
229 it++;
230 CHECK((it.m_it.object_iterator == it.m_object->m_value.object->end()));
231 }
232
233 SECTION("array")
234 {
235 json j({1, 2, 3, 4});
236 json::iterator it = j.begin();
237 CHECK((it.m_it.array_iterator == it.m_object->m_value.array->begin()));
238 it++;
239 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->begin()));
240 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->end()));
241 it++;
242 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->begin()));
243 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->end()));
244 it++;
245 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->begin()));
246 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->end()));
247 it++;
248 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->begin()));
249 CHECK((it.m_it.array_iterator == it.m_object->m_value.array->end()));
250 }
251 }
252
253 SECTION("pre-increment")
254 {
255 SECTION("null")
256 {
257 json j(json::value_t::null);
258 json::iterator it = j.begin();
259 CHECK((it.m_it.primitive_iterator.m_it == 1));
260 ++it;
261 CHECK((it.m_it.primitive_iterator.m_it != 0 && it.m_it.primitive_iterator.m_it != 1));
262 }
263
264 SECTION("number")
265 {
266 json j(17);
267 json::iterator it = j.begin();
268 CHECK((it.m_it.primitive_iterator.m_it == 0));
269 ++it;
270 CHECK((it.m_it.primitive_iterator.m_it == 1));
271 ++it;
272 CHECK((it.m_it.primitive_iterator.m_it != 0 && it.m_it.primitive_iterator.m_it != 1));
273 }
274
275 SECTION("object")
276 {
277 json j({{"foo", "bar"}});
278 json::iterator it = j.begin();
279 CHECK((it.m_it.object_iterator == it.m_object->m_value.object->begin()));
280 ++it;
281 CHECK((it.m_it.object_iterator == it.m_object->m_value.object->end()));
282 }
283
284 SECTION("array")
285 {
286 json j({1, 2, 3, 4});
287 json::iterator it = j.begin();
288 CHECK((it.m_it.array_iterator == it.m_object->m_value.array->begin()));
289 ++it;
290 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->begin()));
291 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->end()));
292 ++it;
293 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->begin()));
294 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->end()));
295 ++it;
296 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->begin()));
297 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->end()));
298 ++it;
299 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->begin()));
300 CHECK((it.m_it.array_iterator == it.m_object->m_value.array->end()));
301 }
302 }
303
304 SECTION("post-decrement")
305 {
306 SECTION("null")
307 {
308 json j(json::value_t::null);
309 json::iterator it = j.end();
310 CHECK((it.m_it.primitive_iterator.m_it == 1));
311 }
312
313 SECTION("number")
314 {
315 json j(17);
316 json::iterator it = j.end();
317 CHECK((it.m_it.primitive_iterator.m_it == 1));
318 it--;
319 CHECK((it.m_it.primitive_iterator.m_it == 0));
320 it--;
321 CHECK((it.m_it.primitive_iterator.m_it != 0 && it.m_it.primitive_iterator.m_it != 1));
322 }
323
324 SECTION("object")
325 {
326 json j({{"foo", "bar"}});
327 json::iterator it = j.end();
328 CHECK((it.m_it.object_iterator == it.m_object->m_value.object->end()));
329 it--;
330 CHECK((it.m_it.object_iterator == it.m_object->m_value.object->begin()));
331 }
332
333 SECTION("array")
334 {
335 json j({1, 2, 3, 4});
336 json::iterator it = j.end();
337 CHECK((it.m_it.array_iterator == it.m_object->m_value.array->end()));
338 it--;
339 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->begin()));
340 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->end()));
341 it--;
342 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->begin()));
343 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->end()));
344 it--;
345 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->begin()));
346 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->end()));
347 it--;
348 CHECK((it.m_it.array_iterator == it.m_object->m_value.array->begin()));
349 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->end()));
350 }
351 }
352
353 SECTION("pre-decrement")
354 {
355 SECTION("null")
356 {
357 json j(json::value_t::null);
358 json::iterator it = j.end();
359 CHECK((it.m_it.primitive_iterator.m_it == 1));
360 }
361
362 SECTION("number")
363 {
364 json j(17);
365 json::iterator it = j.end();
366 CHECK((it.m_it.primitive_iterator.m_it == 1));
367 --it;
368 CHECK((it.m_it.primitive_iterator.m_it == 0));
369 --it;
370 CHECK((it.m_it.primitive_iterator.m_it != 0 && it.m_it.primitive_iterator.m_it != 1));
371 }
372
373 SECTION("object")
374 {
375 json j({{"foo", "bar"}});
376 json::iterator it = j.end();
377 CHECK((it.m_it.object_iterator == it.m_object->m_value.object->end()));
378 --it;
379 CHECK((it.m_it.object_iterator == it.m_object->m_value.object->begin()));
380 }
381
382 SECTION("array")
383 {
384 json j({1, 2, 3, 4});
385 json::iterator it = j.end();
386 CHECK((it.m_it.array_iterator == it.m_object->m_value.array->end()));
387 --it;
388 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->begin()));
389 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->end()));
390 --it;
391 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->begin()));
392 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->end()));
393 --it;
394 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->begin()));
395 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->end()));
396 --it;
397 CHECK((it.m_it.array_iterator == it.m_object->m_value.array->begin()));
398 CHECK((it.m_it.array_iterator != it.m_object->m_value.array->end()));
399 }
400 }
401 }
402 }