]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/json/test/value_ref.cpp
2 // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7 // Official repository: https://github.com/boostorg/json
10 // Test that header file is self-contained.
11 #include <boost/json/value_ref.hpp>
13 #include <boost/json/value.hpp>
14 #include <boost/json/serialize.hpp>
16 #include "test_suite.hpp"
20 //----------------------------------------------------------
29 my_type( std::initializer_list
< json::value_ref
> init
)
35 //----------------------------------------------------------
41 std::initializer_list
<value_ref
>;
47 (void)value_ref((signed char)1);
48 (void)value_ref((short)1);
49 (void)value_ref((int)1);
50 (void)value_ref((long)1);
51 (void)value_ref((long long)1);
52 (void)value_ref((unsigned char)1);
53 (void)value_ref((unsigned short)1);
54 (void)value_ref((unsigned int)1);
55 (void)value_ref((unsigned long)1);
56 (void)value_ref((unsigned long long)1);
57 (void)value_ref((float)1.);
58 (void)value_ref((double)1.);
59 (void)value_ref(true);
60 (void)value_ref(nullptr);
62 // string_view, char const*
63 (void)(value_ref
)string_view("test");
64 (void)(value_ref
)("test");
67 value_ref({1,2,3,4,5});
113 // construct from a const rvalue
116 (void)value_ref(std::move(val
));
123 // string_view, char const*
124 (void)init_list
{string_view("test")};
125 (void)init_list
{"test"};
128 (void)init_list
{(short)1};
129 (void)init_list
{(int)1};
130 (void)init_list
{(long)1};
131 (void)init_list
{(long long)1};
132 (void)init_list
{(unsigned short)1};
133 (void)init_list
{(unsigned int)1};
134 (void)init_list
{(unsigned long)1};
135 (void)init_list
{(unsigned long long)1};
136 (void)init_list
{(float)1.};
137 (void)init_list
{(double)1.};
138 (void)init_list
{true};
139 (void)init_list
{nullptr};
145 BOOST_TEST(value_ref::make_value(init_list
{b
}, {}).at(0).is_bool());
146 BOOST_TEST(value_ref::make_value(init_list
{cb
}, {}).at(0).is_bool());
150 (void)init_list
{value()};
161 (void)init_list
{object()};
172 (void)init_list
{object()};
183 (void)init_list
{string()};
194 (void)init_list
{{1,2,3,4,5}};
195 (void)init_list
{{{1,2},{3,4,5}}};
196 (void)init_list
{{1,2,{3,{4,5}}}};
211 value_ref(init
).make_value({});
212 auto const js
= serialize(jv
);
220 make_value({(short)-1}, "[-1]");
221 make_value({(int)-2}, "[-2]");
222 make_value({(long)-3}, "[-3]");
223 make_value({(long long)-4}, "[-4]");
224 make_value({(unsigned short)1}, "[1]");
225 make_value({(unsigned int)2}, "[2]");
226 make_value({(unsigned long)3}, "[3]");
227 make_value({(unsigned long long)4}, "[4]");
228 //make_value({(float)1.}, "[1]");
229 //make_value({(double)1.}, "[1]");
230 make_value({true}, "[true]");
231 make_value({nullptr}, "[null]");
234 make_value({string_view("5")}, "[\"5\"]");
235 make_value({"6"}, "[\"6\"]");
239 make_value({value(1)}, "[1]");
241 make_value({v
}, "[1]");
242 make_value({value(2)}, "[2]");
247 make_value({object({{"k1",1},{"k2",2}})}, "[{\"k1\":1,\"k2\":2}]");
248 object
const obj({{"k1",1},{"k2",2}});
249 make_value({obj
}, "[{\"k1\":1,\"k2\":2}]");
254 make_value({array({1,2,3})}, "[[1,2,3]]");
255 array
const arr({1,2,3});
256 make_value({arr
}, "[[1,2,3]]");
261 make_value({string("test")}, "[\"test\"]");
262 string
const str("test");
263 make_value({str
}, "[\"test\"]");
266 // init list with size != 2
268 make_value({{1,2,3}}, "[[1,2,3]]");
276 "{\"k1\":1,\"k2\":2}");
279 // object/array conversion
290 {{"k1",1}, {"k2",2}},
291 "{\"k1\":1,\"k2\":2}");
294 {{"k1",1}, {"k2",{{"k3",3}, {"k4",4}}}},
295 "{\"k1\":1,\"k2\":{\"k3\":3,\"k4\":4}}");
297 make_value({value(1)}, "[1]");
298 make_value({array({1,2,3,4})}, "[[1,2,3,4]]");
302 std::initializer_list
<
303 std::pair
<string_view
, value_ref
>>;
310 auto const jv
= value(object(init
));
311 auto const js
= serialize(jv
);
323 }, "{\"k1\":1,\"k2\":2}");
325 {"k1", {1,2}}, {"k2", {1,2,3}}
326 }, "{\"k1\":[1,2],\"k2\":[1,2,3]}");
328 {"k1", {{"k2",2}, {"k3",3}}}
329 }, "{\"k1\":{\"k2\":2,\"k3\":3}}");
336 string a
= "abcdefghijklmnopqrstuvwxyz";
337 BOOST_TEST(!a
.empty());
338 array b
{std::move(a
), string()};
339 BOOST_TEST(a
.empty());
342 string a
= "abcdefghijklmnopqrstuvwxyz";
343 BOOST_TEST(!a
.empty());
344 array b
{a
, string()};
345 BOOST_TEST(!a
.empty());
348 string
const a
= "abcdefghijklmnopqrstuvwxyz";
349 BOOST_TEST(!a
.empty());
350 array b
{a
, string()};
351 BOOST_TEST(!a
.empty());
355 BOOST_TEST(a
.begin() != a
.end());
356 array b
{std::move(a
), array()};
357 BOOST_TEST(a
.begin() == a
.end());
361 BOOST_TEST(a
.begin() != a
.end());
363 BOOST_TEST(a
.begin() != a
.end());
366 const array a
{value()};
367 BOOST_TEST(a
.begin() != a
.end());
369 BOOST_TEST(a
.begin() != a
.end());
372 object a
{{"a", 1}, {"b", 2}};
373 BOOST_TEST(a
.capacity() > 0);
374 array b
{std::move(a
), object()};
375 BOOST_TEST(a
.capacity() == 0);
378 object a
{{"a", 1}, {"b", 2}};
379 BOOST_TEST(a
.capacity() > 0);
380 array b
{a
, object()};
381 BOOST_TEST(a
.capacity() > 0);
384 const object a
{{"a", 1}, {"b", 2}};
385 BOOST_TEST(a
.capacity() > 0);
386 array b
{a
, object()};
387 BOOST_TEST(a
.capacity() > 0);
402 TEST_SUITE(value_ref_test
, "boost.json.value_ref");