20#include <xrpl/beast/core/LexicalCast.h>
21#include <xrpl/beast/unit_test.h>
22#include <xrpl/json/json_reader.h>
23#include <xrpl/json/json_value.h>
24#include <xrpl/json/json_writer.h>
36 static constexpr char sample[]{
"Contents of a Json::StaticString"};
39 char const* addrTest1{test1};
41 BEAST_EXPECT(addrTest1 == &sample[0]);
42 BEAST_EXPECT(test1.
c_str() == &sample[0]);
45 "Contents of a Json::StaticString"};
48 BEAST_EXPECT(test1 == test2);
49 BEAST_EXPECT(test1 != test3);
52 BEAST_EXPECT(str == test2);
53 BEAST_EXPECT(str != test3);
54 BEAST_EXPECT(test2 == str);
55 BEAST_EXPECT(test3 != str);
67 BEAST_EXPECT(val.type() == typ);
68 BEAST_EXPECT(cpy.type() == typ);
73 BEAST_EXPECT(nullV.isNull());
74 BEAST_EXPECT(!nullV.isBool());
75 BEAST_EXPECT(!nullV.isInt());
76 BEAST_EXPECT(!nullV.isUInt());
77 BEAST_EXPECT(!nullV.isIntegral());
78 BEAST_EXPECT(!nullV.isDouble());
79 BEAST_EXPECT(!nullV.isNumeric());
80 BEAST_EXPECT(!nullV.isString());
81 BEAST_EXPECT(!nullV.isArray());
82 BEAST_EXPECT(nullV.isArrayOrNull());
83 BEAST_EXPECT(!nullV.isObject());
84 BEAST_EXPECT(nullV.isObjectOrNull());
88 BEAST_EXPECT(!intV.isNull());
89 BEAST_EXPECT(!intV.isBool());
90 BEAST_EXPECT(intV.isInt());
91 BEAST_EXPECT(!intV.isUInt());
92 BEAST_EXPECT(intV.isIntegral());
93 BEAST_EXPECT(!intV.isDouble());
94 BEAST_EXPECT(intV.isNumeric());
95 BEAST_EXPECT(!intV.isString());
96 BEAST_EXPECT(!intV.isArray());
97 BEAST_EXPECT(!intV.isArrayOrNull());
98 BEAST_EXPECT(!intV.isObject());
99 BEAST_EXPECT(!intV.isObjectOrNull());
103 BEAST_EXPECT(!uintV.isNull());
104 BEAST_EXPECT(!uintV.isBool());
105 BEAST_EXPECT(!uintV.isInt());
106 BEAST_EXPECT(uintV.isUInt());
107 BEAST_EXPECT(uintV.isIntegral());
108 BEAST_EXPECT(!uintV.isDouble());
109 BEAST_EXPECT(uintV.isNumeric());
110 BEAST_EXPECT(!uintV.isString());
111 BEAST_EXPECT(!uintV.isArray());
112 BEAST_EXPECT(!uintV.isArrayOrNull());
113 BEAST_EXPECT(!uintV.isObject());
114 BEAST_EXPECT(!uintV.isObjectOrNull());
118 BEAST_EXPECT(!realV.isNull());
119 BEAST_EXPECT(!realV.isBool());
120 BEAST_EXPECT(!realV.isInt());
121 BEAST_EXPECT(!realV.isUInt());
122 BEAST_EXPECT(!realV.isIntegral());
123 BEAST_EXPECT(realV.isDouble());
124 BEAST_EXPECT(realV.isNumeric());
125 BEAST_EXPECT(!realV.isString());
126 BEAST_EXPECT(!realV.isArray());
127 BEAST_EXPECT(!realV.isArrayOrNull());
128 BEAST_EXPECT(!realV.isObject());
129 BEAST_EXPECT(!realV.isObjectOrNull());
133 BEAST_EXPECT(!stringV.isNull());
134 BEAST_EXPECT(!stringV.isBool());
135 BEAST_EXPECT(!stringV.isInt());
136 BEAST_EXPECT(!stringV.isUInt());
137 BEAST_EXPECT(!stringV.isIntegral());
138 BEAST_EXPECT(!stringV.isDouble());
139 BEAST_EXPECT(!stringV.isNumeric());
140 BEAST_EXPECT(stringV.isString());
141 BEAST_EXPECT(!stringV.isArray());
142 BEAST_EXPECT(!stringV.isArrayOrNull());
143 BEAST_EXPECT(!stringV.isObject());
144 BEAST_EXPECT(!stringV.isObjectOrNull());
153 BEAST_EXPECT(!staticStrV.isNull());
154 BEAST_EXPECT(!staticStrV.isBool());
155 BEAST_EXPECT(!staticStrV.isInt());
156 BEAST_EXPECT(!staticStrV.isUInt());
157 BEAST_EXPECT(!staticStrV.isIntegral());
158 BEAST_EXPECT(!staticStrV.isDouble());
159 BEAST_EXPECT(!staticStrV.isNumeric());
160 BEAST_EXPECT(staticStrV.isString());
161 BEAST_EXPECT(!staticStrV.isArray());
162 BEAST_EXPECT(!staticStrV.isArrayOrNull());
163 BEAST_EXPECT(!staticStrV.isObject());
164 BEAST_EXPECT(!staticStrV.isObjectOrNull());
168 BEAST_EXPECT(!boolV.isNull());
169 BEAST_EXPECT(boolV.isBool());
170 BEAST_EXPECT(!boolV.isInt());
171 BEAST_EXPECT(!boolV.isUInt());
172 BEAST_EXPECT(boolV.isIntegral());
173 BEAST_EXPECT(!boolV.isDouble());
174 BEAST_EXPECT(boolV.isNumeric());
175 BEAST_EXPECT(!boolV.isString());
176 BEAST_EXPECT(!boolV.isArray());
177 BEAST_EXPECT(!boolV.isArrayOrNull());
178 BEAST_EXPECT(!boolV.isObject());
179 BEAST_EXPECT(!boolV.isObjectOrNull());
183 BEAST_EXPECT(!arrayV.isNull());
184 BEAST_EXPECT(!arrayV.isBool());
185 BEAST_EXPECT(!arrayV.isInt());
186 BEAST_EXPECT(!arrayV.isUInt());
187 BEAST_EXPECT(!arrayV.isIntegral());
188 BEAST_EXPECT(!arrayV.isDouble());
189 BEAST_EXPECT(!arrayV.isNumeric());
190 BEAST_EXPECT(!arrayV.isString());
191 BEAST_EXPECT(arrayV.isArray());
192 BEAST_EXPECT(arrayV.isArrayOrNull());
193 BEAST_EXPECT(!arrayV.isObject());
194 BEAST_EXPECT(!arrayV.isObjectOrNull());
198 BEAST_EXPECT(!objectV.isNull());
199 BEAST_EXPECT(!objectV.isBool());
200 BEAST_EXPECT(!objectV.isInt());
201 BEAST_EXPECT(!objectV.isUInt());
202 BEAST_EXPECT(!objectV.isIntegral());
203 BEAST_EXPECT(!objectV.isDouble());
204 BEAST_EXPECT(!objectV.isNumeric());
205 BEAST_EXPECT(!objectV.isString());
206 BEAST_EXPECT(!objectV.isArray());
207 BEAST_EXPECT(!objectV.isArrayOrNull());
208 BEAST_EXPECT(objectV.isObject());
209 BEAST_EXPECT(objectV.isObjectOrNull());
216 auto doCompare = [
this](
222 auto fmt = [
this](
bool cond,
char const* text,
int line) {
226 this->
fail(text, __FILE__, line);
228 fmt((lhs == rhs) == lhsEqRhs,
"Value ==", line);
229 fmt((lhs != rhs) != lhsEqRhs,
"Value !=", line);
230 fmt((lhs < rhs) == (!(lhsEqRhs | !lhsLtRhs)),
"Value <", line);
231 fmt((lhs <= rhs) == (lhsEqRhs | lhsLtRhs),
"Value <=", line);
232 fmt((lhs >= rhs) == (lhsEqRhs | !lhsLtRhs),
"Value >=", line);
233 fmt((lhs > rhs) == (!(lhsEqRhs | lhsLtRhs)),
"Value >", line);
262 doCompare(null0,
Json::Value{},
true,
false, __LINE__);
263 doCompare(null0, intNeg1,
false,
true, __LINE__);
264 doCompare(null0, int0,
false,
true, __LINE__);
265 doCompare(null0, intPos1,
false,
true, __LINE__);
266 doCompare(null0, uint0,
false,
true, __LINE__);
267 doCompare(null0, uint1,
false,
true, __LINE__);
268 doCompare(null0, realNeg1,
false,
true, __LINE__);
269 doCompare(null0, real0,
false,
true, __LINE__);
270 doCompare(null0, realPos1,
false,
true, __LINE__);
271 doCompare(null0, str0,
false,
true, __LINE__);
272 doCompare(null0, str1,
false,
true, __LINE__);
273 doCompare(null0, boolF,
false,
true, __LINE__);
274 doCompare(null0, boolT,
false,
true, __LINE__);
275 doCompare(null0, array0,
false,
true, __LINE__);
276 doCompare(null0, array1,
false,
true, __LINE__);
277 doCompare(null0, obj0,
false,
true, __LINE__);
278 doCompare(null0, obj1,
false,
true, __LINE__);
280 doCompare(intNeg1, null0,
false,
false, __LINE__);
281 doCompare(intNeg1, intNeg1,
true,
false, __LINE__);
282 doCompare(intNeg1, int0,
false,
true, __LINE__);
283 doCompare(intNeg1, intPos1,
false,
true, __LINE__);
284 doCompare(intNeg1, uint0,
false,
true, __LINE__);
285 doCompare(intNeg1, uint1,
false,
true, __LINE__);
286 doCompare(intNeg1, realNeg1,
false,
true, __LINE__);
287 doCompare(intNeg1, real0,
false,
true, __LINE__);
288 doCompare(intNeg1, realPos1,
false,
true, __LINE__);
289 doCompare(intNeg1, str0,
false,
true, __LINE__);
290 doCompare(intNeg1, str1,
false,
true, __LINE__);
291 doCompare(intNeg1, boolF,
false,
true, __LINE__);
292 doCompare(intNeg1, boolT,
false,
true, __LINE__);
293 doCompare(intNeg1, array0,
false,
true, __LINE__);
294 doCompare(intNeg1, array1,
false,
true, __LINE__);
295 doCompare(intNeg1, obj0,
false,
true, __LINE__);
296 doCompare(intNeg1, obj1,
false,
true, __LINE__);
298 doCompare(int0, null0,
false,
false, __LINE__);
299 doCompare(int0, intNeg1,
false,
false, __LINE__);
300 doCompare(int0, int0,
true,
false, __LINE__);
301 doCompare(int0, intPos1,
false,
true, __LINE__);
302 doCompare(int0, uint0,
true,
false, __LINE__);
303 doCompare(int0, uint1,
false,
true, __LINE__);
304 doCompare(int0, realNeg1,
false,
true, __LINE__);
305 doCompare(int0, real0,
false,
true, __LINE__);
306 doCompare(int0, realPos1,
false,
true, __LINE__);
307 doCompare(int0, str0,
false,
true, __LINE__);
308 doCompare(int0, str1,
false,
true, __LINE__);
309 doCompare(int0, boolF,
false,
true, __LINE__);
310 doCompare(int0, boolT,
false,
true, __LINE__);
311 doCompare(int0, array0,
false,
true, __LINE__);
312 doCompare(int0, array1,
false,
true, __LINE__);
313 doCompare(int0, obj0,
false,
true, __LINE__);
314 doCompare(int0, obj1,
false,
true, __LINE__);
316 doCompare(intPos1, null0,
false,
false, __LINE__);
317 doCompare(intPos1, intNeg1,
false,
false, __LINE__);
318 doCompare(intPos1, int0,
false,
false, __LINE__);
319 doCompare(intPos1, intPos1,
true,
false, __LINE__);
320 doCompare(intPos1, uint0,
false,
false, __LINE__);
321 doCompare(intPos1, uint1,
true,
false, __LINE__);
322 doCompare(intPos1, realNeg1,
false,
true, __LINE__);
323 doCompare(intPos1, real0,
false,
true, __LINE__);
324 doCompare(intPos1, realPos1,
false,
true, __LINE__);
325 doCompare(intPos1, str0,
false,
true, __LINE__);
326 doCompare(intPos1, str1,
false,
true, __LINE__);
327 doCompare(intPos1, boolF,
false,
true, __LINE__);
328 doCompare(intPos1, boolT,
false,
true, __LINE__);
329 doCompare(intPos1, array0,
false,
true, __LINE__);
330 doCompare(intPos1, array1,
false,
true, __LINE__);
331 doCompare(intPos1, obj0,
false,
true, __LINE__);
332 doCompare(intPos1, obj1,
false,
true, __LINE__);
334 doCompare(uint0, null0,
false,
false, __LINE__);
335 doCompare(uint0, intNeg1,
false,
false, __LINE__);
336 doCompare(uint0, int0,
true,
false, __LINE__);
337 doCompare(uint0, intPos1,
false,
true, __LINE__);
338 doCompare(uint0, uint0,
true,
false, __LINE__);
339 doCompare(uint0, uint1,
false,
true, __LINE__);
340 doCompare(uint0, realNeg1,
false,
true, __LINE__);
341 doCompare(uint0, real0,
false,
true, __LINE__);
342 doCompare(uint0, realPos1,
false,
true, __LINE__);
343 doCompare(uint0, str0,
false,
true, __LINE__);
344 doCompare(uint0, str1,
false,
true, __LINE__);
345 doCompare(uint0, boolF,
false,
true, __LINE__);
346 doCompare(uint0, boolT,
false,
true, __LINE__);
347 doCompare(uint0, array0,
false,
true, __LINE__);
348 doCompare(uint0, array1,
false,
true, __LINE__);
349 doCompare(uint0, obj0,
false,
true, __LINE__);
350 doCompare(uint0, obj1,
false,
true, __LINE__);
352 doCompare(uint1, null0,
false,
false, __LINE__);
353 doCompare(uint1, intNeg1,
false,
false, __LINE__);
354 doCompare(uint1, int0,
false,
false, __LINE__);
355 doCompare(uint1, intPos1,
true,
false, __LINE__);
356 doCompare(uint1, uint0,
false,
false, __LINE__);
357 doCompare(uint1, uint1,
true,
false, __LINE__);
358 doCompare(uint1, realNeg1,
false,
true, __LINE__);
359 doCompare(uint1, real0,
false,
true, __LINE__);
360 doCompare(uint1, realPos1,
false,
true, __LINE__);
361 doCompare(uint1, str0,
false,
true, __LINE__);
362 doCompare(uint1, str1,
false,
true, __LINE__);
363 doCompare(uint1, boolF,
false,
true, __LINE__);
364 doCompare(uint1, boolT,
false,
true, __LINE__);
365 doCompare(uint1, array0,
false,
true, __LINE__);
366 doCompare(uint1, array1,
false,
true, __LINE__);
367 doCompare(uint1, obj0,
false,
true, __LINE__);
368 doCompare(uint1, obj1,
false,
true, __LINE__);
370 doCompare(realNeg1, null0,
false,
false, __LINE__);
371 doCompare(realNeg1, intNeg1,
false,
false, __LINE__);
372 doCompare(realNeg1, int0,
false,
false, __LINE__);
373 doCompare(realNeg1, intPos1,
false,
false, __LINE__);
374 doCompare(realNeg1, uint0,
false,
false, __LINE__);
375 doCompare(realNeg1, uint1,
false,
false, __LINE__);
376 doCompare(realNeg1, realNeg1,
true,
false, __LINE__);
377 doCompare(realNeg1, real0,
false,
true, __LINE__);
378 doCompare(realNeg1, realPos1,
false,
true, __LINE__);
379 doCompare(realNeg1, str0,
false,
true, __LINE__);
380 doCompare(realNeg1, str1,
false,
true, __LINE__);
381 doCompare(realNeg1, boolF,
false,
true, __LINE__);
382 doCompare(realNeg1, boolT,
false,
true, __LINE__);
383 doCompare(realNeg1, array0,
false,
true, __LINE__);
384 doCompare(realNeg1, array1,
false,
true, __LINE__);
385 doCompare(realNeg1, obj0,
false,
true, __LINE__);
386 doCompare(realNeg1, obj1,
false,
true, __LINE__);
388 doCompare(real0, null0,
false,
false, __LINE__);
389 doCompare(real0, intNeg1,
false,
false, __LINE__);
390 doCompare(real0, int0,
false,
false, __LINE__);
391 doCompare(real0, intPos1,
false,
false, __LINE__);
392 doCompare(real0, uint0,
false,
false, __LINE__);
393 doCompare(real0, uint1,
false,
false, __LINE__);
394 doCompare(real0, realNeg1,
false,
false, __LINE__);
395 doCompare(real0, real0,
true,
false, __LINE__);
396 doCompare(real0, realPos1,
false,
true, __LINE__);
397 doCompare(real0, str0,
false,
true, __LINE__);
398 doCompare(real0, str1,
false,
true, __LINE__);
399 doCompare(real0, boolF,
false,
true, __LINE__);
400 doCompare(real0, boolT,
false,
true, __LINE__);
401 doCompare(real0, array0,
false,
true, __LINE__);
402 doCompare(real0, array1,
false,
true, __LINE__);
403 doCompare(real0, obj0,
false,
true, __LINE__);
404 doCompare(real0, obj1,
false,
true, __LINE__);
406 doCompare(realPos1, null0,
false,
false, __LINE__);
407 doCompare(realPos1, intNeg1,
false,
false, __LINE__);
408 doCompare(realPos1, int0,
false,
false, __LINE__);
409 doCompare(realPos1, intPos1,
false,
false, __LINE__);
410 doCompare(realPos1, uint0,
false,
false, __LINE__);
411 doCompare(realPos1, uint1,
false,
false, __LINE__);
412 doCompare(realPos1, realNeg1,
false,
false, __LINE__);
413 doCompare(realPos1, real0,
false,
false, __LINE__);
414 doCompare(realPos1, realPos1,
true,
false, __LINE__);
415 doCompare(realPos1, str0,
false,
true, __LINE__);
416 doCompare(realPos1, str1,
false,
true, __LINE__);
417 doCompare(realPos1, boolF,
false,
true, __LINE__);
418 doCompare(realPos1, boolT,
false,
true, __LINE__);
419 doCompare(realPos1, array0,
false,
true, __LINE__);
420 doCompare(realPos1, array1,
false,
true, __LINE__);
421 doCompare(realPos1, obj0,
false,
true, __LINE__);
422 doCompare(realPos1, obj1,
false,
true, __LINE__);
424 doCompare(str0, null0,
false,
false, __LINE__);
425 doCompare(str0, intNeg1,
false,
false, __LINE__);
426 doCompare(str0, int0,
false,
false, __LINE__);
427 doCompare(str0, intPos1,
false,
false, __LINE__);
428 doCompare(str0, uint0,
false,
false, __LINE__);
429 doCompare(str0, uint1,
false,
false, __LINE__);
430 doCompare(str0, realNeg1,
false,
false, __LINE__);
431 doCompare(str0, real0,
false,
false, __LINE__);
432 doCompare(str0, realPos1,
false,
false, __LINE__);
433 doCompare(str0, str0,
true,
false, __LINE__);
434 doCompare(str0, str1,
false,
true, __LINE__);
435 doCompare(str0, boolF,
false,
true, __LINE__);
436 doCompare(str0, boolT,
false,
true, __LINE__);
437 doCompare(str0, array0,
false,
true, __LINE__);
438 doCompare(str0, array1,
false,
true, __LINE__);
439 doCompare(str0, obj0,
false,
true, __LINE__);
440 doCompare(str0, obj1,
false,
true, __LINE__);
442 doCompare(str1, null0,
false,
false, __LINE__);
443 doCompare(str1, intNeg1,
false,
false, __LINE__);
444 doCompare(str1, int0,
false,
false, __LINE__);
445 doCompare(str1, intPos1,
false,
false, __LINE__);
446 doCompare(str1, uint0,
false,
false, __LINE__);
447 doCompare(str1, uint1,
false,
false, __LINE__);
448 doCompare(str1, realNeg1,
false,
false, __LINE__);
449 doCompare(str1, real0,
false,
false, __LINE__);
450 doCompare(str1, realPos1,
false,
false, __LINE__);
451 doCompare(str1, str0,
false,
false, __LINE__);
452 doCompare(str1, str1,
true,
false, __LINE__);
453 doCompare(str1, boolF,
false,
true, __LINE__);
454 doCompare(str1, boolT,
false,
true, __LINE__);
455 doCompare(str1, array0,
false,
true, __LINE__);
456 doCompare(str1, array1,
false,
true, __LINE__);
457 doCompare(str1, obj0,
false,
true, __LINE__);
458 doCompare(str1, obj1,
false,
true, __LINE__);
460 doCompare(boolF, null0,
false,
false, __LINE__);
461 doCompare(boolF, intNeg1,
false,
false, __LINE__);
462 doCompare(boolF, int0,
false,
false, __LINE__);
463 doCompare(boolF, intPos1,
false,
false, __LINE__);
464 doCompare(boolF, uint0,
false,
false, __LINE__);
465 doCompare(boolF, uint1,
false,
false, __LINE__);
466 doCompare(boolF, realNeg1,
false,
false, __LINE__);
467 doCompare(boolF, real0,
false,
false, __LINE__);
468 doCompare(boolF, realPos1,
false,
false, __LINE__);
469 doCompare(boolF, str0,
false,
false, __LINE__);
470 doCompare(boolF, str1,
false,
false, __LINE__);
471 doCompare(boolF, boolF,
true,
false, __LINE__);
472 doCompare(boolF, boolT,
false,
true, __LINE__);
473 doCompare(boolF, array0,
false,
true, __LINE__);
474 doCompare(boolF, array1,
false,
true, __LINE__);
475 doCompare(boolF, obj0,
false,
true, __LINE__);
476 doCompare(boolF, obj1,
false,
true, __LINE__);
478 doCompare(boolT, null0,
false,
false, __LINE__);
479 doCompare(boolT, intNeg1,
false,
false, __LINE__);
480 doCompare(boolT, int0,
false,
false, __LINE__);
481 doCompare(boolT, intPos1,
false,
false, __LINE__);
482 doCompare(boolT, uint0,
false,
false, __LINE__);
483 doCompare(boolT, uint1,
false,
false, __LINE__);
484 doCompare(boolT, realNeg1,
false,
false, __LINE__);
485 doCompare(boolT, real0,
false,
false, __LINE__);
486 doCompare(boolT, realPos1,
false,
false, __LINE__);
487 doCompare(boolT, str0,
false,
false, __LINE__);
488 doCompare(boolT, str1,
false,
false, __LINE__);
489 doCompare(boolT, boolF,
false,
false, __LINE__);
490 doCompare(boolT, boolT,
true,
false, __LINE__);
491 doCompare(boolT, array0,
false,
true, __LINE__);
492 doCompare(boolT, array1,
false,
true, __LINE__);
493 doCompare(boolT, obj0,
false,
true, __LINE__);
494 doCompare(boolT, obj1,
false,
true, __LINE__);
496 doCompare(array0, null0,
false,
false, __LINE__);
497 doCompare(array0, intNeg1,
false,
false, __LINE__);
498 doCompare(array0, int0,
false,
false, __LINE__);
499 doCompare(array0, intPos1,
false,
false, __LINE__);
500 doCompare(array0, uint0,
false,
false, __LINE__);
501 doCompare(array0, uint1,
false,
false, __LINE__);
502 doCompare(array0, realNeg1,
false,
false, __LINE__);
503 doCompare(array0, real0,
false,
false, __LINE__);
504 doCompare(array0, realPos1,
false,
false, __LINE__);
505 doCompare(array0, str0,
false,
false, __LINE__);
506 doCompare(array0, str1,
false,
false, __LINE__);
507 doCompare(array0, boolF,
false,
false, __LINE__);
508 doCompare(array0, boolT,
false,
false, __LINE__);
509 doCompare(array0, array0,
true,
false, __LINE__);
510 doCompare(array0, array1,
false,
true, __LINE__);
511 doCompare(array0, obj0,
false,
true, __LINE__);
512 doCompare(array0, obj1,
false,
true, __LINE__);
514 doCompare(array1, null0,
false,
false, __LINE__);
515 doCompare(array1, intNeg1,
false,
false, __LINE__);
516 doCompare(array1, int0,
false,
false, __LINE__);
517 doCompare(array1, intPos1,
false,
false, __LINE__);
518 doCompare(array1, uint0,
false,
false, __LINE__);
519 doCompare(array1, uint1,
false,
false, __LINE__);
520 doCompare(array1, realNeg1,
false,
false, __LINE__);
521 doCompare(array1, real0,
false,
false, __LINE__);
522 doCompare(array1, realPos1,
false,
false, __LINE__);
523 doCompare(array1, str0,
false,
false, __LINE__);
524 doCompare(array1, str1,
false,
false, __LINE__);
525 doCompare(array1, boolF,
false,
false, __LINE__);
526 doCompare(array1, boolT,
false,
false, __LINE__);
527 doCompare(array1, array0,
false,
false, __LINE__);
528 doCompare(array1, array1,
true,
false, __LINE__);
529 doCompare(array1, obj0,
false,
true, __LINE__);
530 doCompare(array1, obj1,
false,
true, __LINE__);
532 doCompare(obj0, null0,
false,
false, __LINE__);
533 doCompare(obj0, intNeg1,
false,
false, __LINE__);
534 doCompare(obj0, int0,
false,
false, __LINE__);
535 doCompare(obj0, intPos1,
false,
false, __LINE__);
536 doCompare(obj0, uint0,
false,
false, __LINE__);
537 doCompare(obj0, uint1,
false,
false, __LINE__);
538 doCompare(obj0, realNeg1,
false,
false, __LINE__);
539 doCompare(obj0, real0,
false,
false, __LINE__);
540 doCompare(obj0, realPos1,
false,
false, __LINE__);
541 doCompare(obj0, str0,
false,
false, __LINE__);
542 doCompare(obj0, str1,
false,
false, __LINE__);
543 doCompare(obj0, boolF,
false,
false, __LINE__);
544 doCompare(obj0, boolT,
false,
false, __LINE__);
545 doCompare(obj0, array0,
false,
false, __LINE__);
546 doCompare(obj0, array1,
false,
false, __LINE__);
547 doCompare(obj0, obj0,
true,
false, __LINE__);
548 doCompare(obj0, obj1,
false,
true, __LINE__);
550 doCompare(obj1, null0,
false,
false, __LINE__);
551 doCompare(obj1, intNeg1,
false,
false, __LINE__);
552 doCompare(obj1, int0,
false,
false, __LINE__);
553 doCompare(obj1, intPos1,
false,
false, __LINE__);
554 doCompare(obj1, uint0,
false,
false, __LINE__);
555 doCompare(obj1, uint1,
false,
false, __LINE__);
556 doCompare(obj1, realNeg1,
false,
false, __LINE__);
557 doCompare(obj1, real0,
false,
false, __LINE__);
558 doCompare(obj1, realPos1,
false,
false, __LINE__);
559 doCompare(obj1, str0,
false,
false, __LINE__);
560 doCompare(obj1, str1,
false,
false, __LINE__);
561 doCompare(obj1, boolF,
false,
false, __LINE__);
562 doCompare(obj1, boolT,
false,
false, __LINE__);
563 doCompare(obj1, array0,
false,
false, __LINE__);
564 doCompare(obj1, array1,
false,
false, __LINE__);
565 doCompare(obj1, obj0,
false,
false, __LINE__);
566 doCompare(obj1, obj1,
true,
false, __LINE__);
583 BEAST_EXPECT(!array);
585 BEAST_EXPECT(
bool(array));
588 BEAST_EXPECT(!
object);
590 BEAST_EXPECT(
bool(
object));
597 "{\"method\":\"ledger\",\"params\":[{\"ledger_index\":1e300}]}");
630 BEAST_EXPECT(r1.
parse(json, j1));
631 BEAST_EXPECT(j1[
"max_uint"].asUInt() == max_uint);
632 BEAST_EXPECT(j1[
"max_int"].asInt() == max_int);
633 BEAST_EXPECT(j1[
"min_int"].asInt() == min_int);
634 BEAST_EXPECT(j1[
"a_uint"].asUInt() == a_uint);
635 BEAST_EXPECT(j1[
"a_uint"] > a_large_int);
636 BEAST_EXPECT(j1[
"a_uint"] > a_small_int);
637 BEAST_EXPECT(j1[
"a_large_int"].asInt() == a_large_int);
638 BEAST_EXPECT(j1[
"a_large_int"].asUInt() == a_large_int);
639 BEAST_EXPECT(j1[
"a_large_int"] < a_uint);
640 BEAST_EXPECT(j1[
"a_small_int"].asInt() == a_small_int);
641 BEAST_EXPECT(j1[
"a_small_int"] < a_uint);
643 json =
"{\"overflow\":";
650 BEAST_EXPECT(!r2.
parse(json, j2));
652 json =
"{\"underflow\":";
659 BEAST_EXPECT(!r3.
parse(json, j3));
664 [[maybe_unused]]
std::uint32_t const uTooBig{intString.asUInt()};
665 fail(
"4294967296", __FILE__, __LINE__);
672 intString =
"4294967295";
673 BEAST_EXPECT(intString.asUInt() == 4294967295u);
676 BEAST_EXPECT(intString.asUInt() == 0);
681 [[maybe_unused]]
std::uint32_t const uTooSmall{intString.asUInt()};
682 fail(
"-1", __FILE__, __LINE__);
689 intString =
"2147483648";
692 [[maybe_unused]]
std::int32_t tooPos{intString.asInt()};
693 fail(
"2147483648", __FILE__, __LINE__);
700 intString =
"2147483647";
701 BEAST_EXPECT(intString.asInt() == 2147483647);
703 intString =
"-2147483648";
704 BEAST_EXPECT(intString.asInt() == -2147483648LL);
706 intString =
"-2147483649";
709 [[maybe_unused]]
std::int32_t tooNeg{intString.asInt()};
710 fail(
"-2147483649", __FILE__, __LINE__);
722 BEAST_EXPECT(v1.isDouble());
723 BEAST_EXPECT(v1.asDouble() == 2.5);
726 BEAST_EXPECT(v1.isDouble());
727 BEAST_EXPECT(v1.asDouble() == 2.5);
730 BEAST_EXPECT(v1 == v2);
733 BEAST_EXPECT(v1.isDouble());
734 BEAST_EXPECT(v1.asDouble() == 2.5);
737 BEAST_EXPECT(v1 == v2);
746 BEAST_EXPECT(v1.isDouble());
747 BEAST_EXPECT(v1.asDouble() == 2.5);
753 BEAST_EXPECT(v1 != v2);
756 BEAST_EXPECT(v1.isDouble());
757 BEAST_EXPECT(v1.asDouble() == 2.5);
759 BEAST_EXPECT(v1 != v2);
769 BEAST_EXPECT(a == b);
770 BEAST_EXPECT(a <= b);
771 BEAST_EXPECT(a >= b);
773 BEAST_EXPECT(!(a != b));
774 BEAST_EXPECT(!(a < b));
775 BEAST_EXPECT(!(a > b));
777 BEAST_EXPECT(b == a);
778 BEAST_EXPECT(b <= a);
779 BEAST_EXPECT(b >= a);
781 BEAST_EXPECT(!(b != a));
782 BEAST_EXPECT(!(b < a));
783 BEAST_EXPECT(!(b > a));
786 auto testGreaterThan = [&](
std::string const& name) {
787 BEAST_EXPECT(!(a == b));
788 BEAST_EXPECT(!(a <= b));
789 BEAST_EXPECT(a >= b);
791 BEAST_EXPECT(a != b);
792 BEAST_EXPECT(!(a < b));
795 BEAST_EXPECT(!(b == a));
796 BEAST_EXPECT(b <= a);
797 BEAST_EXPECT(!(b >= a));
799 BEAST_EXPECT(b != a);
801 BEAST_EXPECT(!(b > a));
809 testGreaterThan(
"negative");
817 testGreaterThan(
"big");
825 char const* s(
"{\"array\":[{\"12\":23},{},null,false,0.5]}");
828 return 1 +
std::count_if(str.begin(), str.end(), [](
char c) {
833 BEAST_EXPECT(r.
parse(s, j));
837 BEAST_EXPECT(countLines(ss.
str()) > 1);
842 BEAST_EXPECT(countLines(ss.
str()) == 1);
856 BEAST_EXPECT(val.
isNull());
860 BEAST_EXPECT(val.
asInt() == 0);
861 BEAST_EXPECT(val.
asUInt() == 0);
862 BEAST_EXPECT(val.
asDouble() == 0.0);
863 BEAST_EXPECT(val.
asBool() ==
false);
877 BEAST_EXPECT(val.
isInt());
880 BEAST_EXPECT(val.
asString() ==
"-1234");
881 BEAST_EXPECT(val.
asInt() == -1234);
884 BEAST_EXPECT(val.
asDouble() == -1234.0);
885 BEAST_EXPECT(val.
asBool() ==
true);
899 BEAST_EXPECT(val.
isUInt());
902 BEAST_EXPECT(val.
asString() ==
"1234");
903 BEAST_EXPECT(val.
asInt() == 1234);
904 BEAST_EXPECT(val.
asUInt() == 1234u);
905 BEAST_EXPECT(val.
asDouble() == 1234.0);
906 BEAST_EXPECT(val.
asBool() ==
true);
925 BEAST_EXPECT(val.
asInt() == 2);
926 BEAST_EXPECT(val.
asUInt() == 2u);
927 BEAST_EXPECT(val.
asDouble() == 2.0);
928 BEAST_EXPECT(val.
asBool() ==
true);
943 BEAST_EXPECT(strcmp(val.
asCString(),
"54321") == 0);
944 BEAST_EXPECT(val.
asString() ==
"54321");
945 BEAST_EXPECT(val.
asInt() == 54321);
946 BEAST_EXPECT(val.
asUInt() == 54321u);
949 BEAST_EXPECT(val.
asBool() ==
true);
964 BEAST_EXPECT(val.
asCString() ==
nullptr);
968 BEAST_EXPECT(val.
asInt() == 0);
969 fail(
"expected exception", __FILE__, __LINE__);
977 BEAST_EXPECT(val.
asUInt() == 0);
978 fail(
"expected exception", __FILE__, __LINE__);
986 BEAST_EXPECT(val.
asBool() ==
false);
1000 BEAST_EXPECT(val.
isBool());
1003 BEAST_EXPECT(val.
asString() ==
"false");
1004 BEAST_EXPECT(val.
asInt() == 0);
1005 BEAST_EXPECT(val.
asUInt() == 0);
1006 BEAST_EXPECT(val.
asDouble() == 0.0);
1007 BEAST_EXPECT(val.
asBool() ==
false);
1021 BEAST_EXPECT(val.
isBool());
1024 BEAST_EXPECT(val.
asString() ==
"true");
1025 BEAST_EXPECT(val.
asInt() == 1);
1026 BEAST_EXPECT(val.
asUInt() == 1);
1027 BEAST_EXPECT(val.
asDouble() == 1.0);
1028 BEAST_EXPECT(val.
asBool() ==
true);
1049 BEAST_EXPECT(val.
asBool() ==
false);
1070 BEAST_EXPECT(val.
asBool() ==
false);
1088 BEAST_EXPECT(val.
size() == 0);
1090 BEAST_EXPECT(!val.
isMember(
"key"));
1094 BEAST_EXPECT(!constVal.
isMember(
"key"));
1097 BEAST_EXPECT(constVal.
get(1u,
"default0") ==
"default0");
1099 BEAST_EXPECT(constVal.
get(
"missing",
"default2") ==
"default2");
1104 BEAST_EXPECT(val.
size() == 0);
1106 BEAST_EXPECT(!val.
isMember(
"key"));
1110 BEAST_EXPECT(val.
size() == 0);
1112 BEAST_EXPECT(!val.
isMember(
"key"));
1116 BEAST_EXPECT(val.
size() == 0);
1118 BEAST_EXPECT(!val.
isMember(
"key"));
1122 BEAST_EXPECT(val.
size() == 0);
1124 BEAST_EXPECT(!val.
isMember(
"key"));
1128 BEAST_EXPECT(val.
size() == 0);
1130 BEAST_EXPECT(!val.
isMember(
"key"));
1134 BEAST_EXPECT(val.
size() == 0);
1136 val[staticThree] = 3;
1138 BEAST_EXPECT(val.
size() == 2);
1141 BEAST_EXPECT(val[staticThree] == 3);
1143 BEAST_EXPECT(val.
isMember(staticThree));
1144 BEAST_EXPECT(!val.
isMember(
"key"));
1147 BEAST_EXPECT(constVal[
"two"] == 2);
1149 BEAST_EXPECT(constVal[staticThree] == 3);
1150 BEAST_EXPECT(constVal.
isMember(
"two"));
1151 BEAST_EXPECT(constVal.
isMember(staticThree));
1152 BEAST_EXPECT(!constVal.
isMember(
"key"));
1154 BEAST_EXPECT(val.
get(
"missing",
"default2") ==
"default2");
1159 BEAST_EXPECT(val.
size() == 0);
1162 BEAST_EXPECT(val.
size() == 2);
1166 BEAST_EXPECT(!val.
isMember(
"key"));
1169 BEAST_EXPECT(constVal[0u] ==
"zero");
1171 BEAST_EXPECT(!constVal.
isMember(
"key"));
1172 BEAST_EXPECT(val.
get(1u,
"default0") ==
"one");
1173 BEAST_EXPECT(val.
get(3u,
"default1") ==
"default1");
1186 val[staticThree] = 3;
1188 BEAST_EXPECT(val.
size() == 2);
1192 BEAST_EXPECT(val.
size() == 2);
1195 BEAST_EXPECT(val.
size() == 1);
1198 BEAST_EXPECT(val.
size() == 1);
1201 BEAST_EXPECT(val.
size() == 0);
1205 BEAST_EXPECT(val.
size() == 0);
1227 BEAST_EXPECT(b != e);
1228 BEAST_EXPECT(!(b == e));
1229 BEAST_EXPECT(i1.
key() == 0);
1230 BEAST_EXPECT(i2.
key() == 3);
1231 BEAST_EXPECT(i1.
index() == 0);
1232 BEAST_EXPECT(i2.
index() == 3);
1238 BEAST_EXPECT(*i1 ==
"one");
1243 BEAST_EXPECT(*i2 ==
"two");
1244 BEAST_EXPECT(i1 == i2);
1246 BEAST_EXPECT(*i1 ==
"2");
1264 BEAST_EXPECT(i1 != i2);
1265 BEAST_EXPECT(!(i1 == i2));
1266 BEAST_EXPECT(i1.key() ==
"0");
1267 BEAST_EXPECT(i2.key() ==
"3");
1268 BEAST_EXPECT(i1.index() == -1);
1269 BEAST_EXPECT(i2.index() == -1);
1270 BEAST_EXPECT(
std::strcmp(i1.memberName(),
"0") == 0);
1271 BEAST_EXPECT(
std::strcmp(i2.memberName(),
"3") == 0);
1274 BEAST_EXPECT(*i1++ == 0);
1275 BEAST_EXPECT(*i1 == 1);
1278 BEAST_EXPECT(*i2-- == 3);
1279 BEAST_EXPECT(*i2 == 2);
1280 BEAST_EXPECT(i1 == i2);
1281 BEAST_EXPECT(*i1 == 2);
1286 BEAST_EXPECT(nul.begin() == nul.end());
1291 BEAST_EXPECT(i.begin() == i.end());
1314 BEAST_EXPECT(r.
parse(json, j));
1321 BEAST_EXPECT(!r.
parse(json, j));
1328 s +=
"\"array\":[{";
1338 BEAST_EXPECT(!r.
parse(json, j));
1352 a = std::move(a[0u]);
1358 temp[
"a"] =
"Probably avoids the small string optimization";
1359 temp[
"b"] =
"Also probably avoids the small string optimization";
1363 BEAST_EXPECT(b.
size() == 1);
1365 b.
append(std::move(temp));
1366 BEAST_EXPECT(b.
size() == 2);
1396BEAST_DEFINE_TESTSUITE(json_value, json,
ripple);
Decorator for streaming out compact json.
Unserialize a JSON document into a Value.
static constexpr unsigned nest_limit
bool parse(std::string const &document, Value &root)
Read a Value from a JSON document.
Lightweight wrapper to tag static string.
constexpr char const * c_str() const
const iterator for object and array value.
Value key() const
Return either the index or the member name of the referenced value as a Value.
char const * memberName() const
Return the member name of the referenced Value.
UInt index() const
Return the index of the referenced Value. -1 if it is not an arrayValue.
Iterator for object and array value.
Value & append(Value const &value)
Append value to array at the end.
UInt size() const
Number of values in array or object.
char const * asCString() const
Members getMemberNames() const
Return a list of the member names.
Value removeMember(char const *key)
Remove and return the named member.
bool isValidIndex(UInt index) const
Return true if index < size().
std::string asString() const
Returns the unquoted string value.
bool isNull() const
isNull() tests to see if this field is null.
bool isMember(char const *key) const
Return true if the object has a member named key.
Value get(UInt index, Value const &defaultValue) const
If the array contains at least index+1 elements, returns the element value, otherwise returns default...
bool isConvertibleTo(ValueType other) const
void pass()
Record a successful test condition.
void fail(String const &reason, char const *file, int line)
Record a failure.
ValueType
Type of the value held by a Value object.
@ stringValue
UTF-8 string value.
@ arrayValue
array value (ordered list)
@ intValue
signed integer value
@ objectValue
object value (collection of name/value pairs).
@ uintValue
unsigned integer value
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Thrown when a conversion is not possible with LexicalCast.
void run() override
Runs the suite.