]>
git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/opentelemetry-cpp/third_party/nlohmann-json/test/src/unit-class_iterator.cpp
3 __| | __| | | | JSON for Modern C++ (test suite)
4 | | |__ | | | | | | version 3.10.5
5 |_____|_____|_____|_|___| https://github.com/nlohmann/json
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>.
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:
18 The above copyright notice and this permission notice shall be included in all
19 copies or substantial portions of the Software.
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
30 #include "doctest_compatibility.h"
32 #define JSON_TESTS_PRIVATE
33 #include <nlohmann/json.hpp>
36 TEST_CASE("iterator class")
38 SECTION("construction")
40 SECTION("constructor")
44 json
j(json::value_t::null
);
45 json::iterator
it(&j
);
50 json
j(json::value_t::object
);
51 json::iterator
it(&j
);
56 json
j(json::value_t::array
);
57 json::iterator
it(&j
);
61 SECTION("copy assignment")
63 json
j(json::value_t::null
);
64 json::iterator
it(&j
);
65 json::iterator
it2(&j
);
70 SECTION("initialization")
76 json
j(json::value_t::null
);
77 json::iterator
it(&j
);
79 CHECK((it
== j
.begin()));
84 json
j(json::value_t::object
);
85 json::iterator
it(&j
);
87 CHECK((it
== j
.begin()));
92 json
j(json::value_t::array
);
93 json::iterator
it(&j
);
95 CHECK((it
== j
.begin()));
103 json
j(json::value_t::null
);
104 json::iterator
it(&j
);
106 CHECK((it
== j
.end()));
111 json
j(json::value_t::object
);
112 json::iterator
it(&j
);
114 CHECK((it
== j
.end()));
119 json
j(json::value_t::array
);
120 json::iterator
it(&j
);
122 CHECK((it
== j
.end()));
127 SECTION("element access")
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");
142 json::iterator it
= j
.begin();
143 CHECK(*it
== json(17));
145 CHECK_THROWS_AS(*it
, json::invalid_iterator
&);
146 CHECK_THROWS_WITH(*it
, "[json.exception.invalid_iterator.214] cannot get value");
151 json
j({{"foo", "bar"}});
152 json::iterator it
= j
.begin();
153 CHECK(*it
== json("bar"));
158 json
j({1, 2, 3, 4});
159 json::iterator it
= j
.begin();
160 CHECK(*it
== json(1));
164 SECTION("operator->")
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");
177 json::iterator it
= j
.begin();
178 CHECK(std::string(it
->type_name()) == "number");
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");
186 json
j({{"foo", "bar"}});
187 json::iterator it
= j
.begin();
188 CHECK(std::string(it
->type_name()) == "string");
193 json
j({1, 2, 3, 4});
194 json::iterator it
= j
.begin();
195 CHECK(std::string(it
->type_name()) == "number");
200 SECTION("increment/decrement")
202 SECTION("post-increment")
206 json
j(json::value_t::null
);
207 json::iterator it
= j
.begin();
208 CHECK((it
.m_it
.primitive_iterator
.m_it
== 1));
210 CHECK((it
.m_it
.primitive_iterator
.m_it
!= 0 && it
.m_it
.primitive_iterator
.m_it
!= 1));
216 json::iterator it
= j
.begin();
217 CHECK((it
.m_it
.primitive_iterator
.m_it
== 0));
219 CHECK((it
.m_it
.primitive_iterator
.m_it
== 1));
221 CHECK((it
.m_it
.primitive_iterator
.m_it
!= 0 && it
.m_it
.primitive_iterator
.m_it
!= 1));
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()));
230 CHECK((it
.m_it
.object_iterator
== it
.m_object
->m_value
.object
->end()));
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()));
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()));
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()));
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()));
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()));
253 SECTION("pre-increment")
257 json
j(json::value_t::null
);
258 json::iterator it
= j
.begin();
259 CHECK((it
.m_it
.primitive_iterator
.m_it
== 1));
261 CHECK((it
.m_it
.primitive_iterator
.m_it
!= 0 && it
.m_it
.primitive_iterator
.m_it
!= 1));
267 json::iterator it
= j
.begin();
268 CHECK((it
.m_it
.primitive_iterator
.m_it
== 0));
270 CHECK((it
.m_it
.primitive_iterator
.m_it
== 1));
272 CHECK((it
.m_it
.primitive_iterator
.m_it
!= 0 && it
.m_it
.primitive_iterator
.m_it
!= 1));
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()));
281 CHECK((it
.m_it
.object_iterator
== it
.m_object
->m_value
.object
->end()));
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()));
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()));
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()));
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()));
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()));
304 SECTION("post-decrement")
308 json
j(json::value_t::null
);
309 json::iterator it
= j
.end();
310 CHECK((it
.m_it
.primitive_iterator
.m_it
== 1));
316 json::iterator it
= j
.end();
317 CHECK((it
.m_it
.primitive_iterator
.m_it
== 1));
319 CHECK((it
.m_it
.primitive_iterator
.m_it
== 0));
321 CHECK((it
.m_it
.primitive_iterator
.m_it
!= 0 && it
.m_it
.primitive_iterator
.m_it
!= 1));
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()));
330 CHECK((it
.m_it
.object_iterator
== it
.m_object
->m_value
.object
->begin()));
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()));
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()));
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()));
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()));
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()));
353 SECTION("pre-decrement")
357 json
j(json::value_t::null
);
358 json::iterator it
= j
.end();
359 CHECK((it
.m_it
.primitive_iterator
.m_it
== 1));
365 json::iterator it
= j
.end();
366 CHECK((it
.m_it
.primitive_iterator
.m_it
== 1));
368 CHECK((it
.m_it
.primitive_iterator
.m_it
== 0));
370 CHECK((it
.m_it
.primitive_iterator
.m_it
!= 0 && it
.m_it
.primitive_iterator
.m_it
!= 1));
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()));
379 CHECK((it
.m_it
.object_iterator
== it
.m_object
->m_value
.object
->begin()));
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()));
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()));
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()));
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()));
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()));