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("element access 1") 16c5f01b2fSopenharmony_ci{ 17c5f01b2fSopenharmony_ci SECTION("array") 18c5f01b2fSopenharmony_ci { 19c5f01b2fSopenharmony_ci json j = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 20c5f01b2fSopenharmony_ci const json j_const = j; 21c5f01b2fSopenharmony_ci 22c5f01b2fSopenharmony_ci SECTION("access specified element with bounds checking") 23c5f01b2fSopenharmony_ci { 24c5f01b2fSopenharmony_ci SECTION("access within bounds") 25c5f01b2fSopenharmony_ci { 26c5f01b2fSopenharmony_ci CHECK(j.at(0) == json(1)); 27c5f01b2fSopenharmony_ci CHECK(j.at(1) == json(1u)); 28c5f01b2fSopenharmony_ci CHECK(j.at(2) == json(true)); 29c5f01b2fSopenharmony_ci CHECK(j.at(3) == json(nullptr)); 30c5f01b2fSopenharmony_ci CHECK(j.at(4) == json("string")); 31c5f01b2fSopenharmony_ci CHECK(j.at(5) == json(42.23)); 32c5f01b2fSopenharmony_ci CHECK(j.at(6) == json::object()); 33c5f01b2fSopenharmony_ci CHECK(j.at(7) == json({1, 2, 3})); 34c5f01b2fSopenharmony_ci 35c5f01b2fSopenharmony_ci CHECK(j_const.at(0) == json(1)); 36c5f01b2fSopenharmony_ci CHECK(j_const.at(1) == json(1u)); 37c5f01b2fSopenharmony_ci CHECK(j_const.at(2) == json(true)); 38c5f01b2fSopenharmony_ci CHECK(j_const.at(3) == json(nullptr)); 39c5f01b2fSopenharmony_ci CHECK(j_const.at(4) == json("string")); 40c5f01b2fSopenharmony_ci CHECK(j_const.at(5) == json(42.23)); 41c5f01b2fSopenharmony_ci CHECK(j_const.at(6) == json::object()); 42c5f01b2fSopenharmony_ci CHECK(j_const.at(7) == json({1, 2, 3})); 43c5f01b2fSopenharmony_ci } 44c5f01b2fSopenharmony_ci 45c5f01b2fSopenharmony_ci SECTION("access outside bounds") 46c5f01b2fSopenharmony_ci { 47c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.at(8), 48c5f01b2fSopenharmony_ci "[json.exception.out_of_range.401] array index 8 is out of range", json::out_of_range&); 49c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_const.at(8), 50c5f01b2fSopenharmony_ci "[json.exception.out_of_range.401] array index 8 is out of range", json::out_of_range&); 51c5f01b2fSopenharmony_ci } 52c5f01b2fSopenharmony_ci 53c5f01b2fSopenharmony_ci SECTION("access on non-array type") 54c5f01b2fSopenharmony_ci { 55c5f01b2fSopenharmony_ci SECTION("null") 56c5f01b2fSopenharmony_ci { 57c5f01b2fSopenharmony_ci json j_nonarray(json::value_t::null); 58c5f01b2fSopenharmony_ci const json j_nonarray_const(j_nonarray); 59c5f01b2fSopenharmony_ci 60c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray.at(0), "[json.exception.type_error.304] cannot use at() with null", json::type_error&); 61c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray_const.at(0), "[json.exception.type_error.304] cannot use at() with null", json::type_error&); 62c5f01b2fSopenharmony_ci } 63c5f01b2fSopenharmony_ci 64c5f01b2fSopenharmony_ci SECTION("boolean") 65c5f01b2fSopenharmony_ci { 66c5f01b2fSopenharmony_ci json j_nonarray(json::value_t::boolean); 67c5f01b2fSopenharmony_ci const json j_nonarray_const(j_nonarray); 68c5f01b2fSopenharmony_ci 69c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray.at(0), "[json.exception.type_error.304] cannot use at() with boolean", json::type_error&); 70c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray_const.at(0), "[json.exception.type_error.304] cannot use at() with boolean", json::type_error&); 71c5f01b2fSopenharmony_ci } 72c5f01b2fSopenharmony_ci 73c5f01b2fSopenharmony_ci SECTION("string") 74c5f01b2fSopenharmony_ci { 75c5f01b2fSopenharmony_ci json j_nonarray(json::value_t::string); 76c5f01b2fSopenharmony_ci const json j_nonarray_const(j_nonarray); 77c5f01b2fSopenharmony_ci 78c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray.at(0), "[json.exception.type_error.304] cannot use at() with string", json::type_error&); 79c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray_const.at(0), "[json.exception.type_error.304] cannot use at() with string", json::type_error&); 80c5f01b2fSopenharmony_ci } 81c5f01b2fSopenharmony_ci 82c5f01b2fSopenharmony_ci SECTION("object") 83c5f01b2fSopenharmony_ci { 84c5f01b2fSopenharmony_ci json j_nonarray(json::value_t::object); 85c5f01b2fSopenharmony_ci const json j_nonarray_const(j_nonarray); 86c5f01b2fSopenharmony_ci 87c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray.at(0), "[json.exception.type_error.304] cannot use at() with object", json::type_error&); 88c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray_const.at(0), "[json.exception.type_error.304] cannot use at() with object", json::type_error&); 89c5f01b2fSopenharmony_ci } 90c5f01b2fSopenharmony_ci 91c5f01b2fSopenharmony_ci SECTION("number (integer)") 92c5f01b2fSopenharmony_ci { 93c5f01b2fSopenharmony_ci json j_nonarray(json::value_t::number_integer); 94c5f01b2fSopenharmony_ci const json j_nonarray_const(j_nonarray); 95c5f01b2fSopenharmony_ci 96c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray.at(0), "[json.exception.type_error.304] cannot use at() with number", json::type_error&); 97c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray_const.at(0), "[json.exception.type_error.304] cannot use at() with number", json::type_error&); 98c5f01b2fSopenharmony_ci } 99c5f01b2fSopenharmony_ci 100c5f01b2fSopenharmony_ci SECTION("number (unsigned)") 101c5f01b2fSopenharmony_ci { 102c5f01b2fSopenharmony_ci json j_nonarray(json::value_t::number_unsigned); 103c5f01b2fSopenharmony_ci const json j_nonarray_const(j_nonarray); 104c5f01b2fSopenharmony_ci 105c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray.at(0), "[json.exception.type_error.304] cannot use at() with number", json::type_error&); 106c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray_const.at(0), "[json.exception.type_error.304] cannot use at() with number", json::type_error&); 107c5f01b2fSopenharmony_ci } 108c5f01b2fSopenharmony_ci 109c5f01b2fSopenharmony_ci SECTION("number (floating-point)") 110c5f01b2fSopenharmony_ci { 111c5f01b2fSopenharmony_ci json j_nonarray(json::value_t::number_float); 112c5f01b2fSopenharmony_ci const json j_nonarray_const(j_nonarray); 113c5f01b2fSopenharmony_ci 114c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray.at(0), "[json.exception.type_error.304] cannot use at() with number", json::type_error&); 115c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray_const.at(0), "[json.exception.type_error.304] cannot use at() with number", json::type_error&); 116c5f01b2fSopenharmony_ci } 117c5f01b2fSopenharmony_ci } 118c5f01b2fSopenharmony_ci } 119c5f01b2fSopenharmony_ci 120c5f01b2fSopenharmony_ci SECTION("front and back") 121c5f01b2fSopenharmony_ci { 122c5f01b2fSopenharmony_ci CHECK(j.front() == json(1)); 123c5f01b2fSopenharmony_ci CHECK(j_const.front() == json(1)); 124c5f01b2fSopenharmony_ci CHECK(j.back() == json({1, 2, 3})); 125c5f01b2fSopenharmony_ci CHECK(j_const.back() == json({1, 2, 3})); 126c5f01b2fSopenharmony_ci } 127c5f01b2fSopenharmony_ci 128c5f01b2fSopenharmony_ci SECTION("access specified element") 129c5f01b2fSopenharmony_ci { 130c5f01b2fSopenharmony_ci SECTION("access within bounds") 131c5f01b2fSopenharmony_ci { 132c5f01b2fSopenharmony_ci CHECK(j[0] == json(1)); 133c5f01b2fSopenharmony_ci CHECK(j[1] == json(1u)); 134c5f01b2fSopenharmony_ci CHECK(j[2] == json(true)); 135c5f01b2fSopenharmony_ci CHECK(j[3] == json(nullptr)); 136c5f01b2fSopenharmony_ci CHECK(j[4] == json("string")); 137c5f01b2fSopenharmony_ci CHECK(j[5] == json(42.23)); 138c5f01b2fSopenharmony_ci CHECK(j[6] == json::object()); 139c5f01b2fSopenharmony_ci CHECK(j[7] == json({1, 2, 3})); 140c5f01b2fSopenharmony_ci 141c5f01b2fSopenharmony_ci CHECK(j_const[0] == json(1)); 142c5f01b2fSopenharmony_ci CHECK(j_const[1] == json(1u)); 143c5f01b2fSopenharmony_ci CHECK(j_const[2] == json(true)); 144c5f01b2fSopenharmony_ci CHECK(j_const[3] == json(nullptr)); 145c5f01b2fSopenharmony_ci CHECK(j_const[4] == json("string")); 146c5f01b2fSopenharmony_ci CHECK(j_const[5] == json(42.23)); 147c5f01b2fSopenharmony_ci CHECK(j_const[6] == json::object()); 148c5f01b2fSopenharmony_ci CHECK(j_const[7] == json({1, 2, 3})); 149c5f01b2fSopenharmony_ci } 150c5f01b2fSopenharmony_ci 151c5f01b2fSopenharmony_ci SECTION("access on non-array type") 152c5f01b2fSopenharmony_ci { 153c5f01b2fSopenharmony_ci SECTION("null") 154c5f01b2fSopenharmony_ci { 155c5f01b2fSopenharmony_ci SECTION("standard tests") 156c5f01b2fSopenharmony_ci { 157c5f01b2fSopenharmony_ci json j_nonarray(json::value_t::null); 158c5f01b2fSopenharmony_ci const json j_nonarray_const(j_nonarray); 159c5f01b2fSopenharmony_ci CHECK_NOTHROW(j_nonarray[0]); 160c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray_const[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with null", json::type_error&); 161c5f01b2fSopenharmony_ci } 162c5f01b2fSopenharmony_ci 163c5f01b2fSopenharmony_ci SECTION("implicit transformation to properly filled array") 164c5f01b2fSopenharmony_ci { 165c5f01b2fSopenharmony_ci json j_nonarray; 166c5f01b2fSopenharmony_ci j_nonarray[3] = 42; 167c5f01b2fSopenharmony_ci CHECK(j_nonarray == json({nullptr, nullptr, nullptr, 42})); 168c5f01b2fSopenharmony_ci } 169c5f01b2fSopenharmony_ci } 170c5f01b2fSopenharmony_ci 171c5f01b2fSopenharmony_ci SECTION("boolean") 172c5f01b2fSopenharmony_ci { 173c5f01b2fSopenharmony_ci json j_nonarray(json::value_t::boolean); 174c5f01b2fSopenharmony_ci const json j_nonarray_const(j_nonarray); 175c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with boolean", json::type_error&); 176c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray_const[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with boolean", json::type_error&); 177c5f01b2fSopenharmony_ci } 178c5f01b2fSopenharmony_ci 179c5f01b2fSopenharmony_ci SECTION("string") 180c5f01b2fSopenharmony_ci { 181c5f01b2fSopenharmony_ci json j_nonarray(json::value_t::string); 182c5f01b2fSopenharmony_ci const json j_nonarray_const(j_nonarray); 183c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with string", json::type_error&); 184c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray_const[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with string", json::type_error&); 185c5f01b2fSopenharmony_ci } 186c5f01b2fSopenharmony_ci 187c5f01b2fSopenharmony_ci SECTION("object") 188c5f01b2fSopenharmony_ci { 189c5f01b2fSopenharmony_ci json j_nonarray(json::value_t::object); 190c5f01b2fSopenharmony_ci const json j_nonarray_const(j_nonarray); 191c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with object", json::type_error&); 192c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray_const[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with object", json::type_error&); 193c5f01b2fSopenharmony_ci } 194c5f01b2fSopenharmony_ci 195c5f01b2fSopenharmony_ci SECTION("number (integer)") 196c5f01b2fSopenharmony_ci { 197c5f01b2fSopenharmony_ci json j_nonarray(json::value_t::number_integer); 198c5f01b2fSopenharmony_ci const json j_nonarray_const(j_nonarray); 199c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with number", json::type_error&); 200c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray_const[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with number", json::type_error&); 201c5f01b2fSopenharmony_ci } 202c5f01b2fSopenharmony_ci 203c5f01b2fSopenharmony_ci SECTION("number (unsigned)") 204c5f01b2fSopenharmony_ci { 205c5f01b2fSopenharmony_ci json j_nonarray(json::value_t::number_unsigned); 206c5f01b2fSopenharmony_ci const json j_nonarray_const(j_nonarray); 207c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with number", json::type_error&); 208c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray_const[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with number", json::type_error&); 209c5f01b2fSopenharmony_ci } 210c5f01b2fSopenharmony_ci 211c5f01b2fSopenharmony_ci SECTION("number (floating-point)") 212c5f01b2fSopenharmony_ci { 213c5f01b2fSopenharmony_ci json j_nonarray(json::value_t::number_float); 214c5f01b2fSopenharmony_ci const json j_nonarray_const(j_nonarray); 215c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with number", json::type_error&); 216c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonarray_const[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with number", json::type_error&); 217c5f01b2fSopenharmony_ci } 218c5f01b2fSopenharmony_ci } 219c5f01b2fSopenharmony_ci } 220c5f01b2fSopenharmony_ci 221c5f01b2fSopenharmony_ci SECTION("remove specified element") 222c5f01b2fSopenharmony_ci { 223c5f01b2fSopenharmony_ci SECTION("remove element by index") 224c5f01b2fSopenharmony_ci { 225c5f01b2fSopenharmony_ci { 226c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 227c5f01b2fSopenharmony_ci jarray.erase(0); 228c5f01b2fSopenharmony_ci CHECK(jarray == json({1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}})); 229c5f01b2fSopenharmony_ci } 230c5f01b2fSopenharmony_ci { 231c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 232c5f01b2fSopenharmony_ci jarray.erase(1); 233c5f01b2fSopenharmony_ci CHECK(jarray == json({1, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}})); 234c5f01b2fSopenharmony_ci } 235c5f01b2fSopenharmony_ci { 236c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 237c5f01b2fSopenharmony_ci jarray.erase(2); 238c5f01b2fSopenharmony_ci CHECK(jarray == json({1, 1u, nullptr, "string", 42.23, json::object(), {1, 2, 3}})); 239c5f01b2fSopenharmony_ci } 240c5f01b2fSopenharmony_ci { 241c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 242c5f01b2fSopenharmony_ci jarray.erase(3); 243c5f01b2fSopenharmony_ci CHECK(jarray == json({1, 1u, true, "string", 42.23, json::object(), {1, 2, 3}})); 244c5f01b2fSopenharmony_ci } 245c5f01b2fSopenharmony_ci { 246c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 247c5f01b2fSopenharmony_ci jarray.erase(4); 248c5f01b2fSopenharmony_ci CHECK(jarray == json({1, 1u, true, nullptr, 42.23, json::object(), {1, 2, 3}})); 249c5f01b2fSopenharmony_ci } 250c5f01b2fSopenharmony_ci { 251c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 252c5f01b2fSopenharmony_ci jarray.erase(5); 253c5f01b2fSopenharmony_ci CHECK(jarray == json({1, 1u, true, nullptr, "string", json::object(), {1, 2, 3}})); 254c5f01b2fSopenharmony_ci } 255c5f01b2fSopenharmony_ci { 256c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 257c5f01b2fSopenharmony_ci jarray.erase(6); 258c5f01b2fSopenharmony_ci CHECK(jarray == json({1, 1u, true, nullptr, "string", 42.23, {1, 2, 3}})); 259c5f01b2fSopenharmony_ci } 260c5f01b2fSopenharmony_ci { 261c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 262c5f01b2fSopenharmony_ci jarray.erase(7); 263c5f01b2fSopenharmony_ci CHECK(jarray == json({1, 1u, true, nullptr, "string", 42.23, json::object()})); 264c5f01b2fSopenharmony_ci } 265c5f01b2fSopenharmony_ci { 266c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 267c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(jarray.erase(8), "[json.exception.out_of_range.401] array index 8 is out of range", json::out_of_range&); 268c5f01b2fSopenharmony_ci } 269c5f01b2fSopenharmony_ci } 270c5f01b2fSopenharmony_ci 271c5f01b2fSopenharmony_ci SECTION("remove element by iterator") 272c5f01b2fSopenharmony_ci { 273c5f01b2fSopenharmony_ci SECTION("erase(begin())") 274c5f01b2fSopenharmony_ci { 275c5f01b2fSopenharmony_ci { 276c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 277c5f01b2fSopenharmony_ci json::iterator it2 = jarray.erase(jarray.begin()); 278c5f01b2fSopenharmony_ci CHECK(jarray == json({1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}})); 279c5f01b2fSopenharmony_ci CHECK(*it2 == json(1u)); 280c5f01b2fSopenharmony_ci } 281c5f01b2fSopenharmony_ci { 282c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 283c5f01b2fSopenharmony_ci json::const_iterator it2 = jarray.erase(jarray.cbegin()); 284c5f01b2fSopenharmony_ci CHECK(jarray == json({1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}})); 285c5f01b2fSopenharmony_ci CHECK(*it2 == json(1u)); 286c5f01b2fSopenharmony_ci } 287c5f01b2fSopenharmony_ci } 288c5f01b2fSopenharmony_ci 289c5f01b2fSopenharmony_ci SECTION("erase(begin(), end())") 290c5f01b2fSopenharmony_ci { 291c5f01b2fSopenharmony_ci { 292c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 293c5f01b2fSopenharmony_ci json::iterator it2 = jarray.erase(jarray.begin(), jarray.end()); 294c5f01b2fSopenharmony_ci CHECK(jarray == json::array()); 295c5f01b2fSopenharmony_ci CHECK(it2 == jarray.end()); 296c5f01b2fSopenharmony_ci } 297c5f01b2fSopenharmony_ci { 298c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 299c5f01b2fSopenharmony_ci json::const_iterator it2 = jarray.erase(jarray.cbegin(), jarray.cend()); 300c5f01b2fSopenharmony_ci CHECK(jarray == json::array()); 301c5f01b2fSopenharmony_ci CHECK(it2 == jarray.cend()); 302c5f01b2fSopenharmony_ci } 303c5f01b2fSopenharmony_ci } 304c5f01b2fSopenharmony_ci 305c5f01b2fSopenharmony_ci SECTION("erase(begin(), begin())") 306c5f01b2fSopenharmony_ci { 307c5f01b2fSopenharmony_ci { 308c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 309c5f01b2fSopenharmony_ci json::iterator it2 = jarray.erase(jarray.begin(), jarray.begin()); 310c5f01b2fSopenharmony_ci CHECK(jarray == json({1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}})); 311c5f01b2fSopenharmony_ci CHECK(*it2 == json(1)); 312c5f01b2fSopenharmony_ci } 313c5f01b2fSopenharmony_ci { 314c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 315c5f01b2fSopenharmony_ci json::const_iterator it2 = jarray.erase(jarray.cbegin(), jarray.cbegin()); 316c5f01b2fSopenharmony_ci CHECK(jarray == json({1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}})); 317c5f01b2fSopenharmony_ci CHECK(*it2 == json(1)); 318c5f01b2fSopenharmony_ci } 319c5f01b2fSopenharmony_ci } 320c5f01b2fSopenharmony_ci 321c5f01b2fSopenharmony_ci SECTION("erase at offset") 322c5f01b2fSopenharmony_ci { 323c5f01b2fSopenharmony_ci { 324c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 325c5f01b2fSopenharmony_ci json::iterator it = jarray.begin() + 4; 326c5f01b2fSopenharmony_ci json::iterator it2 = jarray.erase(it); 327c5f01b2fSopenharmony_ci CHECK(jarray == json({1, 1u, true, nullptr, 42.23, json::object(), {1, 2, 3}})); 328c5f01b2fSopenharmony_ci CHECK(*it2 == json(42.23)); 329c5f01b2fSopenharmony_ci } 330c5f01b2fSopenharmony_ci { 331c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 332c5f01b2fSopenharmony_ci json::const_iterator it = jarray.cbegin() + 4; 333c5f01b2fSopenharmony_ci json::const_iterator it2 = jarray.erase(it); 334c5f01b2fSopenharmony_ci CHECK(jarray == json({1, 1u, true, nullptr, 42.23, json::object(), {1, 2, 3}})); 335c5f01b2fSopenharmony_ci CHECK(*it2 == json(42.23)); 336c5f01b2fSopenharmony_ci } 337c5f01b2fSopenharmony_ci } 338c5f01b2fSopenharmony_ci 339c5f01b2fSopenharmony_ci SECTION("erase subrange") 340c5f01b2fSopenharmony_ci { 341c5f01b2fSopenharmony_ci { 342c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 343c5f01b2fSopenharmony_ci json::iterator it2 = jarray.erase(jarray.begin() + 3, jarray.begin() + 6); 344c5f01b2fSopenharmony_ci CHECK(jarray == json({1, 1u, true, json::object(), {1, 2, 3}})); 345c5f01b2fSopenharmony_ci CHECK(*it2 == json::object()); 346c5f01b2fSopenharmony_ci } 347c5f01b2fSopenharmony_ci { 348c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 349c5f01b2fSopenharmony_ci json::const_iterator it2 = jarray.erase(jarray.cbegin() + 3, jarray.cbegin() + 6); 350c5f01b2fSopenharmony_ci CHECK(jarray == json({1, 1u, true, json::object(), {1, 2, 3}})); 351c5f01b2fSopenharmony_ci CHECK(*it2 == json::object()); 352c5f01b2fSopenharmony_ci } 353c5f01b2fSopenharmony_ci } 354c5f01b2fSopenharmony_ci 355c5f01b2fSopenharmony_ci SECTION("different arrays") 356c5f01b2fSopenharmony_ci { 357c5f01b2fSopenharmony_ci { 358c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 359c5f01b2fSopenharmony_ci json jarray2 = {"foo", "bar"}; 360c5f01b2fSopenharmony_ci 361c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(jarray.erase(jarray2.begin()), 362c5f01b2fSopenharmony_ci "[json.exception.invalid_iterator.202] iterator does not fit current value", json::invalid_iterator&); 363c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(jarray.erase(jarray.begin(), jarray2.end()), 364c5f01b2fSopenharmony_ci "[json.exception.invalid_iterator.203] iterators do not fit current value", json::invalid_iterator&); 365c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(jarray.erase(jarray2.begin(), jarray.end()), 366c5f01b2fSopenharmony_ci "[json.exception.invalid_iterator.203] iterators do not fit current value", json::invalid_iterator&); 367c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(jarray.erase(jarray2.begin(), jarray2.end()), 368c5f01b2fSopenharmony_ci "[json.exception.invalid_iterator.203] iterators do not fit current value", json::invalid_iterator&); 369c5f01b2fSopenharmony_ci } 370c5f01b2fSopenharmony_ci { 371c5f01b2fSopenharmony_ci json jarray = {1, 1u, true, nullptr, "string", 42.23, json::object(), {1, 2, 3}}; 372c5f01b2fSopenharmony_ci json jarray2 = {"foo", "bar"}; 373c5f01b2fSopenharmony_ci 374c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(jarray.erase(jarray2.cbegin()), 375c5f01b2fSopenharmony_ci "[json.exception.invalid_iterator.202] iterator does not fit current value", json::invalid_iterator&); 376c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(jarray.erase(jarray.cbegin(), jarray2.cend()), 377c5f01b2fSopenharmony_ci "[json.exception.invalid_iterator.203] iterators do not fit current value", json::invalid_iterator&); 378c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(jarray.erase(jarray2.cbegin(), jarray.cend()), 379c5f01b2fSopenharmony_ci "[json.exception.invalid_iterator.203] iterators do not fit current value", json::invalid_iterator&); 380c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(jarray.erase(jarray2.cbegin(), jarray2.cend()), 381c5f01b2fSopenharmony_ci "[json.exception.invalid_iterator.203] iterators do not fit current value", json::invalid_iterator&); 382c5f01b2fSopenharmony_ci } 383c5f01b2fSopenharmony_ci } 384c5f01b2fSopenharmony_ci } 385c5f01b2fSopenharmony_ci 386c5f01b2fSopenharmony_ci SECTION("remove element by index in non-array type") 387c5f01b2fSopenharmony_ci { 388c5f01b2fSopenharmony_ci SECTION("null") 389c5f01b2fSopenharmony_ci { 390c5f01b2fSopenharmony_ci json j_nonobject(json::value_t::null); 391c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonobject.erase(0), "[json.exception.type_error.307] cannot use erase() with null", json::type_error&); 392c5f01b2fSopenharmony_ci } 393c5f01b2fSopenharmony_ci 394c5f01b2fSopenharmony_ci SECTION("boolean") 395c5f01b2fSopenharmony_ci { 396c5f01b2fSopenharmony_ci json j_nonobject(json::value_t::boolean); 397c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonobject.erase(0), "[json.exception.type_error.307] cannot use erase() with boolean", json::type_error&); 398c5f01b2fSopenharmony_ci } 399c5f01b2fSopenharmony_ci 400c5f01b2fSopenharmony_ci SECTION("string") 401c5f01b2fSopenharmony_ci { 402c5f01b2fSopenharmony_ci json j_nonobject(json::value_t::string); 403c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonobject.erase(0), "[json.exception.type_error.307] cannot use erase() with string", json::type_error&); 404c5f01b2fSopenharmony_ci } 405c5f01b2fSopenharmony_ci 406c5f01b2fSopenharmony_ci SECTION("object") 407c5f01b2fSopenharmony_ci { 408c5f01b2fSopenharmony_ci json j_nonobject(json::value_t::object); 409c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonobject.erase(0), "[json.exception.type_error.307] cannot use erase() with object", json::type_error&); 410c5f01b2fSopenharmony_ci } 411c5f01b2fSopenharmony_ci 412c5f01b2fSopenharmony_ci SECTION("number (integer)") 413c5f01b2fSopenharmony_ci { 414c5f01b2fSopenharmony_ci json j_nonobject(json::value_t::number_integer); 415c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonobject.erase(0), "[json.exception.type_error.307] cannot use erase() with number", json::type_error&); 416c5f01b2fSopenharmony_ci } 417c5f01b2fSopenharmony_ci 418c5f01b2fSopenharmony_ci SECTION("number (unsigned)") 419c5f01b2fSopenharmony_ci { 420c5f01b2fSopenharmony_ci json j_nonobject(json::value_t::number_unsigned); 421c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonobject.erase(0), "[json.exception.type_error.307] cannot use erase() with number", json::type_error&); 422c5f01b2fSopenharmony_ci } 423c5f01b2fSopenharmony_ci 424c5f01b2fSopenharmony_ci SECTION("number (floating-point)") 425c5f01b2fSopenharmony_ci { 426c5f01b2fSopenharmony_ci json j_nonobject(json::value_t::number_float); 427c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j_nonobject.erase(0), "[json.exception.type_error.307] cannot use erase() with number", json::type_error&); 428c5f01b2fSopenharmony_ci } 429c5f01b2fSopenharmony_ci } 430c5f01b2fSopenharmony_ci } 431c5f01b2fSopenharmony_ci } 432c5f01b2fSopenharmony_ci 433c5f01b2fSopenharmony_ci SECTION("other values") 434c5f01b2fSopenharmony_ci { 435c5f01b2fSopenharmony_ci SECTION("front and back") 436c5f01b2fSopenharmony_ci { 437c5f01b2fSopenharmony_ci SECTION("null") 438c5f01b2fSopenharmony_ci { 439c5f01b2fSopenharmony_ci { 440c5f01b2fSopenharmony_ci json j; 441c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.front(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 442c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.back(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 443c5f01b2fSopenharmony_ci } 444c5f01b2fSopenharmony_ci { 445c5f01b2fSopenharmony_ci const json j{}; 446c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.front(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 447c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.back(), "[json.exception.invalid_iterator.214] cannot get value", json::invalid_iterator&); 448c5f01b2fSopenharmony_ci } 449c5f01b2fSopenharmony_ci } 450c5f01b2fSopenharmony_ci 451c5f01b2fSopenharmony_ci SECTION("string") 452c5f01b2fSopenharmony_ci { 453c5f01b2fSopenharmony_ci { 454c5f01b2fSopenharmony_ci json j = "foo"; 455c5f01b2fSopenharmony_ci CHECK(j.front() == j); 456c5f01b2fSopenharmony_ci CHECK(j.back() == j); 457c5f01b2fSopenharmony_ci } 458c5f01b2fSopenharmony_ci { 459c5f01b2fSopenharmony_ci const json j = "bar"; 460c5f01b2fSopenharmony_ci CHECK(j.front() == j); 461c5f01b2fSopenharmony_ci CHECK(j.back() == j); 462c5f01b2fSopenharmony_ci } 463c5f01b2fSopenharmony_ci } 464c5f01b2fSopenharmony_ci 465c5f01b2fSopenharmony_ci SECTION("number (boolean)") 466c5f01b2fSopenharmony_ci { 467c5f01b2fSopenharmony_ci { 468c5f01b2fSopenharmony_ci json j = false; 469c5f01b2fSopenharmony_ci CHECK(j.front() == j); 470c5f01b2fSopenharmony_ci CHECK(j.back() == j); 471c5f01b2fSopenharmony_ci } 472c5f01b2fSopenharmony_ci { 473c5f01b2fSopenharmony_ci const json j = true; 474c5f01b2fSopenharmony_ci CHECK(j.front() == j); 475c5f01b2fSopenharmony_ci CHECK(j.back() == j); 476c5f01b2fSopenharmony_ci } 477c5f01b2fSopenharmony_ci } 478c5f01b2fSopenharmony_ci 479c5f01b2fSopenharmony_ci SECTION("number (integer)") 480c5f01b2fSopenharmony_ci { 481c5f01b2fSopenharmony_ci { 482c5f01b2fSopenharmony_ci json j = 17; 483c5f01b2fSopenharmony_ci CHECK(j.front() == j); 484c5f01b2fSopenharmony_ci CHECK(j.back() == j); 485c5f01b2fSopenharmony_ci } 486c5f01b2fSopenharmony_ci { 487c5f01b2fSopenharmony_ci const json j = 17; 488c5f01b2fSopenharmony_ci CHECK(j.front() == j); 489c5f01b2fSopenharmony_ci CHECK(j.back() == j); 490c5f01b2fSopenharmony_ci } 491c5f01b2fSopenharmony_ci } 492c5f01b2fSopenharmony_ci 493c5f01b2fSopenharmony_ci SECTION("number (unsigned)") 494c5f01b2fSopenharmony_ci { 495c5f01b2fSopenharmony_ci { 496c5f01b2fSopenharmony_ci json j = 17u; 497c5f01b2fSopenharmony_ci CHECK(j.front() == j); 498c5f01b2fSopenharmony_ci CHECK(j.back() == j); 499c5f01b2fSopenharmony_ci } 500c5f01b2fSopenharmony_ci { 501c5f01b2fSopenharmony_ci const json j = 17u; 502c5f01b2fSopenharmony_ci CHECK(j.front() == j); 503c5f01b2fSopenharmony_ci CHECK(j.back() == j); 504c5f01b2fSopenharmony_ci } 505c5f01b2fSopenharmony_ci } 506c5f01b2fSopenharmony_ci 507c5f01b2fSopenharmony_ci SECTION("number (floating point)") 508c5f01b2fSopenharmony_ci { 509c5f01b2fSopenharmony_ci { 510c5f01b2fSopenharmony_ci json j = 23.42; 511c5f01b2fSopenharmony_ci CHECK(j.front() == j); 512c5f01b2fSopenharmony_ci CHECK(j.back() == j); 513c5f01b2fSopenharmony_ci } 514c5f01b2fSopenharmony_ci { 515c5f01b2fSopenharmony_ci const json j = 23.42; 516c5f01b2fSopenharmony_ci CHECK(j.front() == j); 517c5f01b2fSopenharmony_ci CHECK(j.back() == j); 518c5f01b2fSopenharmony_ci } 519c5f01b2fSopenharmony_ci } 520c5f01b2fSopenharmony_ci } 521c5f01b2fSopenharmony_ci 522c5f01b2fSopenharmony_ci SECTION("erase with one valid iterator") 523c5f01b2fSopenharmony_ci { 524c5f01b2fSopenharmony_ci SECTION("null") 525c5f01b2fSopenharmony_ci { 526c5f01b2fSopenharmony_ci { 527c5f01b2fSopenharmony_ci json j; 528c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.begin()), "[json.exception.type_error.307] cannot use erase() with null", json::type_error&); 529c5f01b2fSopenharmony_ci } 530c5f01b2fSopenharmony_ci { 531c5f01b2fSopenharmony_ci json j; 532c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.begin()), 533c5f01b2fSopenharmony_ci "[json.exception.type_error.307] cannot use erase() with null", json::type_error&); 534c5f01b2fSopenharmony_ci } 535c5f01b2fSopenharmony_ci } 536c5f01b2fSopenharmony_ci 537c5f01b2fSopenharmony_ci SECTION("string") 538c5f01b2fSopenharmony_ci { 539c5f01b2fSopenharmony_ci { 540c5f01b2fSopenharmony_ci json j = "foo"; 541c5f01b2fSopenharmony_ci json::iterator it = j.erase(j.begin()); 542c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 543c5f01b2fSopenharmony_ci CHECK(it == j.end()); 544c5f01b2fSopenharmony_ci } 545c5f01b2fSopenharmony_ci { 546c5f01b2fSopenharmony_ci json j = "bar"; 547c5f01b2fSopenharmony_ci json::const_iterator it = j.erase(j.cbegin()); 548c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 549c5f01b2fSopenharmony_ci CHECK(it == j.end()); 550c5f01b2fSopenharmony_ci } 551c5f01b2fSopenharmony_ci } 552c5f01b2fSopenharmony_ci 553c5f01b2fSopenharmony_ci SECTION("number (boolean)") 554c5f01b2fSopenharmony_ci { 555c5f01b2fSopenharmony_ci { 556c5f01b2fSopenharmony_ci json j = false; 557c5f01b2fSopenharmony_ci json::iterator it = j.erase(j.begin()); 558c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 559c5f01b2fSopenharmony_ci CHECK(it == j.end()); 560c5f01b2fSopenharmony_ci } 561c5f01b2fSopenharmony_ci { 562c5f01b2fSopenharmony_ci json j = true; 563c5f01b2fSopenharmony_ci json::const_iterator it = j.erase(j.cbegin()); 564c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 565c5f01b2fSopenharmony_ci CHECK(it == j.end()); 566c5f01b2fSopenharmony_ci } 567c5f01b2fSopenharmony_ci } 568c5f01b2fSopenharmony_ci 569c5f01b2fSopenharmony_ci SECTION("number (integer)") 570c5f01b2fSopenharmony_ci { 571c5f01b2fSopenharmony_ci { 572c5f01b2fSopenharmony_ci json j = 17; 573c5f01b2fSopenharmony_ci json::iterator it = j.erase(j.begin()); 574c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 575c5f01b2fSopenharmony_ci CHECK(it == j.end()); 576c5f01b2fSopenharmony_ci } 577c5f01b2fSopenharmony_ci { 578c5f01b2fSopenharmony_ci json j = 17; 579c5f01b2fSopenharmony_ci json::const_iterator it = j.erase(j.cbegin()); 580c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 581c5f01b2fSopenharmony_ci CHECK(it == j.end()); 582c5f01b2fSopenharmony_ci } 583c5f01b2fSopenharmony_ci } 584c5f01b2fSopenharmony_ci 585c5f01b2fSopenharmony_ci SECTION("number (unsigned)") 586c5f01b2fSopenharmony_ci { 587c5f01b2fSopenharmony_ci { 588c5f01b2fSopenharmony_ci json j = 17u; 589c5f01b2fSopenharmony_ci json::iterator it = j.erase(j.begin()); 590c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 591c5f01b2fSopenharmony_ci CHECK(it == j.end()); 592c5f01b2fSopenharmony_ci } 593c5f01b2fSopenharmony_ci { 594c5f01b2fSopenharmony_ci json j = 17u; 595c5f01b2fSopenharmony_ci json::const_iterator it = j.erase(j.cbegin()); 596c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 597c5f01b2fSopenharmony_ci CHECK(it == j.end()); 598c5f01b2fSopenharmony_ci } 599c5f01b2fSopenharmony_ci } 600c5f01b2fSopenharmony_ci 601c5f01b2fSopenharmony_ci SECTION("number (floating point)") 602c5f01b2fSopenharmony_ci { 603c5f01b2fSopenharmony_ci { 604c5f01b2fSopenharmony_ci json j = 23.42; 605c5f01b2fSopenharmony_ci json::iterator it = j.erase(j.begin()); 606c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 607c5f01b2fSopenharmony_ci CHECK(it == j.end()); 608c5f01b2fSopenharmony_ci } 609c5f01b2fSopenharmony_ci { 610c5f01b2fSopenharmony_ci json j = 23.42; 611c5f01b2fSopenharmony_ci json::const_iterator it = j.erase(j.cbegin()); 612c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 613c5f01b2fSopenharmony_ci CHECK(it == j.end()); 614c5f01b2fSopenharmony_ci } 615c5f01b2fSopenharmony_ci } 616c5f01b2fSopenharmony_ci 617c5f01b2fSopenharmony_ci SECTION("binary") 618c5f01b2fSopenharmony_ci { 619c5f01b2fSopenharmony_ci { 620c5f01b2fSopenharmony_ci json j = json::binary({1, 2, 3}); 621c5f01b2fSopenharmony_ci json::iterator it = j.erase(j.begin()); 622c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 623c5f01b2fSopenharmony_ci CHECK(it == j.end()); 624c5f01b2fSopenharmony_ci } 625c5f01b2fSopenharmony_ci { 626c5f01b2fSopenharmony_ci json j = json::binary({1, 2, 3}); 627c5f01b2fSopenharmony_ci json::const_iterator it = j.erase(j.cbegin()); 628c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 629c5f01b2fSopenharmony_ci CHECK(it == j.end()); 630c5f01b2fSopenharmony_ci } 631c5f01b2fSopenharmony_ci } 632c5f01b2fSopenharmony_ci } 633c5f01b2fSopenharmony_ci 634c5f01b2fSopenharmony_ci SECTION("erase with one invalid iterator") 635c5f01b2fSopenharmony_ci { 636c5f01b2fSopenharmony_ci SECTION("string") 637c5f01b2fSopenharmony_ci { 638c5f01b2fSopenharmony_ci { 639c5f01b2fSopenharmony_ci json j = "foo"; 640c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.end()), "[json.exception.invalid_iterator.205] iterator out of range", json::invalid_iterator&); 641c5f01b2fSopenharmony_ci } 642c5f01b2fSopenharmony_ci { 643c5f01b2fSopenharmony_ci json j = "bar"; 644c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.cend()), "[json.exception.invalid_iterator.205] iterator out of range", json::invalid_iterator&); 645c5f01b2fSopenharmony_ci } 646c5f01b2fSopenharmony_ci } 647c5f01b2fSopenharmony_ci 648c5f01b2fSopenharmony_ci SECTION("number (boolean)") 649c5f01b2fSopenharmony_ci { 650c5f01b2fSopenharmony_ci { 651c5f01b2fSopenharmony_ci json j = false; 652c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.end()), "[json.exception.invalid_iterator.205] iterator out of range", json::invalid_iterator&); 653c5f01b2fSopenharmony_ci } 654c5f01b2fSopenharmony_ci { 655c5f01b2fSopenharmony_ci json j = true; 656c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.cend()), "[json.exception.invalid_iterator.205] iterator out of range", json::invalid_iterator&); 657c5f01b2fSopenharmony_ci } 658c5f01b2fSopenharmony_ci } 659c5f01b2fSopenharmony_ci 660c5f01b2fSopenharmony_ci SECTION("number (integer)") 661c5f01b2fSopenharmony_ci { 662c5f01b2fSopenharmony_ci { 663c5f01b2fSopenharmony_ci json j = 17; 664c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.end()), "[json.exception.invalid_iterator.205] iterator out of range", json::invalid_iterator&); 665c5f01b2fSopenharmony_ci } 666c5f01b2fSopenharmony_ci { 667c5f01b2fSopenharmony_ci json j = 17; 668c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.cend()), "[json.exception.invalid_iterator.205] iterator out of range", json::invalid_iterator&); 669c5f01b2fSopenharmony_ci } 670c5f01b2fSopenharmony_ci } 671c5f01b2fSopenharmony_ci 672c5f01b2fSopenharmony_ci SECTION("number (unsigned)") 673c5f01b2fSopenharmony_ci { 674c5f01b2fSopenharmony_ci { 675c5f01b2fSopenharmony_ci json j = 17u; 676c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.end()), "[json.exception.invalid_iterator.205] iterator out of range", json::invalid_iterator&); 677c5f01b2fSopenharmony_ci } 678c5f01b2fSopenharmony_ci { 679c5f01b2fSopenharmony_ci json j = 17u; 680c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.cend()), "[json.exception.invalid_iterator.205] iterator out of range", json::invalid_iterator&); 681c5f01b2fSopenharmony_ci } 682c5f01b2fSopenharmony_ci } 683c5f01b2fSopenharmony_ci 684c5f01b2fSopenharmony_ci SECTION("number (floating point)") 685c5f01b2fSopenharmony_ci { 686c5f01b2fSopenharmony_ci { 687c5f01b2fSopenharmony_ci json j = 23.42; 688c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.end()), "[json.exception.invalid_iterator.205] iterator out of range", json::invalid_iterator&); 689c5f01b2fSopenharmony_ci } 690c5f01b2fSopenharmony_ci { 691c5f01b2fSopenharmony_ci json j = 23.42; 692c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.cend()), "[json.exception.invalid_iterator.205] iterator out of range", json::invalid_iterator&); 693c5f01b2fSopenharmony_ci } 694c5f01b2fSopenharmony_ci } 695c5f01b2fSopenharmony_ci } 696c5f01b2fSopenharmony_ci 697c5f01b2fSopenharmony_ci SECTION("erase with two valid iterators") 698c5f01b2fSopenharmony_ci { 699c5f01b2fSopenharmony_ci SECTION("null") 700c5f01b2fSopenharmony_ci { 701c5f01b2fSopenharmony_ci { 702c5f01b2fSopenharmony_ci json j; 703c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.begin(), j.end()), "[json.exception.type_error.307] cannot use erase() with null", json::type_error&); 704c5f01b2fSopenharmony_ci } 705c5f01b2fSopenharmony_ci { 706c5f01b2fSopenharmony_ci json j; 707c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.cbegin(), j.cend()), "[json.exception.type_error.307] cannot use erase() with null", json::type_error&); 708c5f01b2fSopenharmony_ci } 709c5f01b2fSopenharmony_ci } 710c5f01b2fSopenharmony_ci 711c5f01b2fSopenharmony_ci SECTION("string") 712c5f01b2fSopenharmony_ci { 713c5f01b2fSopenharmony_ci { 714c5f01b2fSopenharmony_ci json j = "foo"; 715c5f01b2fSopenharmony_ci json::iterator it = j.erase(j.begin(), j.end()); 716c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 717c5f01b2fSopenharmony_ci CHECK(it == j.end()); 718c5f01b2fSopenharmony_ci } 719c5f01b2fSopenharmony_ci { 720c5f01b2fSopenharmony_ci json j = "bar"; 721c5f01b2fSopenharmony_ci json::const_iterator it = j.erase(j.cbegin(), j.cend()); 722c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 723c5f01b2fSopenharmony_ci CHECK(it == j.end()); 724c5f01b2fSopenharmony_ci } 725c5f01b2fSopenharmony_ci } 726c5f01b2fSopenharmony_ci 727c5f01b2fSopenharmony_ci SECTION("number (boolean)") 728c5f01b2fSopenharmony_ci { 729c5f01b2fSopenharmony_ci { 730c5f01b2fSopenharmony_ci json j = false; 731c5f01b2fSopenharmony_ci json::iterator it = j.erase(j.begin(), j.end()); 732c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 733c5f01b2fSopenharmony_ci CHECK(it == j.end()); 734c5f01b2fSopenharmony_ci } 735c5f01b2fSopenharmony_ci { 736c5f01b2fSopenharmony_ci json j = true; 737c5f01b2fSopenharmony_ci json::const_iterator it = j.erase(j.cbegin(), j.cend()); 738c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 739c5f01b2fSopenharmony_ci CHECK(it == j.end()); 740c5f01b2fSopenharmony_ci } 741c5f01b2fSopenharmony_ci } 742c5f01b2fSopenharmony_ci 743c5f01b2fSopenharmony_ci SECTION("number (integer)") 744c5f01b2fSopenharmony_ci { 745c5f01b2fSopenharmony_ci { 746c5f01b2fSopenharmony_ci json j = 17; 747c5f01b2fSopenharmony_ci json::iterator it = j.erase(j.begin(), j.end()); 748c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 749c5f01b2fSopenharmony_ci CHECK(it == j.end()); 750c5f01b2fSopenharmony_ci } 751c5f01b2fSopenharmony_ci { 752c5f01b2fSopenharmony_ci json j = 17; 753c5f01b2fSopenharmony_ci json::const_iterator it = j.erase(j.cbegin(), j.cend()); 754c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 755c5f01b2fSopenharmony_ci CHECK(it == j.end()); 756c5f01b2fSopenharmony_ci } 757c5f01b2fSopenharmony_ci } 758c5f01b2fSopenharmony_ci 759c5f01b2fSopenharmony_ci SECTION("number (unsigned)") 760c5f01b2fSopenharmony_ci { 761c5f01b2fSopenharmony_ci { 762c5f01b2fSopenharmony_ci json j = 17u; 763c5f01b2fSopenharmony_ci json::iterator it = j.erase(j.begin(), j.end()); 764c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 765c5f01b2fSopenharmony_ci CHECK(it == j.end()); 766c5f01b2fSopenharmony_ci } 767c5f01b2fSopenharmony_ci { 768c5f01b2fSopenharmony_ci json j = 17u; 769c5f01b2fSopenharmony_ci json::const_iterator it = j.erase(j.cbegin(), j.cend()); 770c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 771c5f01b2fSopenharmony_ci CHECK(it == j.end()); 772c5f01b2fSopenharmony_ci } 773c5f01b2fSopenharmony_ci } 774c5f01b2fSopenharmony_ci 775c5f01b2fSopenharmony_ci SECTION("number (floating point)") 776c5f01b2fSopenharmony_ci { 777c5f01b2fSopenharmony_ci { 778c5f01b2fSopenharmony_ci json j = 23.42; 779c5f01b2fSopenharmony_ci json::iterator it = j.erase(j.begin(), j.end()); 780c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 781c5f01b2fSopenharmony_ci CHECK(it == j.end()); 782c5f01b2fSopenharmony_ci } 783c5f01b2fSopenharmony_ci { 784c5f01b2fSopenharmony_ci json j = 23.42; 785c5f01b2fSopenharmony_ci json::const_iterator it = j.erase(j.cbegin(), j.cend()); 786c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 787c5f01b2fSopenharmony_ci CHECK(it == j.end()); 788c5f01b2fSopenharmony_ci } 789c5f01b2fSopenharmony_ci } 790c5f01b2fSopenharmony_ci 791c5f01b2fSopenharmony_ci SECTION("binary") 792c5f01b2fSopenharmony_ci { 793c5f01b2fSopenharmony_ci { 794c5f01b2fSopenharmony_ci json j = json::binary({1, 2, 3}); 795c5f01b2fSopenharmony_ci json::iterator it = j.erase(j.begin(), j.end()); 796c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 797c5f01b2fSopenharmony_ci CHECK(it == j.end()); 798c5f01b2fSopenharmony_ci } 799c5f01b2fSopenharmony_ci { 800c5f01b2fSopenharmony_ci json j = json::binary({1, 2, 3}); 801c5f01b2fSopenharmony_ci json::const_iterator it = j.erase(j.cbegin(), j.cend()); 802c5f01b2fSopenharmony_ci CHECK(j.type() == json::value_t::null); 803c5f01b2fSopenharmony_ci CHECK(it == j.end()); 804c5f01b2fSopenharmony_ci } 805c5f01b2fSopenharmony_ci } 806c5f01b2fSopenharmony_ci } 807c5f01b2fSopenharmony_ci 808c5f01b2fSopenharmony_ci SECTION("erase with two invalid iterators") 809c5f01b2fSopenharmony_ci { 810c5f01b2fSopenharmony_ci SECTION("string") 811c5f01b2fSopenharmony_ci { 812c5f01b2fSopenharmony_ci { 813c5f01b2fSopenharmony_ci json j = "foo"; 814c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.end(), j.end()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 815c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.begin(), j.begin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 816c5f01b2fSopenharmony_ci } 817c5f01b2fSopenharmony_ci { 818c5f01b2fSopenharmony_ci json j = "bar"; 819c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.cend(), j.cend()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 820c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.cbegin(), j.cbegin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 821c5f01b2fSopenharmony_ci } 822c5f01b2fSopenharmony_ci } 823c5f01b2fSopenharmony_ci 824c5f01b2fSopenharmony_ci SECTION("number (boolean)") 825c5f01b2fSopenharmony_ci { 826c5f01b2fSopenharmony_ci { 827c5f01b2fSopenharmony_ci json j = false; 828c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.end(), j.end()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 829c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.begin(), j.begin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 830c5f01b2fSopenharmony_ci } 831c5f01b2fSopenharmony_ci { 832c5f01b2fSopenharmony_ci json j = true; 833c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.cend(), j.cend()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 834c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.cbegin(), j.cbegin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 835c5f01b2fSopenharmony_ci } 836c5f01b2fSopenharmony_ci } 837c5f01b2fSopenharmony_ci 838c5f01b2fSopenharmony_ci SECTION("number (integer)") 839c5f01b2fSopenharmony_ci { 840c5f01b2fSopenharmony_ci { 841c5f01b2fSopenharmony_ci json j = 17; 842c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.end(), j.end()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 843c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.begin(), j.begin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 844c5f01b2fSopenharmony_ci } 845c5f01b2fSopenharmony_ci { 846c5f01b2fSopenharmony_ci json j = 17; 847c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.cend(), j.cend()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 848c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.cbegin(), j.cbegin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 849c5f01b2fSopenharmony_ci } 850c5f01b2fSopenharmony_ci } 851c5f01b2fSopenharmony_ci 852c5f01b2fSopenharmony_ci SECTION("number (unsigned)") 853c5f01b2fSopenharmony_ci { 854c5f01b2fSopenharmony_ci { 855c5f01b2fSopenharmony_ci json j = 17u; 856c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.end(), j.end()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 857c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.begin(), j.begin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 858c5f01b2fSopenharmony_ci } 859c5f01b2fSopenharmony_ci { 860c5f01b2fSopenharmony_ci json j = 17u; 861c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.cend(), j.cend()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 862c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.cbegin(), j.cbegin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 863c5f01b2fSopenharmony_ci } 864c5f01b2fSopenharmony_ci } 865c5f01b2fSopenharmony_ci 866c5f01b2fSopenharmony_ci SECTION("number (floating point)") 867c5f01b2fSopenharmony_ci { 868c5f01b2fSopenharmony_ci { 869c5f01b2fSopenharmony_ci json j = 23.42; 870c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.end(), j.end()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 871c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.begin(), j.begin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 872c5f01b2fSopenharmony_ci } 873c5f01b2fSopenharmony_ci { 874c5f01b2fSopenharmony_ci json j = 23.42; 875c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.cend(), j.cend()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 876c5f01b2fSopenharmony_ci CHECK_THROWS_WITH_AS(j.erase(j.cbegin(), j.cbegin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&); 877c5f01b2fSopenharmony_ci } 878c5f01b2fSopenharmony_ci } 879c5f01b2fSopenharmony_ci } 880c5f01b2fSopenharmony_ci } 881c5f01b2fSopenharmony_ci} 882