1// __ _____ _____ _____ 2// __| | __| | | | JSON for Modern C++ (supporting code) 3// | | |__ | | | | | | version 3.11.2 4// |_____|_____|_____|_|___| https://github.com/nlohmann/json 5// 6// SPDX-FileCopyrightText: 2013-2022 Niels Lohmann <https://nlohmann.me> 7// SPDX-License-Identifier: MIT 8 9#include "doctest_compatibility.h" 10 11#define JSON_TESTS_PRIVATE 12#include <nlohmann/json.hpp> 13using nlohmann::json; 14 15TEST_CASE("iterators 1") 16{ 17 SECTION("basic behavior") 18 { 19 SECTION("uninitialized") 20 { 21 json::iterator it; 22 CHECK(it.m_object == nullptr); 23 24 json::const_iterator cit; 25 CHECK(cit.m_object == nullptr); 26 } 27 28 SECTION("boolean") 29 { 30 json j = true; 31 json j_const(j); 32 33 SECTION("json + begin/end") 34 { 35 json::iterator it = j.begin(); 36 CHECK(it != j.end()); 37 CHECK(*it == j); 38 39 it++; 40 CHECK(it != j.begin()); 41 CHECK(it == j.end()); 42 43 it--; 44 CHECK(it == j.begin()); 45 CHECK(it != j.end()); 46 CHECK(*it == j); 47 48 ++it; 49 CHECK(it != j.begin()); 50 CHECK(it == j.end()); 51 52 --it; 53 CHECK(it == j.begin()); 54 CHECK(it != j.end()); 55 CHECK(*it == j); 56 } 57 58 SECTION("const json + begin/end") 59 { 60 json::const_iterator it = j_const.begin(); 61 CHECK(it != j_const.end()); 62 CHECK(*it == j_const); 63 64 it++; 65 CHECK(it != j_const.begin()); 66 CHECK(it == j_const.end()); 67 68 it--; 69 CHECK(it == j_const.begin()); 70 CHECK(it != j_const.end()); 71 CHECK(*it == j_const); 72 73 ++it; 74 CHECK(it != j_const.begin()); 75 CHECK(it == j_const.end()); 76 77 --it; 78 CHECK(it == j_const.begin()); 79 CHECK(it != j_const.end()); 80 CHECK(*it == j_const); 81 } 82 83 SECTION("json + cbegin/cend") 84 { 85 json::const_iterator it = j.cbegin(); 86 CHECK(it != j.cend()); 87 CHECK(*it == j); 88 89 it++; 90 CHECK(it != j.cbegin()); 91 CHECK(it == j.cend()); 92 93 it--; 94 CHECK(it == j.cbegin()); 95 CHECK(it != j.cend()); 96 CHECK(*it == j); 97 98 ++it; 99 CHECK(it != j.cbegin()); 100 CHECK(it == j.cend()); 101 102 --it; 103 CHECK(it == j.cbegin()); 104 CHECK(it != j.cend()); 105 CHECK(*it == j); 106 } 107 108 SECTION("const json + cbegin/cend") 109 { 110 json::const_iterator it = j_const.cbegin(); 111 CHECK(it != j_const.cend()); 112 CHECK(*it == j_const); 113 114 it++; 115 CHECK(it != j_const.cbegin()); 116 CHECK(it == j_const.cend()); 117 118 it--; 119 CHECK(it == j_const.cbegin()); 120 CHECK(it != j_const.cend()); 121 CHECK(*it == j_const); 122 123 ++it; 124 CHECK(it != j_const.cbegin()); 125 CHECK(it == j_const.cend()); 126 127 --it; 128 CHECK(it == j_const.cbegin()); 129 CHECK(it != j_const.cend()); 130 CHECK(*it == j_const); 131 } 132 133 SECTION("json + rbegin/rend") 134 { 135 json::reverse_iterator it = j.rbegin(); 136 CHECK(it != j.rend()); 137 CHECK(*it == j); 138 139 it++; 140 CHECK(it != j.rbegin()); 141 CHECK(it == j.rend()); 142 143 it--; 144 CHECK(it == j.rbegin()); 145 CHECK(it != j.rend()); 146 CHECK(*it == j); 147 148 ++it; 149 CHECK(it != j.rbegin()); 150 CHECK(it == j.rend()); 151 152 --it; 153 CHECK(it == j.rbegin()); 154 CHECK(it != j.rend()); 155 CHECK(*it == j); 156 } 157 158 SECTION("json + crbegin/crend") 159 { 160 json::const_reverse_iterator it = j.crbegin(); 161 CHECK(it != j.crend()); 162 CHECK(*it == j); 163 164 it++; 165 CHECK(it != j.crbegin()); 166 CHECK(it == j.crend()); 167 168 it--; 169 CHECK(it == j.crbegin()); 170 CHECK(it != j.crend()); 171 CHECK(*it == j); 172 173 ++it; 174 CHECK(it != j.crbegin()); 175 CHECK(it == j.crend()); 176 177 --it; 178 CHECK(it == j.crbegin()); 179 CHECK(it != j.crend()); 180 CHECK(*it == j); 181 } 182 183 SECTION("const json + crbegin/crend") 184 { 185 json::const_reverse_iterator it = j_const.crbegin(); 186 CHECK(it != j_const.crend()); 187 CHECK(*it == j_const); 188 189 it++; 190 CHECK(it != j_const.crbegin()); 191 CHECK(it == j_const.crend()); 192 193 it--; 194 CHECK(it == j_const.crbegin()); 195 CHECK(it != j_const.crend()); 196 CHECK(*it == j_const); 197 198 ++it; 199 CHECK(it != j_const.crbegin()); 200 CHECK(it == j_const.crend()); 201 202 --it; 203 CHECK(it == j_const.crbegin()); 204 CHECK(it != j_const.crend()); 205 CHECK(*it == j_const); 206 } 207 208 SECTION("additional tests") 209 { 210 SECTION("!(begin != begin)") 211 { 212 CHECK(!(j.begin() != j.begin())); 213 } 214 215 SECTION("!(end != end)") 216 { 217 CHECK(!(j.end() != j.end())); 218 } 219 220 SECTION("begin < end") 221 { 222 CHECK(j.begin() < j.end()); 223 } 224 225 SECTION("begin <= end") 226 { 227 CHECK(j.begin() <= j.end()); 228 } 229 230 SECTION("end > begin") 231 { 232 CHECK(j.end() > j.begin()); 233 } 234 235 SECTION("end >= begin") 236 { 237 CHECK(j.end() >= j.begin()); 238 } 239 240 SECTION("end == end") 241 { 242 CHECK(j.end() == j.end()); 243 } 244 245 SECTION("end <= end") 246 { 247 CHECK(j.end() <= j.end()); 248 } 249 250 SECTION("begin == begin") 251 { 252 CHECK(j.begin() == j.begin()); 253 } 254 255 SECTION("begin <= begin") 256 { 257 CHECK(j.begin() <= j.begin()); 258 } 259 260 SECTION("begin >= begin") 261 { 262 CHECK(j.begin() >= j.begin()); 263 } 264 265 SECTION("!(begin == end)") 266 { 267 CHECK(!(j.begin() == j.end())); 268 } 269 270 SECTION("begin != end") 271 { 272 CHECK(j.begin() != j.end()); 273 } 274 275 SECTION("begin+1 == end") 276 { 277 CHECK(j.begin() + 1 == j.end()); 278 } 279 280 SECTION("begin == end-1") 281 { 282 CHECK(j.begin() == j.end() - 1); 283 } 284 285 SECTION("begin != end+1") 286 { 287 CHECK(j.begin() != j.end() + 1); 288 } 289 290 SECTION("end != end+1") 291 { 292 CHECK(j.end() != j.end() + 1); 293 } 294 295 SECTION("begin+1 != begin+2") 296 { 297 CHECK(j.begin() + 1 != j.begin() + 2); 298 } 299 300 SECTION("begin+1 < begin+2") 301 { 302 CHECK(j.begin() + 1 < j.begin() + 2); 303 } 304 305 SECTION("begin+1 <= begin+2") 306 { 307 CHECK(j.begin() + 1 <= j.begin() + 2); 308 } 309 310 SECTION("end+1 != end+2") 311 { 312 CHECK(j.end() + 1 != j.end() + 2); 313 } 314 } 315 316 SECTION("key/value") 317 { 318 auto it = j.begin(); 319 auto cit = j_const.cbegin(); 320 CHECK_THROWS_WITH_AS(it.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 321 CHECK(it.value() == json(true)); 322 CHECK_THROWS_WITH_AS(cit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 323 CHECK(cit.value() == json(true)); 324 325 auto rit = j.rend(); 326 auto crit = j.crend(); 327 CHECK_THROWS_WITH_AS(rit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 328 CHECK_THROWS_WITH_AS(rit.value(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 329 CHECK_THROWS_WITH_AS(crit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 330 CHECK_THROWS_WITH_AS(crit.value(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 331 } 332 } 333 334 SECTION("string") 335 { 336 json j = "hello world"; 337 json j_const(j); 338 339 SECTION("json + begin/end") 340 { 341 json::iterator it = j.begin(); 342 CHECK(it != j.end()); 343 CHECK(*it == j); 344 345 it++; 346 CHECK(it != j.begin()); 347 CHECK(it == j.end()); 348 349 it--; 350 CHECK(it == j.begin()); 351 CHECK(it != j.end()); 352 CHECK(*it == j); 353 354 ++it; 355 CHECK(it != j.begin()); 356 CHECK(it == j.end()); 357 358 --it; 359 CHECK(it == j.begin()); 360 CHECK(it != j.end()); 361 CHECK(*it == j); 362 } 363 364 SECTION("const json + begin/end") 365 { 366 json::const_iterator it = j_const.begin(); 367 CHECK(it != j_const.end()); 368 CHECK(*it == j_const); 369 370 it++; 371 CHECK(it != j_const.begin()); 372 CHECK(it == j_const.end()); 373 374 it--; 375 CHECK(it == j_const.begin()); 376 CHECK(it != j_const.end()); 377 CHECK(*it == j_const); 378 379 ++it; 380 CHECK(it != j_const.begin()); 381 CHECK(it == j_const.end()); 382 383 --it; 384 CHECK(it == j_const.begin()); 385 CHECK(it != j_const.end()); 386 CHECK(*it == j_const); 387 } 388 389 SECTION("json + cbegin/cend") 390 { 391 json::const_iterator it = j.cbegin(); 392 CHECK(it != j.cend()); 393 CHECK(*it == j); 394 395 it++; 396 CHECK(it != j.cbegin()); 397 CHECK(it == j.cend()); 398 399 it--; 400 CHECK(it == j.cbegin()); 401 CHECK(it != j.cend()); 402 CHECK(*it == j); 403 404 ++it; 405 CHECK(it != j.cbegin()); 406 CHECK(it == j.cend()); 407 408 --it; 409 CHECK(it == j.cbegin()); 410 CHECK(it != j.cend()); 411 CHECK(*it == j); 412 } 413 414 SECTION("const json + cbegin/cend") 415 { 416 json::const_iterator it = j_const.cbegin(); 417 CHECK(it != j_const.cend()); 418 CHECK(*it == j_const); 419 420 it++; 421 CHECK(it != j_const.cbegin()); 422 CHECK(it == j_const.cend()); 423 424 it--; 425 CHECK(it == j_const.cbegin()); 426 CHECK(it != j_const.cend()); 427 CHECK(*it == j_const); 428 429 ++it; 430 CHECK(it != j_const.cbegin()); 431 CHECK(it == j_const.cend()); 432 433 --it; 434 CHECK(it == j_const.cbegin()); 435 CHECK(it != j_const.cend()); 436 CHECK(*it == j_const); 437 } 438 439 SECTION("json + rbegin/rend") 440 { 441 json::reverse_iterator it = j.rbegin(); 442 CHECK(it != j.rend()); 443 CHECK(*it == j); 444 445 it++; 446 CHECK(it != j.rbegin()); 447 CHECK(it == j.rend()); 448 449 it--; 450 CHECK(it == j.rbegin()); 451 CHECK(it != j.rend()); 452 CHECK(*it == j); 453 454 ++it; 455 CHECK(it != j.rbegin()); 456 CHECK(it == j.rend()); 457 458 --it; 459 CHECK(it == j.rbegin()); 460 CHECK(it != j.rend()); 461 CHECK(*it == j); 462 } 463 464 SECTION("json + crbegin/crend") 465 { 466 json::const_reverse_iterator it = j.crbegin(); 467 CHECK(it != j.crend()); 468 CHECK(*it == j); 469 470 it++; 471 CHECK(it != j.crbegin()); 472 CHECK(it == j.crend()); 473 474 it--; 475 CHECK(it == j.crbegin()); 476 CHECK(it != j.crend()); 477 CHECK(*it == j); 478 479 ++it; 480 CHECK(it != j.crbegin()); 481 CHECK(it == j.crend()); 482 483 --it; 484 CHECK(it == j.crbegin()); 485 CHECK(it != j.crend()); 486 CHECK(*it == j); 487 } 488 489 SECTION("const json + crbegin/crend") 490 { 491 json::const_reverse_iterator it = j_const.crbegin(); 492 CHECK(it != j_const.crend()); 493 CHECK(*it == j_const); 494 495 it++; 496 CHECK(it != j_const.crbegin()); 497 CHECK(it == j_const.crend()); 498 499 it--; 500 CHECK(it == j_const.crbegin()); 501 CHECK(it != j_const.crend()); 502 CHECK(*it == j_const); 503 504 ++it; 505 CHECK(it != j_const.crbegin()); 506 CHECK(it == j_const.crend()); 507 508 --it; 509 CHECK(it == j_const.crbegin()); 510 CHECK(it != j_const.crend()); 511 CHECK(*it == j_const); 512 } 513 514 SECTION("key/value") 515 { 516 auto it = j.begin(); 517 auto cit = j_const.cbegin(); 518 CHECK_THROWS_WITH_AS(it.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 519 CHECK(it.value() == json("hello world")); 520 CHECK_THROWS_WITH_AS(cit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 521 CHECK(cit.value() == json("hello world")); 522 523 auto rit = j.rend(); 524 auto crit = j.crend(); 525 CHECK_THROWS_WITH_AS(rit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 526 CHECK_THROWS_WITH_AS(rit.value(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 527 CHECK_THROWS_WITH_AS(crit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 528 CHECK_THROWS_WITH_AS(crit.value(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 529 } 530 } 531 532 SECTION("array") 533 { 534 json j = {1, 2, 3}; 535 json j_const(j); 536 537 SECTION("json + begin/end") 538 { 539 json::iterator it_begin = j.begin(); 540 json::iterator it_end = j.end(); 541 542 auto it = it_begin; 543 CHECK(it != it_end); 544 CHECK(*it == j[0]); 545 546 it++; 547 CHECK(it != it_begin); 548 CHECK(it != it_end); 549 CHECK(*it == j[1]); 550 551 ++it; 552 CHECK(it != it_begin); 553 CHECK(it != it_end); 554 CHECK(*it == j[2]); 555 556 ++it; 557 CHECK(it != it_begin); 558 CHECK(it == it_end); 559 } 560 561 SECTION("const json + begin/end") 562 { 563 json::const_iterator it_begin = j_const.begin(); 564 json::const_iterator it_end = j_const.end(); 565 566 auto it = it_begin; 567 CHECK(it != it_end); 568 CHECK(*it == j_const[0]); 569 570 it++; 571 CHECK(it != it_begin); 572 CHECK(it != it_end); 573 CHECK(*it == j_const[1]); 574 575 ++it; 576 CHECK(it != it_begin); 577 CHECK(it != it_end); 578 CHECK(*it == j_const[2]); 579 580 ++it; 581 CHECK(it != it_begin); 582 CHECK(it == it_end); 583 } 584 585 SECTION("json + cbegin/cend") 586 { 587 json::const_iterator it_begin = j.cbegin(); 588 json::const_iterator it_end = j.cend(); 589 590 auto it = it_begin; 591 CHECK(it != it_end); 592 CHECK(*it == j[0]); 593 594 it++; 595 CHECK(it != it_begin); 596 CHECK(it != it_end); 597 CHECK(*it == j[1]); 598 599 ++it; 600 CHECK(it != it_begin); 601 CHECK(it != it_end); 602 CHECK(*it == j[2]); 603 604 ++it; 605 CHECK(it != it_begin); 606 CHECK(it == it_end); 607 } 608 609 SECTION("const json + cbegin/cend") 610 { 611 json::const_iterator it_begin = j_const.cbegin(); 612 json::const_iterator it_end = j_const.cend(); 613 614 auto it = it_begin; 615 CHECK(it != it_end); 616 CHECK(*it == j[0]); 617 618 it++; 619 CHECK(it != it_begin); 620 CHECK(it != it_end); 621 CHECK(*it == j[1]); 622 623 ++it; 624 CHECK(it != it_begin); 625 CHECK(it != it_end); 626 CHECK(*it == j[2]); 627 628 ++it; 629 CHECK(it != it_begin); 630 CHECK(it == it_end); 631 } 632 633 SECTION("json + rbegin/rend") 634 { 635 json::reverse_iterator it_begin = j.rbegin(); 636 json::reverse_iterator it_end = j.rend(); 637 638 auto it = it_begin; 639 CHECK(it != it_end); 640 CHECK(*it == j[2]); 641 642 it++; 643 CHECK(it != it_begin); 644 CHECK(it != it_end); 645 CHECK(*it == j[1]); 646 647 ++it; 648 CHECK(it != it_begin); 649 CHECK(it != it_end); 650 CHECK(*it == j[0]); 651 652 ++it; 653 CHECK(it != it_begin); 654 CHECK(it == it_end); 655 } 656 657 SECTION("json + crbegin/crend") 658 { 659 json::const_reverse_iterator it_begin = j.crbegin(); 660 json::const_reverse_iterator it_end = j.crend(); 661 662 auto it = it_begin; 663 CHECK(it != it_end); 664 CHECK(*it == j[2]); 665 666 it++; 667 CHECK(it != it_begin); 668 CHECK(it != it_end); 669 CHECK(*it == j[1]); 670 671 ++it; 672 CHECK(it != it_begin); 673 CHECK(it != it_end); 674 CHECK(*it == j[0]); 675 676 ++it; 677 CHECK(it != it_begin); 678 CHECK(it == it_end); 679 } 680 681 SECTION("const json + crbegin/crend") 682 { 683 json::const_reverse_iterator it_begin = j_const.crbegin(); 684 json::const_reverse_iterator it_end = j_const.crend(); 685 686 auto it = it_begin; 687 CHECK(it != it_end); 688 CHECK(*it == j[2]); 689 690 it++; 691 CHECK(it != it_begin); 692 CHECK(it != it_end); 693 CHECK(*it == j[1]); 694 695 ++it; 696 CHECK(it != it_begin); 697 CHECK(it != it_end); 698 CHECK(*it == j[0]); 699 700 ++it; 701 CHECK(it != it_begin); 702 CHECK(it == it_end); 703 } 704 705 SECTION("key/value") 706 { 707 auto it = j.begin(); 708 auto cit = j_const.cbegin(); 709 CHECK_THROWS_WITH_AS(it.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 710 CHECK(it.value() == json(1)); 711 CHECK_THROWS_WITH_AS(cit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 712 CHECK(cit.value() == json(1)); 713 } 714 } 715 716 SECTION("object") 717 { 718 json j = {{"A", 1}, {"B", 2}, {"C", 3}}; 719 json j_const(j); 720 721 SECTION("json + begin/end") 722 { 723 json::iterator it_begin = j.begin(); 724 json::iterator it_end = j.end(); 725 726 auto it = it_begin; 727 CHECK(it != it_end); 728 CHECK(*it == j["A"]); 729 730 it++; 731 CHECK(it != it_begin); 732 CHECK(it != it_end); 733 CHECK(*it == j["B"]); 734 735 ++it; 736 CHECK(it != it_begin); 737 CHECK(it != it_end); 738 CHECK(*it == j["C"]); 739 740 ++it; 741 CHECK(it != it_begin); 742 CHECK(it == it_end); 743 } 744 745 SECTION("const json + begin/end") 746 { 747 json::const_iterator it_begin = j_const.begin(); 748 json::const_iterator it_end = j_const.end(); 749 750 auto it = it_begin; 751 CHECK(it != it_end); 752 CHECK(*it == j_const["A"]); 753 754 it++; 755 CHECK(it != it_begin); 756 CHECK(it != it_end); 757 CHECK(*it == j_const["B"]); 758 759 ++it; 760 CHECK(it != it_begin); 761 CHECK(it != it_end); 762 CHECK(*it == j_const["C"]); 763 764 ++it; 765 CHECK(it != it_begin); 766 CHECK(it == it_end); 767 } 768 769 SECTION("json + cbegin/cend") 770 { 771 json::const_iterator it_begin = j.cbegin(); 772 json::const_iterator it_end = j.cend(); 773 774 auto it = it_begin; 775 CHECK(it != it_end); 776 CHECK(*it == j["A"]); 777 778 it++; 779 CHECK(it != it_begin); 780 CHECK(it != it_end); 781 CHECK(*it == j["B"]); 782 783 ++it; 784 CHECK(it != it_begin); 785 CHECK(it != it_end); 786 CHECK(*it == j["C"]); 787 788 ++it; 789 CHECK(it != it_begin); 790 CHECK(it == it_end); 791 } 792 793 SECTION("const json + cbegin/cend") 794 { 795 json::const_iterator it_begin = j_const.cbegin(); 796 json::const_iterator it_end = j_const.cend(); 797 798 auto it = it_begin; 799 CHECK(it != it_end); 800 CHECK(*it == j_const["A"]); 801 802 it++; 803 CHECK(it != it_begin); 804 CHECK(it != it_end); 805 CHECK(*it == j_const["B"]); 806 807 ++it; 808 CHECK(it != it_begin); 809 CHECK(it != it_end); 810 CHECK(*it == j_const["C"]); 811 812 ++it; 813 CHECK(it != it_begin); 814 CHECK(it == it_end); 815 } 816 817 SECTION("json + rbegin/rend") 818 { 819 json::reverse_iterator it_begin = j.rbegin(); 820 json::reverse_iterator it_end = j.rend(); 821 822 auto it = it_begin; 823 CHECK(it != it_end); 824 CHECK(*it == j["C"]); 825 826 it++; 827 CHECK(it != it_begin); 828 CHECK(it != it_end); 829 CHECK(*it == j["B"]); 830 831 ++it; 832 CHECK(it != it_begin); 833 CHECK(it != it_end); 834 CHECK(*it == j["A"]); 835 836 ++it; 837 CHECK(it != it_begin); 838 CHECK(it == it_end); 839 } 840 841 SECTION("json + crbegin/crend") 842 { 843 json::const_reverse_iterator it_begin = j.crbegin(); 844 json::const_reverse_iterator it_end = j.crend(); 845 846 auto it = it_begin; 847 CHECK(it != it_end); 848 CHECK(*it == j["C"]); 849 850 it++; 851 CHECK(it != it_begin); 852 CHECK(it != it_end); 853 CHECK(*it == j["B"]); 854 855 ++it; 856 CHECK(it != it_begin); 857 CHECK(it != it_end); 858 CHECK(*it == j["A"]); 859 860 ++it; 861 CHECK(it != it_begin); 862 CHECK(it == it_end); 863 } 864 865 SECTION("const json + crbegin/crend") 866 { 867 json::const_reverse_iterator it_begin = j_const.crbegin(); 868 json::const_reverse_iterator it_end = j_const.crend(); 869 870 auto it = it_begin; 871 CHECK(it != it_end); 872 CHECK(*it == j["C"]); 873 874 it++; 875 CHECK(it != it_begin); 876 CHECK(it != it_end); 877 CHECK(*it == j["B"]); 878 879 ++it; 880 CHECK(it != it_begin); 881 CHECK(it != it_end); 882 CHECK(*it == j["A"]); 883 884 ++it; 885 CHECK(it != it_begin); 886 CHECK(it == it_end); 887 } 888 889 SECTION("key/value") 890 { 891 auto it = j.begin(); 892 auto cit = j_const.cbegin(); 893 CHECK(it.key() == "A"); 894 CHECK(it.value() == json(1)); 895 CHECK(cit.key() == "A"); 896 CHECK(cit.value() == json(1)); 897 } 898 } 899 900 SECTION("number (integer)") 901 { 902 json j = 23; 903 json j_const(j); 904 905 SECTION("json + begin/end") 906 { 907 json::iterator it = j.begin(); 908 CHECK(it != j.end()); 909 CHECK(*it == j); 910 911 it++; 912 CHECK(it != j.begin()); 913 CHECK(it == j.end()); 914 915 it--; 916 CHECK(it == j.begin()); 917 CHECK(it != j.end()); 918 CHECK(*it == j); 919 920 ++it; 921 CHECK(it != j.begin()); 922 CHECK(it == j.end()); 923 924 --it; 925 CHECK(it == j.begin()); 926 CHECK(it != j.end()); 927 CHECK(*it == j); 928 } 929 930 SECTION("const json + begin/end") 931 { 932 json::const_iterator it = j_const.begin(); 933 CHECK(it != j_const.end()); 934 CHECK(*it == j_const); 935 936 it++; 937 CHECK(it != j_const.begin()); 938 CHECK(it == j_const.end()); 939 940 it--; 941 CHECK(it == j_const.begin()); 942 CHECK(it != j_const.end()); 943 CHECK(*it == j_const); 944 945 ++it; 946 CHECK(it != j_const.begin()); 947 CHECK(it == j_const.end()); 948 949 --it; 950 CHECK(it == j_const.begin()); 951 CHECK(it != j_const.end()); 952 CHECK(*it == j_const); 953 } 954 955 SECTION("json + cbegin/cend") 956 { 957 json::const_iterator it = j.cbegin(); 958 CHECK(it != j.cend()); 959 CHECK(*it == j); 960 961 it++; 962 CHECK(it != j.cbegin()); 963 CHECK(it == j.cend()); 964 965 it--; 966 CHECK(it == j.cbegin()); 967 CHECK(it != j.cend()); 968 CHECK(*it == j); 969 970 ++it; 971 CHECK(it != j.cbegin()); 972 CHECK(it == j.cend()); 973 974 --it; 975 CHECK(it == j.cbegin()); 976 CHECK(it != j.cend()); 977 CHECK(*it == j); 978 } 979 980 SECTION("const json + cbegin/cend") 981 { 982 json::const_iterator it = j_const.cbegin(); 983 CHECK(it != j_const.cend()); 984 CHECK(*it == j_const); 985 986 it++; 987 CHECK(it != j_const.cbegin()); 988 CHECK(it == j_const.cend()); 989 990 it--; 991 CHECK(it == j_const.cbegin()); 992 CHECK(it != j_const.cend()); 993 CHECK(*it == j_const); 994 995 ++it; 996 CHECK(it != j_const.cbegin()); 997 CHECK(it == j_const.cend()); 998 999 --it; 1000 CHECK(it == j_const.cbegin()); 1001 CHECK(it != j_const.cend()); 1002 CHECK(*it == j_const); 1003 } 1004 1005 SECTION("json + rbegin/rend") 1006 { 1007 json::reverse_iterator it = j.rbegin(); 1008 CHECK(it != j.rend()); 1009 CHECK(*it == j); 1010 1011 it++; 1012 CHECK(it != j.rbegin()); 1013 CHECK(it == j.rend()); 1014 1015 it--; 1016 CHECK(it == j.rbegin()); 1017 CHECK(it != j.rend()); 1018 CHECK(*it == j); 1019 1020 ++it; 1021 CHECK(it != j.rbegin()); 1022 CHECK(it == j.rend()); 1023 1024 --it; 1025 CHECK(it == j.rbegin()); 1026 CHECK(it != j.rend()); 1027 CHECK(*it == j); 1028 } 1029 1030 SECTION("json + crbegin/crend") 1031 { 1032 json::const_reverse_iterator it = j.crbegin(); 1033 CHECK(it != j.crend()); 1034 CHECK(*it == j); 1035 1036 it++; 1037 CHECK(it != j.crbegin()); 1038 CHECK(it == j.crend()); 1039 1040 it--; 1041 CHECK(it == j.crbegin()); 1042 CHECK(it != j.crend()); 1043 CHECK(*it == j); 1044 1045 ++it; 1046 CHECK(it != j.crbegin()); 1047 CHECK(it == j.crend()); 1048 1049 --it; 1050 CHECK(it == j.crbegin()); 1051 CHECK(it != j.crend()); 1052 CHECK(*it == j); 1053 } 1054 1055 SECTION("const json + crbegin/crend") 1056 { 1057 json::const_reverse_iterator it = j_const.crbegin(); 1058 CHECK(it != j_const.crend()); 1059 CHECK(*it == j_const); 1060 1061 it++; 1062 CHECK(it != j_const.crbegin()); 1063 CHECK(it == j_const.crend()); 1064 1065 it--; 1066 CHECK(it == j_const.crbegin()); 1067 CHECK(it != j_const.crend()); 1068 CHECK(*it == j_const); 1069 1070 ++it; 1071 CHECK(it != j_const.crbegin()); 1072 CHECK(it == j_const.crend()); 1073 1074 --it; 1075 CHECK(it == j_const.crbegin()); 1076 CHECK(it != j_const.crend()); 1077 CHECK(*it == j_const); 1078 } 1079 1080 SECTION("key/value") 1081 { 1082 auto it = j.begin(); 1083 auto cit = j_const.cbegin(); 1084 CHECK_THROWS_WITH_AS(it.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 1085 CHECK(it.value() == json(23)); 1086 CHECK_THROWS_WITH_AS(cit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 1087 CHECK(cit.value() == json(23)); 1088 1089 auto rit = j.rend(); 1090 auto crit = j.crend(); 1091 CHECK_THROWS_WITH_AS(rit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 1092 CHECK_THROWS_WITH_AS(rit.value(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 1093 CHECK_THROWS_WITH_AS(crit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 1094 CHECK_THROWS_WITH_AS(crit.value(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 1095 } 1096 } 1097 1098 SECTION("number (unsigned)") 1099 { 1100 json j = 23u; 1101 json j_const(j); 1102 1103 SECTION("json + begin/end") 1104 { 1105 json::iterator it = j.begin(); 1106 CHECK(it != j.end()); 1107 CHECK(*it == j); 1108 1109 it++; 1110 CHECK(it != j.begin()); 1111 CHECK(it == j.end()); 1112 1113 it--; 1114 CHECK(it == j.begin()); 1115 CHECK(it != j.end()); 1116 CHECK(*it == j); 1117 1118 ++it; 1119 CHECK(it != j.begin()); 1120 CHECK(it == j.end()); 1121 1122 --it; 1123 CHECK(it == j.begin()); 1124 CHECK(it != j.end()); 1125 CHECK(*it == j); 1126 } 1127 1128 SECTION("const json + begin/end") 1129 { 1130 json::const_iterator it = j_const.begin(); 1131 CHECK(it != j_const.end()); 1132 CHECK(*it == j_const); 1133 1134 it++; 1135 CHECK(it != j_const.begin()); 1136 CHECK(it == j_const.end()); 1137 1138 it--; 1139 CHECK(it == j_const.begin()); 1140 CHECK(it != j_const.end()); 1141 CHECK(*it == j_const); 1142 1143 ++it; 1144 CHECK(it != j_const.begin()); 1145 CHECK(it == j_const.end()); 1146 1147 --it; 1148 CHECK(it == j_const.begin()); 1149 CHECK(it != j_const.end()); 1150 CHECK(*it == j_const); 1151 } 1152 1153 SECTION("json + cbegin/cend") 1154 { 1155 json::const_iterator it = j.cbegin(); 1156 CHECK(it != j.cend()); 1157 CHECK(*it == j); 1158 1159 it++; 1160 CHECK(it != j.cbegin()); 1161 CHECK(it == j.cend()); 1162 1163 it--; 1164 CHECK(it == j.cbegin()); 1165 CHECK(it != j.cend()); 1166 CHECK(*it == j); 1167 1168 ++it; 1169 CHECK(it != j.cbegin()); 1170 CHECK(it == j.cend()); 1171 1172 --it; 1173 CHECK(it == j.cbegin()); 1174 CHECK(it != j.cend()); 1175 CHECK(*it == j); 1176 } 1177 1178 SECTION("const json + cbegin/cend") 1179 { 1180 json::const_iterator it = j_const.cbegin(); 1181 CHECK(it != j_const.cend()); 1182 CHECK(*it == j_const); 1183 1184 it++; 1185 CHECK(it != j_const.cbegin()); 1186 CHECK(it == j_const.cend()); 1187 1188 it--; 1189 CHECK(it == j_const.cbegin()); 1190 CHECK(it != j_const.cend()); 1191 CHECK(*it == j_const); 1192 1193 ++it; 1194 CHECK(it != j_const.cbegin()); 1195 CHECK(it == j_const.cend()); 1196 1197 --it; 1198 CHECK(it == j_const.cbegin()); 1199 CHECK(it != j_const.cend()); 1200 CHECK(*it == j_const); 1201 } 1202 1203 SECTION("json + rbegin/rend") 1204 { 1205 json::reverse_iterator it = j.rbegin(); 1206 CHECK(it != j.rend()); 1207 CHECK(*it == j); 1208 1209 it++; 1210 CHECK(it != j.rbegin()); 1211 CHECK(it == j.rend()); 1212 1213 it--; 1214 CHECK(it == j.rbegin()); 1215 CHECK(it != j.rend()); 1216 CHECK(*it == j); 1217 1218 ++it; 1219 CHECK(it != j.rbegin()); 1220 CHECK(it == j.rend()); 1221 1222 --it; 1223 CHECK(it == j.rbegin()); 1224 CHECK(it != j.rend()); 1225 CHECK(*it == j); 1226 } 1227 1228 SECTION("json + crbegin/crend") 1229 { 1230 json::const_reverse_iterator it = j.crbegin(); 1231 CHECK(it != j.crend()); 1232 CHECK(*it == j); 1233 1234 it++; 1235 CHECK(it != j.crbegin()); 1236 CHECK(it == j.crend()); 1237 1238 it--; 1239 CHECK(it == j.crbegin()); 1240 CHECK(it != j.crend()); 1241 CHECK(*it == j); 1242 1243 ++it; 1244 CHECK(it != j.crbegin()); 1245 CHECK(it == j.crend()); 1246 1247 --it; 1248 CHECK(it == j.crbegin()); 1249 CHECK(it != j.crend()); 1250 CHECK(*it == j); 1251 } 1252 1253 SECTION("const json + crbegin/crend") 1254 { 1255 json::const_reverse_iterator it = j_const.crbegin(); 1256 CHECK(it != j_const.crend()); 1257 CHECK(*it == j_const); 1258 1259 it++; 1260 CHECK(it != j_const.crbegin()); 1261 CHECK(it == j_const.crend()); 1262 1263 it--; 1264 CHECK(it == j_const.crbegin()); 1265 CHECK(it != j_const.crend()); 1266 CHECK(*it == j_const); 1267 1268 ++it; 1269 CHECK(it != j_const.crbegin()); 1270 CHECK(it == j_const.crend()); 1271 1272 --it; 1273 CHECK(it == j_const.crbegin()); 1274 CHECK(it != j_const.crend()); 1275 CHECK(*it == j_const); 1276 } 1277 1278 SECTION("key/value") 1279 { 1280 auto it = j.begin(); 1281 auto cit = j_const.cbegin(); 1282 CHECK_THROWS_WITH_AS(it.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 1283 CHECK(it.value() == json(23)); 1284 CHECK_THROWS_WITH_AS(cit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 1285 CHECK(cit.value() == json(23)); 1286 1287 auto rit = j.rend(); 1288 auto crit = j.crend(); 1289 CHECK_THROWS_WITH_AS(rit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 1290 CHECK_THROWS_WITH_AS(rit.value(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 1291 CHECK_THROWS_WITH_AS(crit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 1292 CHECK_THROWS_WITH_AS(crit.value(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 1293 } 1294 } 1295 1296 SECTION("number (float)") 1297 { 1298 json j = 23.42; 1299 json j_const(j); 1300 1301 SECTION("json + begin/end") 1302 { 1303 json::iterator it = j.begin(); 1304 CHECK(it != j.end()); 1305 CHECK(*it == j); 1306 1307 it++; 1308 CHECK(it != j.begin()); 1309 CHECK(it == j.end()); 1310 1311 it--; 1312 CHECK(it == j.begin()); 1313 CHECK(it != j.end()); 1314 CHECK(*it == j); 1315 1316 ++it; 1317 CHECK(it != j.begin()); 1318 CHECK(it == j.end()); 1319 1320 --it; 1321 CHECK(it == j.begin()); 1322 CHECK(it != j.end()); 1323 CHECK(*it == j); 1324 } 1325 1326 SECTION("const json + begin/end") 1327 { 1328 json::const_iterator it = j_const.begin(); 1329 CHECK(it != j_const.end()); 1330 CHECK(*it == j_const); 1331 1332 it++; 1333 CHECK(it != j_const.begin()); 1334 CHECK(it == j_const.end()); 1335 1336 it--; 1337 CHECK(it == j_const.begin()); 1338 CHECK(it != j_const.end()); 1339 CHECK(*it == j_const); 1340 1341 ++it; 1342 CHECK(it != j_const.begin()); 1343 CHECK(it == j_const.end()); 1344 1345 --it; 1346 CHECK(it == j_const.begin()); 1347 CHECK(it != j_const.end()); 1348 CHECK(*it == j_const); 1349 } 1350 1351 SECTION("json + cbegin/cend") 1352 { 1353 json::const_iterator it = j.cbegin(); 1354 CHECK(it != j.cend()); 1355 CHECK(*it == j); 1356 1357 it++; 1358 CHECK(it != j.cbegin()); 1359 CHECK(it == j.cend()); 1360 1361 it--; 1362 CHECK(it == j.cbegin()); 1363 CHECK(it != j.cend()); 1364 CHECK(*it == j); 1365 1366 ++it; 1367 CHECK(it != j.cbegin()); 1368 CHECK(it == j.cend()); 1369 1370 --it; 1371 CHECK(it == j.cbegin()); 1372 CHECK(it != j.cend()); 1373 CHECK(*it == j); 1374 } 1375 1376 SECTION("const json + cbegin/cend") 1377 { 1378 json::const_iterator it = j_const.cbegin(); 1379 CHECK(it != j_const.cend()); 1380 CHECK(*it == j_const); 1381 1382 it++; 1383 CHECK(it != j_const.cbegin()); 1384 CHECK(it == j_const.cend()); 1385 1386 it--; 1387 CHECK(it == j_const.cbegin()); 1388 CHECK(it != j_const.cend()); 1389 CHECK(*it == j_const); 1390 1391 ++it; 1392 CHECK(it != j_const.cbegin()); 1393 CHECK(it == j_const.cend()); 1394 1395 --it; 1396 CHECK(it == j_const.cbegin()); 1397 CHECK(it != j_const.cend()); 1398 CHECK(*it == j_const); 1399 } 1400 1401 SECTION("json + rbegin/rend") 1402 { 1403 json::reverse_iterator it = j.rbegin(); 1404 CHECK(it != j.rend()); 1405 CHECK(*it == j); 1406 1407 it++; 1408 CHECK(it != j.rbegin()); 1409 CHECK(it == j.rend()); 1410 1411 it--; 1412 CHECK(it == j.rbegin()); 1413 CHECK(it != j.rend()); 1414 CHECK(*it == j); 1415 1416 ++it; 1417 CHECK(it != j.rbegin()); 1418 CHECK(it == j.rend()); 1419 1420 --it; 1421 CHECK(it == j.rbegin()); 1422 CHECK(it != j.rend()); 1423 CHECK(*it == j); 1424 } 1425 1426 SECTION("json + crbegin/crend") 1427 { 1428 json::const_reverse_iterator it = j.crbegin(); 1429 CHECK(it != j.crend()); 1430 CHECK(*it == j); 1431 1432 it++; 1433 CHECK(it != j.crbegin()); 1434 CHECK(it == j.crend()); 1435 1436 it--; 1437 CHECK(it == j.crbegin()); 1438 CHECK(it != j.crend()); 1439 CHECK(*it == j); 1440 1441 ++it; 1442 CHECK(it != j.crbegin()); 1443 CHECK(it == j.crend()); 1444 1445 --it; 1446 CHECK(it == j.crbegin()); 1447 CHECK(it != j.crend()); 1448 CHECK(*it == j); 1449 } 1450 1451 SECTION("const json + crbegin/crend") 1452 { 1453 json::const_reverse_iterator it = j_const.crbegin(); 1454 CHECK(it != j_const.crend()); 1455 CHECK(*it == j_const); 1456 1457 it++; 1458 CHECK(it != j_const.crbegin()); 1459 CHECK(it == j_const.crend()); 1460 1461 it--; 1462 CHECK(it == j_const.crbegin()); 1463 CHECK(it != j_const.crend()); 1464 CHECK(*it == j_const); 1465 1466 ++it; 1467 CHECK(it != j_const.crbegin()); 1468 CHECK(it == j_const.crend()); 1469 1470 --it; 1471 CHECK(it == j_const.crbegin()); 1472 CHECK(it != j_const.crend()); 1473 CHECK(*it == j_const); 1474 } 1475 1476 SECTION("key/value") 1477 { 1478 auto it = j.begin(); 1479 auto cit = j_const.cbegin(); 1480 CHECK_THROWS_WITH_AS(it.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 1481 CHECK(it.value() == json(23.42)); 1482 CHECK_THROWS_WITH_AS(cit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 1483 CHECK(cit.value() == json(23.42)); 1484 1485 auto rit = j.rend(); 1486 auto crit = j.crend(); 1487 CHECK_THROWS_WITH_AS(rit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 1488 CHECK_THROWS_WITH_AS(rit.value(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 1489 CHECK_THROWS_WITH_AS(crit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 1490 CHECK_THROWS_WITH_AS(crit.value(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 1491 } 1492 } 1493 1494 SECTION("null") 1495 { 1496 json j = nullptr; 1497 json j_const(j); 1498 1499 SECTION("json + begin/end") 1500 { 1501 json::iterator it = j.begin(); 1502 CHECK(it == j.end()); 1503 } 1504 1505 SECTION("const json + begin/end") 1506 { 1507 json::const_iterator it_begin = j_const.begin(); 1508 json::const_iterator it_end = j_const.end(); 1509 CHECK(it_begin == it_end); 1510 } 1511 1512 SECTION("json + cbegin/cend") 1513 { 1514 json::const_iterator it_begin = j.cbegin(); 1515 json::const_iterator it_end = j.cend(); 1516 CHECK(it_begin == it_end); 1517 } 1518 1519 SECTION("const json + cbegin/cend") 1520 { 1521 json::const_iterator it_begin = j_const.cbegin(); 1522 json::const_iterator it_end = j_const.cend(); 1523 CHECK(it_begin == it_end); 1524 } 1525 1526 SECTION("json + rbegin/rend") 1527 { 1528 json::reverse_iterator it = j.rbegin(); 1529 CHECK(it == j.rend()); 1530 } 1531 1532 SECTION("json + crbegin/crend") 1533 { 1534 json::const_reverse_iterator it = j.crbegin(); 1535 CHECK(it == j.crend()); 1536 } 1537 1538 SECTION("const json + crbegin/crend") 1539 { 1540 json::const_reverse_iterator it = j_const.crbegin(); 1541 CHECK(it == j_const.crend()); 1542 } 1543 1544 SECTION("key/value") 1545 { 1546 auto it = j.begin(); 1547 auto cit = j_const.cbegin(); 1548 CHECK_THROWS_WITH_AS(it.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 1549 CHECK_THROWS_WITH_AS(it.value(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 1550 CHECK_THROWS_WITH_AS(cit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 1551 CHECK_THROWS_WITH_AS(cit.value(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 1552 1553 auto rit = j.rend(); 1554 auto crit = j.crend(); 1555 CHECK_THROWS_WITH_AS(rit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 1556 CHECK_THROWS_WITH_AS(rit.value(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 1557 CHECK_THROWS_WITH_AS(crit.key(), "[json.exception.invalid_iterator.207] cannot use key() for non-object iterators", json::invalid_iterator&); 1558 CHECK_THROWS_WITH_AS(crit.value(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 1559 } 1560 } 1561 } 1562 1563 SECTION("conversion from iterator to const iterator") 1564 { 1565 SECTION("boolean") 1566 { 1567 json j = true; 1568 json::const_iterator it = j.begin(); 1569 CHECK(it == j.cbegin()); 1570 it = j.begin(); 1571 CHECK(it == j.cbegin()); 1572 } 1573 SECTION("string") 1574 { 1575 json j = "hello world"; 1576 json::const_iterator it = j.begin(); 1577 CHECK(it == j.cbegin()); 1578 it = j.begin(); 1579 CHECK(it == j.cbegin()); 1580 } 1581 SECTION("array") 1582 { 1583 json j = {1, 2, 3}; 1584 json::const_iterator it = j.begin(); 1585 CHECK(it == j.cbegin()); 1586 it = j.begin(); 1587 CHECK(it == j.cbegin()); 1588 } 1589 SECTION("object") 1590 { 1591 json j = {{"A", 1}, {"B", 2}, {"C", 3}}; 1592 json::const_iterator it = j.begin(); 1593 CHECK(it == j.cbegin()); 1594 it = j.begin(); 1595 CHECK(it == j.cbegin()); 1596 } 1597 SECTION("number (integer)") 1598 { 1599 json j = 23; 1600 json::const_iterator it = j.begin(); 1601 CHECK(it == j.cbegin()); 1602 it = j.begin(); 1603 CHECK(it == j.cbegin()); 1604 } 1605 SECTION("number (unsigned)") 1606 { 1607 json j = 23u; 1608 json::const_iterator it = j.begin(); 1609 CHECK(it == j.cbegin()); 1610 it = j.begin(); 1611 CHECK(it == j.cbegin()); 1612 } 1613 SECTION("number (float)") 1614 { 1615 json j = 23.42; 1616 json::const_iterator it = j.begin(); 1617 CHECK(it == j.cbegin()); 1618 it = j.begin(); 1619 CHECK(it == j.cbegin()); 1620 } 1621 SECTION("null") 1622 { 1623 json j = nullptr; 1624 json::const_iterator it = j.begin(); 1625 CHECK(it == j.cbegin()); 1626 it = j.begin(); 1627 CHECK(it == j.cbegin()); 1628 } 1629 } 1630} 1631