1c5f01b2fSopenharmony_ci//     __ _____ _____ _____
2c5f01b2fSopenharmony_ci//  __|  |   __|     |   | |  JSON for Modern C++ (supporting code)
3c5f01b2fSopenharmony_ci// |  |  |__   |  |  | | | |  version 3.11.2
4c5f01b2fSopenharmony_ci// |_____|_____|_____|_|___|  https://github.com/nlohmann/json
5c5f01b2fSopenharmony_ci//
6c5f01b2fSopenharmony_ci// Copyright (c) 2013-2022 Niels Lohmann <http://nlohmann.me>.
7c5f01b2fSopenharmony_ci// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me>
8c5f01b2fSopenharmony_ci// SPDX-License-Identifier: MIT
9c5f01b2fSopenharmony_ci
10c5f01b2fSopenharmony_ci#include "doctest_compatibility.h"
11c5f01b2fSopenharmony_ci
12c5f01b2fSopenharmony_ci#include <nlohmann/json.hpp>
13c5f01b2fSopenharmony_ciusing nlohmann::json;
14c5f01b2fSopenharmony_ci
15c5f01b2fSopenharmony_ciTEST_CASE("capacity")
16c5f01b2fSopenharmony_ci{
17c5f01b2fSopenharmony_ci    SECTION("empty()")
18c5f01b2fSopenharmony_ci    {
19c5f01b2fSopenharmony_ci        SECTION("boolean")
20c5f01b2fSopenharmony_ci        {
21c5f01b2fSopenharmony_ci            json j = true;
22c5f01b2fSopenharmony_ci            const json j_const(j);
23c5f01b2fSopenharmony_ci
24c5f01b2fSopenharmony_ci            SECTION("result of empty")
25c5f01b2fSopenharmony_ci            {
26c5f01b2fSopenharmony_ci                CHECK(j.empty() == false);
27c5f01b2fSopenharmony_ci                CHECK(j_const.empty() == false);
28c5f01b2fSopenharmony_ci            }
29c5f01b2fSopenharmony_ci
30c5f01b2fSopenharmony_ci            SECTION("definition of empty")
31c5f01b2fSopenharmony_ci            {
32c5f01b2fSopenharmony_ci                CHECK(j.empty() == (j.begin() == j.end()));
33c5f01b2fSopenharmony_ci                CHECK(j_const.empty() == (j_const.begin() == j_const.end()));
34c5f01b2fSopenharmony_ci            }
35c5f01b2fSopenharmony_ci        }
36c5f01b2fSopenharmony_ci
37c5f01b2fSopenharmony_ci        SECTION("string")
38c5f01b2fSopenharmony_ci        {
39c5f01b2fSopenharmony_ci            json j = "hello world";
40c5f01b2fSopenharmony_ci            const json j_const(j);
41c5f01b2fSopenharmony_ci
42c5f01b2fSopenharmony_ci            SECTION("result of empty")
43c5f01b2fSopenharmony_ci            {
44c5f01b2fSopenharmony_ci                CHECK(j.empty() == false);
45c5f01b2fSopenharmony_ci                CHECK(j_const.empty() == false);
46c5f01b2fSopenharmony_ci            }
47c5f01b2fSopenharmony_ci
48c5f01b2fSopenharmony_ci            SECTION("definition of empty")
49c5f01b2fSopenharmony_ci            {
50c5f01b2fSopenharmony_ci                CHECK(j.empty() == (j.begin() == j.end()));
51c5f01b2fSopenharmony_ci                CHECK(j_const.empty() == (j_const.begin() == j_const.end()));
52c5f01b2fSopenharmony_ci            }
53c5f01b2fSopenharmony_ci        }
54c5f01b2fSopenharmony_ci
55c5f01b2fSopenharmony_ci        SECTION("array")
56c5f01b2fSopenharmony_ci        {
57c5f01b2fSopenharmony_ci            SECTION("empty array")
58c5f01b2fSopenharmony_ci            {
59c5f01b2fSopenharmony_ci                json j = json::array();
60c5f01b2fSopenharmony_ci                const json j_const(j);
61c5f01b2fSopenharmony_ci
62c5f01b2fSopenharmony_ci                SECTION("result of empty")
63c5f01b2fSopenharmony_ci                {
64c5f01b2fSopenharmony_ci                    CHECK(j.empty() == true);
65c5f01b2fSopenharmony_ci                    CHECK(j_const.empty() == true);
66c5f01b2fSopenharmony_ci                }
67c5f01b2fSopenharmony_ci
68c5f01b2fSopenharmony_ci                SECTION("definition of empty")
69c5f01b2fSopenharmony_ci                {
70c5f01b2fSopenharmony_ci                    CHECK(j.empty() == (j.begin() == j.end()));
71c5f01b2fSopenharmony_ci                    CHECK(j_const.empty() == (j_const.begin() == j_const.end()));
72c5f01b2fSopenharmony_ci                }
73c5f01b2fSopenharmony_ci            }
74c5f01b2fSopenharmony_ci
75c5f01b2fSopenharmony_ci            SECTION("filled array")
76c5f01b2fSopenharmony_ci            {
77c5f01b2fSopenharmony_ci                json j = {1, 2, 3};
78c5f01b2fSopenharmony_ci                const json j_const(j);
79c5f01b2fSopenharmony_ci
80c5f01b2fSopenharmony_ci                SECTION("result of empty")
81c5f01b2fSopenharmony_ci                {
82c5f01b2fSopenharmony_ci                    CHECK(j.empty() == false);
83c5f01b2fSopenharmony_ci                    CHECK(j_const.empty() == false);
84c5f01b2fSopenharmony_ci                }
85c5f01b2fSopenharmony_ci
86c5f01b2fSopenharmony_ci                SECTION("definition of empty")
87c5f01b2fSopenharmony_ci                {
88c5f01b2fSopenharmony_ci                    CHECK(j.empty() == (j.begin() == j.end()));
89c5f01b2fSopenharmony_ci                    CHECK(j_const.empty() == (j_const.begin() == j_const.end()));
90c5f01b2fSopenharmony_ci                }
91c5f01b2fSopenharmony_ci            }
92c5f01b2fSopenharmony_ci        }
93c5f01b2fSopenharmony_ci
94c5f01b2fSopenharmony_ci        SECTION("object")
95c5f01b2fSopenharmony_ci        {
96c5f01b2fSopenharmony_ci            SECTION("empty object")
97c5f01b2fSopenharmony_ci            {
98c5f01b2fSopenharmony_ci                json j = json::object();
99c5f01b2fSopenharmony_ci                const json j_const(j);
100c5f01b2fSopenharmony_ci
101c5f01b2fSopenharmony_ci                SECTION("result of empty")
102c5f01b2fSopenharmony_ci                {
103c5f01b2fSopenharmony_ci                    CHECK(j.empty() == true);
104c5f01b2fSopenharmony_ci                    CHECK(j_const.empty() == true);
105c5f01b2fSopenharmony_ci                }
106c5f01b2fSopenharmony_ci
107c5f01b2fSopenharmony_ci                SECTION("definition of empty")
108c5f01b2fSopenharmony_ci                {
109c5f01b2fSopenharmony_ci                    CHECK(j.empty() == (j.begin() == j.end()));
110c5f01b2fSopenharmony_ci                    CHECK(j_const.empty() == (j_const.begin() == j_const.end()));
111c5f01b2fSopenharmony_ci                }
112c5f01b2fSopenharmony_ci            }
113c5f01b2fSopenharmony_ci
114c5f01b2fSopenharmony_ci            SECTION("filled object")
115c5f01b2fSopenharmony_ci            {
116c5f01b2fSopenharmony_ci                json j = {{"one", 1}, {"two", 2}, {"three", 3}};
117c5f01b2fSopenharmony_ci                const json j_const(j);
118c5f01b2fSopenharmony_ci
119c5f01b2fSopenharmony_ci                SECTION("result of empty")
120c5f01b2fSopenharmony_ci                {
121c5f01b2fSopenharmony_ci                    CHECK(j.empty() == false);
122c5f01b2fSopenharmony_ci                    CHECK(j_const.empty() == false);
123c5f01b2fSopenharmony_ci                }
124c5f01b2fSopenharmony_ci
125c5f01b2fSopenharmony_ci                SECTION("definition of empty")
126c5f01b2fSopenharmony_ci                {
127c5f01b2fSopenharmony_ci                    CHECK(j.empty() == (j.begin() == j.end()));
128c5f01b2fSopenharmony_ci                    CHECK(j_const.empty() == (j_const.begin() == j_const.end()));
129c5f01b2fSopenharmony_ci                }
130c5f01b2fSopenharmony_ci            }
131c5f01b2fSopenharmony_ci        }
132c5f01b2fSopenharmony_ci
133c5f01b2fSopenharmony_ci        SECTION("number (integer)")
134c5f01b2fSopenharmony_ci        {
135c5f01b2fSopenharmony_ci            json j = -23;
136c5f01b2fSopenharmony_ci            const json j_const(j);
137c5f01b2fSopenharmony_ci
138c5f01b2fSopenharmony_ci            SECTION("result of empty")
139c5f01b2fSopenharmony_ci            {
140c5f01b2fSopenharmony_ci                CHECK(j.empty() == false);
141c5f01b2fSopenharmony_ci                CHECK(j_const.empty() == false);
142c5f01b2fSopenharmony_ci            }
143c5f01b2fSopenharmony_ci
144c5f01b2fSopenharmony_ci            SECTION("definition of empty")
145c5f01b2fSopenharmony_ci            {
146c5f01b2fSopenharmony_ci                CHECK(j.empty() == (j.begin() == j.end()));
147c5f01b2fSopenharmony_ci                CHECK(j_const.empty() == (j_const.begin() == j_const.end()));
148c5f01b2fSopenharmony_ci            }
149c5f01b2fSopenharmony_ci        }
150c5f01b2fSopenharmony_ci
151c5f01b2fSopenharmony_ci        SECTION("number (unsigned)")
152c5f01b2fSopenharmony_ci        {
153c5f01b2fSopenharmony_ci            json j = 23u;
154c5f01b2fSopenharmony_ci            const json j_const(j);
155c5f01b2fSopenharmony_ci
156c5f01b2fSopenharmony_ci            SECTION("result of empty")
157c5f01b2fSopenharmony_ci            {
158c5f01b2fSopenharmony_ci                CHECK(j.empty() == false);
159c5f01b2fSopenharmony_ci                CHECK(j_const.empty() == false);
160c5f01b2fSopenharmony_ci            }
161c5f01b2fSopenharmony_ci
162c5f01b2fSopenharmony_ci            SECTION("definition of empty")
163c5f01b2fSopenharmony_ci            {
164c5f01b2fSopenharmony_ci                CHECK(j.empty() == (j.begin() == j.end()));
165c5f01b2fSopenharmony_ci                CHECK(j_const.empty() == (j_const.begin() == j_const.end()));
166c5f01b2fSopenharmony_ci            }
167c5f01b2fSopenharmony_ci        }
168c5f01b2fSopenharmony_ci
169c5f01b2fSopenharmony_ci        SECTION("number (float)")
170c5f01b2fSopenharmony_ci        {
171c5f01b2fSopenharmony_ci            json j = 23.42;
172c5f01b2fSopenharmony_ci            const json j_const(j);
173c5f01b2fSopenharmony_ci
174c5f01b2fSopenharmony_ci            SECTION("result of empty")
175c5f01b2fSopenharmony_ci            {
176c5f01b2fSopenharmony_ci                CHECK(j.empty() == false);
177c5f01b2fSopenharmony_ci                CHECK(j_const.empty() == false);
178c5f01b2fSopenharmony_ci            }
179c5f01b2fSopenharmony_ci
180c5f01b2fSopenharmony_ci            SECTION("definition of empty")
181c5f01b2fSopenharmony_ci            {
182c5f01b2fSopenharmony_ci                CHECK(j.empty() == (j.begin() == j.end()));
183c5f01b2fSopenharmony_ci                CHECK(j_const.empty() == (j_const.begin() == j_const.end()));
184c5f01b2fSopenharmony_ci            }
185c5f01b2fSopenharmony_ci        }
186c5f01b2fSopenharmony_ci
187c5f01b2fSopenharmony_ci        SECTION("null")
188c5f01b2fSopenharmony_ci        {
189c5f01b2fSopenharmony_ci            json j = nullptr;
190c5f01b2fSopenharmony_ci            const json j_const(j);
191c5f01b2fSopenharmony_ci
192c5f01b2fSopenharmony_ci            SECTION("result of empty")
193c5f01b2fSopenharmony_ci            {
194c5f01b2fSopenharmony_ci                CHECK(j.empty() == true);
195c5f01b2fSopenharmony_ci                CHECK(j_const.empty() == true);
196c5f01b2fSopenharmony_ci            }
197c5f01b2fSopenharmony_ci
198c5f01b2fSopenharmony_ci            SECTION("definition of empty")
199c5f01b2fSopenharmony_ci            {
200c5f01b2fSopenharmony_ci                CHECK(j.empty() == (j.begin() == j.end()));
201c5f01b2fSopenharmony_ci                CHECK(j_const.empty() == (j_const.begin() == j_const.end()));
202c5f01b2fSopenharmony_ci            }
203c5f01b2fSopenharmony_ci        }
204c5f01b2fSopenharmony_ci    }
205c5f01b2fSopenharmony_ci
206c5f01b2fSopenharmony_ci    SECTION("size()")
207c5f01b2fSopenharmony_ci    {
208c5f01b2fSopenharmony_ci        SECTION("boolean")
209c5f01b2fSopenharmony_ci        {
210c5f01b2fSopenharmony_ci            json j = true;
211c5f01b2fSopenharmony_ci            const json j_const(j);
212c5f01b2fSopenharmony_ci
213c5f01b2fSopenharmony_ci            SECTION("result of size")
214c5f01b2fSopenharmony_ci            {
215c5f01b2fSopenharmony_ci                CHECK(j.size() == 1);
216c5f01b2fSopenharmony_ci                CHECK(j_const.size() == 1);
217c5f01b2fSopenharmony_ci            }
218c5f01b2fSopenharmony_ci
219c5f01b2fSopenharmony_ci            SECTION("definition of size")
220c5f01b2fSopenharmony_ci            {
221c5f01b2fSopenharmony_ci                CHECK(std::distance(j.begin(), j.end()) == j.size());
222c5f01b2fSopenharmony_ci                CHECK(std::distance(j_const.begin(), j_const.end()) == j_const.size());
223c5f01b2fSopenharmony_ci                CHECK(std::distance(j.rbegin(), j.rend()) == j.size());
224c5f01b2fSopenharmony_ci                CHECK(std::distance(j_const.crbegin(), j_const.crend()) == j_const.size());
225c5f01b2fSopenharmony_ci            }
226c5f01b2fSopenharmony_ci        }
227c5f01b2fSopenharmony_ci
228c5f01b2fSopenharmony_ci        SECTION("string")
229c5f01b2fSopenharmony_ci        {
230c5f01b2fSopenharmony_ci            json j = "hello world";
231c5f01b2fSopenharmony_ci            const json j_const(j);
232c5f01b2fSopenharmony_ci
233c5f01b2fSopenharmony_ci            SECTION("result of size")
234c5f01b2fSopenharmony_ci            {
235c5f01b2fSopenharmony_ci                CHECK(j.size() == 1);
236c5f01b2fSopenharmony_ci                CHECK(j_const.size() == 1);
237c5f01b2fSopenharmony_ci            }
238c5f01b2fSopenharmony_ci
239c5f01b2fSopenharmony_ci            SECTION("definition of size")
240c5f01b2fSopenharmony_ci            {
241c5f01b2fSopenharmony_ci                CHECK(std::distance(j.begin(), j.end()) == j.size());
242c5f01b2fSopenharmony_ci                CHECK(std::distance(j_const.begin(), j_const.end()) == j_const.size());
243c5f01b2fSopenharmony_ci                CHECK(std::distance(j.rbegin(), j.rend()) == j.size());
244c5f01b2fSopenharmony_ci                CHECK(std::distance(j_const.crbegin(), j_const.crend()) == j_const.size());
245c5f01b2fSopenharmony_ci            }
246c5f01b2fSopenharmony_ci        }
247c5f01b2fSopenharmony_ci
248c5f01b2fSopenharmony_ci        SECTION("array")
249c5f01b2fSopenharmony_ci        {
250c5f01b2fSopenharmony_ci            SECTION("empty array")
251c5f01b2fSopenharmony_ci            {
252c5f01b2fSopenharmony_ci                json j = json::array();
253c5f01b2fSopenharmony_ci                const json j_const(j);
254c5f01b2fSopenharmony_ci
255c5f01b2fSopenharmony_ci                SECTION("result of size")
256c5f01b2fSopenharmony_ci                {
257c5f01b2fSopenharmony_ci                    CHECK(j.size() == 0);
258c5f01b2fSopenharmony_ci                    CHECK(j_const.size() == 0);
259c5f01b2fSopenharmony_ci                }
260c5f01b2fSopenharmony_ci
261c5f01b2fSopenharmony_ci                SECTION("definition of size")
262c5f01b2fSopenharmony_ci                {
263c5f01b2fSopenharmony_ci                    CHECK(std::distance(j.begin(), j.end()) == j.size());
264c5f01b2fSopenharmony_ci                    CHECK(std::distance(j_const.begin(), j_const.end()) == j_const.size());
265c5f01b2fSopenharmony_ci                    CHECK(std::distance(j.rbegin(), j.rend()) == j.size());
266c5f01b2fSopenharmony_ci                    CHECK(std::distance(j_const.crbegin(), j_const.crend()) == j_const.size());
267c5f01b2fSopenharmony_ci                }
268c5f01b2fSopenharmony_ci            }
269c5f01b2fSopenharmony_ci
270c5f01b2fSopenharmony_ci            SECTION("filled array")
271c5f01b2fSopenharmony_ci            {
272c5f01b2fSopenharmony_ci                json j = {1, 2, 3};
273c5f01b2fSopenharmony_ci                const json j_const(j);
274c5f01b2fSopenharmony_ci
275c5f01b2fSopenharmony_ci                SECTION("result of size")
276c5f01b2fSopenharmony_ci                {
277c5f01b2fSopenharmony_ci                    CHECK(j.size() == 3);
278c5f01b2fSopenharmony_ci                    CHECK(j_const.size() == 3);
279c5f01b2fSopenharmony_ci                }
280c5f01b2fSopenharmony_ci
281c5f01b2fSopenharmony_ci                SECTION("definition of size")
282c5f01b2fSopenharmony_ci                {
283c5f01b2fSopenharmony_ci                    CHECK(std::distance(j.begin(), j.end()) == j.size());
284c5f01b2fSopenharmony_ci                    CHECK(std::distance(j_const.begin(), j_const.end()) == j_const.size());
285c5f01b2fSopenharmony_ci                    CHECK(std::distance(j.rbegin(), j.rend()) == j.size());
286c5f01b2fSopenharmony_ci                    CHECK(std::distance(j_const.crbegin(), j_const.crend()) == j_const.size());
287c5f01b2fSopenharmony_ci                }
288c5f01b2fSopenharmony_ci            }
289c5f01b2fSopenharmony_ci        }
290c5f01b2fSopenharmony_ci
291c5f01b2fSopenharmony_ci        SECTION("object")
292c5f01b2fSopenharmony_ci        {
293c5f01b2fSopenharmony_ci            SECTION("empty object")
294c5f01b2fSopenharmony_ci            {
295c5f01b2fSopenharmony_ci                json j = json::object();
296c5f01b2fSopenharmony_ci                const json j_const(j);
297c5f01b2fSopenharmony_ci
298c5f01b2fSopenharmony_ci                SECTION("result of size")
299c5f01b2fSopenharmony_ci                {
300c5f01b2fSopenharmony_ci                    CHECK(j.size() == 0);
301c5f01b2fSopenharmony_ci                    CHECK(j_const.size() == 0);
302c5f01b2fSopenharmony_ci                }
303c5f01b2fSopenharmony_ci
304c5f01b2fSopenharmony_ci                SECTION("definition of size")
305c5f01b2fSopenharmony_ci                {
306c5f01b2fSopenharmony_ci                    CHECK(std::distance(j.begin(), j.end()) == j.size());
307c5f01b2fSopenharmony_ci                    CHECK(std::distance(j_const.begin(), j_const.end()) == j_const.size());
308c5f01b2fSopenharmony_ci                    CHECK(std::distance(j.rbegin(), j.rend()) == j.size());
309c5f01b2fSopenharmony_ci                    CHECK(std::distance(j_const.crbegin(), j_const.crend()) == j_const.size());
310c5f01b2fSopenharmony_ci                }
311c5f01b2fSopenharmony_ci            }
312c5f01b2fSopenharmony_ci
313c5f01b2fSopenharmony_ci            SECTION("filled object")
314c5f01b2fSopenharmony_ci            {
315c5f01b2fSopenharmony_ci                json j = {{"one", 1}, {"two", 2}, {"three", 3}};
316c5f01b2fSopenharmony_ci                const json j_const(j);
317c5f01b2fSopenharmony_ci
318c5f01b2fSopenharmony_ci                SECTION("result of size")
319c5f01b2fSopenharmony_ci                {
320c5f01b2fSopenharmony_ci                    CHECK(j.size() == 3);
321c5f01b2fSopenharmony_ci                    CHECK(j_const.size() == 3);
322c5f01b2fSopenharmony_ci                }
323c5f01b2fSopenharmony_ci
324c5f01b2fSopenharmony_ci                SECTION("definition of size")
325c5f01b2fSopenharmony_ci                {
326c5f01b2fSopenharmony_ci                    CHECK(std::distance(j.begin(), j.end()) == j.size());
327c5f01b2fSopenharmony_ci                    CHECK(std::distance(j_const.begin(), j_const.end()) == j_const.size());
328c5f01b2fSopenharmony_ci                    CHECK(std::distance(j.rbegin(), j.rend()) == j.size());
329c5f01b2fSopenharmony_ci                    CHECK(std::distance(j_const.crbegin(), j_const.crend()) == j_const.size());
330c5f01b2fSopenharmony_ci                }
331c5f01b2fSopenharmony_ci            }
332c5f01b2fSopenharmony_ci        }
333c5f01b2fSopenharmony_ci
334c5f01b2fSopenharmony_ci        SECTION("number (integer)")
335c5f01b2fSopenharmony_ci        {
336c5f01b2fSopenharmony_ci            json j = -23;
337c5f01b2fSopenharmony_ci            const json j_const(j);
338c5f01b2fSopenharmony_ci
339c5f01b2fSopenharmony_ci            SECTION("result of size")
340c5f01b2fSopenharmony_ci            {
341c5f01b2fSopenharmony_ci                CHECK(j.size() == 1);
342c5f01b2fSopenharmony_ci                CHECK(j_const.size() == 1);
343c5f01b2fSopenharmony_ci            }
344c5f01b2fSopenharmony_ci
345c5f01b2fSopenharmony_ci            SECTION("definition of size")
346c5f01b2fSopenharmony_ci            {
347c5f01b2fSopenharmony_ci                CHECK(std::distance(j.begin(), j.end()) == j.size());
348c5f01b2fSopenharmony_ci                CHECK(std::distance(j_const.begin(), j_const.end()) == j_const.size());
349c5f01b2fSopenharmony_ci                CHECK(std::distance(j.rbegin(), j.rend()) == j.size());
350c5f01b2fSopenharmony_ci                CHECK(std::distance(j_const.crbegin(), j_const.crend()) == j_const.size());
351c5f01b2fSopenharmony_ci            }
352c5f01b2fSopenharmony_ci        }
353c5f01b2fSopenharmony_ci
354c5f01b2fSopenharmony_ci        SECTION("number (unsigned)")
355c5f01b2fSopenharmony_ci        {
356c5f01b2fSopenharmony_ci            json j = 23u;
357c5f01b2fSopenharmony_ci            const json j_const(j);
358c5f01b2fSopenharmony_ci
359c5f01b2fSopenharmony_ci            SECTION("result of size")
360c5f01b2fSopenharmony_ci            {
361c5f01b2fSopenharmony_ci                CHECK(j.size() == 1);
362c5f01b2fSopenharmony_ci                CHECK(j_const.size() == 1);
363c5f01b2fSopenharmony_ci            }
364c5f01b2fSopenharmony_ci
365c5f01b2fSopenharmony_ci            SECTION("definition of size")
366c5f01b2fSopenharmony_ci            {
367c5f01b2fSopenharmony_ci                CHECK(std::distance(j.begin(), j.end()) == j.size());
368c5f01b2fSopenharmony_ci                CHECK(std::distance(j_const.begin(), j_const.end()) == j_const.size());
369c5f01b2fSopenharmony_ci                CHECK(std::distance(j.rbegin(), j.rend()) == j.size());
370c5f01b2fSopenharmony_ci                CHECK(std::distance(j_const.crbegin(), j_const.crend()) == j_const.size());
371c5f01b2fSopenharmony_ci            }
372c5f01b2fSopenharmony_ci        }
373c5f01b2fSopenharmony_ci
374c5f01b2fSopenharmony_ci        SECTION("number (float)")
375c5f01b2fSopenharmony_ci        {
376c5f01b2fSopenharmony_ci            json j = 23.42;
377c5f01b2fSopenharmony_ci            const json j_const(j);
378c5f01b2fSopenharmony_ci
379c5f01b2fSopenharmony_ci            SECTION("result of size")
380c5f01b2fSopenharmony_ci            {
381c5f01b2fSopenharmony_ci                CHECK(j.size() == 1);
382c5f01b2fSopenharmony_ci                CHECK(j_const.size() == 1);
383c5f01b2fSopenharmony_ci            }
384c5f01b2fSopenharmony_ci
385c5f01b2fSopenharmony_ci            SECTION("definition of size")
386c5f01b2fSopenharmony_ci            {
387c5f01b2fSopenharmony_ci                CHECK(std::distance(j.begin(), j.end()) == j.size());
388c5f01b2fSopenharmony_ci                CHECK(std::distance(j_const.begin(), j_const.end()) == j_const.size());
389c5f01b2fSopenharmony_ci                CHECK(std::distance(j.rbegin(), j.rend()) == j.size());
390c5f01b2fSopenharmony_ci                CHECK(std::distance(j_const.crbegin(), j_const.crend()) == j_const.size());
391c5f01b2fSopenharmony_ci            }
392c5f01b2fSopenharmony_ci        }
393c5f01b2fSopenharmony_ci
394c5f01b2fSopenharmony_ci        SECTION("null")
395c5f01b2fSopenharmony_ci        {
396c5f01b2fSopenharmony_ci            json j = nullptr;
397c5f01b2fSopenharmony_ci            const json j_const(j);
398c5f01b2fSopenharmony_ci
399c5f01b2fSopenharmony_ci            SECTION("result of size")
400c5f01b2fSopenharmony_ci            {
401c5f01b2fSopenharmony_ci                CHECK(j.size() == 0);
402c5f01b2fSopenharmony_ci                CHECK(j_const.size() == 0);
403c5f01b2fSopenharmony_ci            }
404c5f01b2fSopenharmony_ci
405c5f01b2fSopenharmony_ci            SECTION("definition of size")
406c5f01b2fSopenharmony_ci            {
407c5f01b2fSopenharmony_ci                CHECK(std::distance(j.begin(), j.end()) == j.size());
408c5f01b2fSopenharmony_ci                CHECK(std::distance(j_const.begin(), j_const.end()) == j_const.size());
409c5f01b2fSopenharmony_ci                CHECK(std::distance(j.rbegin(), j.rend()) == j.size());
410c5f01b2fSopenharmony_ci                CHECK(std::distance(j_const.crbegin(), j_const.crend()) == j_const.size());
411c5f01b2fSopenharmony_ci            }
412c5f01b2fSopenharmony_ci        }
413c5f01b2fSopenharmony_ci    }
414c5f01b2fSopenharmony_ci
415c5f01b2fSopenharmony_ci    SECTION("max_size()")
416c5f01b2fSopenharmony_ci    {
417c5f01b2fSopenharmony_ci        SECTION("boolean")
418c5f01b2fSopenharmony_ci        {
419c5f01b2fSopenharmony_ci            json j = true;
420c5f01b2fSopenharmony_ci            const json j_const = true;
421c5f01b2fSopenharmony_ci
422c5f01b2fSopenharmony_ci            SECTION("result of max_size")
423c5f01b2fSopenharmony_ci            {
424c5f01b2fSopenharmony_ci                CHECK(j.max_size() == 1);
425c5f01b2fSopenharmony_ci                CHECK(j_const.max_size() == 1);
426c5f01b2fSopenharmony_ci            }
427c5f01b2fSopenharmony_ci        }
428c5f01b2fSopenharmony_ci
429c5f01b2fSopenharmony_ci        SECTION("string")
430c5f01b2fSopenharmony_ci        {
431c5f01b2fSopenharmony_ci            json j = "hello world";
432c5f01b2fSopenharmony_ci            const json j_const = "hello world";
433c5f01b2fSopenharmony_ci
434c5f01b2fSopenharmony_ci            SECTION("result of max_size")
435c5f01b2fSopenharmony_ci            {
436c5f01b2fSopenharmony_ci                CHECK(j.max_size() == 1);
437c5f01b2fSopenharmony_ci                CHECK(j_const.max_size() == 1);
438c5f01b2fSopenharmony_ci            }
439c5f01b2fSopenharmony_ci        }
440c5f01b2fSopenharmony_ci
441c5f01b2fSopenharmony_ci        SECTION("array")
442c5f01b2fSopenharmony_ci        {
443c5f01b2fSopenharmony_ci            SECTION("empty array")
444c5f01b2fSopenharmony_ci            {
445c5f01b2fSopenharmony_ci                json j = json::array();
446c5f01b2fSopenharmony_ci                const json j_const = json::array();
447c5f01b2fSopenharmony_ci
448c5f01b2fSopenharmony_ci                SECTION("result of max_size")
449c5f01b2fSopenharmony_ci                {
450c5f01b2fSopenharmony_ci                    CHECK(j.max_size() >= j.size());
451c5f01b2fSopenharmony_ci                    CHECK(j_const.max_size() >= j_const.size());
452c5f01b2fSopenharmony_ci                }
453c5f01b2fSopenharmony_ci            }
454c5f01b2fSopenharmony_ci
455c5f01b2fSopenharmony_ci            SECTION("filled array")
456c5f01b2fSopenharmony_ci            {
457c5f01b2fSopenharmony_ci                json j = {1, 2, 3};
458c5f01b2fSopenharmony_ci                const json j_const = {1, 2, 3};
459c5f01b2fSopenharmony_ci
460c5f01b2fSopenharmony_ci                SECTION("result of max_size")
461c5f01b2fSopenharmony_ci                {
462c5f01b2fSopenharmony_ci                    CHECK(j.max_size() >= j.size());
463c5f01b2fSopenharmony_ci                    CHECK(j_const.max_size() >= j_const.size());
464c5f01b2fSopenharmony_ci                }
465c5f01b2fSopenharmony_ci            }
466c5f01b2fSopenharmony_ci        }
467c5f01b2fSopenharmony_ci
468c5f01b2fSopenharmony_ci        SECTION("object")
469c5f01b2fSopenharmony_ci        {
470c5f01b2fSopenharmony_ci            SECTION("empty object")
471c5f01b2fSopenharmony_ci            {
472c5f01b2fSopenharmony_ci                json j = json::object();
473c5f01b2fSopenharmony_ci                const json j_const = json::object();
474c5f01b2fSopenharmony_ci
475c5f01b2fSopenharmony_ci                SECTION("result of max_size")
476c5f01b2fSopenharmony_ci                {
477c5f01b2fSopenharmony_ci                    CHECK(j.max_size() >= j.size());
478c5f01b2fSopenharmony_ci                    CHECK(j_const.max_size() >= j_const.size());
479c5f01b2fSopenharmony_ci                }
480c5f01b2fSopenharmony_ci            }
481c5f01b2fSopenharmony_ci
482c5f01b2fSopenharmony_ci            SECTION("filled object")
483c5f01b2fSopenharmony_ci            {
484c5f01b2fSopenharmony_ci                json j = {{"one", 1}, {"two", 2}, {"three", 3}};
485c5f01b2fSopenharmony_ci                const json j_const = {{"one", 1}, {"two", 2}, {"three", 3}};
486c5f01b2fSopenharmony_ci
487c5f01b2fSopenharmony_ci                SECTION("result of max_size")
488c5f01b2fSopenharmony_ci                {
489c5f01b2fSopenharmony_ci                    CHECK(j.max_size() >= j.size());
490c5f01b2fSopenharmony_ci                    CHECK(j_const.max_size() >= j_const.size());
491c5f01b2fSopenharmony_ci                }
492c5f01b2fSopenharmony_ci            }
493c5f01b2fSopenharmony_ci        }
494c5f01b2fSopenharmony_ci
495c5f01b2fSopenharmony_ci        SECTION("number (integer)")
496c5f01b2fSopenharmony_ci        {
497c5f01b2fSopenharmony_ci            json j = -23;
498c5f01b2fSopenharmony_ci            const json j_const = -23;
499c5f01b2fSopenharmony_ci
500c5f01b2fSopenharmony_ci            SECTION("result of max_size")
501c5f01b2fSopenharmony_ci            {
502c5f01b2fSopenharmony_ci                CHECK(j.max_size() == 1);
503c5f01b2fSopenharmony_ci                CHECK(j_const.max_size() == 1);
504c5f01b2fSopenharmony_ci            }
505c5f01b2fSopenharmony_ci        }
506c5f01b2fSopenharmony_ci
507c5f01b2fSopenharmony_ci        SECTION("number (unsigned)")
508c5f01b2fSopenharmony_ci        {
509c5f01b2fSopenharmony_ci            json j = 23u;
510c5f01b2fSopenharmony_ci            const json j_const = 23u;
511c5f01b2fSopenharmony_ci
512c5f01b2fSopenharmony_ci            SECTION("result of max_size")
513c5f01b2fSopenharmony_ci            {
514c5f01b2fSopenharmony_ci                CHECK(j.max_size() == 1);
515c5f01b2fSopenharmony_ci                CHECK(j_const.max_size() == 1);
516c5f01b2fSopenharmony_ci            }
517c5f01b2fSopenharmony_ci        }
518c5f01b2fSopenharmony_ci
519c5f01b2fSopenharmony_ci        SECTION("number (float)")
520c5f01b2fSopenharmony_ci        {
521c5f01b2fSopenharmony_ci            json j = 23.42;
522c5f01b2fSopenharmony_ci            const json j_const = 23.42;
523c5f01b2fSopenharmony_ci
524c5f01b2fSopenharmony_ci            SECTION("result of max_size")
525c5f01b2fSopenharmony_ci            {
526c5f01b2fSopenharmony_ci                CHECK(j.max_size() == 1);
527c5f01b2fSopenharmony_ci                CHECK(j_const.max_size() == 1);
528c5f01b2fSopenharmony_ci            }
529c5f01b2fSopenharmony_ci        }
530c5f01b2fSopenharmony_ci
531c5f01b2fSopenharmony_ci        SECTION("null")
532c5f01b2fSopenharmony_ci        {
533c5f01b2fSopenharmony_ci            json j = nullptr;
534c5f01b2fSopenharmony_ci            const json j_const = nullptr;
535c5f01b2fSopenharmony_ci
536c5f01b2fSopenharmony_ci            SECTION("result of max_size")
537c5f01b2fSopenharmony_ci            {
538c5f01b2fSopenharmony_ci                CHECK(j.max_size() == 0);
539c5f01b2fSopenharmony_ci                CHECK(j_const.max_size() == 0);
540c5f01b2fSopenharmony_ci            }
541c5f01b2fSopenharmony_ci        }
542c5f01b2fSopenharmony_ci    }
543c5f01b2fSopenharmony_ci}
544