]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/json/test/parse.cpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / libs / json / test / parse.cpp
1 //
2 // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
3 //
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)
6 //
7 // Official repository: https://github.com/boostorg/json
8 //
9
10 // Test that header file is self-contained.
11 #include <boost/json/parse.hpp>
12
13 #include <boost/json/serialize.hpp>
14
15 #include <string>
16
17 #include "test.hpp"
18 #include "test_suite.hpp"
19
20 BOOST_JSON_NS_BEGIN
21
22 class parse_test
23 {
24 public:
25 void
26 good(string_view s)
27 {
28 error_code ec;
29 auto jv = parse(s, ec);
30 if(! BOOST_TEST(! ec))
31 return;
32 BOOST_TEST(
33 serialize(jv) == s);
34 }
35
36 void
37 bad(string_view s)
38 {
39 error_code ec;
40 auto jv = parse(s, ec);
41 BOOST_TEST(ec);
42 }
43
44 void
45 testParse()
46 {
47 good("null");
48 good("[1,2,3]");
49 bad ("[1,2,3] #");
50 }
51
52 void
53 testMemoryUsage()
54 {
55 // string
56 {
57 std::string s(10000, '*');
58 s.insert(s.begin(), '\"');
59 s.append(1, '\"');
60
61 fail_resource mr1;
62 value jv1 = parse(s, &mr1);
63
64 fail_resource mr2;
65 value jv2(jv1, &mr2);
66 BOOST_TEST(mr1.bytes == mr2.bytes);
67
68 fail_resource mr3;
69 value jv3(&mr3);
70 jv3 = jv1;
71 BOOST_TEST(mr1.bytes == mr3.bytes);
72 }
73
74 // array
75 {
76 {
77 fail_resource mr1;
78 value jv1 = parse("[1]", &mr1);
79
80 fail_resource mr2;
81 value jv2(jv1, &mr2);
82 BOOST_TEST(mr1.bytes == mr2.bytes);
83
84 fail_resource mr3;
85 value jv3(&mr3);
86 jv3 = jv1;
87 BOOST_TEST(mr1.bytes == mr3.bytes);
88 }
89 {
90 std::string s;
91 s = "1,2,3,4";
92 s = s + "," + s;
93 s = s + "," + s;
94 s = s + "," + s;
95 s = s + "," + s;
96 s = s + "," + s;
97 s = s + "," + s;
98 s = s + "," + s;
99 s = s + "," + s;
100 s = "[[" + s + "]]";
101
102 fail_resource mr1;
103 value jv1 = parse(s, &mr1);
104
105 fail_resource mr2;
106 value jv2(jv1, &mr2);
107 BOOST_TEST(mr1.bytes == mr2.bytes);
108
109 fail_resource mr3;
110 value jv3(&mr3);
111 jv3 = jv1;
112 BOOST_TEST(mr1.bytes == mr3.bytes);
113 }
114 }
115
116 // object
117 {
118 std::string s;
119 s = "{\"0\":null";
120 for(int i = 1; i < 1000; ++i)
121 s +=
122 ",\"" +
123 std::to_string(i) +
124 "\":null";
125 s.append("}");
126
127 fail_resource mr1;
128 value jv1 = parse(s, &mr1);
129
130 fail_resource mr2;
131 value jv2(jv1, &mr2);
132 BOOST_TEST(mr1.bytes == mr2.bytes);
133
134 fail_resource mr3;
135 value jv3(&mr3);
136 jv3 = jv1;
137 BOOST_TEST(mr1.bytes == mr3.bytes);
138 }
139 }
140
141 void
142 run()
143 {
144 testParse();
145 testMemoryUsage();
146 }
147 };
148
149 TEST_SUITE(parse_test, "boost.json.parse");
150
151 BOOST_JSON_NS_END