:art: use Clang-Format
diff --git a/.clang-format b/.clang-format
index 64ee00f..a7fdf1a 100644
--- a/.clang-format
+++ b/.clang-format
@@ -29,7 +29,7 @@
AfterControlStatement: Always
AfterEnum: true
AfterFunction: true
- AfterNamespace: false
+ AfterNamespace: true
AfterStruct: true
AfterUnion: true
AfterExternBlock: false
@@ -43,13 +43,12 @@
BreakBeforeTernaryOperators: true
BreakConstructorInitializers: BeforeComma
BreakStringLiterals: false
-ColumnLimit: 0
+ColumnLimit: 160
CompactNamespaces: false
ConstructorInitializerIndentWidth: 2
Cpp11BracedListStyle: true
PointerAlignment: Left
FixNamespaceComments: true
-IncludeBlocks: Preserve
#IndentCaseBlocks: false
IndentCaseLabels: true
IndentGotoLabels: false
@@ -59,7 +58,6 @@
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ReflowComments: false
-SortIncludes: CaseSensitive
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
@@ -81,3 +79,16 @@
Standard: Latest
TabWidth: 4
UseTab: Never
+
+# what to do with include blocks
+SortIncludes: true
+IncludeBlocks: Preserve
+IncludeCategories:
+ - Regex: '^".*"'
+ Priority: 1
+ - Regex: '<[^\/]+>'
+ Priority: 2
+ - Regex: '^<(nlohmann)\/-*'
+ Priority: 3
+ - Regex: '.*'
+ Priority: 4
diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml
index 35fb957..acf2e23 100644
--- a/.github/workflows/ubuntu.yml
+++ b/.github/workflows/ubuntu.yml
@@ -43,12 +43,14 @@
ci_static_analysis:
runs-on: ubuntu-latest
- container: ghcr.io/nlohmann/json-ci:v2.4.0
+ container: silkeh/clang:dev
strategy:
matrix:
target: [ci_cppcheck, ci_test_valgrind, ci_test_amalgamation, ci_test_single_header, ci_single_binaries, ci_infer]
steps:
- uses: actions/checkout@v3
+ - name: Get latest CMake and ninja
+ uses: lukka/get-cmake@v3.27.7
- name: Run CMake
run: cmake -S . -B build -DJSON_CI=On
- name: Build
diff --git a/include/nlohmann/adl_serializer.hpp b/include/nlohmann/adl_serializer.hpp
index 7bea4c4..95b0722 100644
--- a/include/nlohmann/adl_serializer.hpp
+++ b/include/nlohmann/adl_serializer.hpp
@@ -24,8 +24,7 @@
/// @brief convert a JSON value to any value type
/// @sa https://json.nlohmann.me/api/adl_serializer/from_json/
template<typename BasicJsonType, typename TargetType = ValueType>
- static auto from_json(BasicJsonType&& j, TargetType& val) noexcept(
- noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))
+ static auto from_json(BasicJsonType&& j, TargetType& val) noexcept(noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))
-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), val), void())
{
::nlohmann::from_json(std::forward<BasicJsonType>(j), val);
@@ -34,8 +33,7 @@
/// @brief convert a JSON value to any value type
/// @sa https://json.nlohmann.me/api/adl_serializer/from_json/
template<typename BasicJsonType, typename TargetType = ValueType>
- static auto from_json(BasicJsonType&& j) noexcept(
- noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType>{})))
+ static auto from_json(BasicJsonType&& j) noexcept(noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType>{})))
-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType>{}))
{
return ::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType>{});
@@ -44,8 +42,7 @@
/// @brief convert any value type to a JSON value
/// @sa https://json.nlohmann.me/api/adl_serializer/to_json/
template<typename BasicJsonType, typename TargetType = ValueType>
- static auto to_json(BasicJsonType& j, TargetType&& val) noexcept(
- noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))
+ static auto to_json(BasicJsonType& j, TargetType&& val) noexcept(noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))
-> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void())
{
::nlohmann::to_json(j, std::forward<TargetType>(val));
diff --git a/include/nlohmann/detail/abi_macros.hpp b/include/nlohmann/detail/abi_macros.hpp
index ed31cd1..3e560bc 100644
--- a/include/nlohmann/detail/abi_macros.hpp
+++ b/include/nlohmann/detail/abi_macros.hpp
@@ -48,51 +48,39 @@
// Construct the namespace ABI tags component
#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) json_abi##a##b
-#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) \
- NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b)
+#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b)
-#define NLOHMANN_JSON_ABI_TAGS \
- NLOHMANN_JSON_ABI_TAGS_CONCAT( \
- NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \
- NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON)
+#define NLOHMANN_JSON_ABI_TAGS NLOHMANN_JSON_ABI_TAGS_CONCAT(NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON)
// Construct the namespace version component
-#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \
- _v##major##_##minor##_##patch
-#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \
- NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch)
+#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) _v##major##_##minor##_##patch
+#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch)
#if NLOHMANN_JSON_NAMESPACE_NO_VERSION
#define NLOHMANN_JSON_NAMESPACE_VERSION
#else
- #define NLOHMANN_JSON_NAMESPACE_VERSION \
- NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \
- NLOHMANN_JSON_VERSION_MINOR, \
- NLOHMANN_JSON_VERSION_PATCH)
+ #define NLOHMANN_JSON_NAMESPACE_VERSION \
+ NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH)
#endif
// Combine namespace components
#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a##b
-#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \
- NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b)
+#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b)
#ifndef NLOHMANN_JSON_NAMESPACE
- #define NLOHMANN_JSON_NAMESPACE \
- nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \
- NLOHMANN_JSON_ABI_TAGS, \
- NLOHMANN_JSON_NAMESPACE_VERSION)
+ #define NLOHMANN_JSON_NAMESPACE nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT(NLOHMANN_JSON_ABI_TAGS, NLOHMANN_JSON_NAMESPACE_VERSION)
#endif
#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN
- #define NLOHMANN_JSON_NAMESPACE_BEGIN \
- namespace nlohmann { \
- inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \
- NLOHMANN_JSON_ABI_TAGS, \
- NLOHMANN_JSON_NAMESPACE_VERSION) {
+ #define NLOHMANN_JSON_NAMESPACE_BEGIN \
+ namespace nlohmann \
+ { \
+ inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT(NLOHMANN_JSON_ABI_TAGS, NLOHMANN_JSON_NAMESPACE_VERSION) \
+ {
#endif
#ifndef NLOHMANN_JSON_NAMESPACE_END
- #define NLOHMANN_JSON_NAMESPACE_END \
- } /* namespace (inline namespace) NOLINT(readability/namespace) */ \
+ #define NLOHMANN_JSON_NAMESPACE_END \
+ } /* namespace (inline namespace) NOLINT(readability/namespace) */ \
} // namespace nlohmann
#endif
diff --git a/include/nlohmann/detail/conversions/from_json.hpp b/include/nlohmann/detail/conversions/from_json.hpp
index bbfd63c..d3af3b9 100644
--- a/include/nlohmann/detail/conversions/from_json.hpp
+++ b/include/nlohmann/detail/conversions/from_json.hpp
@@ -30,7 +30,8 @@
#include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
template<typename BasicJsonType>
inline void from_json(const BasicJsonType& j, typename std::nullptr_t& n)
@@ -43,7 +44,9 @@
}
// overloads for basic_json template parameters
-template<typename BasicJsonType, typename ArithmeticType, enable_if_t<std::is_arithmetic<ArithmeticType>::value && !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value, int> = 0>
+template<typename BasicJsonType,
+ typename ArithmeticType,
+ enable_if_t<std::is_arithmetic<ArithmeticType>::value && !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value, int> = 0>
void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val)
{
switch (static_cast<value_t>(j))
@@ -96,12 +99,12 @@
s = *j.template get_ptr<const typename BasicJsonType::string_t*>();
}
-template<
- typename BasicJsonType,
- typename StringType,
- enable_if_t<
- std::is_assignable<StringType&, const typename BasicJsonType::string_t>::value && is_detected_exact<typename BasicJsonType::string_t::value_type, value_type_t, StringType>::value && !std::is_same<typename BasicJsonType::string_t, StringType>::value && !is_json_ref<StringType>::value,
- int> = 0>
+template<typename BasicJsonType,
+ typename StringType,
+ enable_if_t<std::is_assignable<StringType&, const typename BasicJsonType::string_t>::value &&
+ is_detected_exact<typename BasicJsonType::string_t::value_type, value_type_t, StringType>::value &&
+ !std::is_same<typename BasicJsonType::string_t, StringType>::value && !is_json_ref<StringType>::value,
+ int> = 0>
inline void from_json(const BasicJsonType& j, StringType& s)
{
if (JSON_HEDLEY_UNLIKELY(!j.is_string()))
@@ -185,8 +188,7 @@
}
template<typename BasicJsonType, typename T, std::size_t N>
-auto from_json_array_impl(const BasicJsonType& j, std::array<T, N>& arr, priority_tag<2> /*unused*/)
- -> decltype(j.template get<T>(), void())
+auto from_json_array_impl(const BasicJsonType& j, std::array<T, N>& arr, priority_tag<2> /*unused*/) -> decltype(j.template get<T>(), void())
{
for (std::size_t i = 0; i < N; ++i)
{
@@ -194,11 +196,11 @@
}
}
-template<typename BasicJsonType, typename ConstructibleArrayType, enable_if_t<std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value, int> = 0>
+template<typename BasicJsonType,
+ typename ConstructibleArrayType,
+ enable_if_t<std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value, int> = 0>
auto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<1> /*unused*/)
- -> decltype(arr.reserve(std::declval<typename ConstructibleArrayType::size_type>()),
- j.template get<typename ConstructibleArrayType::value_type>(),
- void())
+ -> decltype(arr.reserve(std::declval<typename ConstructibleArrayType::size_type>()), j.template get<typename ConstructibleArrayType::value_type>(), void())
{
using std::end;
@@ -212,29 +214,31 @@
arr = std::move(ret);
}
-template<typename BasicJsonType, typename ConstructibleArrayType, enable_if_t<std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value, int> = 0>
+template<typename BasicJsonType,
+ typename ConstructibleArrayType,
+ enable_if_t<std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value, int> = 0>
inline void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<0> /*unused*/)
{
using std::end;
ConstructibleArrayType ret;
- std::transform(
- j.begin(),
- j.end(),
- std::inserter(ret, end(ret)),
- [](const BasicJsonType& i) {
- // get<BasicJsonType>() returns *this, this won't call a from_json
- // method when value_type is BasicJsonType
- return i.template get<typename ConstructibleArrayType::value_type>();
- });
+ std::transform(j.begin(), j.end(), std::inserter(ret, end(ret)), [](const BasicJsonType& i) {
+ // get<BasicJsonType>() returns *this, this won't call a from_json
+ // method when value_type is BasicJsonType
+ return i.template get<typename ConstructibleArrayType::value_type>();
+ });
arr = std::move(ret);
}
-template<typename BasicJsonType, typename ConstructibleArrayType, enable_if_t<is_constructible_array_type<BasicJsonType, ConstructibleArrayType>::value && !is_constructible_object_type<BasicJsonType, ConstructibleArrayType>::value && !is_constructible_string_type<BasicJsonType, ConstructibleArrayType>::value && !std::is_same<ConstructibleArrayType, typename BasicJsonType::binary_t>::value && !is_basic_json<ConstructibleArrayType>::value, int> = 0>
+template<typename BasicJsonType,
+ typename ConstructibleArrayType,
+ enable_if_t<is_constructible_array_type<BasicJsonType, ConstructibleArrayType>::value &&
+ !is_constructible_object_type<BasicJsonType, ConstructibleArrayType>::value &&
+ !is_constructible_string_type<BasicJsonType, ConstructibleArrayType>::value &&
+ !std::is_same<ConstructibleArrayType, typename BasicJsonType::binary_t>::value && !is_basic_json<ConstructibleArrayType>::value,
+ int> = 0>
auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr)
- -> decltype(from_json_array_impl(j, arr, priority_tag<3>{}),
- j.template get<typename ConstructibleArrayType::value_type>(),
- void())
+ -> decltype(from_json_array_impl(j, arr, priority_tag<3>{}), j.template get<typename ConstructibleArrayType::value_type>(), void())
{
if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
{
@@ -245,9 +249,8 @@
}
template<typename BasicJsonType, typename T, std::size_t... Idx>
-std::array<T, sizeof...(Idx)> from_json_inplace_array_impl(BasicJsonType&& j,
- identity_tag<std::array<T, sizeof...(Idx)>> /*unused*/,
- index_sequence<Idx...> /*unused*/)
+std::array<T, sizeof...(Idx)>
+from_json_inplace_array_impl(BasicJsonType&& j, identity_tag<std::array<T, sizeof...(Idx)>> /*unused*/, index_sequence<Idx...> /*unused*/)
{
return {{std::forward<BasicJsonType>(j).at(Idx).template get<T>()...}};
}
@@ -275,7 +278,9 @@
bin = *j.template get_ptr<const typename BasicJsonType::binary_t*>();
}
-template<typename BasicJsonType, typename ConstructibleObjectType, enable_if_t<is_constructible_object_type<BasicJsonType, ConstructibleObjectType>::value, int> = 0>
+template<typename BasicJsonType,
+ typename ConstructibleObjectType,
+ enable_if_t<is_constructible_object_type<BasicJsonType, ConstructibleObjectType>::value, int> = 0>
inline void from_json(const BasicJsonType& j, ConstructibleObjectType& obj)
{
if (JSON_HEDLEY_UNLIKELY(!j.is_object()))
@@ -286,13 +291,9 @@
ConstructibleObjectType ret;
const auto* inner_object = j.template get_ptr<const typename BasicJsonType::object_t*>();
using value_type = typename ConstructibleObjectType::value_type;
- std::transform(
- inner_object->begin(),
- inner_object->end(),
- std::inserter(ret, ret.begin()),
- [](typename BasicJsonType::object_t::value_type const& p) {
- return value_type(p.first, p.second.template get<typename ConstructibleObjectType::mapped_type>());
- });
+ std::transform(inner_object->begin(), inner_object->end(), std::inserter(ret, ret.begin()), [](typename BasicJsonType::object_t::value_type const& p) {
+ return value_type(p.first, p.second.template get<typename ConstructibleObjectType::mapped_type>());
+ });
obj = std::move(ret);
}
@@ -300,7 +301,13 @@
// (BooleanType, etc..); note: Is it really necessary to provide explicit
// overloads for boolean_t etc. in case of a custom BooleanType which is not
// an arithmetic type?
-template<typename BasicJsonType, typename ArithmeticType, enable_if_t<std::is_arithmetic<ArithmeticType>::value && !std::is_same<ArithmeticType, typename BasicJsonType::number_unsigned_t>::value && !std::is_same<ArithmeticType, typename BasicJsonType::number_integer_t>::value && !std::is_same<ArithmeticType, typename BasicJsonType::number_float_t>::value && !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value, int> = 0>
+template<typename BasicJsonType,
+ typename ArithmeticType,
+ enable_if_t<std::is_arithmetic<ArithmeticType>::value && !std::is_same<ArithmeticType, typename BasicJsonType::number_unsigned_t>::value &&
+ !std::is_same<ArithmeticType, typename BasicJsonType::number_integer_t>::value &&
+ !std::is_same<ArithmeticType, typename BasicJsonType::number_float_t>::value &&
+ !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value,
+ int> = 0>
inline void from_json(const BasicJsonType& j, ArithmeticType& val)
{
switch (static_cast<value_t>(j))
@@ -346,8 +353,7 @@
template<typename BasicJsonType, class A1, class A2>
std::pair<A1, A2> from_json_tuple_impl(BasicJsonType&& j, identity_tag<std::pair<A1, A2>> /*unused*/, priority_tag<0> /*unused*/)
{
- return {std::forward<BasicJsonType>(j).at(0).template get<A1>(),
- std::forward<BasicJsonType>(j).at(1).template get<A2>()};
+ return {std::forward<BasicJsonType>(j).at(0).template get<A1>(), std::forward<BasicJsonType>(j).at(1).template get<A2>()};
}
template<typename BasicJsonType, typename A1, typename A2>
@@ -380,7 +386,12 @@
return from_json_tuple_impl(std::forward<BasicJsonType>(j), std::forward<TupleRelated>(t), priority_tag<3>{});
}
-template<typename BasicJsonType, typename Key, typename Value, typename Compare, typename Allocator, typename = enable_if_t<!std::is_constructible<typename BasicJsonType::string_t, Key>::value>>
+template<typename BasicJsonType,
+ typename Key,
+ typename Value,
+ typename Compare,
+ typename Allocator,
+ typename = enable_if_t<!std::is_constructible<typename BasicJsonType::string_t, Key>::value>>
inline void from_json(const BasicJsonType& j, std::map<Key, Value, Compare, Allocator>& m)
{
if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
@@ -398,7 +409,13 @@
}
}
-template<typename BasicJsonType, typename Key, typename Value, typename Hash, typename KeyEqual, typename Allocator, typename = enable_if_t<!std::is_constructible<typename BasicJsonType::string_t, Key>::value>>
+template<typename BasicJsonType,
+ typename Key,
+ typename Value,
+ typename Hash,
+ typename KeyEqual,
+ typename Allocator,
+ typename = enable_if_t<!std::is_constructible<typename BasicJsonType::string_t, Key>::value>>
inline void from_json(const BasicJsonType& j, std::unordered_map<Key, Value, Hash, KeyEqual, Allocator>& m)
{
if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
@@ -431,9 +448,8 @@
struct from_json_fn
{
template<typename BasicJsonType, typename T>
- auto operator()(const BasicJsonType& j, T&& val) const
- noexcept(noexcept(from_json(j, std::forward<T>(val))))
- -> decltype(from_json(j, std::forward<T>(val)))
+ auto operator()(const BasicJsonType& j, T&& val) const noexcept(noexcept(from_json(j, std::forward<T>(val))))
+ -> decltype(from_json(j, std::forward<T>(val)))
{
return from_json(j, std::forward<T>(val));
}
diff --git a/include/nlohmann/detail/conversions/to_chars.hpp b/include/nlohmann/detail/conversions/to_chars.hpp
index 51f2b4a..f1dabf4 100644
--- a/include/nlohmann/detail/conversions/to_chars.hpp
+++ b/include/nlohmann/detail/conversions/to_chars.hpp
@@ -19,7 +19,8 @@
#include <nlohmann/detail/macro_scope.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/*!
@brief implements the Grisu2 algorithm for binary to decimal floating-point
@@ -40,7 +41,8 @@
Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language
Design and Implementation, PLDI 1996
*/
-namespace dtoa_impl {
+namespace dtoa_impl
+{
template<typename Target, typename Source>
Target reinterpret_bits(const Source source)
@@ -199,8 +201,7 @@
// If v is normalized:
// value = 1.F * 2^(E - bias) = (2^(p-1) + F) * 2^(E - bias - (p-1))
- static_assert(std::numeric_limits<FloatType>::is_iec559,
- "internal error: dtoa_short requires an IEEE-754 floating-point implementation");
+ static_assert(std::numeric_limits<FloatType>::is_iec559, "internal error: dtoa_short requires an IEEE-754 floating-point implementation");
constexpr int kPrecision = std::numeric_limits<FloatType>::digits; // = p (includes the hidden bit)
constexpr int kBias = std::numeric_limits<FloatType>::max_exponent - 1 + (kPrecision - 1);
@@ -214,9 +215,7 @@
const std::uint64_t F = bits & (kHiddenBit - 1);
const bool is_denormal = E == 0;
- const diyfp v = is_denormal
- ? diyfp(F, kMinExp)
- : diyfp(F + kHiddenBit, static_cast<int>(E) - kBias);
+ const diyfp v = is_denormal ? diyfp(F, kMinExp) : diyfp(F + kHiddenBit, static_cast<int>(E) - kBias);
// Compute the boundaries m- and m+ of the floating-point value
// v = f * 2^e.
@@ -241,9 +240,8 @@
const bool lower_boundary_is_closer = F == 0 && E > 1;
const diyfp m_plus = diyfp(2 * v.f + 1, v.e - 1);
- const diyfp m_minus = lower_boundary_is_closer
- ? diyfp(4 * v.f - 1, v.e - 2) // (B)
- : diyfp(2 * v.f - 1, v.e - 1); // (A)
+ const diyfp m_minus = lower_boundary_is_closer ? diyfp(4 * v.f - 1, v.e - 2) // (B)
+ : diyfp(2 * v.f - 1, v.e - 1); // (A)
// Determine the normalized w+ = m+.
const diyfp w_plus = diyfp::normalize(m_plus);
@@ -381,89 +379,28 @@
constexpr int kCachedPowersMinDecExp = -300;
constexpr int kCachedPowersDecStep = 8;
- static constexpr std::array<cached_power, 79> kCachedPowers =
- {
- {
- {0xAB70FE17C79AC6CA, -1060, -300},
- {0xFF77B1FCBEBCDC4F, -1034, -292},
- {0xBE5691EF416BD60C, -1007, -284},
- {0x8DD01FAD907FFC3C, -980, -276},
- {0xD3515C2831559A83, -954, -268},
- {0x9D71AC8FADA6C9B5, -927, -260},
- {0xEA9C227723EE8BCB, -901, -252},
- {0xAECC49914078536D, -874, -244},
- {0x823C12795DB6CE57, -847, -236},
- {0xC21094364DFB5637, -821, -228},
- {0x9096EA6F3848984F, -794, -220},
- {0xD77485CB25823AC7, -768, -212},
- {0xA086CFCD97BF97F4, -741, -204},
- {0xEF340A98172AACE5, -715, -196},
- {0xB23867FB2A35B28E, -688, -188},
- {0x84C8D4DFD2C63F3B, -661, -180},
- {0xC5DD44271AD3CDBA, -635, -172},
- {0x936B9FCEBB25C996, -608, -164},
- {0xDBAC6C247D62A584, -582, -156},
- {0xA3AB66580D5FDAF6, -555, -148},
- {0xF3E2F893DEC3F126, -529, -140},
- {0xB5B5ADA8AAFF80B8, -502, -132},
- {0x87625F056C7C4A8B, -475, -124},
- {0xC9BCFF6034C13053, -449, -116},
- {0x964E858C91BA2655, -422, -108},
- {0xDFF9772470297EBD, -396, -100},
- {0xA6DFBD9FB8E5B88F, -369, -92},
- {0xF8A95FCF88747D94, -343, -84},
- {0xB94470938FA89BCF, -316, -76},
- {0x8A08F0F8BF0F156B, -289, -68},
- {0xCDB02555653131B6, -263, -60},
- {0x993FE2C6D07B7FAC, -236, -52},
- {0xE45C10C42A2B3B06, -210, -44},
- {0xAA242499697392D3, -183, -36},
- {0xFD87B5F28300CA0E, -157, -28},
- {0xBCE5086492111AEB, -130, -20},
- {0x8CBCCC096F5088CC, -103, -12},
- {0xD1B71758E219652C, -77, -4},
- {0x9C40000000000000, -50, 4},
- {0xE8D4A51000000000, -24, 12},
- {0xAD78EBC5AC620000, 3, 20},
- {0x813F3978F8940984, 30, 28},
- {0xC097CE7BC90715B3, 56, 36},
- {0x8F7E32CE7BEA5C70, 83, 44},
- {0xD5D238A4ABE98068, 109, 52},
- {0x9F4F2726179A2245, 136, 60},
- {0xED63A231D4C4FB27, 162, 68},
- {0xB0DE65388CC8ADA8, 189, 76},
- {0x83C7088E1AAB65DB, 216, 84},
- {0xC45D1DF942711D9A, 242, 92},
- {0x924D692CA61BE758, 269, 100},
- {0xDA01EE641A708DEA, 295, 108},
- {0xA26DA3999AEF774A, 322, 116},
- {0xF209787BB47D6B85, 348, 124},
- {0xB454E4A179DD1877, 375, 132},
- {0x865B86925B9BC5C2, 402, 140},
- {0xC83553C5C8965D3D, 428, 148},
- {0x952AB45CFA97A0B3, 455, 156},
- {0xDE469FBD99A05FE3, 481, 164},
- {0xA59BC234DB398C25, 508, 172},
- {0xF6C69A72A3989F5C, 534, 180},
- {0xB7DCBF5354E9BECE, 561, 188},
- {0x88FCF317F22241E2, 588, 196},
- {0xCC20CE9BD35C78A5, 614, 204},
- {0x98165AF37B2153DF, 641, 212},
- {0xE2A0B5DC971F303A, 667, 220},
- {0xA8D9D1535CE3B396, 694, 228},
- {0xFB9B7CD9A4A7443C, 720, 236},
- {0xBB764C4CA7A44410, 747, 244},
- {0x8BAB8EEFB6409C1A, 774, 252},
- {0xD01FEF10A657842C, 800, 260},
- {0x9B10A4E5E9913129, 827, 268},
- {0xE7109BFBA19C0C9D, 853, 276},
- {0xAC2820D9623BF429, 880, 284},
- {0x80444B5E7AA7CF85, 907, 292},
- {0xBF21E44003ACDD2D, 933, 300},
- {0x8E679C2F5E44FF8F, 960, 308},
- {0xD433179D9C8CB841, 986, 316},
- {0x9E19DB92B4E31BA9, 1013, 324},
- }};
+ static constexpr std::array<cached_power, 79> kCachedPowers = {{
+ {0xAB70FE17C79AC6CA, -1060, -300}, {0xFF77B1FCBEBCDC4F, -1034, -292}, {0xBE5691EF416BD60C, -1007, -284}, {0x8DD01FAD907FFC3C, -980, -276},
+ {0xD3515C2831559A83, -954, -268}, {0x9D71AC8FADA6C9B5, -927, -260}, {0xEA9C227723EE8BCB, -901, -252}, {0xAECC49914078536D, -874, -244},
+ {0x823C12795DB6CE57, -847, -236}, {0xC21094364DFB5637, -821, -228}, {0x9096EA6F3848984F, -794, -220}, {0xD77485CB25823AC7, -768, -212},
+ {0xA086CFCD97BF97F4, -741, -204}, {0xEF340A98172AACE5, -715, -196}, {0xB23867FB2A35B28E, -688, -188}, {0x84C8D4DFD2C63F3B, -661, -180},
+ {0xC5DD44271AD3CDBA, -635, -172}, {0x936B9FCEBB25C996, -608, -164}, {0xDBAC6C247D62A584, -582, -156}, {0xA3AB66580D5FDAF6, -555, -148},
+ {0xF3E2F893DEC3F126, -529, -140}, {0xB5B5ADA8AAFF80B8, -502, -132}, {0x87625F056C7C4A8B, -475, -124}, {0xC9BCFF6034C13053, -449, -116},
+ {0x964E858C91BA2655, -422, -108}, {0xDFF9772470297EBD, -396, -100}, {0xA6DFBD9FB8E5B88F, -369, -92}, {0xF8A95FCF88747D94, -343, -84},
+ {0xB94470938FA89BCF, -316, -76}, {0x8A08F0F8BF0F156B, -289, -68}, {0xCDB02555653131B6, -263, -60}, {0x993FE2C6D07B7FAC, -236, -52},
+ {0xE45C10C42A2B3B06, -210, -44}, {0xAA242499697392D3, -183, -36}, {0xFD87B5F28300CA0E, -157, -28}, {0xBCE5086492111AEB, -130, -20},
+ {0x8CBCCC096F5088CC, -103, -12}, {0xD1B71758E219652C, -77, -4}, {0x9C40000000000000, -50, 4}, {0xE8D4A51000000000, -24, 12},
+ {0xAD78EBC5AC620000, 3, 20}, {0x813F3978F8940984, 30, 28}, {0xC097CE7BC90715B3, 56, 36}, {0x8F7E32CE7BEA5C70, 83, 44},
+ {0xD5D238A4ABE98068, 109, 52}, {0x9F4F2726179A2245, 136, 60}, {0xED63A231D4C4FB27, 162, 68}, {0xB0DE65388CC8ADA8, 189, 76},
+ {0x83C7088E1AAB65DB, 216, 84}, {0xC45D1DF942711D9A, 242, 92}, {0x924D692CA61BE758, 269, 100}, {0xDA01EE641A708DEA, 295, 108},
+ {0xA26DA3999AEF774A, 322, 116}, {0xF209787BB47D6B85, 348, 124}, {0xB454E4A179DD1877, 375, 132}, {0x865B86925B9BC5C2, 402, 140},
+ {0xC83553C5C8965D3D, 428, 148}, {0x952AB45CFA97A0B3, 455, 156}, {0xDE469FBD99A05FE3, 481, 164}, {0xA59BC234DB398C25, 508, 172},
+ {0xF6C69A72A3989F5C, 534, 180}, {0xB7DCBF5354E9BECE, 561, 188}, {0x88FCF317F22241E2, 588, 196}, {0xCC20CE9BD35C78A5, 614, 204},
+ {0x98165AF37B2153DF, 641, 212}, {0xE2A0B5DC971F303A, 667, 220}, {0xA8D9D1535CE3B396, 694, 228}, {0xFB9B7CD9A4A7443C, 720, 236},
+ {0xBB764C4CA7A44410, 747, 244}, {0x8BAB8EEFB6409C1A, 774, 252}, {0xD01FEF10A657842C, 800, 260}, {0x9B10A4E5E9913129, 827, 268},
+ {0xE7109BFBA19C0C9D, 853, 276}, {0xAC2820D9623BF429, 880, 284}, {0x80444B5E7AA7CF85, 907, 292}, {0xBF21E44003ACDD2D, 933, 300},
+ {0x8E679C2F5E44FF8F, 960, 308}, {0xD433179D9C8CB841, 986, 316}, {0x9E19DB92B4E31BA9, 1013, 324},
+ }};
// This computation gives exactly the same results for k as
// k = ceil((kAlpha - e - 1) * 0.30102999566398114)
@@ -882,8 +819,7 @@
JSON_HEDLEY_NON_NULL(1)
void grisu2(char* buf, int& len, int& decimal_exponent, FloatType value)
{
- static_assert(diyfp::kPrecision >= std::numeric_limits<FloatType>::digits + 3,
- "internal error: not enough precision");
+ static_assert(diyfp::kPrecision >= std::numeric_limits<FloatType>::digits + 3, "internal error: not enough precision");
JSON_ASSERT(std::isfinite(value));
JSON_ASSERT(value > 0);
@@ -1055,8 +991,7 @@
*/
template<typename FloatType>
JSON_HEDLEY_NON_NULL(1, 2)
-JSON_HEDLEY_RETURNS_NON_NULL
- char* to_chars(char* first, const char* last, FloatType value)
+JSON_HEDLEY_RETURNS_NON_NULL char* to_chars(char* first, const char* last, FloatType value)
{
static_cast<void>(last); // maybe unused - fix warning
JSON_ASSERT(std::isfinite(value));
diff --git a/include/nlohmann/detail/conversions/to_json.hpp b/include/nlohmann/detail/conversions/to_json.hpp
index 1efce1a..4fd3d86 100644
--- a/include/nlohmann/detail/conversions/to_json.hpp
+++ b/include/nlohmann/detail/conversions/to_json.hpp
@@ -25,7 +25,8 @@
#include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
//////////////////
// constructors //
@@ -75,7 +76,9 @@
j.assert_invariant();
}
- template<typename BasicJsonType, typename CompatibleStringType, enable_if_t<!std::is_same<CompatibleStringType, typename BasicJsonType::string_t>::value, int> = 0>
+ template<typename BasicJsonType,
+ typename CompatibleStringType,
+ enable_if_t<!std::is_same<CompatibleStringType, typename BasicJsonType::string_t>::value, int> = 0>
static void construct(BasicJsonType& j, const CompatibleStringType& str)
{
j.m_data.m_value.destroy(j.m_data.m_type);
@@ -169,7 +172,9 @@
j.assert_invariant();
}
- template<typename BasicJsonType, typename CompatibleArrayType, enable_if_t<!std::is_same<CompatibleArrayType, typename BasicJsonType::array_t>::value, int> = 0>
+ template<typename BasicJsonType,
+ typename CompatibleArrayType,
+ enable_if_t<!std::is_same<CompatibleArrayType, typename BasicJsonType::array_t>::value, int> = 0>
static void construct(BasicJsonType& j, const CompatibleArrayType& arr)
{
using std::begin;
@@ -236,7 +241,9 @@
j.assert_invariant();
}
- template<typename BasicJsonType, typename CompatibleObjectType, enable_if_t<!std::is_same<CompatibleObjectType, typename BasicJsonType::object_t>::value, int> = 0>
+ template<typename BasicJsonType,
+ typename CompatibleObjectType,
+ enable_if_t<!std::is_same<CompatibleObjectType, typename BasicJsonType::object_t>::value, int> = 0>
static void construct(BasicJsonType& j, const CompatibleObjectType& obj)
{
using std::begin;
@@ -260,13 +267,22 @@
external_constructor<value_t::boolean>::construct(j, b);
}
-template<typename BasicJsonType, typename BoolRef, enable_if_t<((std::is_same<std::vector<bool>::reference, BoolRef>::value && !std::is_same<std::vector<bool>::reference, typename BasicJsonType::boolean_t&>::value) || (std::is_same<std::vector<bool>::const_reference, BoolRef>::value && !std::is_same<detail::uncvref_t<std::vector<bool>::const_reference>, typename BasicJsonType::boolean_t>::value)) && std::is_convertible<const BoolRef&, typename BasicJsonType::boolean_t>::value, int> = 0>
+template<typename BasicJsonType,
+ typename BoolRef,
+ enable_if_t<((std::is_same<std::vector<bool>::reference, BoolRef>::value &&
+ !std::is_same<std::vector<bool>::reference, typename BasicJsonType::boolean_t&>::value) ||
+ (std::is_same<std::vector<bool>::const_reference, BoolRef>::value &&
+ !std::is_same<detail::uncvref_t<std::vector<bool>::const_reference>, typename BasicJsonType::boolean_t>::value)) &&
+ std::is_convertible<const BoolRef&, typename BasicJsonType::boolean_t>::value,
+ int> = 0>
inline void to_json(BasicJsonType& j, const BoolRef& b) noexcept
{
external_constructor<value_t::boolean>::construct(j, static_cast<typename BasicJsonType::boolean_t>(b));
}
-template<typename BasicJsonType, typename CompatibleString, enable_if_t<std::is_constructible<typename BasicJsonType::string_t, CompatibleString>::value, int> = 0>
+template<typename BasicJsonType,
+ typename CompatibleString,
+ enable_if_t<std::is_constructible<typename BasicJsonType::string_t, CompatibleString>::value, int> = 0>
inline void to_json(BasicJsonType& j, const CompatibleString& s)
{
external_constructor<value_t::string>::construct(j, s);
@@ -284,13 +300,17 @@
external_constructor<value_t::number_float>::construct(j, static_cast<typename BasicJsonType::number_float_t>(val));
}
-template<typename BasicJsonType, typename CompatibleNumberUnsignedType, enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_unsigned_t, CompatibleNumberUnsignedType>::value, int> = 0>
+template<typename BasicJsonType,
+ typename CompatibleNumberUnsignedType,
+ enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_unsigned_t, CompatibleNumberUnsignedType>::value, int> = 0>
inline void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept
{
external_constructor<value_t::number_unsigned>::construct(j, static_cast<typename BasicJsonType::number_unsigned_t>(val));
}
-template<typename BasicJsonType, typename CompatibleNumberIntegerType, enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_integer_t, CompatibleNumberIntegerType>::value, int> = 0>
+template<typename BasicJsonType,
+ typename CompatibleNumberIntegerType,
+ enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_integer_t, CompatibleNumberIntegerType>::value, int> = 0>
inline void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept
{
external_constructor<value_t::number_integer>::construct(j, static_cast<typename BasicJsonType::number_integer_t>(val));
@@ -311,7 +331,13 @@
external_constructor<value_t::array>::construct(j, e);
}
-template<typename BasicJsonType, typename CompatibleArrayType, enable_if_t<is_compatible_array_type<BasicJsonType, CompatibleArrayType>::value && !is_compatible_object_type<BasicJsonType, CompatibleArrayType>::value && !is_compatible_string_type<BasicJsonType, CompatibleArrayType>::value && !std::is_same<typename BasicJsonType::binary_t, CompatibleArrayType>::value && !is_basic_json<CompatibleArrayType>::value, int> = 0>
+template<
+ typename BasicJsonType,
+ typename CompatibleArrayType,
+ enable_if_t<is_compatible_array_type<BasicJsonType, CompatibleArrayType>::value && !is_compatible_object_type<BasicJsonType, CompatibleArrayType>::value &&
+ !is_compatible_string_type<BasicJsonType, CompatibleArrayType>::value &&
+ !std::is_same<typename BasicJsonType::binary_t, CompatibleArrayType>::value && !is_basic_json<CompatibleArrayType>::value,
+ int> = 0>
inline void to_json(BasicJsonType& j, const CompatibleArrayType& arr)
{
external_constructor<value_t::array>::construct(j, arr);
@@ -335,7 +361,9 @@
external_constructor<value_t::array>::construct(j, std::move(arr));
}
-template<typename BasicJsonType, typename CompatibleObjectType, enable_if_t<is_compatible_object_type<BasicJsonType, CompatibleObjectType>::value && !is_basic_json<CompatibleObjectType>::value, int> = 0>
+template<typename BasicJsonType,
+ typename CompatibleObjectType,
+ enable_if_t<is_compatible_object_type<BasicJsonType, CompatibleObjectType>::value && !is_basic_json<CompatibleObjectType>::value, int> = 0>
inline void to_json(BasicJsonType& j, const CompatibleObjectType& obj)
{
external_constructor<value_t::object>::construct(j, obj);
@@ -347,19 +375,21 @@
external_constructor<value_t::object>::construct(j, std::move(obj));
}
-template<
- typename BasicJsonType,
- typename T,
- std::size_t N,
- enable_if_t<!std::is_constructible<typename BasicJsonType::string_t,
- const T (&)[N]>::value, // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
- int> = 0>
+template<typename BasicJsonType,
+ typename T,
+ std::size_t N,
+ enable_if_t<!std::is_constructible<typename BasicJsonType::string_t,
+ const T (&)[N]>::value, // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
+ int> = 0>
inline void to_json(BasicJsonType& j, const T (&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
{
external_constructor<value_t::array>::construct(j, arr);
}
-template<typename BasicJsonType, typename T1, typename T2, enable_if_t<std::is_constructible<BasicJsonType, T1>::value && std::is_constructible<BasicJsonType, T2>::value, int> = 0>
+template<typename BasicJsonType,
+ typename T1,
+ typename T2,
+ enable_if_t<std::is_constructible<BasicJsonType, T1>::value && std::is_constructible<BasicJsonType, T2>::value, int> = 0>
inline void to_json(BasicJsonType& j, const std::pair<T1, T2>& p)
{
j = {p.first, p.second};
@@ -395,8 +425,7 @@
struct to_json_fn
{
template<typename BasicJsonType, typename T>
- auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward<T>(val))))
- -> decltype(to_json(j, std::forward<T>(val)), void())
+ auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward<T>(val)))) -> decltype(to_json(j, std::forward<T>(val)), void())
{
return to_json(j, std::forward<T>(val));
}
diff --git a/include/nlohmann/detail/exceptions.hpp b/include/nlohmann/detail/exceptions.hpp
index 430b9ac..ac4014b 100644
--- a/include/nlohmann/detail/exceptions.hpp
+++ b/include/nlohmann/detail/exceptions.hpp
@@ -26,7 +26,8 @@
#include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
////////////////
// exceptions //
@@ -155,7 +156,12 @@
template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
static parse_error create(int id_, std::size_t byte_, const std::string& what_arg, BasicJsonContext context)
{
- const std::string w = concat(exception::name("parse_error", id_), "parse error", (byte_ != 0 ? (concat(" at byte ", std::to_string(byte_))) : ""), ": ", exception::diagnostics(context), what_arg);
+ const std::string w = concat(exception::name("parse_error", id_),
+ "parse error",
+ (byte_ != 0 ? (concat(" at byte ", std::to_string(byte_))) : ""),
+ ": ",
+ exception::diagnostics(context),
+ what_arg);
return {id_, byte_, w.c_str()};
}
diff --git a/include/nlohmann/detail/hash.hpp b/include/nlohmann/detail/hash.hpp
index 64bff1c..2d40511 100644
--- a/include/nlohmann/detail/hash.hpp
+++ b/include/nlohmann/detail/hash.hpp
@@ -16,7 +16,8 @@
#include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
// boost::hash_combine
inline std::size_t combine(std::size_t seed, std::size_t h) noexcept
diff --git a/include/nlohmann/detail/input/binary_reader.hpp b/include/nlohmann/detail/input/binary_reader.hpp
index e2509d5..4d7316f 100644
--- a/include/nlohmann/detail/input/binary_reader.hpp
+++ b/include/nlohmann/detail/input/binary_reader.hpp
@@ -32,7 +32,8 @@
#include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/// how to treat CBOR tags
enum class cbor_tag_handler_t
@@ -102,10 +103,7 @@
@return whether parsing was successful
*/
JSON_HEDLEY_NON_NULL(3)
- bool sax_parse(const input_format_t format,
- json_sax_t* sax_,
- const bool strict = true,
- const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
+ bool sax_parse(const input_format_t format, json_sax_t* sax_, const bool strict = true, const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
{
sax = sax_;
bool result = false;
@@ -148,7 +146,13 @@
if (JSON_HEDLEY_UNLIKELY(current != char_traits<char_type>::eof()))
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(110, chars_read, exception_message(input_format, concat("expected end of input; last byte: 0x", get_token_string()), "value"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ get_token_string(),
+ parse_error::create(110,
+ chars_read,
+ exception_message(input_format, concat("expected end of input; last byte: 0x", get_token_string()), "value"),
+ nullptr));
}
}
@@ -224,7 +228,13 @@
if (JSON_HEDLEY_UNLIKELY(len < 1))
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, concat("string length must be at least 1, is ", std::to_string(len)), "string"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(112,
+ chars_read,
+ exception_message(input_format_t::bson, concat("string length must be at least 1, is ", std::to_string(len)), "string"),
+ nullptr));
}
return get_string(input_format_t::bson, len - static_cast<NumberType>(1), result) && get() != char_traits<char_type>::eof();
@@ -245,7 +255,13 @@
if (JSON_HEDLEY_UNLIKELY(len < 0))
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, concat("byte array length cannot be negative, is ", std::to_string(len)), "binary"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(112,
+ chars_read,
+ exception_message(input_format_t::bson, concat("byte array length cannot be negative, is ", std::to_string(len)), "binary"),
+ nullptr));
}
// All BSON binary values have a subtype
@@ -266,8 +282,7 @@
Unsupported BSON record type 0x...
@return whether a valid BSON-object/array was passed to the SAX parser
*/
- bool parse_bson_element_internal(const char_int_type element_type,
- const std::size_t element_type_parse_position)
+ bool parse_bson_element_internal(const char_int_type element_type, const std::size_t element_type_parse_position)
{
switch (element_type)
{
@@ -326,9 +341,14 @@
default: // anything else not supported (yet)
{
std::array<char, 3> cr{{}};
- static_cast<void>((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast<unsigned char>(element_type))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
+ static_cast<void>((std::snprintf)(cr.data(),
+ cr.size(),
+ "%.2hhX",
+ static_cast<unsigned char>(element_type))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
const std::string cr_str{cr.data()};
- return sax->parse_error(element_type_parse_position, cr_str, parse_error::create(114, element_type_parse_position, concat("Unsupported BSON record type 0x", cr_str), nullptr));
+ return sax->parse_error(element_type_parse_position,
+ cr_str,
+ parse_error::create(114, element_type_parse_position, concat("Unsupported BSON record type 0x", cr_str), nullptr));
}
}
}
@@ -413,8 +433,7 @@
@return whether a valid CBOR value was passed to the SAX parser
*/
- bool parse_cbor_internal(const bool get_char,
- const cbor_tag_handler_t tag_handler)
+ bool parse_cbor_internal(const bool get_char, const cbor_tag_handler_t tag_handler)
{
switch (get_char ? get() : current)
{
@@ -521,7 +540,8 @@
case 0x3B: // Negative integer -1-n (eight-byte uint64_t follows)
{
std::uint64_t number{};
- return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast<number_integer_t>(-1) - static_cast<number_integer_t>(number));
+ return get_number(input_format_t::cbor, number) &&
+ sax->number_integer(static_cast<number_integer_t>(-1) - static_cast<number_integer_t>(number));
}
// Binary data (0x00..0x17 bytes follow)
@@ -619,9 +639,7 @@
case 0x95:
case 0x96:
case 0x97:
- return get_cbor_array(
- conditional_static_cast<std::size_t>(static_cast<unsigned int>(current) & 0x1Fu),
- tag_handler);
+ return get_cbor_array(conditional_static_cast<std::size_t>(static_cast<unsigned int>(current) & 0x1Fu), tag_handler);
case 0x98: // array (one-byte uint8_t for n follows)
{
@@ -729,7 +747,12 @@
case cbor_tag_handler_t::error:
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"), nullptr));
+ return sax->parse_error(chars_read,
+ last_token,
+ parse_error::create(112,
+ chars_read,
+ exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"),
+ nullptr));
}
case cbor_tag_handler_t::ignore:
@@ -858,17 +881,12 @@
case 0:
return std::ldexp(mant, -24);
case 31:
- return (mant == 0)
- ? std::numeric_limits<double>::infinity()
- : std::numeric_limits<double>::quiet_NaN();
+ return (mant == 0) ? std::numeric_limits<double>::infinity() : std::numeric_limits<double>::quiet_NaN();
default:
return std::ldexp(mant + 1024, exp - 25);
}
}();
- return sax->number_float((half & 0x8000u) != 0
- ? static_cast<number_float_t>(-val)
- : static_cast<number_float_t>(val),
- "");
+ return sax->number_float((half & 0x8000u) != 0 ? static_cast<number_float_t>(-val) : static_cast<number_float_t>(val), "");
}
case 0xFA: // Single-Precision Float (four-byte IEEE 754)
@@ -886,7 +904,10 @@
default: // anything else (0xFF is handled inside the other types)
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(112, chars_read, exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"), nullptr));
}
}
}
@@ -981,7 +1002,16 @@
default:
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, concat("expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x", last_token), "string"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(
+ 113,
+ chars_read,
+ exception_message(input_format_t::cbor,
+ concat("expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x", last_token),
+ "string"),
+ nullptr));
}
}
}
@@ -1038,29 +1068,25 @@
case 0x58: // Binary data (one-byte uint8_t for n follows)
{
std::uint8_t len{};
- return get_number(input_format_t::cbor, len) &&
- get_binary(input_format_t::cbor, len, result);
+ return get_number(input_format_t::cbor, len) && get_binary(input_format_t::cbor, len, result);
}
case 0x59: // Binary data (two-byte uint16_t for n follow)
{
std::uint16_t len{};
- return get_number(input_format_t::cbor, len) &&
- get_binary(input_format_t::cbor, len, result);
+ return get_number(input_format_t::cbor, len) && get_binary(input_format_t::cbor, len, result);
}
case 0x5A: // Binary data (four-byte uint32_t for n follow)
{
std::uint32_t len{};
- return get_number(input_format_t::cbor, len) &&
- get_binary(input_format_t::cbor, len, result);
+ return get_number(input_format_t::cbor, len) && get_binary(input_format_t::cbor, len, result);
}
case 0x5B: // Binary data (eight-byte uint64_t for n follow)
{
std::uint64_t len{};
- return get_number(input_format_t::cbor, len) &&
- get_binary(input_format_t::cbor, len, result);
+ return get_number(input_format_t::cbor, len) && get_binary(input_format_t::cbor, len, result);
}
case 0x5F: // Binary data (indefinite length)
@@ -1080,7 +1106,16 @@
default:
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, concat("expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x", last_token), "binary"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(
+ 113,
+ chars_read,
+ exception_message(input_format_t::cbor,
+ concat("expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x", last_token),
+ "binary"),
+ nullptr));
}
}
}
@@ -1091,8 +1126,7 @@
@param[in] tag_handler how CBOR tags should be treated
@return whether array creation completed
*/
- bool get_cbor_array(const std::size_t len,
- const cbor_tag_handler_t tag_handler)
+ bool get_cbor_array(const std::size_t len, const cbor_tag_handler_t tag_handler)
{
if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len)))
{
@@ -1129,8 +1163,7 @@
@param[in] tag_handler how CBOR tags should be treated
@return whether object creation completed
*/
- bool get_cbor_object(const std::size_t len,
- const cbor_tag_handler_t tag_handler)
+ bool get_cbor_object(const std::size_t len, const cbor_tag_handler_t tag_handler)
{
if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len)))
{
@@ -1550,7 +1583,10 @@
default: // anything else
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::msgpack, concat("invalid byte: 0x", last_token), "value"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(112, chars_read, exception_message(input_format_t::msgpack, concat("invalid byte: 0x", last_token), "value"), nullptr));
}
}
}
@@ -1632,7 +1668,15 @@
default:
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::msgpack, concat("expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0x", last_token), "string"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(113,
+ chars_read,
+ exception_message(input_format_t::msgpack,
+ concat("expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0x", last_token),
+ "string"),
+ nullptr));
}
}
}
@@ -1660,92 +1704,73 @@
case 0xC4: // bin 8
{
std::uint8_t len{};
- return get_number(input_format_t::msgpack, len) &&
- get_binary(input_format_t::msgpack, len, result);
+ return get_number(input_format_t::msgpack, len) && get_binary(input_format_t::msgpack, len, result);
}
case 0xC5: // bin 16
{
std::uint16_t len{};
- return get_number(input_format_t::msgpack, len) &&
- get_binary(input_format_t::msgpack, len, result);
+ return get_number(input_format_t::msgpack, len) && get_binary(input_format_t::msgpack, len, result);
}
case 0xC6: // bin 32
{
std::uint32_t len{};
- return get_number(input_format_t::msgpack, len) &&
- get_binary(input_format_t::msgpack, len, result);
+ return get_number(input_format_t::msgpack, len) && get_binary(input_format_t::msgpack, len, result);
}
case 0xC7: // ext 8
{
std::uint8_t len{};
std::int8_t subtype{};
- return get_number(input_format_t::msgpack, len) &&
- get_number(input_format_t::msgpack, subtype) &&
- get_binary(input_format_t::msgpack, len, result) &&
- assign_and_return_true(subtype);
+ return get_number(input_format_t::msgpack, len) && get_number(input_format_t::msgpack, subtype) &&
+ get_binary(input_format_t::msgpack, len, result) && assign_and_return_true(subtype);
}
case 0xC8: // ext 16
{
std::uint16_t len{};
std::int8_t subtype{};
- return get_number(input_format_t::msgpack, len) &&
- get_number(input_format_t::msgpack, subtype) &&
- get_binary(input_format_t::msgpack, len, result) &&
- assign_and_return_true(subtype);
+ return get_number(input_format_t::msgpack, len) && get_number(input_format_t::msgpack, subtype) &&
+ get_binary(input_format_t::msgpack, len, result) && assign_and_return_true(subtype);
}
case 0xC9: // ext 32
{
std::uint32_t len{};
std::int8_t subtype{};
- return get_number(input_format_t::msgpack, len) &&
- get_number(input_format_t::msgpack, subtype) &&
- get_binary(input_format_t::msgpack, len, result) &&
- assign_and_return_true(subtype);
+ return get_number(input_format_t::msgpack, len) && get_number(input_format_t::msgpack, subtype) &&
+ get_binary(input_format_t::msgpack, len, result) && assign_and_return_true(subtype);
}
case 0xD4: // fixext 1
{
std::int8_t subtype{};
- return get_number(input_format_t::msgpack, subtype) &&
- get_binary(input_format_t::msgpack, 1, result) &&
- assign_and_return_true(subtype);
+ return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 1, result) && assign_and_return_true(subtype);
}
case 0xD5: // fixext 2
{
std::int8_t subtype{};
- return get_number(input_format_t::msgpack, subtype) &&
- get_binary(input_format_t::msgpack, 2, result) &&
- assign_and_return_true(subtype);
+ return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 2, result) && assign_and_return_true(subtype);
}
case 0xD6: // fixext 4
{
std::int8_t subtype{};
- return get_number(input_format_t::msgpack, subtype) &&
- get_binary(input_format_t::msgpack, 4, result) &&
- assign_and_return_true(subtype);
+ return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 4, result) && assign_and_return_true(subtype);
}
case 0xD7: // fixext 8
{
std::int8_t subtype{};
- return get_number(input_format_t::msgpack, subtype) &&
- get_binary(input_format_t::msgpack, 8, result) &&
- assign_and_return_true(subtype);
+ return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 8, result) && assign_and_return_true(subtype);
}
case 0xD8: // fixext 16
{
std::int8_t subtype{};
- return get_number(input_format_t::msgpack, subtype) &&
- get_binary(input_format_t::msgpack, 16, result) &&
- assign_and_return_true(subtype);
+ return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 16, result) && assign_and_return_true(subtype);
}
default: // LCOV_EXCL_LINE
@@ -2024,7 +2049,12 @@
}
if (number < 0)
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr));
+ return sax->parse_error(chars_read,
+ get_token_string(),
+ parse_error::create(113,
+ chars_read,
+ exception_message(input_format, "count in an optimized container must be positive", "size"),
+ nullptr));
}
result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
return true;
@@ -2039,7 +2069,12 @@
}
if (number < 0)
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr));
+ return sax->parse_error(chars_read,
+ get_token_string(),
+ parse_error::create(113,
+ chars_read,
+ exception_message(input_format, "count in an optimized container must be positive", "size"),
+ nullptr));
}
result = static_cast<std::size_t>(number);
return true;
@@ -2054,7 +2089,12 @@
}
if (number < 0)
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr));
+ return sax->parse_error(chars_read,
+ get_token_string(),
+ parse_error::create(113,
+ chars_read,
+ exception_message(input_format, "count in an optimized container must be positive", "size"),
+ nullptr));
}
result = static_cast<std::size_t>(number);
return true;
@@ -2069,11 +2109,18 @@
}
if (number < 0)
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr));
+ return sax->parse_error(chars_read,
+ get_token_string(),
+ parse_error::create(113,
+ chars_read,
+ exception_message(input_format, "count in an optimized container must be positive", "size"),
+ nullptr));
}
if (!value_in_range_of<std::size_t>(number))
{
- return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, exception_message(input_format, "integer value overflow", "size"), nullptr));
+ return sax->parse_error(chars_read,
+ get_token_string(),
+ out_of_range::create(408, exception_message(input_format, "integer value overflow", "size"), nullptr));
}
result = static_cast<std::size_t>(number);
return true;
@@ -2122,7 +2169,9 @@
}
if (!value_in_range_of<std::size_t>(number))
{
- return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, exception_message(input_format, "integer value overflow", "size"), nullptr));
+ return sax->parse_error(chars_read,
+ get_token_string(),
+ out_of_range::create(408, exception_message(input_format, "integer value overflow", "size"), nullptr));
}
result = detail::conditional_static_cast<std::size_t>(number);
return true;
@@ -2136,7 +2185,10 @@
}
if (is_ndarray) // ndarray dimensional vector can only contain integers, and can not embed another array
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "ndarray dimensional vector is not allowed", "size"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ get_token_string(),
+ parse_error::create(113, chars_read, exception_message(input_format, "ndarray dimensional vector is not allowed", "size"), nullptr));
}
std::vector<size_t> dim;
if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim)))
@@ -2168,9 +2220,14 @@
for (auto i : dim)
{
result *= i;
- if (result == 0 || result == npos) // because dim elements shall not have zeros, result = 0 means overflow happened; it also can't be npos as it is used to initialize size in get_ubjson_size_type()
+ if (result == 0 ||
+ result ==
+ npos) // because dim elements shall not have zeros, result = 0 means overflow happened; it also can't be npos as it is used to initialize size in get_ubjson_size_type()
{
- return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, exception_message(input_format, "excessive ndarray size caused overflow", "size"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ get_token_string(),
+ out_of_range::create(408, exception_message(input_format, "excessive ndarray size caused overflow", "size"), nullptr));
}
if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(static_cast<number_unsigned_t>(i))))
{
@@ -2223,10 +2280,17 @@
if (current == '$')
{
result.second = get(); // must not ignore 'N', because 'N' maybe the type
- if (input_format == input_format_t::bjdata && JSON_HEDLEY_UNLIKELY(std::binary_search(bjd_optimized_type_markers.begin(), bjd_optimized_type_markers.end(), result.second)))
+ if (input_format == input_format_t::bjdata &&
+ JSON_HEDLEY_UNLIKELY(std::binary_search(bjd_optimized_type_markers.begin(), bjd_optimized_type_markers.end(), result.second)))
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, concat("marker 0x", last_token, " is not a permitted optimized array type"), "type"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(112,
+ chars_read,
+ exception_message(input_format, concat("marker 0x", last_token, " is not a permitted optimized array type"), "type"),
+ nullptr));
}
if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "type")))
@@ -2242,7 +2306,13 @@
return false;
}
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, concat("expected '#' after type information; last byte: 0x", last_token), "size"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(112,
+ chars_read,
+ exception_message(input_format, concat("expected '#' after type information; last byte: 0x", last_token), "size"),
+ nullptr));
}
const bool is_error = get_ubjson_size_value(result.first, is_ndarray);
@@ -2250,7 +2320,10 @@
{
if (inside_ndarray)
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read, exception_message(input_format, "ndarray can not be recursive", "size"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ get_token_string(),
+ parse_error::create(112, chars_read, exception_message(input_format, "ndarray can not be recursive", "size"), nullptr));
}
result.second |= (1 << 8); // use bit 8 to indicate ndarray, all UBJSON and BJData markers should be ASCII letters
}
@@ -2262,7 +2335,10 @@
const bool is_error = get_ubjson_size_value(result.first, is_ndarray);
if (input_format == input_format_t::bjdata && is_ndarray)
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read, exception_message(input_format, "ndarray requires both type and size", "size"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ get_token_string(),
+ parse_error::create(112, chars_read, exception_message(input_format, "ndarray requires both type and size", "size"), nullptr));
}
return is_error;
}
@@ -2388,17 +2464,12 @@
case 0:
return std::ldexp(mant, -24);
case 31:
- return (mant == 0)
- ? std::numeric_limits<double>::infinity()
- : std::numeric_limits<double>::quiet_NaN();
+ return (mant == 0) ? std::numeric_limits<double>::infinity() : std::numeric_limits<double>::quiet_NaN();
default:
return std::ldexp(mant + 1024, exp - 25);
}
}();
- return sax->number_float((half & 0x8000u) != 0
- ? static_cast<number_float_t>(-val)
- : static_cast<number_float_t>(val),
- "");
+ return sax->number_float((half & 0x8000u) != 0 ? static_cast<number_float_t>(-val) : static_cast<number_float_t>(val), "");
}
case 'd':
@@ -2428,7 +2499,14 @@
if (JSON_HEDLEY_UNLIKELY(current > 127))
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format, concat("byte after 'C' must be in range 0x00..0x7F; last byte: 0x", last_token), "char"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(
+ 113,
+ chars_read,
+ exception_message(input_format, concat("byte after 'C' must be in range 0x00..0x7F; last byte: 0x", last_token), "char"),
+ nullptr));
}
string_t s(1, static_cast<typename string_t::value_type>(current));
return sax->string(s);
@@ -2450,7 +2528,9 @@
break;
}
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, "invalid byte: 0x" + last_token, "value"), nullptr));
+ return sax->parse_error(chars_read,
+ last_token,
+ parse_error::create(112, chars_read, exception_message(input_format, "invalid byte: 0x" + last_token, "value"), nullptr));
}
/*!
@@ -2477,7 +2557,10 @@
if (JSON_HEDLEY_UNLIKELY(it == bjd_types_map.end() || it->first != size_and_type.second))
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, "invalid byte: 0x" + last_token, "type"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(112, chars_read, exception_message(input_format, "invalid byte: 0x" + last_token, "type"), nullptr));
}
string_t type = it->second; // sax->string() takes a reference
@@ -2574,7 +2657,13 @@
if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0)
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, "BJData object does not support ND-array size in optimized format", "object"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(112,
+ chars_read,
+ exception_message(input_format, "BJData object does not support ND-array size in optimized format", "object"),
+ nullptr));
}
string_t key;
@@ -2678,7 +2767,13 @@
if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input))
{
- return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ number_string,
+ parse_error::create(115,
+ chars_read,
+ exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"),
+ nullptr));
}
switch (result_number)
@@ -2704,7 +2799,14 @@
case token_type::end_of_input:
case token_type::literal_or_value:
default:
- return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ number_string,
+ parse_error::create(
+ 115,
+ chars_read,
+ exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"),
+ nullptr));
}
}
@@ -2799,9 +2901,7 @@
the input before we run out of string memory.
*/
template<typename NumberType>
- bool get_string(const input_format_t format,
- const NumberType len,
- string_t& result)
+ bool get_string(const input_format_t format, const NumberType len, string_t& result)
{
bool success = true;
for (NumberType i = 0; i < len; i++)
@@ -2832,9 +2932,7 @@
the input before we run out of memory.
*/
template<typename NumberType>
- bool get_binary(const input_format_t format,
- const NumberType len,
- binary_t& result)
+ bool get_binary(const input_format_t format, const NumberType len, binary_t& result)
{
bool success = true;
for (NumberType i = 0; i < len; i++)
@@ -2860,7 +2958,9 @@
{
if (JSON_HEDLEY_UNLIKELY(current == char_traits<char_type>::eof()))
{
- return sax->parse_error(chars_read, "<end of file>", parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context), nullptr));
+ return sax->parse_error(chars_read,
+ "<end of file>",
+ parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context), nullptr));
}
return true;
}
@@ -2871,7 +2971,8 @@
std::string get_token_string() const
{
std::array<char, 3> cr{{}};
- static_cast<void>((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast<unsigned char>(current))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
+ static_cast<void>(
+ (std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast<unsigned char>(current))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
return std::string{cr.data()};
}
@@ -2881,9 +2982,7 @@
@param[in] context further context information
@return a message string to use in the parse_error exceptions
*/
- std::string exception_message(const input_format_t format,
- const std::string& detail,
- const std::string& context) const
+ std::string exception_message(const input_format_t format, const std::string& detail, const std::string& context) const
{
std::string error_msg = "syntax error while parsing ";
@@ -2939,33 +3038,29 @@
json_sax_t* sax = nullptr;
// excluded markers in bjdata optimized type
-#define JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_ \
- make_array<char_int_type>('F', 'H', 'N', 'S', 'T', 'Z', '[', '{')
+#define JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_ make_array<char_int_type>('F', 'H', 'N', 'S', 'T', 'Z', '[', '{')
-#define JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_ \
- make_array<bjd_type>( \
- bjd_type{'C', "char"}, \
- bjd_type{'D', "double"}, \
- bjd_type{'I', "int16"}, \
- bjd_type{'L', "int64"}, \
- bjd_type{'M', "uint64"}, \
- bjd_type{'U', "uint8"}, \
- bjd_type{'d', "single"}, \
- bjd_type{'i', "int8"}, \
- bjd_type{'l', "int32"}, \
- bjd_type{'m', "uint32"}, \
- bjd_type{'u', "uint16"})
+#define JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_ \
+ make_array<bjd_type>(bjd_type{'C', "char"}, \
+ bjd_type{'D', "double"}, \
+ bjd_type{'I', "int16"}, \
+ bjd_type{'L', "int64"}, \
+ bjd_type{'M', "uint64"}, \
+ bjd_type{'U', "uint8"}, \
+ bjd_type{'d', "single"}, \
+ bjd_type{'i', "int8"}, \
+ bjd_type{'l', "int32"}, \
+ bjd_type{'m', "uint32"}, \
+ bjd_type{'u', "uint16"})
JSON_PRIVATE_UNLESS_TESTED :
// lookup tables
// NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes)
- const decltype(JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_) bjd_optimized_type_markers =
- JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_;
+ const decltype(JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_) bjd_optimized_type_markers = JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_;
using bjd_type = std::pair<char_int_type, string_t>;
// NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes)
- const decltype(JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_) bjd_types_map =
- JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_;
+ const decltype(JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_) bjd_types_map = JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_;
#undef JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_
#undef JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_
diff --git a/include/nlohmann/detail/input/input_adapters.hpp b/include/nlohmann/detail/input/input_adapters.hpp
index 769775d..ae38ce4 100644
--- a/include/nlohmann/detail/input/input_adapters.hpp
+++ b/include/nlohmann/detail/input/input_adapters.hpp
@@ -28,7 +28,8 @@
#include <nlohmann/detail/meta/type_traits.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/// the supported input formats
enum class input_format_t
@@ -187,10 +188,8 @@
struct wide_string_input_helper<BaseInputAdapter, 4>
{
// UTF-32
- static void fill_buffer(BaseInputAdapter& input,
- std::array<std::char_traits<char>::int_type, 4>& utf8_bytes,
- size_t& utf8_bytes_index,
- size_t& utf8_bytes_filled)
+ static void
+ fill_buffer(BaseInputAdapter& input, std::array<std::char_traits<char>::int_type, 4>& utf8_bytes, size_t& utf8_bytes_index, size_t& utf8_bytes_filled)
{
utf8_bytes_index = 0;
@@ -245,10 +244,8 @@
struct wide_string_input_helper<BaseInputAdapter, 2>
{
// UTF-16
- static void fill_buffer(BaseInputAdapter& input,
- std::array<std::char_traits<char>::int_type, 4>& utf8_bytes,
- size_t& utf8_bytes_index,
- size_t& utf8_bytes_filled)
+ static void
+ fill_buffer(BaseInputAdapter& input, std::array<std::char_traits<char>::int_type, 4>& utf8_bytes, size_t& utf8_bytes_index, size_t& utf8_bytes_filled)
{
utf8_bytes_index = 0;
@@ -398,7 +395,8 @@
// Enables ADL on begin(container) and end(container)
// Encloses the using declarations in namespace for not to leak them to outside scope
-namespace container_input_adapter_factory_impl {
+namespace container_input_adapter_factory_impl
+{
using std::begin;
using std::end;
@@ -408,8 +406,7 @@
{};
template<typename ContainerType>
-struct container_input_adapter_factory<ContainerType,
- void_t<decltype(begin(std::declval<ContainerType>()), end(std::declval<ContainerType>()))>>
+struct container_input_adapter_factory<ContainerType, void_t<decltype(begin(std::declval<ContainerType>()), end(std::declval<ContainerType>()))>>
{
using adapter_type = decltype(input_adapter(begin(std::declval<ContainerType>()), end(std::declval<ContainerType>())));
@@ -448,13 +445,11 @@
using contiguous_bytes_input_adapter = decltype(input_adapter(std::declval<const char*>(), std::declval<const char*>()));
// Null-delimited strings, and the like.
-template<typename CharT,
- typename std::enable_if<
- std::is_pointer<CharT>::value &&
- !std::is_array<CharT>::value &&
- std::is_integral<typename std::remove_pointer<CharT>::type>::value &&
- sizeof(typename std::remove_pointer<CharT>::type) == 1,
- int>::type = 0>
+template<
+ typename CharT,
+ typename std::enable_if<std::is_pointer<CharT>::value && !std::is_array<CharT>::value &&
+ std::is_integral<typename std::remove_pointer<CharT>::type>::value && sizeof(typename std::remove_pointer<CharT>::type) == 1,
+ int>::type = 0>
contiguous_bytes_input_adapter input_adapter(CharT b)
{
auto length = std::strlen(reinterpret_cast<const char*>(b));
@@ -463,7 +458,8 @@
}
template<typename T, std::size_t N>
-auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
+auto input_adapter(T (&array)[N])
+ -> decltype(input_adapter(array, array + N)) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
{
return input_adapter(array, array + N);
}
@@ -475,19 +471,16 @@
{
public:
template<typename CharT,
- typename std::enable_if<
- std::is_pointer<CharT>::value &&
- std::is_integral<typename std::remove_pointer<CharT>::type>::value &&
- sizeof(typename std::remove_pointer<CharT>::type) == 1,
- int>::type = 0>
+ typename std::enable_if<std::is_pointer<CharT>::value && std::is_integral<typename std::remove_pointer<CharT>::type>::value &&
+ sizeof(typename std::remove_pointer<CharT>::type) == 1,
+ int>::type = 0>
span_input_adapter(CharT b, std::size_t l)
: ia(reinterpret_cast<const char*>(b), reinterpret_cast<const char*>(b) + l)
{}
- template<class IteratorType,
- typename std::enable_if<
- std::is_same<typename iterator_traits<IteratorType>::iterator_category, std::random_access_iterator_tag>::value,
- int>::type = 0>
+ template<
+ class IteratorType,
+ typename std::enable_if<std::is_same<typename iterator_traits<IteratorType>::iterator_category, std::random_access_iterator_tag>::value, int>::type = 0>
span_input_adapter(IteratorType first, IteratorType last)
: ia(input_adapter(first, last))
{}
diff --git a/include/nlohmann/detail/input/json_sax.hpp b/include/nlohmann/detail/input/json_sax.hpp
index 90b2ac9..864f4a1 100644
--- a/include/nlohmann/detail/input/json_sax.hpp
+++ b/include/nlohmann/detail/input/json_sax.hpp
@@ -130,9 +130,7 @@
@param[in] ex an exception object describing the error
@return whether parsing should proceed (must return false)
*/
- virtual bool parse_error(std::size_t position,
- const std::string& last_token,
- const detail::exception& ex) = 0;
+ virtual bool parse_error(std::size_t position, const std::string& last_token, const detail::exception& ex) = 0;
json_sax() = default;
json_sax(const json_sax&) = default;
@@ -142,7 +140,8 @@
virtual ~json_sax() = default;
};
-namespace detail {
+namespace detail
+{
/*!
@brief SAX implementation to create a JSON value from SAX events
@@ -304,9 +303,7 @@
object to which we can add elements
*/
template<typename Value>
- JSON_HEDLEY_RETURNS_NON_NULL
- BasicJsonType*
- handle_value(Value&& v)
+ JSON_HEDLEY_RETURNS_NON_NULL BasicJsonType* handle_value(Value&& v)
{
if (ref_stack.empty())
{
@@ -352,9 +349,7 @@
using parser_callback_t = typename BasicJsonType::parser_callback_t;
using parse_event_t = typename BasicJsonType::parse_event_t;
- json_sax_dom_callback_parser(BasicJsonType& r,
- const parser_callback_t cb,
- const bool allow_exceptions_ = true)
+ json_sax_dom_callback_parser(BasicJsonType& r, const parser_callback_t cb, const bool allow_exceptions_ = true)
: root(r)
, callback(cb)
, allow_exceptions(allow_exceptions_)
diff --git a/include/nlohmann/detail/input/lexer.hpp b/include/nlohmann/detail/input/lexer.hpp
index 6fabf35..a132e2c 100644
--- a/include/nlohmann/detail/input/lexer.hpp
+++ b/include/nlohmann/detail/input/lexer.hpp
@@ -24,7 +24,8 @@
#include <nlohmann/detail/meta/type_traits.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
///////////
// lexer //
@@ -1184,8 +1185,7 @@
default:
{
- error_message =
- "invalid number; expected '+', '-', or digit after exponent";
+ error_message = "invalid number; expected '+', '-', or digit after exponent";
return token_type::parse_error;
}
}
@@ -1454,7 +1454,8 @@
{
// escape control characters
std::array<char, 9> cs{{}};
- static_cast<void>((std::snprintf)(cs.data(), cs.size(), "<U+%.4X>", static_cast<unsigned char>(c))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
+ static_cast<void>((
+ std::snprintf)(cs.data(), cs.size(), "<U+%.4X>", static_cast<unsigned char>(c))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
result += cs.data();
}
else
@@ -1547,17 +1548,23 @@
// literals
case 't':
{
- std::array<char_type, 4> true_literal = {{static_cast<char_type>('t'), static_cast<char_type>('r'), static_cast<char_type>('u'), static_cast<char_type>('e')}};
+ std::array<char_type, 4> true_literal = {
+ {static_cast<char_type>('t'), static_cast<char_type>('r'), static_cast<char_type>('u'), static_cast<char_type>('e')}};
return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true);
}
case 'f':
{
- std::array<char_type, 5> false_literal = {{static_cast<char_type>('f'), static_cast<char_type>('a'), static_cast<char_type>('l'), static_cast<char_type>('s'), static_cast<char_type>('e')}};
+ std::array<char_type, 5> false_literal = {{static_cast<char_type>('f'),
+ static_cast<char_type>('a'),
+ static_cast<char_type>('l'),
+ static_cast<char_type>('s'),
+ static_cast<char_type>('e')}};
return scan_literal(false_literal.data(), false_literal.size(), token_type::literal_false);
}
case 'n':
{
- std::array<char_type, 4> null_literal = {{static_cast<char_type>('n'), static_cast<char_type>('u'), static_cast<char_type>('l'), static_cast<char_type>('l')}};
+ std::array<char_type, 4> null_literal = {
+ {static_cast<char_type>('n'), static_cast<char_type>('u'), static_cast<char_type>('l'), static_cast<char_type>('l')}};
return scan_literal(null_literal.data(), null_literal.size(), token_type::literal_null);
}
diff --git a/include/nlohmann/detail/input/parser.hpp b/include/nlohmann/detail/input/parser.hpp
index b90b021..40893e2 100644
--- a/include/nlohmann/detail/input/parser.hpp
+++ b/include/nlohmann/detail/input/parser.hpp
@@ -25,7 +25,8 @@
#include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
////////////
// parser //
////////////
@@ -47,8 +48,7 @@
};
template<typename BasicJsonType>
-using parser_callback_t =
- std::function<bool(int /*depth*/, parse_event_t /*event*/, BasicJsonType& /*parsed*/)>;
+using parser_callback_t = std::function<bool(int /*depth*/, parse_event_t /*event*/, BasicJsonType& /*parsed*/)>;
/*!
@brief syntax analysis
@@ -210,9 +210,10 @@
// parse key
if (JSON_HEDLEY_UNLIKELY(last_token != token_type::value_string))
{
- return sax->parse_error(m_lexer.get_position(),
- m_lexer.get_token_string(),
- parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr));
+ return sax->parse_error(
+ m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr));
}
if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string())))
{
@@ -222,9 +223,10 @@
// parse separator (:)
if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator))
{
- return sax->parse_error(m_lexer.get_position(),
- m_lexer.get_token_string(),
- parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr));
+ return sax->parse_error(
+ m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr));
}
// remember we are now inside an object
@@ -335,22 +337,28 @@
case token_type::parse_error:
{
// using "uninitialized" to avoid "expected" message
- return sax->parse_error(m_lexer.get_position(),
- m_lexer.get_token_string(),
- parse_error::create(101, m_lexer.get_position(), exception_message(token_type::uninitialized, "value"), nullptr));
+ return sax->parse_error(
+ m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101, m_lexer.get_position(), exception_message(token_type::uninitialized, "value"), nullptr));
}
case token_type::end_of_input:
{
if (JSON_HEDLEY_UNLIKELY(m_lexer.get_position().chars_read_total == 1))
{
- return sax->parse_error(m_lexer.get_position(),
- m_lexer.get_token_string(),
- parse_error::create(101, m_lexer.get_position(), "attempting to parse an empty input; check that your input string or stream contains the expected JSON", nullptr));
+ return sax->parse_error(
+ m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101,
+ m_lexer.get_position(),
+ "attempting to parse an empty input; check that your input string or stream contains the expected JSON",
+ nullptr));
}
- return sax->parse_error(m_lexer.get_position(),
- m_lexer.get_token_string(),
- parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr));
+ return sax->parse_error(
+ m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr));
}
case token_type::uninitialized:
case token_type::end_array:
@@ -360,9 +368,10 @@
case token_type::literal_or_value:
default: // the last token was unexpected
{
- return sax->parse_error(m_lexer.get_position(),
- m_lexer.get_token_string(),
- parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr));
+ return sax->parse_error(
+ m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr));
}
}
}
@@ -419,9 +428,10 @@
// parse key
if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::value_string))
{
- return sax->parse_error(m_lexer.get_position(),
- m_lexer.get_token_string(),
- parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr));
+ return sax->parse_error(
+ m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr));
}
if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string())))
@@ -432,9 +442,10 @@
// parse separator (:)
if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator))
{
- return sax->parse_error(m_lexer.get_position(),
- m_lexer.get_token_string(),
- parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr));
+ return sax->parse_error(
+ m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr));
}
// parse values
diff --git a/include/nlohmann/detail/input/position_t.hpp b/include/nlohmann/detail/input/position_t.hpp
index 5bda498..a5e0808 100644
--- a/include/nlohmann/detail/input/position_t.hpp
+++ b/include/nlohmann/detail/input/position_t.hpp
@@ -13,7 +13,8 @@
#include <nlohmann/detail/abi_macros.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/// struct to capture the start position of the current token
struct position_t
diff --git a/include/nlohmann/detail/iterators/internal_iterator.hpp b/include/nlohmann/detail/iterators/internal_iterator.hpp
index b706454..c0db658 100644
--- a/include/nlohmann/detail/iterators/internal_iterator.hpp
+++ b/include/nlohmann/detail/iterators/internal_iterator.hpp
@@ -12,7 +12,8 @@
#include <nlohmann/detail/iterators/primitive_iterator.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/*!
@brief an iterator value
diff --git a/include/nlohmann/detail/iterators/iter_impl.hpp b/include/nlohmann/detail/iterators/iter_impl.hpp
index d50ca28..bb612d7 100644
--- a/include/nlohmann/detail/iterators/iter_impl.hpp
+++ b/include/nlohmann/detail/iterators/iter_impl.hpp
@@ -20,7 +20,8 @@
#include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
// forward declare, to be able to friend it later on
template<typename IteratorType>
@@ -48,7 +49,8 @@
class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions)
{
/// the iterator with BasicJsonType of different const-ness
- using other_iter_impl = iter_impl<typename std::conditional<std::is_const<BasicJsonType>::value, typename std::remove_const<BasicJsonType>::type, const BasicJsonType>::type>;
+ using other_iter_impl =
+ iter_impl<typename std::conditional<std::is_const<BasicJsonType>::value, typename std::remove_const<BasicJsonType>::type, const BasicJsonType>::type>;
/// allow basic_json to access private members
friend other_iter_impl;
friend BasicJsonType;
@@ -58,10 +60,10 @@
using object_t = typename BasicJsonType::object_t;
using array_t = typename BasicJsonType::array_t;
// make sure BasicJsonType is basic_json or const basic_json
- static_assert(is_basic_json<typename std::remove_const<BasicJsonType>::type>::value,
- "iter_impl only accepts (const) basic_json");
+ static_assert(is_basic_json<typename std::remove_const<BasicJsonType>::type>::value, "iter_impl only accepts (const) basic_json");
// superficial check for the LegacyBidirectionalIterator named requirement
- static_assert(std::is_base_of<std::bidirectional_iterator_tag, std::bidirectional_iterator_tag>::value && std::is_base_of<std::bidirectional_iterator_tag, typename std::iterator_traits<typename array_t::iterator>::iterator_category>::value,
+ static_assert(std::is_base_of<std::bidirectional_iterator_tag, std::bidirectional_iterator_tag>::value &&
+ std::is_base_of<std::bidirectional_iterator_tag, typename std::iterator_traits<typename array_t::iterator>::iterator_category>::value,
"basic_json iterator assumes array and object type iterators satisfy the LegacyBidirectionalIterator named requirement.");
public:
@@ -77,14 +79,11 @@
/// a type to represent differences between iterators
using difference_type = typename BasicJsonType::difference_type;
/// defines a pointer to the type iterated over (value_type)
- using pointer = typename std::conditional<std::is_const<BasicJsonType>::value,
- typename BasicJsonType::const_pointer,
- typename BasicJsonType::pointer>::type;
+ using pointer =
+ typename std::conditional<std::is_const<BasicJsonType>::value, typename BasicJsonType::const_pointer, typename BasicJsonType::pointer>::type;
/// defines a reference to the type iterated over (value_type)
using reference =
- typename std::conditional<std::is_const<BasicJsonType>::value,
- typename BasicJsonType::const_reference,
- typename BasicJsonType::reference>::type;
+ typename std::conditional<std::is_const<BasicJsonType>::value, typename BasicJsonType::const_reference, typename BasicJsonType::reference>::type;
iter_impl() = default;
~iter_impl() = default;
@@ -469,7 +468,8 @@
@brief comparison: equal
@pre The iterator is initialized; i.e. `m_object != nullptr`.
*/
- template<typename IterImpl, detail::enable_if_t<(std::is_same<IterImpl, iter_impl>::value || std::is_same<IterImpl, other_iter_impl>::value), std::nullptr_t> = nullptr>
+ template<typename IterImpl,
+ detail::enable_if_t<(std::is_same<IterImpl, iter_impl>::value || std::is_same<IterImpl, other_iter_impl>::value), std::nullptr_t> = nullptr>
bool operator==(const IterImpl& other) const
{
// if objects are not the same, the comparison is undefined
@@ -505,7 +505,8 @@
@brief comparison: not equal
@pre The iterator is initialized; i.e. `m_object != nullptr`.
*/
- template<typename IterImpl, detail::enable_if_t<(std::is_same<IterImpl, iter_impl>::value || std::is_same<IterImpl, other_iter_impl>::value), std::nullptr_t> = nullptr>
+ template<typename IterImpl,
+ detail::enable_if_t<(std::is_same<IterImpl, iter_impl>::value || std::is_same<IterImpl, other_iter_impl>::value), std::nullptr_t> = nullptr>
bool operator!=(const IterImpl& other) const
{
return !operator==(other);
diff --git a/include/nlohmann/detail/iterators/iteration_proxy.hpp b/include/nlohmann/detail/iterators/iteration_proxy.hpp
index 457b4ef..090cc9c 100644
--- a/include/nlohmann/detail/iterators/iteration_proxy.hpp
+++ b/include/nlohmann/detail/iterators/iteration_proxy.hpp
@@ -23,7 +23,8 @@
#include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
template<typename string_type>
void int_to_string(string_type& target, std::size_t value)
@@ -57,7 +58,8 @@
public:
explicit iteration_proxy_value() = default;
- explicit iteration_proxy_value(IteratorType it, std::size_t array_index_ = 0) noexcept(std::is_nothrow_move_constructible<IteratorType>::value && std::is_nothrow_default_constructible<string_type>::value)
+ explicit iteration_proxy_value(IteratorType it, std::size_t array_index_ = 0) noexcept(std::is_nothrow_move_constructible<IteratorType>::value &&
+ std::is_nothrow_default_constructible<string_type>::value)
: anchor(std::move(it))
, array_index(array_index_)
{}
@@ -65,8 +67,12 @@
iteration_proxy_value(iteration_proxy_value const&) = default;
iteration_proxy_value& operator=(iteration_proxy_value const&) = default;
// older GCCs are a bit fussy and require explicit noexcept specifiers on defaulted functions
- iteration_proxy_value(iteration_proxy_value&&) noexcept(std::is_nothrow_move_constructible<IteratorType>::value && std::is_nothrow_move_constructible<string_type>::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations)
- iteration_proxy_value& operator=(iteration_proxy_value&&) noexcept(std::is_nothrow_move_assignable<IteratorType>::value && std::is_nothrow_move_assignable<string_type>::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations)
+ iteration_proxy_value(iteration_proxy_value&&) noexcept(std::is_nothrow_move_constructible<IteratorType>::value &&
+ std::is_nothrow_move_constructible<string_type>::value) =
+ default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations)
+ iteration_proxy_value& operator=(iteration_proxy_value&&) noexcept(std::is_nothrow_move_assignable<IteratorType>::value &&
+ std::is_nothrow_move_assignable<string_type>::value) =
+ default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations)
~iteration_proxy_value() = default;
/// dereference operator (needed for range-based for)
@@ -206,7 +212,8 @@
// Structured Bindings Support to the iteration_proxy_value class
// For further reference see https://blog.tartanllama.xyz/structured-bindings/
// And see https://github.com/nlohmann/json/pull/1391
-namespace std {
+namespace std
+{
#if defined(__clang__)
// Fix: https://github.com/nlohmann/json/issues/1401
@@ -222,8 +229,7 @@
class tuple_element<N, ::nlohmann::detail::iteration_proxy_value<IteratorType>> // NOLINT(cert-dcl58-cpp)
{
public:
- using type = decltype(get<N>(std::declval<
- ::nlohmann::detail::iteration_proxy_value<IteratorType>>()));
+ using type = decltype(get<N>(std::declval<::nlohmann::detail::iteration_proxy_value<IteratorType>>()));
};
#if defined(__clang__)
#pragma clang diagnostic pop
diff --git a/include/nlohmann/detail/iterators/iterator_traits.hpp b/include/nlohmann/detail/iterators/iterator_traits.hpp
index 4fd2e9c..6c85b0e 100644
--- a/include/nlohmann/detail/iterators/iterator_traits.hpp
+++ b/include/nlohmann/detail/iterators/iterator_traits.hpp
@@ -15,7 +15,8 @@
#include <nlohmann/detail/meta/void_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
template<typename It, typename = void>
struct iterator_types
@@ -37,14 +38,11 @@
// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341.
template<typename T, typename = void>
struct iterator_traits
-{
-};
+{};
template<typename T>
-struct iterator_traits<T, enable_if_t<!std::is_pointer<T>::value>>
- : iterator_types<T>
-{
-};
+struct iterator_traits<T, enable_if_t<!std::is_pointer<T>::value>> : iterator_types<T>
+{};
template<typename T>
struct iterator_traits<T*, enable_if_t<std::is_object<T>::value>>
diff --git a/include/nlohmann/detail/iterators/json_reverse_iterator.hpp b/include/nlohmann/detail/iterators/json_reverse_iterator.hpp
index b61e2ba..1a99af2 100644
--- a/include/nlohmann/detail/iterators/json_reverse_iterator.hpp
+++ b/include/nlohmann/detail/iterators/json_reverse_iterator.hpp
@@ -15,7 +15,8 @@
#include <nlohmann/detail/abi_macros.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
//////////////////////
// reverse_iterator //
diff --git a/include/nlohmann/detail/iterators/primitive_iterator.hpp b/include/nlohmann/detail/iterators/primitive_iterator.hpp
index 5d6b53b..4c651a2 100644
--- a/include/nlohmann/detail/iterators/primitive_iterator.hpp
+++ b/include/nlohmann/detail/iterators/primitive_iterator.hpp
@@ -14,7 +14,8 @@
#include <nlohmann/detail/macro_scope.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/*
@brief an iterator for primitive JSON types
diff --git a/include/nlohmann/detail/json_custom_base_class.hpp b/include/nlohmann/detail/json_custom_base_class.hpp
index 76fd8dc..4dd54cd 100644
--- a/include/nlohmann/detail/json_custom_base_class.hpp
+++ b/include/nlohmann/detail/json_custom_base_class.hpp
@@ -13,7 +13,8 @@
#include <nlohmann/detail/abi_macros.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/*!
@brief Default base class of the @ref basic_json class.
@@ -29,10 +30,7 @@
{};
template<class T>
-using json_base_class = typename std::conditional<
- std::is_same<T, void>::value,
- json_default_base,
- T>::type;
+using json_base_class = typename std::conditional<std::is_same<T, void>::value, json_default_base, T>::type;
} // namespace detail
NLOHMANN_JSON_NAMESPACE_END
diff --git a/include/nlohmann/detail/json_pointer.hpp b/include/nlohmann/detail/json_pointer.hpp
index f782d48..5f3cde8 100644
--- a/include/nlohmann/detail/json_pointer.hpp
+++ b/include/nlohmann/detail/json_pointer.hpp
@@ -94,9 +94,7 @@
/// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/
json_pointer& operator/=(const json_pointer& ptr)
{
- reference_tokens.insert(reference_tokens.end(),
- ptr.reference_tokens.begin(),
- ptr.reference_tokens.end());
+ reference_tokens.insert(reference_tokens.end(), ptr.reference_tokens.begin(), ptr.reference_tokens.end());
return *this;
}
@@ -117,8 +115,7 @@
/// @brief create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer
/// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/
- friend json_pointer operator/(const json_pointer& lhs,
- const json_pointer& rhs)
+ friend json_pointer operator/(const json_pointer& lhs, const json_pointer& rhs)
{
return json_pointer(lhs) /= rhs;
}
@@ -355,15 +352,12 @@
if (ptr->is_null())
{
// check if reference token is a number
- const bool nums =
- std::all_of(reference_token.begin(), reference_token.end(), [](const unsigned char x) {
- return std::isdigit(x);
- });
+ const bool nums = std::all_of(reference_token.begin(), reference_token.end(), [](const unsigned char x) {
+ return std::isdigit(x);
+ });
// change value to array for numbers or "-" or to object otherwise
- *ptr = (nums || reference_token == "-")
- ? detail::value_t::array
- : detail::value_t::object;
+ *ptr = (nums || reference_token == "-") ? detail::value_t::array : detail::value_t::object;
}
switch (ptr->type())
@@ -431,7 +425,10 @@
if (JSON_HEDLEY_UNLIKELY(reference_token == "-"))
{
// "-" always fails the range check
- JSON_THROW(detail::out_of_range::create(402, detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"), ptr));
+ JSON_THROW(detail::out_of_range::create(
+ 402,
+ detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"),
+ ptr));
}
// note: at performs range check
@@ -487,7 +484,10 @@
if (JSON_HEDLEY_UNLIKELY(reference_token == "-"))
{
// "-" cannot be used for const access
- JSON_THROW(detail::out_of_range::create(402, detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"), ptr));
+ JSON_THROW(detail::out_of_range::create(
+ 402,
+ detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"),
+ ptr));
}
// use unchecked array access
@@ -536,7 +536,10 @@
if (JSON_HEDLEY_UNLIKELY(reference_token == "-"))
{
// "-" always fails the range check
- JSON_THROW(detail::out_of_range::create(402, detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"), ptr));
+ JSON_THROW(detail::out_of_range::create(
+ 402,
+ detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"),
+ ptr));
}
// note: at performs range check
@@ -666,7 +669,8 @@
// check if nonempty reference string begins with slash
if (JSON_HEDLEY_UNLIKELY(reference_string[0] != '/'))
{
- JSON_THROW(detail::parse_error::create(107, 1, detail::concat("JSON pointer must be empty or begin with '/' - was: '", reference_string, "'"), nullptr));
+ JSON_THROW(
+ detail::parse_error::create(107, 1, detail::concat("JSON pointer must be empty or begin with '/' - was: '", reference_string, "'"), nullptr));
}
// extract the reference tokens:
@@ -690,16 +694,12 @@
auto reference_token = reference_string.substr(start, slash - start);
// check reference tokens are properly escaped
- for (std::size_t pos = reference_token.find_first_of('~');
- pos != string_t::npos;
- pos = reference_token.find_first_of('~', pos + 1))
+ for (std::size_t pos = reference_token.find_first_of('~'); pos != string_t::npos; pos = reference_token.find_first_of('~', pos + 1))
{
JSON_ASSERT(reference_token[pos] == '~');
// ~ must be followed by 0 or 1
- if (JSON_HEDLEY_UNLIKELY(pos == reference_token.size() - 1 ||
- (reference_token[pos + 1] != '0' &&
- reference_token[pos + 1] != '1')))
+ if (JSON_HEDLEY_UNLIKELY(pos == reference_token.size() - 1 || (reference_token[pos + 1] != '0' && reference_token[pos + 1] != '1')))
{
JSON_THROW(detail::parse_error::create(108, 0, "escape character '~' must be followed with '0' or '1'", nullptr));
}
@@ -722,9 +722,7 @@
@note Empty objects or arrays are flattened to `null`.
*/
template<typename BasicJsonType>
- static void flatten(const string_t& reference_string,
- const BasicJsonType& value,
- BasicJsonType& result)
+ static void flatten(const string_t& reference_string, const BasicJsonType& value, BasicJsonType& result)
{
switch (value.type())
{
@@ -740,9 +738,7 @@
// iterate array and use index as reference string
for (std::size_t i = 0; i < value.m_data.m_value.array->size(); ++i)
{
- flatten(detail::concat(reference_string, '/', std::to_string(i)),
- value.m_data.m_value.array->operator[](i),
- result);
+ flatten(detail::concat(reference_string, '/', std::to_string(i)), value.m_data.m_value.array->operator[](i), result);
}
}
break;
@@ -794,8 +790,7 @@
@throw type_error.313 if value cannot be unflattened
*/
template<typename BasicJsonType>
- static BasicJsonType
- unflatten(const BasicJsonType& value)
+ static BasicJsonType unflatten(const BasicJsonType& value)
{
if (JSON_HEDLEY_UNLIKELY(!value.is_object()))
{
@@ -866,49 +861,42 @@
/// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
template<typename RefStringTypeLhs, typename RefStringTypeRhs>
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator==(const json_pointer<RefStringTypeLhs>& lhs,
- const json_pointer<RefStringTypeRhs>& rhs) noexcept;
+ friend bool operator==(const json_pointer<RefStringTypeLhs>& lhs, const json_pointer<RefStringTypeRhs>& rhs) noexcept;
/// @brief compares JSON pointer and string for equality
/// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
template<typename RefStringTypeLhs, typename StringType>
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator==(const json_pointer<RefStringTypeLhs>& lhs,
- const StringType& rhs);
+ friend bool operator==(const json_pointer<RefStringTypeLhs>& lhs, const StringType& rhs);
/// @brief compares string and JSON pointer for equality
/// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
template<typename RefStringTypeRhs, typename StringType>
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator==(const StringType& lhs,
- const json_pointer<RefStringTypeRhs>& rhs);
+ friend bool operator==(const StringType& lhs, const json_pointer<RefStringTypeRhs>& rhs);
/// @brief compares two JSON pointers for inequality
/// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/
template<typename RefStringTypeLhs, typename RefStringTypeRhs>
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator!=(const json_pointer<RefStringTypeLhs>& lhs,
- const json_pointer<RefStringTypeRhs>& rhs) noexcept;
+ friend bool operator!=(const json_pointer<RefStringTypeLhs>& lhs, const json_pointer<RefStringTypeRhs>& rhs) noexcept;
/// @brief compares JSON pointer and string for inequality
/// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/
template<typename RefStringTypeLhs, typename StringType>
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator!=(const json_pointer<RefStringTypeLhs>& lhs,
- const StringType& rhs);
+ friend bool operator!=(const json_pointer<RefStringTypeLhs>& lhs, const StringType& rhs);
/// @brief compares string and JSON pointer for inequality
/// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/
template<typename RefStringTypeRhs, typename StringType>
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator!=(const StringType& lhs,
- const json_pointer<RefStringTypeRhs>& rhs);
+ friend bool operator!=(const StringType& lhs, const json_pointer<RefStringTypeRhs>& rhs);
/// @brief compares two JSON pointer for less-than
template<typename RefStringTypeLhs, typename RefStringTypeRhs>
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator<(const json_pointer<RefStringTypeLhs>& lhs,
- const json_pointer<RefStringTypeRhs>& rhs) noexcept;
+ friend bool operator<(const json_pointer<RefStringTypeLhs>& lhs, const json_pointer<RefStringTypeRhs>& rhs) noexcept;
#endif
private:
@@ -919,58 +907,47 @@
#if !JSON_HAS_THREE_WAY_COMPARISON
// functions cannot be defined inside class due to ODR violations
template<typename RefStringTypeLhs, typename RefStringTypeRhs>
-inline bool operator==(const json_pointer<RefStringTypeLhs>& lhs,
- const json_pointer<RefStringTypeRhs>& rhs) noexcept
+inline bool operator==(const json_pointer<RefStringTypeLhs>& lhs, const json_pointer<RefStringTypeRhs>& rhs) noexcept
{
return lhs.reference_tokens == rhs.reference_tokens;
}
-template<typename RefStringTypeLhs,
- typename StringType = typename json_pointer<RefStringTypeLhs>::string_t>
+template<typename RefStringTypeLhs, typename StringType = typename json_pointer<RefStringTypeLhs>::string_t>
JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer, json_pointer))
-inline bool operator==(const json_pointer<RefStringTypeLhs>& lhs,
- const StringType& rhs)
+inline bool operator==(const json_pointer<RefStringTypeLhs>& lhs, const StringType& rhs)
{
return lhs == json_pointer<RefStringTypeLhs>(rhs);
}
-template<typename RefStringTypeRhs,
- typename StringType = typename json_pointer<RefStringTypeRhs>::string_t>
+template<typename RefStringTypeRhs, typename StringType = typename json_pointer<RefStringTypeRhs>::string_t>
JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer, json_pointer))
-inline bool operator==(const StringType& lhs,
- const json_pointer<RefStringTypeRhs>& rhs)
+inline bool operator==(const StringType& lhs, const json_pointer<RefStringTypeRhs>& rhs)
{
return json_pointer<RefStringTypeRhs>(lhs) == rhs;
}
template<typename RefStringTypeLhs, typename RefStringTypeRhs>
-inline bool operator!=(const json_pointer<RefStringTypeLhs>& lhs,
- const json_pointer<RefStringTypeRhs>& rhs) noexcept
+inline bool operator!=(const json_pointer<RefStringTypeLhs>& lhs, const json_pointer<RefStringTypeRhs>& rhs) noexcept
{
return !(lhs == rhs);
}
-template<typename RefStringTypeLhs,
- typename StringType = typename json_pointer<RefStringTypeLhs>::string_t>
+template<typename RefStringTypeLhs, typename StringType = typename json_pointer<RefStringTypeLhs>::string_t>
JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator!=(json_pointer, json_pointer))
-inline bool operator!=(const json_pointer<RefStringTypeLhs>& lhs,
- const StringType& rhs)
+inline bool operator!=(const json_pointer<RefStringTypeLhs>& lhs, const StringType& rhs)
{
return !(lhs == rhs);
}
-template<typename RefStringTypeRhs,
- typename StringType = typename json_pointer<RefStringTypeRhs>::string_t>
+template<typename RefStringTypeRhs, typename StringType = typename json_pointer<RefStringTypeRhs>::string_t>
JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator!=(json_pointer, json_pointer))
-inline bool operator!=(const StringType& lhs,
- const json_pointer<RefStringTypeRhs>& rhs)
+inline bool operator!=(const StringType& lhs, const json_pointer<RefStringTypeRhs>& rhs)
{
return !(lhs == rhs);
}
template<typename RefStringTypeLhs, typename RefStringTypeRhs>
-inline bool operator<(const json_pointer<RefStringTypeLhs>& lhs,
- const json_pointer<RefStringTypeRhs>& rhs) noexcept
+inline bool operator<(const json_pointer<RefStringTypeLhs>& lhs, const json_pointer<RefStringTypeRhs>& rhs) noexcept
{
return lhs.reference_tokens < rhs.reference_tokens;
}
diff --git a/include/nlohmann/detail/json_ref.hpp b/include/nlohmann/detail/json_ref.hpp
index 7eaea97..aea5e33 100644
--- a/include/nlohmann/detail/json_ref.hpp
+++ b/include/nlohmann/detail/json_ref.hpp
@@ -15,7 +15,8 @@
#include <nlohmann/detail/meta/type_traits.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
template<typename BasicJsonType>
class json_ref
@@ -35,9 +36,7 @@
: owned_value(init)
{}
- template<
- class... Args,
- enable_if_t<std::is_constructible<value_type, Args...>::value, int> = 0>
+ template<class... Args, enable_if_t<std::is_constructible<value_type, Args...>::value, int> = 0>
json_ref(Args&&... args)
: owned_value(std::forward<Args>(args)...)
{}
diff --git a/include/nlohmann/detail/macro_scope.hpp b/include/nlohmann/detail/macro_scope.hpp
index 2593997..dac07df 100644
--- a/include/nlohmann/detail/macro_scope.hpp
+++ b/include/nlohmann/detail/macro_scope.hpp
@@ -8,9 +8,9 @@
#pragma once
+#include <utility> // declval, pair
#include <nlohmann/detail/meta/detected.hpp>
#include <nlohmann/thirdparty/hedley/hedley.hpp>
-#include <utility> // declval, pair
// This file contains all internal macro definitions (except those affecting ABI)
// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them
@@ -114,7 +114,8 @@
#endif
#ifndef JSON_HAS_THREE_WAY_COMPARISON
- #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L
+ #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L && defined(__cpp_lib_three_way_comparison) && \
+ __cpp_lib_three_way_comparison >= 201907L
#define JSON_HAS_THREE_WAY_COMPARISON 1
#else
#define JSON_HAS_THREE_WAY_COMPARISON 0
@@ -211,119 +212,196 @@
@def NLOHMANN_JSON_SERIALIZE_ENUM
@since version 3.4.0
*/
-#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \
- template<typename BasicJsonType> \
- inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \
- { \
- static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \
- static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \
- auto it = std::find_if(std::begin(m), std::end(m), [e](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool { \
- return ej_pair.first == e; \
- }); \
- j = ((it != std::end(m)) ? it : std::begin(m))->second; \
- } \
- template<typename BasicJsonType> \
- inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \
- { \
- static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \
- static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \
- auto it = std::find_if(std::begin(m), std::end(m), [&j](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool { \
- return ej_pair.second == j; \
- }); \
- e = ((it != std::end(m)) ? it : std::begin(m))->first; \
+#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \
+ template<typename BasicJsonType> \
+ inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \
+ { \
+ static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \
+ static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \
+ auto it = std::find_if(std::begin(m), std::end(m), [e](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool { \
+ return ej_pair.first == e; \
+ }); \
+ j = ((it != std::end(m)) ? it : std::begin(m))->second; \
+ } \
+ template<typename BasicJsonType> \
+ inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \
+ { \
+ static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \
+ static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \
+ auto it = std::find_if(std::begin(m), std::end(m), [&j](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool { \
+ return ej_pair.second == j; \
+ }); \
+ e = ((it != std::end(m)) ? it : std::begin(m))->first; \
}
// Ugly macros to avoid uglier copy-paste when specializing basic_json. They
// may be removed in the future once the class is split.
-#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \
- template<template<typename, typename, typename...> class ObjectType, \
- template<typename, typename...> \
- class ArrayType, \
- class StringType, \
- class BooleanType, \
- class NumberIntegerType, \
- class NumberUnsignedType, \
- class NumberFloatType, \
- template<typename> \
- class AllocatorType, \
- template<typename, typename = void> \
- class JSONSerializer, \
- class BinaryType, \
+#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \
+ template<template<typename, typename, typename...> class ObjectType, \
+ template<typename, typename...> \
+ class ArrayType, \
+ class StringType, \
+ class BooleanType, \
+ class NumberIntegerType, \
+ class NumberUnsignedType, \
+ class NumberFloatType, \
+ template<typename> \
+ class AllocatorType, \
+ template<typename, typename = void> \
+ class JSONSerializer, \
+ class BinaryType, \
class CustomBaseClass>
-#define NLOHMANN_BASIC_JSON_TPL \
- basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType, CustomBaseClass>
+#define NLOHMANN_BASIC_JSON_TPL \
+ basic_json<ObjectType, \
+ ArrayType, \
+ StringType, \
+ BooleanType, \
+ NumberIntegerType, \
+ NumberUnsignedType, \
+ NumberFloatType, \
+ AllocatorType, \
+ JSONSerializer, \
+ BinaryType, \
+ CustomBaseClass>
// Macros to simplify conversion from/to types
#define NLOHMANN_JSON_EXPAND(x) x
-#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME, ...) NAME
-#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \
- NLOHMANN_JSON_PASTE64, \
- NLOHMANN_JSON_PASTE63, \
- NLOHMANN_JSON_PASTE62, \
- NLOHMANN_JSON_PASTE61, \
- NLOHMANN_JSON_PASTE60, \
- NLOHMANN_JSON_PASTE59, \
- NLOHMANN_JSON_PASTE58, \
- NLOHMANN_JSON_PASTE57, \
- NLOHMANN_JSON_PASTE56, \
- NLOHMANN_JSON_PASTE55, \
- NLOHMANN_JSON_PASTE54, \
- NLOHMANN_JSON_PASTE53, \
- NLOHMANN_JSON_PASTE52, \
- NLOHMANN_JSON_PASTE51, \
- NLOHMANN_JSON_PASTE50, \
- NLOHMANN_JSON_PASTE49, \
- NLOHMANN_JSON_PASTE48, \
- NLOHMANN_JSON_PASTE47, \
- NLOHMANN_JSON_PASTE46, \
- NLOHMANN_JSON_PASTE45, \
- NLOHMANN_JSON_PASTE44, \
- NLOHMANN_JSON_PASTE43, \
- NLOHMANN_JSON_PASTE42, \
- NLOHMANN_JSON_PASTE41, \
- NLOHMANN_JSON_PASTE40, \
- NLOHMANN_JSON_PASTE39, \
- NLOHMANN_JSON_PASTE38, \
- NLOHMANN_JSON_PASTE37, \
- NLOHMANN_JSON_PASTE36, \
- NLOHMANN_JSON_PASTE35, \
- NLOHMANN_JSON_PASTE34, \
- NLOHMANN_JSON_PASTE33, \
- NLOHMANN_JSON_PASTE32, \
- NLOHMANN_JSON_PASTE31, \
- NLOHMANN_JSON_PASTE30, \
- NLOHMANN_JSON_PASTE29, \
- NLOHMANN_JSON_PASTE28, \
- NLOHMANN_JSON_PASTE27, \
- NLOHMANN_JSON_PASTE26, \
- NLOHMANN_JSON_PASTE25, \
- NLOHMANN_JSON_PASTE24, \
- NLOHMANN_JSON_PASTE23, \
- NLOHMANN_JSON_PASTE22, \
- NLOHMANN_JSON_PASTE21, \
- NLOHMANN_JSON_PASTE20, \
- NLOHMANN_JSON_PASTE19, \
- NLOHMANN_JSON_PASTE18, \
- NLOHMANN_JSON_PASTE17, \
- NLOHMANN_JSON_PASTE16, \
- NLOHMANN_JSON_PASTE15, \
- NLOHMANN_JSON_PASTE14, \
- NLOHMANN_JSON_PASTE13, \
- NLOHMANN_JSON_PASTE12, \
- NLOHMANN_JSON_PASTE11, \
- NLOHMANN_JSON_PASTE10, \
- NLOHMANN_JSON_PASTE9, \
- NLOHMANN_JSON_PASTE8, \
- NLOHMANN_JSON_PASTE7, \
- NLOHMANN_JSON_PASTE6, \
- NLOHMANN_JSON_PASTE5, \
- NLOHMANN_JSON_PASTE4, \
- NLOHMANN_JSON_PASTE3, \
- NLOHMANN_JSON_PASTE2, \
- NLOHMANN_JSON_PASTE1)(__VA_ARGS__))
+#define NLOHMANN_JSON_GET_MACRO(_1, \
+ _2, \
+ _3, \
+ _4, \
+ _5, \
+ _6, \
+ _7, \
+ _8, \
+ _9, \
+ _10, \
+ _11, \
+ _12, \
+ _13, \
+ _14, \
+ _15, \
+ _16, \
+ _17, \
+ _18, \
+ _19, \
+ _20, \
+ _21, \
+ _22, \
+ _23, \
+ _24, \
+ _25, \
+ _26, \
+ _27, \
+ _28, \
+ _29, \
+ _30, \
+ _31, \
+ _32, \
+ _33, \
+ _34, \
+ _35, \
+ _36, \
+ _37, \
+ _38, \
+ _39, \
+ _40, \
+ _41, \
+ _42, \
+ _43, \
+ _44, \
+ _45, \
+ _46, \
+ _47, \
+ _48, \
+ _49, \
+ _50, \
+ _51, \
+ _52, \
+ _53, \
+ _54, \
+ _55, \
+ _56, \
+ _57, \
+ _58, \
+ _59, \
+ _60, \
+ _61, \
+ _62, \
+ _63, \
+ _64, \
+ NAME, \
+ ...) \
+ NAME
+#define NLOHMANN_JSON_PASTE(...) \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \
+ NLOHMANN_JSON_PASTE64, \
+ NLOHMANN_JSON_PASTE63, \
+ NLOHMANN_JSON_PASTE62, \
+ NLOHMANN_JSON_PASTE61, \
+ NLOHMANN_JSON_PASTE60, \
+ NLOHMANN_JSON_PASTE59, \
+ NLOHMANN_JSON_PASTE58, \
+ NLOHMANN_JSON_PASTE57, \
+ NLOHMANN_JSON_PASTE56, \
+ NLOHMANN_JSON_PASTE55, \
+ NLOHMANN_JSON_PASTE54, \
+ NLOHMANN_JSON_PASTE53, \
+ NLOHMANN_JSON_PASTE52, \
+ NLOHMANN_JSON_PASTE51, \
+ NLOHMANN_JSON_PASTE50, \
+ NLOHMANN_JSON_PASTE49, \
+ NLOHMANN_JSON_PASTE48, \
+ NLOHMANN_JSON_PASTE47, \
+ NLOHMANN_JSON_PASTE46, \
+ NLOHMANN_JSON_PASTE45, \
+ NLOHMANN_JSON_PASTE44, \
+ NLOHMANN_JSON_PASTE43, \
+ NLOHMANN_JSON_PASTE42, \
+ NLOHMANN_JSON_PASTE41, \
+ NLOHMANN_JSON_PASTE40, \
+ NLOHMANN_JSON_PASTE39, \
+ NLOHMANN_JSON_PASTE38, \
+ NLOHMANN_JSON_PASTE37, \
+ NLOHMANN_JSON_PASTE36, \
+ NLOHMANN_JSON_PASTE35, \
+ NLOHMANN_JSON_PASTE34, \
+ NLOHMANN_JSON_PASTE33, \
+ NLOHMANN_JSON_PASTE32, \
+ NLOHMANN_JSON_PASTE31, \
+ NLOHMANN_JSON_PASTE30, \
+ NLOHMANN_JSON_PASTE29, \
+ NLOHMANN_JSON_PASTE28, \
+ NLOHMANN_JSON_PASTE27, \
+ NLOHMANN_JSON_PASTE26, \
+ NLOHMANN_JSON_PASTE25, \
+ NLOHMANN_JSON_PASTE24, \
+ NLOHMANN_JSON_PASTE23, \
+ NLOHMANN_JSON_PASTE22, \
+ NLOHMANN_JSON_PASTE21, \
+ NLOHMANN_JSON_PASTE20, \
+ NLOHMANN_JSON_PASTE19, \
+ NLOHMANN_JSON_PASTE18, \
+ NLOHMANN_JSON_PASTE17, \
+ NLOHMANN_JSON_PASTE16, \
+ NLOHMANN_JSON_PASTE15, \
+ NLOHMANN_JSON_PASTE14, \
+ NLOHMANN_JSON_PASTE13, \
+ NLOHMANN_JSON_PASTE12, \
+ NLOHMANN_JSON_PASTE11, \
+ NLOHMANN_JSON_PASTE10, \
+ NLOHMANN_JSON_PASTE9, \
+ NLOHMANN_JSON_PASTE8, \
+ NLOHMANN_JSON_PASTE7, \
+ NLOHMANN_JSON_PASTE6, \
+ NLOHMANN_JSON_PASTE5, \
+ NLOHMANN_JSON_PASTE4, \
+ NLOHMANN_JSON_PASTE3, \
+ NLOHMANN_JSON_PASTE2, \
+ NLOHMANN_JSON_PASTE1)(__VA_ARGS__))
#define NLOHMANN_JSON_PASTE2(func, v1) func(v1)
#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2)
#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3)
@@ -332,61 +410,3397 @@
#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6)
#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7)
#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8)
-#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9)
-#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10)
-#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11)
-#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12)
-#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13)
-#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14)
-#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15)
-#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16)
-#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17)
-#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18)
-#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19)
-#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20)
-#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21)
-#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22)
-#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23)
-#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24)
-#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25)
-#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26)
-#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27)
-#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28)
-#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29)
-#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30)
-#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31)
-#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32)
-#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33)
-#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34)
-#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35)
-#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36)
-#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37)
-#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38)
-#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39)
-#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40)
-#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41)
-#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42)
-#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43)
-#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44)
-#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45)
-#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46)
-#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47)
-#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48)
-#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49)
-#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50)
-#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51)
-#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52)
-#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53)
-#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54)
-#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55)
-#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56)
-#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57)
-#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58)
-#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59)
-#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60)
-#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61)
-#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62)
-#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63)
+#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9)
+#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10)
+#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11)
+#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12)
+#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13)
+#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14)
+#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15)
+#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16)
+#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17)
+#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18)
+#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19)
+#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20)
+#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21)
+#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22)
+#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23)
+#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24)
+#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25)
+#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26)
+#define NLOHMANN_JSON_PASTE28(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27)
+#define NLOHMANN_JSON_PASTE29(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28)
+#define NLOHMANN_JSON_PASTE30(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE29(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29)
+#define NLOHMANN_JSON_PASTE31(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE30(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30)
+#define NLOHMANN_JSON_PASTE32(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE31(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31)
+#define NLOHMANN_JSON_PASTE33(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE32(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32)
+#define NLOHMANN_JSON_PASTE34(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE33(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33)
+#define NLOHMANN_JSON_PASTE35(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE34(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34)
+#define NLOHMANN_JSON_PASTE36(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE35(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35)
+#define NLOHMANN_JSON_PASTE37(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE36(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36)
+#define NLOHMANN_JSON_PASTE38(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE37(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37)
+#define NLOHMANN_JSON_PASTE39(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE38(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38)
+#define NLOHMANN_JSON_PASTE40(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE39(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39)
+#define NLOHMANN_JSON_PASTE41(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE40(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40)
+#define NLOHMANN_JSON_PASTE42(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE41(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41)
+#define NLOHMANN_JSON_PASTE43(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE42(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42)
+#define NLOHMANN_JSON_PASTE44(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE43(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43)
+#define NLOHMANN_JSON_PASTE45(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE44(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44)
+#define NLOHMANN_JSON_PASTE46(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE45(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45)
+#define NLOHMANN_JSON_PASTE47(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE46(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46)
+#define NLOHMANN_JSON_PASTE48(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE47(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47)
+#define NLOHMANN_JSON_PASTE49(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE48(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48)
+#define NLOHMANN_JSON_PASTE50(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE49(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49)
+#define NLOHMANN_JSON_PASTE51(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE50(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50)
+#define NLOHMANN_JSON_PASTE52(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE51(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51)
+#define NLOHMANN_JSON_PASTE53(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE52(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52)
+#define NLOHMANN_JSON_PASTE54(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE53(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53)
+#define NLOHMANN_JSON_PASTE55(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE54(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54)
+#define NLOHMANN_JSON_PASTE56(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE55(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55)
+#define NLOHMANN_JSON_PASTE57(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE56(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56)
+#define NLOHMANN_JSON_PASTE58(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE57(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57)
+#define NLOHMANN_JSON_PASTE59(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE58(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58)
+#define NLOHMANN_JSON_PASTE60(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE59(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59)
+#define NLOHMANN_JSON_PASTE61(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59, \
+ v60) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE60(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59, \
+ v60)
+#define NLOHMANN_JSON_PASTE62(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59, \
+ v60, \
+ v61) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE61(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59, \
+ v60, \
+ v61)
+#define NLOHMANN_JSON_PASTE63(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59, \
+ v60, \
+ v61, \
+ v62) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE62(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59, \
+ v60, \
+ v61, \
+ v62)
+#define NLOHMANN_JSON_PASTE64(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59, \
+ v60, \
+ v61, \
+ v62, \
+ v63) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE63(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59, \
+ v60, \
+ v61, \
+ v62, \
+ v63)
#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1;
#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1);
@@ -397,31 +3811,31 @@
@def NLOHMANN_DEFINE_TYPE_INTRUSIVE
@since version 3.9.0
*/
-#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \
- friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
- { \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
- } \
- friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
- { \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) \
+#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \
+ friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
+ { \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
+ } \
+ friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
+ { \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) \
}
-#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \
- friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
- { \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
- } \
- friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
- { \
- const Type nlohmann_json_default_obj{}; \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) \
+#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \
+ friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
+ { \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
+ } \
+ friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
+ { \
+ const Type nlohmann_json_default_obj{}; \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) \
}
-#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \
- friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
- { \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
+#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \
+ friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
+ { \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
}
/*!
@@ -429,31 +3843,31 @@
@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE
@since version 3.9.0
*/
-#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \
- inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
- { \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
- } \
- inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
- { \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) \
+#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \
+ inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
+ { \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
+ } \
+ inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
+ { \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) \
}
-#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \
- inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
- { \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
+#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \
+ inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
+ { \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
}
-#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \
- inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
- { \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
- } \
- inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
- { \
- const Type nlohmann_json_default_obj{}; \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) \
+#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \
+ inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
+ { \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
+ } \
+ inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
+ { \
+ const Type nlohmann_json_default_obj{}; \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) \
}
// inspired from https://stackoverflow.com/a/26745591
@@ -462,37 +3876,36 @@
//
// it allows using the detected idiom to retrieve the return type
// of such an expression
-#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \
- namespace detail { \
- using std::std_name; \
- \
- template<typename... T> \
- using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
- } \
- \
- namespace detail2 { \
- struct std_name##_tag \
- { \
- }; \
- \
- template<typename... T> \
- std_name##_tag std_name(T&&...); \
- \
- template<typename... T> \
- using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
- \
- template<typename... T> \
- struct would_call_std_##std_name \
- { \
- static constexpr auto const value = ::nlohmann::detail:: \
- is_detected_exact<std_name##_tag, result_of_##std_name, T...>::value; \
- }; \
- } /* namespace detail2 */ \
- \
- template<typename... T> \
- struct would_call_std_##std_name : detail2::would_call_std_##std_name<T...> \
- { \
- }
+#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \
+ namespace detail \
+ { \
+ using std::std_name; \
+ \
+ template<typename... T> \
+ using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
+ } \
+ \
+ namespace detail2 \
+ { \
+ struct std_name##_tag \
+ {}; \
+ \
+ template<typename... T> \
+ std_name##_tag std_name(T&&...); \
+ \
+ template<typename... T> \
+ using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
+ \
+ template<typename... T> \
+ struct would_call_std_##std_name \
+ { \
+ static constexpr auto const value = ::nlohmann::detail::is_detected_exact<std_name##_tag, result_of_##std_name, T...>::value; \
+ }; \
+ } /* namespace detail2 */ \
+ \
+ template<typename... T> \
+ struct would_call_std_##std_name : detail2::would_call_std_##std_name<T...> \
+ {}
#ifndef JSON_USE_IMPLICIT_CONVERSIONS
#define JSON_USE_IMPLICIT_CONVERSIONS 1
diff --git a/include/nlohmann/detail/meta/cpp_future.hpp b/include/nlohmann/detail/meta/cpp_future.hpp
index a5687bc..57e8430 100644
--- a/include/nlohmann/detail/meta/cpp_future.hpp
+++ b/include/nlohmann/detail/meta/cpp_future.hpp
@@ -17,7 +17,8 @@
#include <nlohmann/detail/macro_scope.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
template<typename T>
using uncvref_t = typename std::remove_cv<typename std::remove_reference<T>::type>::type;
@@ -78,7 +79,8 @@
template<size_t... Ints>
using index_sequence = integer_sequence<size_t, Ints...>;
-namespace utility_internal {
+namespace utility_internal
+{
template<typename Seq, size_t SeqSize, size_t Rem>
struct Extend;
@@ -101,8 +103,7 @@
template<typename T, size_t N>
struct Gen
{
- using type =
- typename Extend<typename Gen<T, N / 2>::type, N / 2, N % 2>::type;
+ using type = typename Extend<typename Gen<T, N / 2>::type, N / 2, N % 2>::type;
};
template<typename T>
diff --git a/include/nlohmann/detail/meta/detected.hpp b/include/nlohmann/detail/meta/detected.hpp
index ba048a0..64882ac 100644
--- a/include/nlohmann/detail/meta/detected.hpp
+++ b/include/nlohmann/detail/meta/detected.hpp
@@ -13,7 +13,8 @@
#include <nlohmann/detail/meta/void_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
// https://en.cppreference.com/w/cpp/experimental/is_detected
struct nonesuch
@@ -26,11 +27,7 @@
void operator=(nonesuch&&) = delete;
};
-template<class Default,
- class AlwaysVoid,
- template<class...>
- class Op,
- class... Args>
+template<class Default, class AlwaysVoid, template<class...> class Op, class... Args>
struct detector
{
using value_t = std::false_type;
@@ -64,8 +61,7 @@
using is_detected_exact = std::is_same<Expected, detected_t<Op, Args...>>;
template<class To, template<class...> class Op, class... Args>
-using is_detected_convertible =
- std::is_convertible<detected_t<Op, Args...>, To>;
+using is_detected_convertible = std::is_convertible<detected_t<Op, Args...>, To>;
} // namespace detail
NLOHMANN_JSON_NAMESPACE_END
diff --git a/include/nlohmann/detail/meta/identity_tag.hpp b/include/nlohmann/detail/meta/identity_tag.hpp
index 1933065..963a94b 100644
--- a/include/nlohmann/detail/meta/identity_tag.hpp
+++ b/include/nlohmann/detail/meta/identity_tag.hpp
@@ -11,7 +11,8 @@
#include <nlohmann/detail/abi_macros.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
// dispatching helper struct
template<class T>
diff --git a/include/nlohmann/detail/meta/is_sax.hpp b/include/nlohmann/detail/meta/is_sax.hpp
index e7f1e82..9250170 100644
--- a/include/nlohmann/detail/meta/is_sax.hpp
+++ b/include/nlohmann/detail/meta/is_sax.hpp
@@ -17,66 +17,54 @@
#include <nlohmann/detail/meta/type_traits.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
template<typename T>
using null_function_t = decltype(std::declval<T&>().null());
template<typename T>
-using boolean_function_t =
- decltype(std::declval<T&>().boolean(std::declval<bool>()));
+using boolean_function_t = decltype(std::declval<T&>().boolean(std::declval<bool>()));
template<typename T, typename Integer>
-using number_integer_function_t =
- decltype(std::declval<T&>().number_integer(std::declval<Integer>()));
+using number_integer_function_t = decltype(std::declval<T&>().number_integer(std::declval<Integer>()));
template<typename T, typename Unsigned>
-using number_unsigned_function_t =
- decltype(std::declval<T&>().number_unsigned(std::declval<Unsigned>()));
+using number_unsigned_function_t = decltype(std::declval<T&>().number_unsigned(std::declval<Unsigned>()));
template<typename T, typename Float, typename String>
-using number_float_function_t = decltype(std::declval<T&>().number_float(
- std::declval<Float>(),
- std::declval<const String&>()));
+using number_float_function_t = decltype(std::declval<T&>().number_float(std::declval<Float>(), std::declval<const String&>()));
template<typename T, typename String>
-using string_function_t =
- decltype(std::declval<T&>().string(std::declval<String&>()));
+using string_function_t = decltype(std::declval<T&>().string(std::declval<String&>()));
template<typename T, typename Binary>
-using binary_function_t =
- decltype(std::declval<T&>().binary(std::declval<Binary&>()));
+using binary_function_t = decltype(std::declval<T&>().binary(std::declval<Binary&>()));
template<typename T>
-using start_object_function_t =
- decltype(std::declval<T&>().start_object(std::declval<std::size_t>()));
+using start_object_function_t = decltype(std::declval<T&>().start_object(std::declval<std::size_t>()));
template<typename T, typename String>
-using key_function_t =
- decltype(std::declval<T&>().key(std::declval<String&>()));
+using key_function_t = decltype(std::declval<T&>().key(std::declval<String&>()));
template<typename T>
using end_object_function_t = decltype(std::declval<T&>().end_object());
template<typename T>
-using start_array_function_t =
- decltype(std::declval<T&>().start_array(std::declval<std::size_t>()));
+using start_array_function_t = decltype(std::declval<T&>().start_array(std::declval<std::size_t>()));
template<typename T>
using end_array_function_t = decltype(std::declval<T&>().end_array());
template<typename T, typename Exception>
-using parse_error_function_t = decltype(std::declval<T&>().parse_error(
- std::declval<std::size_t>(),
- std::declval<const std::string&>(),
- std::declval<const Exception&>()));
+using parse_error_function_t =
+ decltype(std::declval<T&>().parse_error(std::declval<std::size_t>(), std::declval<const std::string&>(), std::declval<const Exception&>()));
template<typename SAX, typename BasicJsonType>
struct is_sax
{
private:
- static_assert(is_basic_json<BasicJsonType>::value,
- "BasicJsonType must be of type basic_json<...>");
+ static_assert(is_basic_json<BasicJsonType>::value, "BasicJsonType must be of type basic_json<...>");
using number_integer_t = typename BasicJsonType::number_integer_t;
using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
@@ -87,27 +75,21 @@
public:
static constexpr bool value =
- is_detected_exact<bool, null_function_t, SAX>::value &&
- is_detected_exact<bool, boolean_function_t, SAX>::value &&
+ is_detected_exact<bool, null_function_t, SAX>::value && is_detected_exact<bool, boolean_function_t, SAX>::value &&
is_detected_exact<bool, number_integer_function_t, SAX, number_integer_t>::value &&
is_detected_exact<bool, number_unsigned_function_t, SAX, number_unsigned_t>::value &&
is_detected_exact<bool, number_float_function_t, SAX, number_float_t, string_t>::value &&
- is_detected_exact<bool, string_function_t, SAX, string_t>::value &&
- is_detected_exact<bool, binary_function_t, SAX, binary_t>::value &&
- is_detected_exact<bool, start_object_function_t, SAX>::value &&
- is_detected_exact<bool, key_function_t, SAX, string_t>::value &&
- is_detected_exact<bool, end_object_function_t, SAX>::value &&
- is_detected_exact<bool, start_array_function_t, SAX>::value &&
- is_detected_exact<bool, end_array_function_t, SAX>::value &&
- is_detected_exact<bool, parse_error_function_t, SAX, exception_t>::value;
+ is_detected_exact<bool, string_function_t, SAX, string_t>::value && is_detected_exact<bool, binary_function_t, SAX, binary_t>::value &&
+ is_detected_exact<bool, start_object_function_t, SAX>::value && is_detected_exact<bool, key_function_t, SAX, string_t>::value &&
+ is_detected_exact<bool, end_object_function_t, SAX>::value && is_detected_exact<bool, start_array_function_t, SAX>::value &&
+ is_detected_exact<bool, end_array_function_t, SAX>::value && is_detected_exact<bool, parse_error_function_t, SAX, exception_t>::value;
};
template<typename SAX, typename BasicJsonType>
struct is_sax_static_asserts
{
private:
- static_assert(is_basic_json<BasicJsonType>::value,
- "BasicJsonType must be of type basic_json<...>");
+ static_assert(is_basic_json<BasicJsonType>::value, "BasicJsonType must be of type basic_json<...>");
using number_integer_t = typename BasicJsonType::number_integer_t;
using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
@@ -117,40 +99,25 @@
using exception_t = typename BasicJsonType::exception;
public:
- static_assert(is_detected_exact<bool, null_function_t, SAX>::value,
- "Missing/invalid function: bool null()");
- static_assert(is_detected_exact<bool, boolean_function_t, SAX>::value,
- "Missing/invalid function: bool boolean(bool)");
- static_assert(is_detected_exact<bool, boolean_function_t, SAX>::value,
- "Missing/invalid function: bool boolean(bool)");
- static_assert(
- is_detected_exact<bool, number_integer_function_t, SAX, number_integer_t>::value,
- "Missing/invalid function: bool number_integer(number_integer_t)");
- static_assert(
- is_detected_exact<bool, number_unsigned_function_t, SAX, number_unsigned_t>::value,
- "Missing/invalid function: bool number_unsigned(number_unsigned_t)");
+ static_assert(is_detected_exact<bool, null_function_t, SAX>::value, "Missing/invalid function: bool null()");
+ static_assert(is_detected_exact<bool, boolean_function_t, SAX>::value, "Missing/invalid function: bool boolean(bool)");
+ static_assert(is_detected_exact<bool, boolean_function_t, SAX>::value, "Missing/invalid function: bool boolean(bool)");
+ static_assert(is_detected_exact<bool, number_integer_function_t, SAX, number_integer_t>::value,
+ "Missing/invalid function: bool number_integer(number_integer_t)");
+ static_assert(is_detected_exact<bool, number_unsigned_function_t, SAX, number_unsigned_t>::value,
+ "Missing/invalid function: bool number_unsigned(number_unsigned_t)");
static_assert(is_detected_exact<bool, number_float_function_t, SAX, number_float_t, string_t>::value,
"Missing/invalid function: bool number_float(number_float_t, const string_t&)");
- static_assert(
- is_detected_exact<bool, string_function_t, SAX, string_t>::value,
- "Missing/invalid function: bool string(string_t&)");
- static_assert(
- is_detected_exact<bool, binary_function_t, SAX, binary_t>::value,
- "Missing/invalid function: bool binary(binary_t&)");
- static_assert(is_detected_exact<bool, start_object_function_t, SAX>::value,
- "Missing/invalid function: bool start_object(std::size_t)");
- static_assert(is_detected_exact<bool, key_function_t, SAX, string_t>::value,
- "Missing/invalid function: bool key(string_t&)");
- static_assert(is_detected_exact<bool, end_object_function_t, SAX>::value,
- "Missing/invalid function: bool end_object()");
- static_assert(is_detected_exact<bool, start_array_function_t, SAX>::value,
- "Missing/invalid function: bool start_array(std::size_t)");
- static_assert(is_detected_exact<bool, end_array_function_t, SAX>::value,
- "Missing/invalid function: bool end_array()");
- static_assert(
- is_detected_exact<bool, parse_error_function_t, SAX, exception_t>::value,
- "Missing/invalid function: bool parse_error(std::size_t, const "
- "std::string&, const exception&)");
+ static_assert(is_detected_exact<bool, string_function_t, SAX, string_t>::value, "Missing/invalid function: bool string(string_t&)");
+ static_assert(is_detected_exact<bool, binary_function_t, SAX, binary_t>::value, "Missing/invalid function: bool binary(binary_t&)");
+ static_assert(is_detected_exact<bool, start_object_function_t, SAX>::value, "Missing/invalid function: bool start_object(std::size_t)");
+ static_assert(is_detected_exact<bool, key_function_t, SAX, string_t>::value, "Missing/invalid function: bool key(string_t&)");
+ static_assert(is_detected_exact<bool, end_object_function_t, SAX>::value, "Missing/invalid function: bool end_object()");
+ static_assert(is_detected_exact<bool, start_array_function_t, SAX>::value, "Missing/invalid function: bool start_array(std::size_t)");
+ static_assert(is_detected_exact<bool, end_array_function_t, SAX>::value, "Missing/invalid function: bool end_array()");
+ static_assert(is_detected_exact<bool, parse_error_function_t, SAX, exception_t>::value,
+ "Missing/invalid function: bool parse_error(std::size_t, const "
+ "std::string&, const exception&)");
};
} // namespace detail
diff --git a/include/nlohmann/detail/meta/std_fs.hpp b/include/nlohmann/detail/meta/std_fs.hpp
index eb11dc9..1d40745 100644
--- a/include/nlohmann/detail/meta/std_fs.hpp
+++ b/include/nlohmann/detail/meta/std_fs.hpp
@@ -13,14 +13,16 @@
#if JSON_HAS_EXPERIMENTAL_FILESYSTEM
#include <experimental/filesystem>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
namespace std_fs = std::experimental::filesystem;
} // namespace detail
NLOHMANN_JSON_NAMESPACE_END
#elif JSON_HAS_FILESYSTEM
#include <filesystem>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
namespace std_fs = std::filesystem;
} // namespace detail
NLOHMANN_JSON_NAMESPACE_END
diff --git a/include/nlohmann/detail/meta/type_traits.hpp b/include/nlohmann/detail/meta/type_traits.hpp
index bb71c5b..cbd9c1c 100644
--- a/include/nlohmann/detail/meta/type_traits.hpp
+++ b/include/nlohmann/detail/meta/type_traits.hpp
@@ -31,7 +31,8 @@
@since version 2.1.0
*/
-namespace detail {
+namespace detail
+{
/////////////
// helpers //
@@ -58,8 +59,10 @@
// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t
// false_type otherwise
template<typename BasicJsonContext>
-struct is_basic_json_context : std::integral_constant<bool,
- is_basic_json<typename std::remove_cv<typename std::remove_pointer<BasicJsonContext>::type>::type>::value || std::is_same<BasicJsonContext, std::nullptr_t>::value>
+struct is_basic_json_context
+ : std::integral_constant<bool,
+ is_basic_json<typename std::remove_cv<typename std::remove_pointer<BasicJsonContext>::type>::type>::value ||
+ std::is_same<BasicJsonContext, std::nullptr_t>::value>
{};
//////////////////////
@@ -131,8 +134,7 @@
{
using serializer = typename BasicJsonType::template json_serializer<T, void>;
- static constexpr bool value =
- is_detected_exact<void, from_json_function, serializer, const BasicJsonType&, T&>::value;
+ static constexpr bool value = is_detected_exact<void, from_json_function, serializer, const BasicJsonType&, T&>::value;
};
// This trait checks if JSONSerializer<T>::from_json(json const&) exists
@@ -146,8 +148,7 @@
{
using serializer = typename BasicJsonType::template json_serializer<T, void>;
- static constexpr bool value =
- is_detected_exact<T, from_json_function, serializer, const BasicJsonType&>::value;
+ static constexpr bool value = is_detected_exact<T, from_json_function, serializer, const BasicJsonType&>::value;
};
// This trait checks if BasicJsonType::json_serializer<T>::to_json exists
@@ -161,8 +162,7 @@
{
using serializer = typename BasicJsonType::template json_serializer<T, void>;
- static constexpr bool value =
- is_detected_exact<void, to_json_function, serializer, BasicJsonType&, T>::value;
+ static constexpr bool value = is_detected_exact<void, to_json_function, serializer, BasicJsonType&, T>::value;
};
template<typename T>
@@ -178,9 +178,7 @@
{
using object_t = typename BasicJsonType::object_t;
using object_comparator_t = typename BasicJsonType::default_object_comparator_t;
- using type = typename std::conditional<has_key_compare<object_t>::value,
- typename object_t::key_compare,
- object_comparator_t>::type;
+ using type = typename std::conditional<has_key_compare<object_t>::value, typename object_t::key_compare, object_comparator_t>::type;
};
template<typename BasicJsonType>
@@ -255,8 +253,7 @@
struct conjunction<B> : B
{};
template<class B, class... Bn>
-struct conjunction<B, Bn...>
- : std::conditional<static_cast<bool>(B::value), conjunction<Bn...>, B>::type
+struct conjunction<B, Bn...> : std::conditional<static_cast<bool>(B::value), conjunction<Bn...>, B>::type
{};
// https://en.cppreference.com/w/cpp/types/negation
@@ -272,23 +269,19 @@
{};
template<typename T1, typename T2>
-struct is_default_constructible<std::pair<T1, T2>>
- : conjunction<is_default_constructible<T1>, is_default_constructible<T2>>
+struct is_default_constructible<std::pair<T1, T2>> : conjunction<is_default_constructible<T1>, is_default_constructible<T2>>
{};
template<typename T1, typename T2>
-struct is_default_constructible<const std::pair<T1, T2>>
- : conjunction<is_default_constructible<T1>, is_default_constructible<T2>>
+struct is_default_constructible<const std::pair<T1, T2>> : conjunction<is_default_constructible<T1>, is_default_constructible<T2>>
{};
template<typename... Ts>
-struct is_default_constructible<std::tuple<Ts...>>
- : conjunction<is_default_constructible<Ts>...>
+struct is_default_constructible<std::tuple<Ts...>> : conjunction<is_default_constructible<Ts>...>
{};
template<typename... Ts>
-struct is_default_constructible<const std::tuple<Ts...>>
- : conjunction<is_default_constructible<Ts>...>
+struct is_default_constructible<const std::tuple<Ts...>> : conjunction<is_default_constructible<Ts>...>
{};
template<typename T, typename... Args>
@@ -322,12 +315,9 @@
using traits = iterator_traits<T>;
public:
- static constexpr auto value =
- is_detected<value_type_t, traits>::value &&
- is_detected<difference_type_t, traits>::value &&
- is_detected<pointer_t, traits>::value &&
- is_detected<iterator_category_t, traits>::value &&
- is_detected<reference_t, traits>::value;
+ static constexpr auto value = is_detected<value_type_t, traits>::value && is_detected<difference_type_t, traits>::value &&
+ is_detected<pointer_t, traits>::value && is_detected<iterator_category_t, traits>::value &&
+ is_detected<reference_t, traits>::value;
};
template<typename T>
@@ -342,8 +332,7 @@
// to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator
// and https://en.cppreference.com/w/cpp/iterator/sentinel_for
// but reimplementing these would be too much work, as a lot of other concepts are used underneath
- static constexpr auto is_iterator_begin =
- is_iterator_traits<iterator_traits<iterator>>::value;
+ static constexpr auto is_iterator_begin = is_iterator_traits<iterator_traits<iterator>>::value;
public:
static constexpr bool value = !std::is_same<iterator, nonesuch>::value && !std::is_same<sentinel, nonesuch>::value && is_iterator_begin;
@@ -375,22 +364,17 @@
struct is_compatible_object_type_impl<
BasicJsonType,
CompatibleObjectType,
- enable_if_t<is_detected<mapped_type_t, CompatibleObjectType>::value &&
- is_detected<key_type_t, CompatibleObjectType>::value>>
+ enable_if_t<is_detected<mapped_type_t, CompatibleObjectType>::value && is_detected<key_type_t, CompatibleObjectType>::value>>
{
using object_t = typename BasicJsonType::object_t;
// macOS's is_constructible does not play well with nonesuch...
- static constexpr bool value =
- is_constructible<typename object_t::key_type,
- typename CompatibleObjectType::key_type>::value &&
- is_constructible<typename object_t::mapped_type,
- typename CompatibleObjectType::mapped_type>::value;
+ static constexpr bool value = is_constructible<typename object_t::key_type, typename CompatibleObjectType::key_type>::value &&
+ is_constructible<typename object_t::mapped_type, typename CompatibleObjectType::mapped_type>::value;
};
template<typename BasicJsonType, typename CompatibleObjectType>
-struct is_compatible_object_type
- : is_compatible_object_type_impl<BasicJsonType, CompatibleObjectType>
+struct is_compatible_object_type : is_compatible_object_type_impl<BasicJsonType, CompatibleObjectType>
{};
template<typename BasicJsonType, typename ConstructibleObjectType, typename = void>
@@ -401,38 +385,26 @@
struct is_constructible_object_type_impl<
BasicJsonType,
ConstructibleObjectType,
- enable_if_t<is_detected<mapped_type_t, ConstructibleObjectType>::value &&
- is_detected<key_type_t, ConstructibleObjectType>::value>>
+ enable_if_t<is_detected<mapped_type_t, ConstructibleObjectType>::value && is_detected<key_type_t, ConstructibleObjectType>::value>>
{
using object_t = typename BasicJsonType::object_t;
- static constexpr bool value =
- (is_default_constructible<ConstructibleObjectType>::value &&
- (std::is_move_assignable<ConstructibleObjectType>::value ||
- std::is_copy_assignable<ConstructibleObjectType>::value) &&
- (is_constructible<typename ConstructibleObjectType::key_type,
- typename object_t::key_type>::value &&
- std::is_same<
- typename object_t::mapped_type,
- typename ConstructibleObjectType::mapped_type>::value)) ||
- (has_from_json<BasicJsonType,
- typename ConstructibleObjectType::mapped_type>::value ||
- has_non_default_from_json<
- BasicJsonType,
- typename ConstructibleObjectType::mapped_type>::value);
+ static constexpr bool value = (is_default_constructible<ConstructibleObjectType>::value &&
+ (std::is_move_assignable<ConstructibleObjectType>::value || std::is_copy_assignable<ConstructibleObjectType>::value) &&
+ (is_constructible<typename ConstructibleObjectType::key_type, typename object_t::key_type>::value &&
+ std::is_same<typename object_t::mapped_type, typename ConstructibleObjectType::mapped_type>::value)) ||
+ (has_from_json<BasicJsonType, typename ConstructibleObjectType::mapped_type>::value ||
+ has_non_default_from_json<BasicJsonType, typename ConstructibleObjectType::mapped_type>::value);
};
template<typename BasicJsonType, typename ConstructibleObjectType>
-struct is_constructible_object_type
- : is_constructible_object_type_impl<BasicJsonType,
- ConstructibleObjectType>
+struct is_constructible_object_type : is_constructible_object_type_impl<BasicJsonType, ConstructibleObjectType>
{};
template<typename BasicJsonType, typename CompatibleStringType>
struct is_compatible_string_type
{
- static constexpr auto value =
- is_constructible<typename BasicJsonType::string_t, CompatibleStringType>::value;
+ static constexpr auto value = is_constructible<typename BasicJsonType::string_t, CompatibleStringType>::value;
};
template<typename BasicJsonType, typename ConstructibleStringType>
@@ -445,12 +417,8 @@
using laundered_type = ConstructibleStringType;
#endif
- static constexpr auto value =
- conjunction<
- is_constructible<laundered_type, typename BasicJsonType::string_t>,
- is_detected_exact<typename BasicJsonType::string_t::value_type,
- value_type_t,
- laundered_type>>::value;
+ static constexpr auto value = conjunction<is_constructible<laundered_type, typename BasicJsonType::string_t>,
+ is_detected_exact<typename BasicJsonType::string_t::value_type, value_type_t, laundered_type>>::value;
};
template<typename BasicJsonType, typename CompatibleArrayType, typename = void>
@@ -458,24 +426,19 @@
{};
template<typename BasicJsonType, typename CompatibleArrayType>
-struct is_compatible_array_type_impl<
- BasicJsonType,
- CompatibleArrayType,
- enable_if_t<
- is_detected<iterator_t, CompatibleArrayType>::value &&
- is_iterator_traits<iterator_traits<detected_t<iterator_t, CompatibleArrayType>>>::value &&
- // special case for types like std::filesystem::path whose iterator's value_type are themselves
- // c.f. https://github.com/nlohmann/json/pull/3073
- !std::is_same<CompatibleArrayType, detected_t<range_value_t, CompatibleArrayType>>::value>>
+struct is_compatible_array_type_impl<BasicJsonType,
+ CompatibleArrayType,
+ enable_if_t<is_detected<iterator_t, CompatibleArrayType>::value &&
+ is_iterator_traits<iterator_traits<detected_t<iterator_t, CompatibleArrayType>>>::value &&
+ // special case for types like std::filesystem::path whose iterator's value_type are themselves
+ // c.f. https://github.com/nlohmann/json/pull/3073
+ !std::is_same<CompatibleArrayType, detected_t<range_value_t, CompatibleArrayType>>::value>>
{
- static constexpr bool value =
- is_constructible<BasicJsonType,
- range_value_t<CompatibleArrayType>>::value;
+ static constexpr bool value = is_constructible<BasicJsonType, range_value_t<CompatibleArrayType>>::value;
};
template<typename BasicJsonType, typename CompatibleArrayType>
-struct is_compatible_array_type
- : is_compatible_array_type_impl<BasicJsonType, CompatibleArrayType>
+struct is_compatible_array_type : is_compatible_array_type_impl<BasicJsonType, CompatibleArrayType>
{};
template<typename BasicJsonType, typename ConstructibleArrayType, typename = void>
@@ -483,48 +446,34 @@
{};
template<typename BasicJsonType, typename ConstructibleArrayType>
-struct is_constructible_array_type_impl<
- BasicJsonType,
- ConstructibleArrayType,
- enable_if_t<std::is_same<ConstructibleArrayType,
- typename BasicJsonType::value_type>::value>>
- : std::true_type
+struct is_constructible_array_type_impl<BasicJsonType,
+ ConstructibleArrayType,
+ enable_if_t<std::is_same<ConstructibleArrayType, typename BasicJsonType::value_type>::value>> : std::true_type
{};
template<typename BasicJsonType, typename ConstructibleArrayType>
struct is_constructible_array_type_impl<
BasicJsonType,
ConstructibleArrayType,
- enable_if_t<!std::is_same<ConstructibleArrayType,
- typename BasicJsonType::value_type>::value &&
- !is_compatible_string_type<BasicJsonType, ConstructibleArrayType>::value &&
- is_default_constructible<ConstructibleArrayType>::value &&
- (std::is_move_assignable<ConstructibleArrayType>::value ||
- std::is_copy_assignable<ConstructibleArrayType>::value) &&
+ enable_if_t<!std::is_same<ConstructibleArrayType, typename BasicJsonType::value_type>::value &&
+ !is_compatible_string_type<BasicJsonType, ConstructibleArrayType>::value && is_default_constructible<ConstructibleArrayType>::value &&
+ (std::is_move_assignable<ConstructibleArrayType>::value || std::is_copy_assignable<ConstructibleArrayType>::value) &&
is_detected<iterator_t, ConstructibleArrayType>::value &&
is_iterator_traits<iterator_traits<detected_t<iterator_t, ConstructibleArrayType>>>::value &&
is_detected<range_value_t, ConstructibleArrayType>::value &&
// special case for types like std::filesystem::path whose iterator's value_type are themselves
// c.f. https://github.com/nlohmann/json/pull/3073
!std::is_same<ConstructibleArrayType, detected_t<range_value_t, ConstructibleArrayType>>::value &&
- is_complete_type<
- detected_t<range_value_t, ConstructibleArrayType>>::value>>
+ is_complete_type<detected_t<range_value_t, ConstructibleArrayType>>::value>>
{
using value_type = range_value_t<ConstructibleArrayType>;
- static constexpr bool value =
- std::is_same<value_type,
- typename BasicJsonType::array_t::value_type>::value ||
- has_from_json<BasicJsonType,
- value_type>::value ||
- has_non_default_from_json<
- BasicJsonType,
- value_type>::value;
+ static constexpr bool value = std::is_same<value_type, typename BasicJsonType::array_t::value_type>::value ||
+ has_from_json<BasicJsonType, value_type>::value || has_non_default_from_json<BasicJsonType, value_type>::value;
};
template<typename BasicJsonType, typename ConstructibleArrayType>
-struct is_constructible_array_type
- : is_constructible_array_type_impl<BasicJsonType, ConstructibleArrayType>
+struct is_constructible_array_type : is_constructible_array_type_impl<BasicJsonType, ConstructibleArrayType>
{};
template<typename RealIntegerType, typename CompatibleNumberIntegerType, typename = void>
@@ -532,28 +481,21 @@
{};
template<typename RealIntegerType, typename CompatibleNumberIntegerType>
-struct is_compatible_integer_type_impl<
- RealIntegerType,
- CompatibleNumberIntegerType,
- enable_if_t<std::is_integral<RealIntegerType>::value &&
- std::is_integral<CompatibleNumberIntegerType>::value &&
- !std::is_same<bool, CompatibleNumberIntegerType>::value>>
+struct is_compatible_integer_type_impl<RealIntegerType,
+ CompatibleNumberIntegerType,
+ enable_if_t<std::is_integral<RealIntegerType>::value && std::is_integral<CompatibleNumberIntegerType>::value &&
+ !std::is_same<bool, CompatibleNumberIntegerType>::value>>
{
// is there an assert somewhere on overflows?
using RealLimits = std::numeric_limits<RealIntegerType>;
using CompatibleLimits = std::numeric_limits<CompatibleNumberIntegerType>;
- static constexpr auto value =
- is_constructible<RealIntegerType,
- CompatibleNumberIntegerType>::value &&
- CompatibleLimits::is_integer &&
- RealLimits::is_signed == CompatibleLimits::is_signed;
+ static constexpr auto value = is_constructible<RealIntegerType, CompatibleNumberIntegerType>::value && CompatibleLimits::is_integer &&
+ RealLimits::is_signed == CompatibleLimits::is_signed;
};
template<typename RealIntegerType, typename CompatibleNumberIntegerType>
-struct is_compatible_integer_type
- : is_compatible_integer_type_impl<RealIntegerType,
- CompatibleNumberIntegerType>
+struct is_compatible_integer_type : is_compatible_integer_type_impl<RealIntegerType, CompatibleNumberIntegerType>
{};
template<typename BasicJsonType, typename CompatibleType, typename = void>
@@ -561,18 +503,13 @@
{};
template<typename BasicJsonType, typename CompatibleType>
-struct is_compatible_type_impl<
- BasicJsonType,
- CompatibleType,
- enable_if_t<is_complete_type<CompatibleType>::value>>
+struct is_compatible_type_impl<BasicJsonType, CompatibleType, enable_if_t<is_complete_type<CompatibleType>::value>>
{
- static constexpr bool value =
- has_to_json<BasicJsonType, CompatibleType>::value;
+ static constexpr bool value = has_to_json<BasicJsonType, CompatibleType>::value;
};
template<typename BasicJsonType, typename CompatibleType>
-struct is_compatible_type
- : is_compatible_type_impl<BasicJsonType, CompatibleType>
+struct is_compatible_type : is_compatible_type_impl<BasicJsonType, CompatibleType>
{};
template<typename T1, typename T2>
@@ -613,7 +550,12 @@
{};
template<typename Compare, typename A, typename B>
-struct is_comparable<Compare, A, B, void_t<decltype(std::declval<Compare>()(std::declval<A>(), std::declval<B>())), decltype(std::declval<Compare>()(std::declval<B>(), std::declval<A>()))>> : std::true_type
+struct is_comparable<
+ Compare,
+ A,
+ B,
+ void_t<decltype(std::declval<Compare>()(std::declval<A>(), std::declval<B>())), decltype(std::declval<Compare>()(std::declval<B>(), std::declval<A>()))>>
+ : std::true_type
{};
template<typename T>
@@ -621,11 +563,18 @@
// type trait to check if KeyType can be used as object key (without a BasicJsonType)
// see is_usable_as_basic_json_key_type below
-template<typename Comparator, typename ObjectKeyType, typename KeyTypeCVRef, bool RequireTransparentComparator = true, bool ExcludeObjectKeyType = RequireTransparentComparator, typename KeyType = uncvref_t<KeyTypeCVRef>>
-using is_usable_as_key_type = typename std::conditional<
- is_comparable<Comparator, ObjectKeyType, KeyTypeCVRef>::value && !(ExcludeObjectKeyType && std::is_same<KeyType, ObjectKeyType>::value) && (!RequireTransparentComparator || is_detected<detect_is_transparent, Comparator>::value) && !is_json_pointer<KeyType>::value,
- std::true_type,
- std::false_type>::type;
+template<typename Comparator,
+ typename ObjectKeyType,
+ typename KeyTypeCVRef,
+ bool RequireTransparentComparator = true,
+ bool ExcludeObjectKeyType = RequireTransparentComparator,
+ typename KeyType = uncvref_t<KeyTypeCVRef>>
+using is_usable_as_key_type =
+ typename std::conditional<is_comparable<Comparator, ObjectKeyType, KeyTypeCVRef>::value &&
+ !(ExcludeObjectKeyType && std::is_same<KeyType, ObjectKeyType>::value) &&
+ (!RequireTransparentComparator || is_detected<detect_is_transparent, Comparator>::value) && !is_json_pointer<KeyType>::value,
+ std::true_type,
+ std::false_type>::type;
// type trait to check if KeyType can be used as object key
// true if:
@@ -633,29 +582,27 @@
// - if ExcludeObjectKeyType is true, KeyType is not BasicJsonType::object_t::key_type
// - the comparator is transparent or RequireTransparentComparator is false
// - KeyType is not a JSON iterator or json_pointer
-template<typename BasicJsonType, typename KeyTypeCVRef, bool RequireTransparentComparator = true, bool ExcludeObjectKeyType = RequireTransparentComparator, typename KeyType = uncvref_t<KeyTypeCVRef>>
-using is_usable_as_basic_json_key_type = typename std::conditional<
- is_usable_as_key_type<typename BasicJsonType::object_comparator_t,
- typename BasicJsonType::object_t::key_type,
- KeyTypeCVRef,
- RequireTransparentComparator,
- ExcludeObjectKeyType>::value &&
- !is_json_iterator_of<BasicJsonType, KeyType>::value,
- std::true_type,
- std::false_type>::type;
+template<typename BasicJsonType,
+ typename KeyTypeCVRef,
+ bool RequireTransparentComparator = true,
+ bool ExcludeObjectKeyType = RequireTransparentComparator,
+ typename KeyType = uncvref_t<KeyTypeCVRef>>
+using is_usable_as_basic_json_key_type = typename std::conditional<is_usable_as_key_type<typename BasicJsonType::object_comparator_t,
+ typename BasicJsonType::object_t::key_type,
+ KeyTypeCVRef,
+ RequireTransparentComparator,
+ ExcludeObjectKeyType>::value &&
+ !is_json_iterator_of<BasicJsonType, KeyType>::value,
+ std::true_type,
+ std::false_type>::type;
template<typename ObjectType, typename KeyType>
using detect_erase_with_key_type = decltype(std::declval<ObjectType&>().erase(std::declval<KeyType>()));
// type trait to check if object_t has an erase() member functions accepting KeyType
template<typename BasicJsonType, typename KeyType>
-using has_erase_with_key_type = typename std::conditional<
- is_detected<
- detect_erase_with_key_type,
- typename BasicJsonType::object_t,
- KeyType>::value,
- std::true_type,
- std::false_type>::type;
+using has_erase_with_key_type =
+ typename std::conditional<is_detected<detect_erase_with_key_type, typename BasicJsonType::object_t, KeyType>::value, std::true_type, std::false_type>::type;
// a naive helper to check if a type is an ordered_map (exploits the fact that
// ordered_map inherits capacity() from std::vector)
@@ -704,12 +651,12 @@
// there's a disjunction trait in another PR; replace when merged
template<typename... Types>
-using same_sign = std::integral_constant<bool,
- all_signed<Types...>::value || all_unsigned<Types...>::value>;
+using same_sign = std::integral_constant<bool, all_signed<Types...>::value || all_unsigned<Types...>::value>;
template<typename OfType, typename T>
-using never_out_of_range = std::integral_constant<bool,
- (std::is_signed<OfType>::value && (sizeof(T) < sizeof(OfType))) || (same_sign<OfType, T>::value && sizeof(OfType) == sizeof(T))>;
+using never_out_of_range =
+ std::integral_constant<bool,
+ (std::is_signed<OfType>::value && (sizeof(T) < sizeof(OfType))) || (same_sign<OfType, T>::value && sizeof(OfType) == sizeof(T))>;
template<typename OfType, typename T, bool OfTypeSigned = std::is_signed<OfType>::value, bool TSigned = std::is_signed<T>::value>
struct value_in_range_of_impl2;
@@ -750,11 +697,15 @@
static constexpr bool test(T val)
{
using CommonType = typename std::common_type<OfType, T>::type;
- return static_cast<CommonType>(val) >= static_cast<CommonType>((std::numeric_limits<OfType>::min)()) && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
+ return static_cast<CommonType>(val) >= static_cast<CommonType>((std::numeric_limits<OfType>::min)()) &&
+ static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
}
};
-template<typename OfType, typename T, bool NeverOutOfRange = never_out_of_range<OfType, T>::value, typename = detail::enable_if_t<all_integral<OfType, T>::value>>
+template<typename OfType,
+ typename T,
+ bool NeverOutOfRange = never_out_of_range<OfType, T>::value,
+ typename = detail::enable_if_t<all_integral<OfType, T>::value>>
struct value_in_range_of_impl1;
template<typename OfType, typename T>
@@ -788,7 +739,8 @@
// is_c_string
///////////////////////////////////////////////////////////////////////////////
-namespace impl {
+namespace impl
+{
template<typename T>
inline constexpr bool is_c_string()
@@ -814,7 +766,8 @@
// is_transparent
///////////////////////////////////////////////////////////////////////////////
-namespace impl {
+namespace impl
+{
template<typename T>
inline constexpr bool is_transparent()
diff --git a/include/nlohmann/detail/meta/void_t.hpp b/include/nlohmann/detail/meta/void_t.hpp
index 795edaa..23fe073 100644
--- a/include/nlohmann/detail/meta/void_t.hpp
+++ b/include/nlohmann/detail/meta/void_t.hpp
@@ -11,7 +11,8 @@
#include <nlohmann/detail/abi_macros.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
template<typename... Ts>
struct make_void
diff --git a/include/nlohmann/detail/output/binary_writer.hpp b/include/nlohmann/detail/output/binary_writer.hpp
index e10c353..8c0137e 100644
--- a/include/nlohmann/detail/output/binary_writer.hpp
+++ b/include/nlohmann/detail/output/binary_writer.hpp
@@ -25,7 +25,8 @@
#include <nlohmann/detail/string_concat.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
///////////////////
// binary writer //
@@ -98,9 +99,7 @@
case value_t::boolean:
{
- oa->write_character(j.m_data.m_value.boolean
- ? to_char_type(0xF5)
- : to_char_type(0xF4));
+ oa->write_character(j.m_data.m_value.boolean ? to_char_type(0xF5) : to_char_type(0xF4));
break;
}
@@ -253,9 +252,7 @@
// LCOV_EXCL_STOP
// step 2: write the string
- oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),
- j.m_data.m_value.string->size());
+ oa->write_characters(reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()), j.m_data.m_value.string->size());
break;
}
@@ -354,9 +351,7 @@
// LCOV_EXCL_STOP
// step 2: write each element
- oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),
- N);
+ oa->write_characters(reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()), N);
break;
}
@@ -422,9 +417,7 @@
case value_t::boolean: // true and false
{
- oa->write_character(j.m_data.m_value.boolean
- ? to_char_type(0xC3)
- : to_char_type(0xC2));
+ oa->write_character(j.m_data.m_value.boolean ? to_char_type(0xC3) : to_char_type(0xC2));
break;
}
@@ -573,9 +566,7 @@
}
// step 2: write the string
- oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),
- j.m_data.m_value.string->size());
+ oa->write_characters(reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()), j.m_data.m_value.string->size());
break;
}
@@ -660,18 +651,16 @@
}
else if (N <= (std::numeric_limits<std::uint16_t>::max)())
{
- const std::uint8_t output_type = use_ext
- ? 0xC8 // ext 16
- : 0xC5; // bin 16
+ const std::uint8_t output_type = use_ext ? 0xC8 // ext 16
+ : 0xC5; // bin 16
oa->write_character(to_char_type(output_type));
write_number(static_cast<std::uint16_t>(N));
}
else if (N <= (std::numeric_limits<std::uint32_t>::max)())
{
- const std::uint8_t output_type = use_ext
- ? 0xC9 // ext 32
- : 0xC6; // bin 32
+ const std::uint8_t output_type = use_ext ? 0xC9 // ext 32
+ : 0xC6; // bin 32
oa->write_character(to_char_type(output_type));
write_number(static_cast<std::uint32_t>(N));
@@ -684,9 +673,7 @@
}
// step 2: write the byte string
- oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),
- N);
+ oa->write_characters(reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()), N);
break;
}
@@ -752,9 +739,7 @@
{
if (add_prefix)
{
- oa->write_character(j.m_data.m_value.boolean
- ? to_char_type('T')
- : to_char_type('F'));
+ oa->write_character(j.m_data.m_value.boolean ? to_char_type('T') : to_char_type('F'));
}
break;
}
@@ -784,9 +769,7 @@
oa->write_character(to_char_type('S'));
}
write_number_with_ubjson_prefix(j.m_data.m_value.string->size(), true, use_bjdata);
- oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),
- j.m_data.m_value.string->size());
+ oa->write_characters(reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()), j.m_data.m_value.string->size());
break;
}
@@ -857,9 +840,7 @@
if (use_type)
{
- oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),
- j.m_data.m_value.binary->size());
+ oa->write_characters(reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()), j.m_data.m_value.binary->size());
}
else
{
@@ -880,9 +861,13 @@
case value_t::object:
{
- if (use_bjdata && j.m_data.m_value.object->size() == 3 && j.m_data.m_value.object->find("_ArrayType_") != j.m_data.m_value.object->end() && j.m_data.m_value.object->find("_ArraySize_") != j.m_data.m_value.object->end() && j.m_data.m_value.object->find("_ArrayData_") != j.m_data.m_value.object->end())
+ if (use_bjdata && j.m_data.m_value.object->size() == 3 && j.m_data.m_value.object->find("_ArrayType_") != j.m_data.m_value.object->end() &&
+ j.m_data.m_value.object->find("_ArraySize_") != j.m_data.m_value.object->end() &&
+ j.m_data.m_value.object->find("_ArrayData_") != j.m_data.m_value.object->end())
{
- if (!write_bjdata_ndarray(*j.m_data.m_value.object, use_count, use_type)) // decode bjdata ndarray in the JData format (https://github.com/NeuroJSON/jdata)
+ if (!write_bjdata_ndarray(*j.m_data.m_value.object,
+ use_count,
+ use_type)) // decode bjdata ndarray in the JData format (https://github.com/NeuroJSON/jdata)
{
break;
}
@@ -921,9 +906,7 @@
for (const auto& el : *j.m_data.m_value.object)
{
write_number_with_ubjson_prefix(el.first.size(), true, use_bjdata);
- oa->write_characters(
- reinterpret_cast<const CharType*>(el.first.c_str()),
- el.first.size());
+ oa->write_characters(reinterpret_cast<const CharType*>(el.first.c_str()), el.first.size());
write_ubjson(el.second, use_count, use_type, prefix_required, use_bjdata);
}
@@ -965,20 +948,16 @@
/*!
@brief Writes the given @a element_type and @a name to the output adapter
*/
- void write_bson_entry_header(const string_t& name,
- const std::uint8_t element_type)
+ void write_bson_entry_header(const string_t& name, const std::uint8_t element_type)
{
oa->write_character(to_char_type(element_type)); // boolean
- oa->write_characters(
- reinterpret_cast<const CharType*>(name.c_str()),
- name.size() + 1u);
+ oa->write_characters(reinterpret_cast<const CharType*>(name.c_str()), name.size() + 1u);
}
/*!
@brief Writes a BSON element with key @a name and boolean value @a value
*/
- void write_bson_boolean(const string_t& name,
- const bool value)
+ void write_bson_boolean(const string_t& name, const bool value)
{
write_bson_entry_header(name, 0x08);
oa->write_character(value ? to_char_type(0x01) : to_char_type(0x00));
@@ -987,8 +966,7 @@
/*!
@brief Writes a BSON element with key @a name and double value @a value
*/
- void write_bson_double(const string_t& name,
- const double value)
+ void write_bson_double(const string_t& name, const double value)
{
write_bson_entry_header(name, 0x01);
write_number<double>(value, true);
@@ -1005,15 +983,12 @@
/*!
@brief Writes a BSON element with key @a name and string value @a value
*/
- void write_bson_string(const string_t& name,
- const string_t& value)
+ void write_bson_string(const string_t& name, const string_t& value)
{
write_bson_entry_header(name, 0x02);
write_number<std::int32_t>(static_cast<std::int32_t>(value.size() + 1ul), true);
- oa->write_characters(
- reinterpret_cast<const CharType*>(value.c_str()),
- value.size() + 1);
+ oa->write_characters(reinterpret_cast<const CharType*>(value.c_str()), value.size() + 1);
}
/*!
@@ -1029,16 +1004,14 @@
*/
static std::size_t calc_bson_integer_size(const std::int64_t value)
{
- return (std::numeric_limits<std::int32_t>::min)() <= value && value <= (std::numeric_limits<std::int32_t>::max)()
- ? sizeof(std::int32_t)
- : sizeof(std::int64_t);
+ return (std::numeric_limits<std::int32_t>::min)() <= value && value <= (std::numeric_limits<std::int32_t>::max)() ? sizeof(std::int32_t)
+ : sizeof(std::int64_t);
}
/*!
@brief Writes a BSON element with key @a name and integer @a value
*/
- void write_bson_integer(const string_t& name,
- const std::int64_t value)
+ void write_bson_integer(const string_t& name, const std::int64_t value)
{
if ((std::numeric_limits<std::int32_t>::min)() <= value && value <= (std::numeric_limits<std::int32_t>::max)())
{
@@ -1057,16 +1030,13 @@
*/
static constexpr std::size_t calc_bson_unsigned_size(const std::uint64_t value) noexcept
{
- return (value <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))
- ? sizeof(std::int32_t)
- : sizeof(std::int64_t);
+ return (value <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)())) ? sizeof(std::int32_t) : sizeof(std::int64_t);
}
/*!
@brief Writes a BSON element with key @a name and unsigned @a value
*/
- void write_bson_unsigned(const string_t& name,
- const BasicJsonType& j)
+ void write_bson_unsigned(const string_t& name, const BasicJsonType& j)
{
if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))
{
@@ -1080,15 +1050,17 @@
}
else
{
- JSON_THROW(out_of_range::create(407, concat("integer number ", std::to_string(j.m_data.m_value.number_unsigned), " cannot be represented by BSON as it does not fit int64"), &j));
+ JSON_THROW(out_of_range::create(
+ 407,
+ concat("integer number ", std::to_string(j.m_data.m_value.number_unsigned), " cannot be represented by BSON as it does not fit int64"),
+ &j));
}
}
/*!
@brief Writes a BSON element with key @a name and object @a value
*/
- void write_bson_object_entry(const string_t& name,
- const typename BasicJsonType::object_t& value)
+ void write_bson_object_entry(const string_t& name, const typename BasicJsonType::object_t& value)
{
write_bson_entry_header(name, 0x03); // object
write_bson_object(value);
@@ -1101,9 +1073,12 @@
{
std::size_t array_index = 0ul;
- const std::size_t embedded_document_size = std::accumulate(std::begin(value), std::end(value), static_cast<std::size_t>(0), [&array_index](std::size_t result, const typename BasicJsonType::array_t::value_type& el) {
- return result + calc_bson_element_size(std::to_string(array_index++), el);
- });
+ const std::size_t embedded_document_size = std::accumulate(std::begin(value),
+ std::end(value),
+ static_cast<std::size_t>(0),
+ [&array_index](std::size_t result, const typename BasicJsonType::array_t::value_type& el) {
+ return result + calc_bson_element_size(std::to_string(array_index++), el);
+ });
return sizeof(std::int32_t) + embedded_document_size + 1ul;
}
@@ -1119,8 +1094,7 @@
/*!
@brief Writes a BSON element with key @a name and array @a value
*/
- void write_bson_array(const string_t& name,
- const typename BasicJsonType::array_t& value)
+ void write_bson_array(const string_t& name, const typename BasicJsonType::array_t& value)
{
write_bson_entry_header(name, 0x04); // array
write_number<std::int32_t>(static_cast<std::int32_t>(calc_bson_array_size(value)), true);
@@ -1138,8 +1112,7 @@
/*!
@brief Writes a BSON element with key @a name and binary value @a value
*/
- void write_bson_binary(const string_t& name,
- const binary_t& value)
+ void write_bson_binary(const string_t& name, const binary_t& value)
{
write_bson_entry_header(name, 0x05);
@@ -1153,8 +1126,7 @@
@brief Calculates the size necessary to serialize the JSON value @a j with its @a name
@return The calculated size for the BSON document entry for @a j with the given @a name.
*/
- static std::size_t calc_bson_element_size(const string_t& name,
- const BasicJsonType& j)
+ static std::size_t calc_bson_element_size(const string_t& name, const BasicJsonType& j)
{
const auto header_size = calc_bson_entry_header_size(name, j);
switch (j.type())
@@ -1201,8 +1173,7 @@
@param name The name to associate with the JSON entity @a j within the
current BSON document
*/
- void write_bson_element(const string_t& name,
- const BasicJsonType& j)
+ void write_bson_element(const string_t& name, const BasicJsonType& j)
{
switch (j.type())
{
@@ -1250,9 +1221,10 @@
*/
static std::size_t calc_bson_object_size(const typename BasicJsonType::object_t& value)
{
- const std::size_t document_size = std::accumulate(value.begin(), value.end(), static_cast<std::size_t>(0), [](size_t result, const typename BasicJsonType::object_t::value_type& el) {
- return result += calc_bson_element_size(el.first, el.second);
- });
+ const std::size_t document_size =
+ std::accumulate(value.begin(), value.end(), static_cast<std::size_t>(0), [](size_t result, const typename BasicJsonType::object_t::value_type& el) {
+ return result += calc_bson_element_size(el.first, el.second);
+ });
return sizeof(std::int32_t) + document_size + 1ul;
}
@@ -1307,9 +1279,7 @@
// UBJSON: write number (floating point)
template<typename NumberType, typename std::enable_if<std::is_floating_point<NumberType>::value, int>::type = 0>
- void write_number_with_ubjson_prefix(const NumberType n,
- const bool add_prefix,
- const bool use_bjdata)
+ void write_number_with_ubjson_prefix(const NumberType n, const bool add_prefix, const bool use_bjdata)
{
if (add_prefix)
{
@@ -1320,9 +1290,7 @@
// UBJSON: write number (unsigned integer)
template<typename NumberType, typename std::enable_if<std::is_unsigned<NumberType>::value, int>::type = 0>
- void write_number_with_ubjson_prefix(const NumberType n,
- const bool add_prefix,
- const bool use_bjdata)
+ void write_number_with_ubjson_prefix(const NumberType n, const bool add_prefix, const bool use_bjdata)
{
if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int8_t>::max)()))
{
@@ -1406,9 +1374,7 @@
// UBJSON: write number (signed integer)
template<typename NumberType, typename std::enable_if<std::is_signed<NumberType>::value && !std::is_floating_point<NumberType>::value, int>::type = 0>
- void write_number_with_ubjson_prefix(const NumberType n,
- const bool add_prefix,
- const bool use_bjdata)
+ void write_number_with_ubjson_prefix(const NumberType n, const bool add_prefix, const bool use_bjdata)
{
if ((std::numeric_limits<std::int8_t>::min)() <= n && n <= (std::numeric_limits<std::int8_t>::max)())
{
@@ -1418,7 +1384,8 @@
}
write_number(static_cast<std::int8_t>(n), use_bjdata);
}
- else if (static_cast<std::int64_t>((std::numeric_limits<std::uint8_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint8_t>::max)()))
+ else if (static_cast<std::int64_t>((std::numeric_limits<std::uint8_t>::min)()) <= n &&
+ n <= static_cast<std::int64_t>((std::numeric_limits<std::uint8_t>::max)()))
{
if (add_prefix)
{
@@ -1434,7 +1401,8 @@
}
write_number(static_cast<std::int16_t>(n), use_bjdata);
}
- else if (use_bjdata && (static_cast<std::int64_t>((std::numeric_limits<std::uint16_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint16_t>::max)())))
+ else if (use_bjdata && (static_cast<std::int64_t>((std::numeric_limits<std::uint16_t>::min)()) <= n &&
+ n <= static_cast<std::int64_t>((std::numeric_limits<std::uint16_t>::max)())))
{
if (add_prefix)
{
@@ -1450,7 +1418,8 @@
}
write_number(static_cast<std::int32_t>(n), use_bjdata);
}
- else if (use_bjdata && (static_cast<std::int64_t>((std::numeric_limits<std::uint32_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint32_t>::max)())))
+ else if (use_bjdata && (static_cast<std::int64_t>((std::numeric_limits<std::uint32_t>::min)()) <= n &&
+ n <= static_cast<std::int64_t>((std::numeric_limits<std::uint32_t>::max)())))
{
if (add_prefix)
{
@@ -1499,31 +1468,38 @@
case value_t::number_integer:
{
- if ((std::numeric_limits<std::int8_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int8_t>::max)())
+ if ((std::numeric_limits<std::int8_t>::min)() <= j.m_data.m_value.number_integer &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::int8_t>::max)())
{
return 'i';
}
- if ((std::numeric_limits<std::uint8_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())
+ if ((std::numeric_limits<std::uint8_t>::min)() <= j.m_data.m_value.number_integer &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())
{
return 'U';
}
- if ((std::numeric_limits<std::int16_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int16_t>::max)())
+ if ((std::numeric_limits<std::int16_t>::min)() <= j.m_data.m_value.number_integer &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::int16_t>::max)())
{
return 'I';
}
- if (use_bjdata && ((std::numeric_limits<std::uint16_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)()))
+ if (use_bjdata && ((std::numeric_limits<std::uint16_t>::min)() <= j.m_data.m_value.number_integer &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)()))
{
return 'u';
}
- if ((std::numeric_limits<std::int32_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int32_t>::max)())
+ if ((std::numeric_limits<std::int32_t>::min)() <= j.m_data.m_value.number_integer &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::int32_t>::max)())
{
return 'l';
}
- if (use_bjdata && ((std::numeric_limits<std::uint32_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)()))
+ if (use_bjdata && ((std::numeric_limits<std::uint32_t>::min)() <= j.m_data.m_value.number_integer &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)()))
{
return 'm';
}
- if ((std::numeric_limits<std::int64_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int64_t>::max)())
+ if ((std::numeric_limits<std::int64_t>::min)() <= j.m_data.m_value.number_integer &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::int64_t>::max)())
{
return 'L';
}
@@ -1603,7 +1579,17 @@
*/
bool write_bjdata_ndarray(const typename BasicJsonType::object_t& value, const bool use_count, const bool use_type)
{
- std::map<string_t, CharType> bjdtype = {{"uint8", 'U'}, {"int8", 'i'}, {"uint16", 'u'}, {"int16", 'I'}, {"uint32", 'm'}, {"int32", 'l'}, {"uint64", 'M'}, {"int64", 'L'}, {"single", 'd'}, {"double", 'D'}, {"char", 'C'}};
+ std::map<string_t, CharType> bjdtype = {{"uint8", 'U'},
+ {"int8", 'i'},
+ {"uint16", 'u'},
+ {"int16", 'I'},
+ {"uint32", 'm'},
+ {"int32", 'l'},
+ {"uint64", 'M'},
+ {"int64", 'L'},
+ {"single", 'd'},
+ {"double", 'D'},
+ {"char", 'C'}};
string_t key = "_ArrayType_";
auto it = bjdtype.find(static_cast<string_t>(value.at(key)));
@@ -1752,16 +1738,13 @@
static_cast<double>(n) <= static_cast<double>((std::numeric_limits<float>::max)()) &&
static_cast<double>(static_cast<float>(n)) == static_cast<double>(n))
{
- oa->write_character(format == detail::input_format_t::cbor
- ? get_cbor_float_prefix(static_cast<float>(n))
- : get_msgpack_float_prefix(static_cast<float>(n)));
+ oa->write_character(format == detail::input_format_t::cbor ? get_cbor_float_prefix(static_cast<float>(n))
+ : get_msgpack_float_prefix(static_cast<float>(n)));
write_number(static_cast<float>(n));
}
else
{
- oa->write_character(format == detail::input_format_t::cbor
- ? get_cbor_float_prefix(n)
- : get_msgpack_float_prefix(n));
+ oa->write_character(format == detail::input_format_t::cbor ? get_cbor_float_prefix(n) : get_msgpack_float_prefix(n));
write_number(n);
}
#ifdef __GNUC__
@@ -1774,15 +1757,13 @@
// between uint8_t and CharType. In case CharType is not unsigned,
// such a conversion is required to allow values greater than 128.
// See <https://github.com/nlohmann/json/issues/1286> for a discussion.
- template<typename C = CharType,
- enable_if_t<std::is_signed<C>::value && std::is_signed<char>::value>* = nullptr>
+ template<typename C = CharType, enable_if_t<std::is_signed<C>::value && std::is_signed<char>::value>* = nullptr>
static constexpr CharType to_char_type(std::uint8_t x) noexcept
{
return *reinterpret_cast<char*>(&x);
}
- template<typename C = CharType,
- enable_if_t<std::is_signed<C>::value && std::is_unsigned<char>::value>* = nullptr>
+ template<typename C = CharType, enable_if_t<std::is_signed<C>::value && std::is_unsigned<char>::value>* = nullptr>
static CharType to_char_type(std::uint8_t x) noexcept
{
static_assert(sizeof(std::uint8_t) == sizeof(CharType), "size of CharType must be equal to std::uint8_t");
@@ -1792,14 +1773,16 @@
return result;
}
- template<typename C = CharType,
- enable_if_t<std::is_unsigned<C>::value>* = nullptr>
+ template<typename C = CharType, enable_if_t<std::is_unsigned<C>::value>* = nullptr>
static constexpr CharType to_char_type(std::uint8_t x) noexcept
{
return x;
}
- template<typename InputCharType, typename C = CharType, enable_if_t<std::is_signed<C>::value && std::is_signed<char>::value && std::is_same<char, typename std::remove_cv<InputCharType>::type>::value>* = nullptr>
+ template<typename InputCharType,
+ typename C = CharType,
+ enable_if_t<std::is_signed<C>::value && std::is_signed<char>::value && std::is_same<char, typename std::remove_cv<InputCharType>::type>::value>* =
+ nullptr>
static constexpr CharType to_char_type(InputCharType x) noexcept
{
return x;
diff --git a/include/nlohmann/detail/output/output_adapters.hpp b/include/nlohmann/detail/output/output_adapters.hpp
index 9fde874..ab76924 100644
--- a/include/nlohmann/detail/output/output_adapters.hpp
+++ b/include/nlohmann/detail/output/output_adapters.hpp
@@ -23,7 +23,8 @@
#include <nlohmann/detail/macro_scope.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/// abstract output adapter interface
template<typename CharType>
diff --git a/include/nlohmann/detail/output/serializer.hpp b/include/nlohmann/detail/output/serializer.hpp
index f389b04..d7ac8d7 100644
--- a/include/nlohmann/detail/output/serializer.hpp
+++ b/include/nlohmann/detail/output/serializer.hpp
@@ -32,7 +32,8 @@
#include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
///////////////////
// serialization //
@@ -102,11 +103,7 @@
@param[in] indent_step the indent level
@param[in] current_indent the current indent level (only used internally)
*/
- void dump(const BasicJsonType& val,
- const bool pretty_print,
- const bool ensure_ascii,
- const unsigned int indent_step,
- const unsigned int current_indent = 0)
+ void dump(const BasicJsonType& val, const bool pretty_print, const bool ensure_ascii, const unsigned int indent_step, const unsigned int current_indent = 0)
{
switch (val.m_data.m_type)
{
@@ -203,9 +200,7 @@
}
// first n-1 elements
- for (auto i = val.m_data.m_value.array->cbegin();
- i != val.m_data.m_value.array->cend() - 1;
- ++i)
+ for (auto i = val.m_data.m_value.array->cbegin(); i != val.m_data.m_value.array->cend() - 1; ++i)
{
o->write_characters(indent_string.c_str(), new_indent);
dump(*i, true, ensure_ascii, indent_step, new_indent);
@@ -226,9 +221,7 @@
o->write_character('[');
// first n-1 elements
- for (auto i = val.m_data.m_value.array->cbegin();
- i != val.m_data.m_value.array->cend() - 1;
- ++i)
+ for (auto i = val.m_data.m_value.array->cbegin(); i != val.m_data.m_value.array->cend() - 1; ++i)
{
dump(*i, false, ensure_ascii, indent_step, current_indent);
o->write_character(',');
@@ -271,9 +264,7 @@
if (!val.m_data.m_value.binary->empty())
{
- for (auto i = val.m_data.m_value.binary->cbegin();
- i != val.m_data.m_value.binary->cend() - 1;
- ++i)
+ for (auto i = val.m_data.m_value.binary->cbegin(); i != val.m_data.m_value.binary->cend() - 1; ++i)
{
dump_integer(*i);
o->write_characters(", ", 2);
@@ -303,9 +294,7 @@
if (!val.m_data.m_value.binary->empty())
{
- for (auto i = val.m_data.m_value.binary->cbegin();
- i != val.m_data.m_value.binary->cend() - 1;
- ++i)
+ for (auto i = val.m_data.m_value.binary->cbegin(); i != val.m_data.m_value.binary->cend() - 1; ++i)
{
dump_integer(*i);
o->write_character(',');
@@ -475,7 +464,11 @@
else
{
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
- static_cast<void>((std::snprintf)(string_buffer.data() + bytes, 13, "\\u%04x\\u%04x", static_cast<std::uint16_t>(0xD7C0u + (codepoint >> 10u)), static_cast<std::uint16_t>(0xDC00u + (codepoint & 0x3FFu))));
+ static_cast<void>((std::snprintf)(string_buffer.data() + bytes,
+ 13,
+ "\\u%04x\\u%04x",
+ static_cast<std::uint16_t>(0xD7C0u + (codepoint >> 10u)),
+ static_cast<std::uint16_t>(0xDC00u + (codepoint & 0x3FFu))));
bytes += 12;
}
}
@@ -510,7 +503,8 @@
{
case error_handler_t::strict:
{
- JSON_THROW(type_error::create(316, concat("invalid UTF-8 byte at index ", std::to_string(i), ": 0x", hex_bytes(byte | 0)), nullptr));
+ JSON_THROW(
+ type_error::create(316, concat("invalid UTF-8 byte at index ", std::to_string(i), ": 0x", hex_bytes(byte | 0)), nullptr));
}
case error_handler_t::ignore:
@@ -602,7 +596,8 @@
{
case error_handler_t::strict:
{
- JSON_THROW(type_error::create(316, concat("incomplete UTF-8 string; last byte: 0x", hex_bytes(static_cast<std::uint8_t>(s.back() | 0))), nullptr));
+ JSON_THROW(
+ type_error::create(316, concat("incomplete UTF-8 string; last byte: 0x", hex_bytes(static_cast<std::uint8_t>(s.back() | 0))), nullptr));
}
case error_handler_t::ignore:
@@ -705,112 +700,24 @@
@param[in] x integer number (signed or unsigned) to dump
@tparam NumberType either @a number_integer_t or @a number_unsigned_t
*/
- template<typename NumberType, detail::enable_if_t<std::is_integral<NumberType>::value || std::is_same<NumberType, number_unsigned_t>::value || std::is_same<NumberType, number_integer_t>::value || std::is_same<NumberType, binary_char_t>::value, int> = 0>
+ template<typename NumberType,
+ detail::enable_if_t<std::is_integral<NumberType>::value || std::is_same<NumberType, number_unsigned_t>::value ||
+ std::is_same<NumberType, number_integer_t>::value || std::is_same<NumberType, binary_char_t>::value,
+ int> = 0>
void dump_integer(NumberType x)
{
- static constexpr std::array<std::array<char, 2>, 100> digits_to_99{
- {
- {{'0', '0'}},
- {{'0', '1'}},
- {{'0', '2'}},
- {{'0', '3'}},
- {{'0', '4'}},
- {{'0', '5'}},
- {{'0', '6'}},
- {{'0', '7'}},
- {{'0', '8'}},
- {{'0', '9'}},
- {{'1', '0'}},
- {{'1', '1'}},
- {{'1', '2'}},
- {{'1', '3'}},
- {{'1', '4'}},
- {{'1', '5'}},
- {{'1', '6'}},
- {{'1', '7'}},
- {{'1', '8'}},
- {{'1', '9'}},
- {{'2', '0'}},
- {{'2', '1'}},
- {{'2', '2'}},
- {{'2', '3'}},
- {{'2', '4'}},
- {{'2', '5'}},
- {{'2', '6'}},
- {{'2', '7'}},
- {{'2', '8'}},
- {{'2', '9'}},
- {{'3', '0'}},
- {{'3', '1'}},
- {{'3', '2'}},
- {{'3', '3'}},
- {{'3', '4'}},
- {{'3', '5'}},
- {{'3', '6'}},
- {{'3', '7'}},
- {{'3', '8'}},
- {{'3', '9'}},
- {{'4', '0'}},
- {{'4', '1'}},
- {{'4', '2'}},
- {{'4', '3'}},
- {{'4', '4'}},
- {{'4', '5'}},
- {{'4', '6'}},
- {{'4', '7'}},
- {{'4', '8'}},
- {{'4', '9'}},
- {{'5', '0'}},
- {{'5', '1'}},
- {{'5', '2'}},
- {{'5', '3'}},
- {{'5', '4'}},
- {{'5', '5'}},
- {{'5', '6'}},
- {{'5', '7'}},
- {{'5', '8'}},
- {{'5', '9'}},
- {{'6', '0'}},
- {{'6', '1'}},
- {{'6', '2'}},
- {{'6', '3'}},
- {{'6', '4'}},
- {{'6', '5'}},
- {{'6', '6'}},
- {{'6', '7'}},
- {{'6', '8'}},
- {{'6', '9'}},
- {{'7', '0'}},
- {{'7', '1'}},
- {{'7', '2'}},
- {{'7', '3'}},
- {{'7', '4'}},
- {{'7', '5'}},
- {{'7', '6'}},
- {{'7', '7'}},
- {{'7', '8'}},
- {{'7', '9'}},
- {{'8', '0'}},
- {{'8', '1'}},
- {{'8', '2'}},
- {{'8', '3'}},
- {{'8', '4'}},
- {{'8', '5'}},
- {{'8', '6'}},
- {{'8', '7'}},
- {{'8', '8'}},
- {{'8', '9'}},
- {{'9', '0'}},
- {{'9', '1'}},
- {{'9', '2'}},
- {{'9', '3'}},
- {{'9', '4'}},
- {{'9', '5'}},
- {{'9', '6'}},
- {{'9', '7'}},
- {{'9', '8'}},
- {{'9', '9'}},
- }};
+ static constexpr std::array<std::array<char, 2>, 100> digits_to_99{{
+ {{'0', '0'}}, {{'0', '1'}}, {{'0', '2'}}, {{'0', '3'}}, {{'0', '4'}}, {{'0', '5'}}, {{'0', '6'}}, {{'0', '7'}}, {{'0', '8'}}, {{'0', '9'}},
+ {{'1', '0'}}, {{'1', '1'}}, {{'1', '2'}}, {{'1', '3'}}, {{'1', '4'}}, {{'1', '5'}}, {{'1', '6'}}, {{'1', '7'}}, {{'1', '8'}}, {{'1', '9'}},
+ {{'2', '0'}}, {{'2', '1'}}, {{'2', '2'}}, {{'2', '3'}}, {{'2', '4'}}, {{'2', '5'}}, {{'2', '6'}}, {{'2', '7'}}, {{'2', '8'}}, {{'2', '9'}},
+ {{'3', '0'}}, {{'3', '1'}}, {{'3', '2'}}, {{'3', '3'}}, {{'3', '4'}}, {{'3', '5'}}, {{'3', '6'}}, {{'3', '7'}}, {{'3', '8'}}, {{'3', '9'}},
+ {{'4', '0'}}, {{'4', '1'}}, {{'4', '2'}}, {{'4', '3'}}, {{'4', '4'}}, {{'4', '5'}}, {{'4', '6'}}, {{'4', '7'}}, {{'4', '8'}}, {{'4', '9'}},
+ {{'5', '0'}}, {{'5', '1'}}, {{'5', '2'}}, {{'5', '3'}}, {{'5', '4'}}, {{'5', '5'}}, {{'5', '6'}}, {{'5', '7'}}, {{'5', '8'}}, {{'5', '9'}},
+ {{'6', '0'}}, {{'6', '1'}}, {{'6', '2'}}, {{'6', '3'}}, {{'6', '4'}}, {{'6', '5'}}, {{'6', '6'}}, {{'6', '7'}}, {{'6', '8'}}, {{'6', '9'}},
+ {{'7', '0'}}, {{'7', '1'}}, {{'7', '2'}}, {{'7', '3'}}, {{'7', '4'}}, {{'7', '5'}}, {{'7', '6'}}, {{'7', '7'}}, {{'7', '8'}}, {{'7', '9'}},
+ {{'8', '0'}}, {{'8', '1'}}, {{'8', '2'}}, {{'8', '3'}}, {{'8', '4'}}, {{'8', '5'}}, {{'8', '6'}}, {{'8', '7'}}, {{'8', '8'}}, {{'8', '9'}},
+ {{'9', '0'}}, {{'9', '1'}}, {{'9', '2'}}, {{'9', '3'}}, {{'9', '4'}}, {{'9', '5'}}, {{'9', '6'}}, {{'9', '7'}}, {{'9', '8'}}, {{'9', '9'}},
+ }};
// special case for "0"
if (x == 0)
@@ -893,8 +800,10 @@
// guaranteed to round-trip, using strtof and strtod, resp.
//
// NB: The test below works if <long double> == <double>.
- static constexpr bool is_ieee_single_or_double = (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 24 && std::numeric_limits<number_float_t>::max_exponent == 128) ||
- (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 53 && std::numeric_limits<number_float_t>::max_exponent == 1024);
+ static constexpr bool is_ieee_single_or_double = (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 24 &&
+ std::numeric_limits<number_float_t>::max_exponent == 128) ||
+ (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 53 &&
+ std::numeric_limits<number_float_t>::max_exponent == 1024);
dump_float(x, std::integral_constant<bool, is_ieee_single_or_double>());
}
@@ -945,10 +854,9 @@
o->write_characters(number_buffer.data(), static_cast<std::size_t>(len));
// determine if we need to append ".0"
- const bool value_is_int_like =
- std::none_of(number_buffer.begin(), number_buffer.begin() + len + 1, [](char c) {
- return c == '.' || c == 'e';
- });
+ const bool value_is_int_like = std::none_of(number_buffer.begin(), number_buffer.begin() + len + 1, [](char c) {
+ return c == '.' || c == 'e';
+ });
if (value_is_int_like)
{
@@ -979,417 +887,41 @@
*/
static std::uint8_t decode(std::uint8_t& state, std::uint32_t& codep, const std::uint8_t byte) noexcept
{
- static const std::array<std::uint8_t, 400> utf8d =
- {
- {
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0, // 00..1F
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0, // 20..3F
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0, // 40..5F
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0, // 60..7F
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9, // 80..9F
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7, // A0..BF
- 8,
- 8,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2, // C0..DF
- 0xA,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x4,
- 0x3,
- 0x3, // E0..EF
- 0xB,
- 0x6,
- 0x6,
- 0x6,
- 0x5,
- 0x8,
- 0x8,
- 0x8,
- 0x8,
- 0x8,
- 0x8,
- 0x8,
- 0x8,
- 0x8,
- 0x8,
- 0x8, // F0..FF
- 0x0,
- 0x1,
- 0x2,
- 0x3,
- 0x5,
- 0x8,
- 0x7,
- 0x1,
- 0x1,
- 0x1,
- 0x4,
- 0x6,
- 0x1,
- 0x1,
- 0x1,
- 0x1, // s0..s0
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 0,
- 1,
- 1,
- 1,
- 1,
- 1,
- 0,
- 1,
- 0,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1, // s1..s2
- 1,
- 2,
- 1,
- 1,
- 1,
- 1,
- 1,
- 2,
- 1,
- 2,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 2,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1, // s3..s4
- 1,
- 2,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 2,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 3,
- 1,
- 3,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1, // s5..s6
- 1,
- 3,
- 1,
- 1,
- 1,
- 1,
- 1,
- 3,
- 1,
- 3,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 3,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1 // s7..s8
- }};
+ static const std::array<std::uint8_t, 400> utf8d = {{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, // 00..1F
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, // 20..3F
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, // 40..5F
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, // 60..7F
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, // 80..9F
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, // A0..BF
+ 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, // C0..DF
+ 0xA, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3,
+ 0x3, // E0..EF
+ 0xB, 0x6, 0x6, 0x6, 0x5, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8,
+ 0x8, // F0..FF
+ 0x0, 0x1, 0x2, 0x3, 0x5, 0x8, 0x7, 0x1, 0x1, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1,
+ 0x1, // s0..s0
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1,
+ 1, // s1..s2
+ 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, // s3..s4
+ 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1,
+ 1, // s5..s6
+ 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1 // s7..s8
+ }};
JSON_ASSERT(byte < utf8d.size());
const std::uint8_t type = utf8d[byte];
- codep = (state != UTF8_ACCEPT)
- ? (byte & 0x3fu) | (codep << 6u)
- : (0xFFu >> type) & (byte);
+ codep = (state != UTF8_ACCEPT) ? (byte & 0x3fu) | (codep << 6u) : (0xFFu >> type) & (byte);
const std::size_t index = 256u + static_cast<size_t>(state) * 16u + static_cast<size_t>(type);
JSON_ASSERT(index < utf8d.size());
diff --git a/include/nlohmann/detail/string_concat.hpp b/include/nlohmann/detail/string_concat.hpp
index 7bb7c9b..a4c787b 100644
--- a/include/nlohmann/detail/string_concat.hpp
+++ b/include/nlohmann/detail/string_concat.hpp
@@ -16,7 +16,8 @@
#include <nlohmann/detail/meta/detected.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
inline std::size_t concat_length()
{
@@ -76,13 +77,26 @@
template<typename StringType, typename Arg>
using detect_string_can_append_data = is_detected<string_can_append_data, StringType, Arg>;
-template<typename OutStringType, typename Arg, typename... Args, enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && detect_string_can_append_op<OutStringType, Arg>::value, int> = 0>
+template<typename OutStringType,
+ typename Arg,
+ typename... Args,
+ enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && detect_string_can_append_op<OutStringType, Arg>::value, int> = 0>
inline void concat_into(OutStringType& out, Arg&& arg, Args&&... rest);
-template<typename OutStringType, typename Arg, typename... Args, enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && !detect_string_can_append_op<OutStringType, Arg>::value && detect_string_can_append_iter<OutStringType, Arg>::value, int> = 0>
+template<typename OutStringType,
+ typename Arg,
+ typename... Args,
+ enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && !detect_string_can_append_op<OutStringType, Arg>::value &&
+ detect_string_can_append_iter<OutStringType, Arg>::value,
+ int> = 0>
inline void concat_into(OutStringType& out, const Arg& arg, Args&&... rest);
-template<typename OutStringType, typename Arg, typename... Args, enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && !detect_string_can_append_op<OutStringType, Arg>::value && !detect_string_can_append_iter<OutStringType, Arg>::value && detect_string_can_append_data<OutStringType, Arg>::value, int> = 0>
+template<typename OutStringType,
+ typename Arg,
+ typename... Args,
+ enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && !detect_string_can_append_op<OutStringType, Arg>::value &&
+ !detect_string_can_append_iter<OutStringType, Arg>::value && detect_string_can_append_data<OutStringType, Arg>::value,
+ int> = 0>
inline void concat_into(OutStringType& out, const Arg& arg, Args&&... rest);
template<typename OutStringType, typename Arg, typename... Args, enable_if_t<detect_string_can_append<OutStringType, Arg>::value, int> = 0>
@@ -92,21 +106,34 @@
concat_into(out, std::forward<Args>(rest)...);
}
-template<typename OutStringType, typename Arg, typename... Args, enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && detect_string_can_append_op<OutStringType, Arg>::value, int>>
+template<typename OutStringType,
+ typename Arg,
+ typename... Args,
+ enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && detect_string_can_append_op<OutStringType, Arg>::value, int>>
inline void concat_into(OutStringType& out, Arg&& arg, Args&&... rest)
{
out += std::forward<Arg>(arg);
concat_into(out, std::forward<Args>(rest)...);
}
-template<typename OutStringType, typename Arg, typename... Args, enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && !detect_string_can_append_op<OutStringType, Arg>::value && detect_string_can_append_iter<OutStringType, Arg>::value, int>>
+template<typename OutStringType,
+ typename Arg,
+ typename... Args,
+ enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && !detect_string_can_append_op<OutStringType, Arg>::value &&
+ detect_string_can_append_iter<OutStringType, Arg>::value,
+ int>>
inline void concat_into(OutStringType& out, const Arg& arg, Args&&... rest)
{
out.append(arg.begin(), arg.end());
concat_into(out, std::forward<Args>(rest)...);
}
-template<typename OutStringType, typename Arg, typename... Args, enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && !detect_string_can_append_op<OutStringType, Arg>::value && !detect_string_can_append_iter<OutStringType, Arg>::value && detect_string_can_append_data<OutStringType, Arg>::value, int>>
+template<typename OutStringType,
+ typename Arg,
+ typename... Args,
+ enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && !detect_string_can_append_op<OutStringType, Arg>::value &&
+ !detect_string_can_append_iter<OutStringType, Arg>::value && detect_string_can_append_data<OutStringType, Arg>::value,
+ int>>
inline void concat_into(OutStringType& out, const Arg& arg, Args&&... rest)
{
out.append(arg.data(), arg.size());
diff --git a/include/nlohmann/detail/string_escape.hpp b/include/nlohmann/detail/string_escape.hpp
index 14cb78c..41addc9 100644
--- a/include/nlohmann/detail/string_escape.hpp
+++ b/include/nlohmann/detail/string_escape.hpp
@@ -11,7 +11,8 @@
#include <nlohmann/detail/abi_macros.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/*!
@brief replace all occurrences of a substring by another string
diff --git a/include/nlohmann/detail/value_t.hpp b/include/nlohmann/detail/value_t.hpp
index 446ee5d..eb7bcca 100644
--- a/include/nlohmann/detail/value_t.hpp
+++ b/include/nlohmann/detail/value_t.hpp
@@ -19,7 +19,8 @@
#endif
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
///////////////////////////
// JSON type enumeration //
diff --git a/include/nlohmann/json.hpp b/include/nlohmann/json.hpp
index 6552553..8746e75 100644
--- a/include/nlohmann/json.hpp
+++ b/include/nlohmann/json.hpp
@@ -130,16 +130,10 @@
using lexer = ::nlohmann::detail::lexer_base<basic_json>;
template<typename InputAdapterType>
- static ::nlohmann::detail::parser<basic_json, InputAdapterType> parser(
- InputAdapterType adapter,
- detail::parser_callback_t<basic_json> cb = nullptr,
- const bool allow_exceptions = true,
- const bool ignore_comments = false)
+ static ::nlohmann::detail::parser<basic_json, InputAdapterType>
+ parser(InputAdapterType adapter, detail::parser_callback_t<basic_json> cb = nullptr, const bool allow_exceptions = true, const bool ignore_comments = false)
{
- return ::nlohmann::detail::parser<basic_json, InputAdapterType>(std::move(adapter),
- std::move(cb),
- allow_exceptions,
- ignore_comments);
+ return ::nlohmann::detail::parser<basic_json, InputAdapterType>(std::move(adapter), std::move(cb), allow_exceptions, ignore_comments);
}
private:
@@ -255,8 +249,11 @@
result["copyright"] = "(C) 2013-2023 Niels Lohmann";
result["name"] = "JSON for Modern C++";
result["url"] = "https://github.com/nlohmann/json";
- result["version"]["string"] =
- detail::concat(std::to_string(NLOHMANN_JSON_VERSION_MAJOR), '.', std::to_string(NLOHMANN_JSON_VERSION_MINOR), '.', std::to_string(NLOHMANN_JSON_VERSION_PATCH));
+ result["version"]["string"] = detail::concat(std::to_string(NLOHMANN_JSON_VERSION_MAJOR),
+ '.',
+ std::to_string(NLOHMANN_JSON_VERSION_MINOR),
+ '.',
+ std::to_string(NLOHMANN_JSON_VERSION_PATCH));
result["version"]["major"] = NLOHMANN_JSON_VERSION_MAJOR;
result["version"]["minor"] = NLOHMANN_JSON_VERSION_MINOR;
result["version"]["patch"] = NLOHMANN_JSON_VERSION_PATCH;
@@ -274,34 +271,23 @@
#endif
#if defined(__ICC) || defined(__INTEL_COMPILER)
- result["compiler"] = {{"family", "icc"}, { "version",
- __INTEL_COMPILER }};
+ result["compiler"] = {{"family", "icc"}, { "version", __INTEL_COMPILER }};
#elif defined(__clang__)
- result["compiler"] = {{"family", "clang"}, { "version",
- __clang_version__ }};
+ result["compiler"] = {{"family", "clang"}, { "version", __clang_version__ }};
#elif defined(__GNUC__) || defined(__GNUG__)
- result["compiler"] = {{"family", "gcc"}, { "version",
- detail::concat(
- std::to_string(__GNUC__),
- '.',
- std::to_string(__GNUC_MINOR__),
- '.',
- std::to_string(__GNUC_PATCHLEVEL__))
- }};
+ result["compiler"] = {{"family", "gcc"},
+ { "version",
+ detail::concat(std::to_string(__GNUC__), '.', std::to_string(__GNUC_MINOR__), '.', std::to_string(__GNUC_PATCHLEVEL__)) }};
#elif defined(__HP_cc) || defined(__HP_aCC)
result["compiler"] = "hp"
#elif defined(__IBMCPP__)
- result["compiler"] = {{"family", "ilecpp"}, { "version",
- __IBMCPP__ }};
+ result["compiler"] = {{"family", "ilecpp"}, { "version", __IBMCPP__ }};
#elif defined(_MSC_VER)
- result["compiler"] = {{"family", "msvc"}, { "version",
- _MSC_VER }};
+ result["compiler"] = {{"family", "msvc"}, { "version", _MSC_VER }};
#elif defined(__PGI)
- result["compiler"] = {{"family", "pgcpp"}, { "version",
- __PGI }};
+ result["compiler"] = {{"family", "pgcpp"}, { "version", __PGI }};
#elif defined(__SUNPRO_CC)
- result["compiler"] = {{"family", "sunpro"}, { "version",
- __SUNPRO_CC }};
+ result["compiler"] = {{"family", "sunpro"}, { "version", __SUNPRO_CC }};
#else
result["compiler"] = {{"family", "unknown"}, {"version", "unknown"}};
#endif
@@ -339,11 +325,7 @@
/// @brief a type for an object
/// @sa https://json.nlohmann.me/api/basic_json/object_t/
- using object_t = ObjectType<StringType,
- basic_json,
- default_object_comparator_t,
- AllocatorType<std::pair<const StringType,
- basic_json>>>;
+ using object_t = ObjectType<StringType, basic_json, default_object_comparator_t, AllocatorType<std::pair<const StringType, basic_json>>>;
/// @brief a type for an array
/// @sa https://json.nlohmann.me/api/basic_json/array_t/
@@ -587,10 +569,7 @@
void destroy(value_t t)
{
- if (
- (t == value_t::object && object == nullptr) ||
- (t == value_t::array && array == nullptr) ||
- (t == value_t::string && string == nullptr) ||
+ if ((t == value_t::object && object == nullptr) || (t == value_t::array && array == nullptr) || (t == value_t::string && string == nullptr) ||
(t == value_t::binary && binary == nullptr))
{
//not initialized (e.g. due to exception in the ctor)
@@ -862,12 +841,10 @@
/// @sa https://json.nlohmann.me/api/basic_json/basic_json/
template<typename CompatibleType,
typename U = detail::uncvref_t<CompatibleType>,
- detail::enable_if_t<
- !detail::is_basic_json<U>::value && detail::is_compatible_type<basic_json_t, U>::value,
- int> = 0>
+ detail::enable_if_t<!detail::is_basic_json<U>::value && detail::is_compatible_type<basic_json_t, U>::value,
+ int> = 0>
basic_json(CompatibleType&& val) noexcept(noexcept( // NOLINT(bugprone-forwarding-reference-overload,bugprone-exception-escape)
- JSONSerializer<U>::to_json(std::declval<basic_json_t&>(),
- std::forward<CompatibleType>(val))))
+ JSONSerializer<U>::to_json(std::declval<basic_json_t&>(), std::forward<CompatibleType>(val))))
{
JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));
set_parents();
@@ -877,9 +854,7 @@
/// @brief create a JSON value from an existing one
/// @sa https://json.nlohmann.me/api/basic_json/basic_json/
template<typename BasicJsonType,
- detail::enable_if_t<
- detail::is_basic_json<BasicJsonType>::value && !std::is_same<basic_json, BasicJsonType>::value,
- int> = 0>
+ detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value && !std::is_same<basic_json, BasicJsonType>::value, int> = 0>
basic_json(const BasicJsonType& val)
{
using other_boolean_t = typename BasicJsonType::boolean_t;
@@ -933,9 +908,7 @@
/// @brief create a container (array or object) from an initializer list
/// @sa https://json.nlohmann.me/api/basic_json/basic_json/
- basic_json(initializer_list_t init,
- bool type_deduction = true,
- value_t manual_type = value_t::array)
+ basic_json(initializer_list_t init, bool type_deduction = true, value_t manual_type = value_t::array)
{
// check if each element is an array with two elements whose first
// element is a string
@@ -971,9 +944,8 @@
for (auto& element_ref : init)
{
auto element = element_ref.moved_or_copied();
- m_data.m_value.object->emplace(
- std::move(*((*element.m_data.m_value.array)[0].m_data.m_value.string)),
- std::move((*element.m_data.m_value.array)[1]));
+ m_data.m_value.object->emplace(std::move(*((*element.m_data.m_value.array)[0].m_data.m_value.string)),
+ std::move((*element.m_data.m_value.array)[1]));
}
}
else
@@ -1058,7 +1030,10 @@
/// @brief construct a JSON container given an iterator range
/// @sa https://json.nlohmann.me/api/basic_json/basic_json/
- template<class InputIT, typename std::enable_if<std::is_same<InputIT, typename basic_json_t::iterator>::value || std::is_same<InputIT, typename basic_json_t::const_iterator>::value, int>::type = 0>
+ template<class InputIT,
+ typename std::enable_if<std::is_same<InputIT, typename basic_json_t::iterator>::value ||
+ std::is_same<InputIT, typename basic_json_t::const_iterator>::value,
+ int>::type = 0>
basic_json(InputIT first, InputIT last)
{
JSON_ASSERT(first.m_object != nullptr);
@@ -1132,15 +1107,13 @@
case value_t::object:
{
- m_data.m_value.object = create<object_t>(first.m_it.object_iterator,
- last.m_it.object_iterator);
+ m_data.m_value.object = create<object_t>(first.m_it.object_iterator, last.m_it.object_iterator);
break;
}
case value_t::array:
{
- m_data.m_value.array = create<array_t>(first.m_it.array_iterator,
- last.m_it.array_iterator);
+ m_data.m_value.array = create<array_t>(first.m_it.array_iterator, last.m_it.array_iterator);
break;
}
@@ -1165,9 +1138,7 @@
///////////////////////////////////////
template<typename JsonRef,
- detail::enable_if_t<detail::conjunction<detail::is_json_ref<JsonRef>,
- std::is_same<typename JsonRef::value_type, basic_json>>::value,
- int> = 0>
+ detail::enable_if_t<detail::conjunction<detail::is_json_ref<JsonRef>, std::is_same<typename JsonRef::value_type, basic_json>>::value, int> = 0>
basic_json(const JsonRef& ref)
: basic_json(ref.moved_or_copied())
{}
@@ -1260,12 +1231,10 @@
/// @brief copy assignment
/// @sa https://json.nlohmann.me/api/basic_json/operator=/
- basic_json& operator=(basic_json other) noexcept(
- std::is_nothrow_move_constructible<value_t>::value &&
- std::is_nothrow_move_assignable<value_t>::value &&
- std::is_nothrow_move_constructible<json_value>::value &&
- std::is_nothrow_move_assignable<json_value>::value &&
- std::is_nothrow_move_assignable<json_base_class_t>::value)
+ basic_json& operator=(basic_json other) noexcept(std::is_nothrow_move_constructible<value_t>::value && std::is_nothrow_move_assignable<value_t>::value &&
+ std::is_nothrow_move_constructible<json_value>::value &&
+ std::is_nothrow_move_assignable<json_value>::value &&
+ std::is_nothrow_move_assignable<json_base_class_t>::value)
{
// check that passed value is valid
other.assert_invariant();
@@ -1580,7 +1549,9 @@
/// @brief get a pointer value (implicit)
/// @sa https://json.nlohmann.me/api/basic_json/get_ptr/
- template<typename PointerType, typename std::enable_if<std::is_pointer<PointerType>::value && std::is_const<typename std::remove_pointer<PointerType>::type>::value, int>::type = 0>
+ template<
+ typename PointerType,
+ typename std::enable_if<std::is_pointer<PointerType>::value && std::is_const<typename std::remove_pointer<PointerType>::type>::value, int>::type = 0>
constexpr auto get_ptr() const noexcept -> decltype(std::declval<const basic_json_t&>().get_impl_ptr(std::declval<PointerType>()))
{
// delegate the call to get_impl_ptr<>() const
@@ -1627,12 +1598,9 @@
@since version 2.1.0
*/
template<typename ValueType,
- detail::enable_if_t<
- detail::is_default_constructible<ValueType>::value &&
- detail::has_from_json<basic_json_t, ValueType>::value,
- int> = 0>
- ValueType get_impl(detail::priority_tag<0> /*unused*/) const noexcept(noexcept(
- JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), std::declval<ValueType&>())))
+ detail::enable_if_t<detail::is_default_constructible<ValueType>::value && detail::has_from_json<basic_json_t, ValueType>::value, int> = 0>
+ ValueType get_impl(detail::priority_tag<0> /*unused*/) const
+ noexcept(noexcept(JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), std::declval<ValueType&>())))
{
auto ret = ValueType();
JSONSerializer<ValueType>::from_json(*this, ret);
@@ -1669,12 +1637,8 @@
@since version 2.1.0
*/
- template<typename ValueType,
- detail::enable_if_t<
- detail::has_non_default_from_json<basic_json_t, ValueType>::value,
- int> = 0>
- ValueType get_impl(detail::priority_tag<1> /*unused*/) const noexcept(noexcept(
- JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>())))
+ template<typename ValueType, detail::enable_if_t<detail::has_non_default_from_json<basic_json_t, ValueType>::value, int> = 0>
+ ValueType get_impl(detail::priority_tag<1> /*unused*/) const noexcept(noexcept(JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>())))
{
return JSONSerializer<ValueType>::from_json(*this);
}
@@ -1694,10 +1658,7 @@
@since version 3.2.0
*/
- template<typename BasicJsonType,
- detail::enable_if_t<
- detail::is_basic_json<BasicJsonType>::value,
- int> = 0>
+ template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>
BasicJsonType get_impl(detail::priority_tag<2> /*unused*/) const
{
return *this;
@@ -1717,10 +1678,7 @@
@since version 2.1.0
*/
- template<typename BasicJsonType,
- detail::enable_if_t<
- std::is_same<BasicJsonType, basic_json_t>::value,
- int> = 0>
+ template<typename BasicJsonType, detail::enable_if_t<std::is_same<BasicJsonType, basic_json_t>::value, int> = 0>
basic_json get_impl(detail::priority_tag<3> /*unused*/) const
{
return *this;
@@ -1730,12 +1688,8 @@
@brief get a pointer value (explicit)
@copydoc get()
*/
- template<typename PointerType,
- detail::enable_if_t<
- std::is_pointer<PointerType>::value,
- int> = 0>
- constexpr auto get_impl(detail::priority_tag<4> /*unused*/) const noexcept
- -> decltype(std::declval<const basic_json_t&>().template get_ptr<PointerType>())
+ template<typename PointerType, detail::enable_if_t<std::is_pointer<PointerType>::value, int> = 0>
+ constexpr auto get_impl(detail::priority_tag<4> /*unused*/) const noexcept -> decltype(std::declval<const basic_json_t&>().template get_ptr<PointerType>())
{
// delegate the call to get_ptr
return get_ptr<PointerType>();
@@ -1770,15 +1724,13 @@
constexpr
#endif
auto
- get() const noexcept(
- noexcept(std::declval<const basic_json_t&>().template get_impl<ValueType>(detail::priority_tag<4>{})))
+ get() const noexcept(noexcept(std::declval<const basic_json_t&>().template get_impl<ValueType>(detail::priority_tag<4>{})))
-> decltype(std::declval<const basic_json_t&>().template get_impl<ValueType>(detail::priority_tag<4>{}))
{
// we cannot static_assert on ValueTypeCV being non-const, because
// there is support for get<const basic_json_t>(), which is why we
// still need the uncvref
- static_assert(!std::is_reference<ValueTypeCV>::value,
- "get() cannot be used with reference types, you might want to use get_ref()");
+ static_assert(!std::is_reference<ValueTypeCV>::value, "get() cannot be used with reference types, you might want to use get_ref()");
return get_impl<ValueType>(detail::priority_tag<4>{});
}
@@ -1819,12 +1771,8 @@
/// @brief get a value (explicit)
/// @sa https://json.nlohmann.me/api/basic_json/get_to/
template<typename ValueType,
- detail::enable_if_t<
- !detail::is_basic_json<ValueType>::value &&
- detail::has_from_json<basic_json_t, ValueType>::value,
- int> = 0>
- ValueType& get_to(ValueType& v) const noexcept(noexcept(
- JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), v)))
+ detail::enable_if_t<!detail::is_basic_json<ValueType>::value && detail::has_from_json<basic_json_t, ValueType>::value, int> = 0>
+ ValueType& get_to(ValueType& v) const noexcept(noexcept(JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), v)))
{
JSONSerializer<ValueType>::from_json(*this, v);
return v;
@@ -1832,27 +1780,20 @@
// specialization to allow calling get_to with a basic_json value
// see https://github.com/nlohmann/json/issues/2175
- template<typename ValueType,
- detail::enable_if_t<
- detail::is_basic_json<ValueType>::value,
- int> = 0>
+ template<typename ValueType, detail::enable_if_t<detail::is_basic_json<ValueType>::value, int> = 0>
ValueType& get_to(ValueType& v) const
{
v = *this;
return v;
}
- template<
- typename T,
- std::size_t N,
- typename Array = T (&)[N], // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
- detail::enable_if_t<
- detail::has_from_json<basic_json_t, Array>::value,
- int> = 0>
+ template<typename T,
+ std::size_t N,
+ typename Array = T (&)[N], // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
+ detail::enable_if_t<detail::has_from_json<basic_json_t, Array>::value,
+ int> = 0>
Array get_to(T (&v)[N]) const // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
- noexcept(noexcept(JSONSerializer<Array>::from_json(
- std::declval<const basic_json_t&>(),
- v)))
+ noexcept(noexcept(JSONSerializer<Array>::from_json(std::declval<const basic_json_t&>(), v)))
{
JSONSerializer<Array>::from_json(*this, v);
return v;
@@ -1869,7 +1810,9 @@
/// @brief get a reference value (implicit)
/// @sa https://json.nlohmann.me/api/basic_json/get_ref/
- template<typename ReferenceType, typename std::enable_if<std::is_reference<ReferenceType>::value && std::is_const<typename std::remove_reference<ReferenceType>::type>::value, int>::type = 0>
+ template<typename ReferenceType,
+ typename std::enable_if<std::is_reference<ReferenceType>::value && std::is_const<typename std::remove_reference<ReferenceType>::type>::value,
+ int>::type = 0>
ReferenceType get_ref() const
{
// delegate call to get_ref_impl
@@ -1905,15 +1848,21 @@
@since version 1.0.0
*/
- template<typename ValueType, typename std::enable_if<detail::conjunction<detail::negation<std::is_pointer<ValueType>>, detail::negation<std::is_same<ValueType, std::nullptr_t>>, detail::negation<std::is_same<ValueType, detail::json_ref<basic_json>>>, detail::negation<std::is_same<ValueType, typename string_t::value_type>>, detail::negation<detail::is_basic_json<ValueType>>, detail::negation<std::is_same<ValueType, std::initializer_list<typename string_t::value_type>>>,
+ template<typename ValueType,
+ typename std::enable_if<detail::conjunction<detail::negation<std::is_pointer<ValueType>>,
+ detail::negation<std::is_same<ValueType, std::nullptr_t>>,
+ detail::negation<std::is_same<ValueType, detail::json_ref<basic_json>>>,
+ detail::negation<std::is_same<ValueType, typename string_t::value_type>>,
+ detail::negation<detail::is_basic_json<ValueType>>,
+ detail::negation<std::is_same<ValueType, std::initializer_list<typename string_t::value_type>>>,
#if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER >= 1910 && _MSC_VER <= 1914))
- detail::negation<std::is_same<ValueType, std::string_view>>,
+ detail::negation<std::is_same<ValueType, std::string_view>>,
#endif
#if defined(JSON_HAS_CPP_17) && JSON_HAS_STATIC_RTTI
- detail::negation<std::is_same<ValueType, std::any>>,
+ detail::negation<std::is_same<ValueType, std::any>>,
#endif
- detail::is_detected_lazy<detail::get_template_function, const basic_json_t&, ValueType>>::value,
- int>::type = 0>
+ detail::is_detected_lazy<detail::get_template_function, const basic_json_t&, ValueType>>::value,
+ int>::type = 0>
JSON_EXPLICIT operator ValueType() const
{
// delegate the call to get<>() const
@@ -2108,7 +2057,8 @@
else
{
// set parent for values added above
- set_parents(begin() + static_cast<typename iterator::difference_type>(old_size), static_cast<typename iterator::difference_type>(idx + 1 - old_size));
+ set_parents(begin() + static_cast<typename iterator::difference_type>(old_size),
+ static_cast<typename iterator::difference_type>(idx + 1 - old_size));
}
#endif
assert_invariant();
@@ -2225,21 +2175,18 @@
private:
template<typename KeyType>
- using is_comparable_with_object_key = detail::is_comparable<
- object_comparator_t,
- const typename object_t::key_type&,
- KeyType>;
+ using is_comparable_with_object_key = detail::is_comparable<object_comparator_t, const typename object_t::key_type&, KeyType>;
template<typename ValueType>
- using value_return_type = std::conditional<
- detail::is_c_string_uncvref<ValueType>::value,
- string_t,
- typename std::decay<ValueType>::type>;
+ using value_return_type = std::conditional<detail::is_c_string_uncvref<ValueType>::value, string_t, typename std::decay<ValueType>::type>;
public:
/// @brief access specified object element with default value
/// @sa https://json.nlohmann.me/api/basic_json/value/
- template<class ValueType, detail::enable_if_t<!detail::is_transparent<object_comparator_t>::value && detail::is_getable<basic_json_t, ValueType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
+ template<class ValueType,
+ detail::enable_if_t<!detail::is_transparent<object_comparator_t>::value && detail::is_getable<basic_json_t, ValueType>::value &&
+ !std::is_same<value_t, detail::uncvref_t<ValueType>>::value,
+ int> = 0>
ValueType value(const typename object_t::key_type& key, const ValueType& default_value) const
{
// value only works for objects
@@ -2260,7 +2207,11 @@
/// @brief access specified object element with default value
/// @sa https://json.nlohmann.me/api/basic_json/value/
- template<class ValueType, class ReturnType = typename value_return_type<ValueType>::type, detail::enable_if_t<!detail::is_transparent<object_comparator_t>::value && detail::is_getable<basic_json_t, ReturnType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
+ template<class ValueType,
+ class ReturnType = typename value_return_type<ValueType>::type,
+ detail::enable_if_t<!detail::is_transparent<object_comparator_t>::value && detail::is_getable<basic_json_t, ReturnType>::value &&
+ !std::is_same<value_t, detail::uncvref_t<ValueType>>::value,
+ int> = 0>
ReturnType value(const typename object_t::key_type& key, ValueType&& default_value) const
{
// value only works for objects
@@ -2281,7 +2232,12 @@
/// @brief access specified object element with default value
/// @sa https://json.nlohmann.me/api/basic_json/value/
- template<class ValueType, class KeyType, detail::enable_if_t<detail::is_transparent<object_comparator_t>::value && !detail::is_json_pointer<KeyType>::value && is_comparable_with_object_key<KeyType>::value && detail::is_getable<basic_json_t, ValueType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
+ template<class ValueType,
+ class KeyType,
+ detail::enable_if_t<detail::is_transparent<object_comparator_t>::value && !detail::is_json_pointer<KeyType>::value &&
+ is_comparable_with_object_key<KeyType>::value && detail::is_getable<basic_json_t, ValueType>::value &&
+ !std::is_same<value_t, detail::uncvref_t<ValueType>>::value,
+ int> = 0>
ValueType value(KeyType&& key, const ValueType& default_value) const
{
// value only works for objects
@@ -2302,7 +2258,13 @@
/// @brief access specified object element via JSON Pointer with default value
/// @sa https://json.nlohmann.me/api/basic_json/value/
- template<class ValueType, class KeyType, class ReturnType = typename value_return_type<ValueType>::type, detail::enable_if_t<detail::is_transparent<object_comparator_t>::value && !detail::is_json_pointer<KeyType>::value && is_comparable_with_object_key<KeyType>::value && detail::is_getable<basic_json_t, ReturnType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
+ template<class ValueType,
+ class KeyType,
+ class ReturnType = typename value_return_type<ValueType>::type,
+ detail::enable_if_t<detail::is_transparent<object_comparator_t>::value && !detail::is_json_pointer<KeyType>::value &&
+ is_comparable_with_object_key<KeyType>::value && detail::is_getable<basic_json_t, ReturnType>::value &&
+ !std::is_same<value_t, detail::uncvref_t<ValueType>>::value,
+ int> = 0>
ReturnType value(KeyType&& key, ValueType&& default_value) const
{
// value only works for objects
@@ -2323,7 +2285,8 @@
/// @brief access specified object element via JSON Pointer with default value
/// @sa https://json.nlohmann.me/api/basic_json/value/
- template<class ValueType, detail::enable_if_t<detail::is_getable<basic_json_t, ValueType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
+ template<class ValueType,
+ detail::enable_if_t<detail::is_getable<basic_json_t, ValueType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
ValueType value(const json_pointer& ptr, const ValueType& default_value) const
{
// value only works for objects
@@ -2345,7 +2308,9 @@
/// @brief access specified object element via JSON Pointer with default value
/// @sa https://json.nlohmann.me/api/basic_json/value/
- template<class ValueType, class ReturnType = typename value_return_type<ValueType>::type, detail::enable_if_t<detail::is_getable<basic_json_t, ReturnType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
+ template<class ValueType,
+ class ReturnType = typename value_return_type<ValueType>::type,
+ detail::enable_if_t<detail::is_getable<basic_json_t, ReturnType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
ReturnType value(const json_pointer& ptr, ValueType&& default_value) const
{
// value only works for objects
@@ -2365,14 +2330,23 @@
JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this));
}
- template<class ValueType, class BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value && detail::is_getable<basic_json_t, ValueType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
+ template<class ValueType,
+ class BasicJsonType,
+ detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value && detail::is_getable<basic_json_t, ValueType>::value &&
+ !std::is_same<value_t, detail::uncvref_t<ValueType>>::value,
+ int> = 0>
JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
ValueType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, const ValueType& default_value) const
{
return value(ptr.convert(), default_value);
}
- template<class ValueType, class BasicJsonType, class ReturnType = typename value_return_type<ValueType>::type, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value && detail::is_getable<basic_json_t, ReturnType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
+ template<class ValueType,
+ class BasicJsonType,
+ class ReturnType = typename value_return_type<ValueType>::type,
+ detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value && detail::is_getable<basic_json_t, ReturnType>::value &&
+ !std::is_same<value_t, detail::uncvref_t<ValueType>>::value,
+ int> = 0>
JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
ReturnType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, ValueType&& default_value) const
{
@@ -2413,7 +2387,10 @@
/// @brief remove element given an iterator
/// @sa https://json.nlohmann.me/api/basic_json/erase/
- template<class IteratorType, detail::enable_if_t<std::is_same<IteratorType, typename basic_json_t::iterator>::value || std::is_same<IteratorType, typename basic_json_t::const_iterator>::value, int> = 0>
+ template<class IteratorType,
+ detail::enable_if_t<std::is_same<IteratorType, typename basic_json_t::iterator>::value ||
+ std::is_same<IteratorType, typename basic_json_t::const_iterator>::value,
+ int> = 0>
IteratorType erase(IteratorType pos)
{
// make sure iterator fits the current value
@@ -2481,7 +2458,10 @@
/// @brief remove elements given an iterator range
/// @sa https://json.nlohmann.me/api/basic_json/erase/
- template<class IteratorType, detail::enable_if_t<std::is_same<IteratorType, typename basic_json_t::iterator>::value || std::is_same<IteratorType, typename basic_json_t::const_iterator>::value, int> = 0>
+ template<class IteratorType,
+ detail::enable_if_t<std::is_same<IteratorType, typename basic_json_t::iterator>::value ||
+ std::is_same<IteratorType, typename basic_json_t::const_iterator>::value,
+ int> = 0>
IteratorType erase(IteratorType first, IteratorType last)
{
// make sure iterator fits the current value
@@ -2528,15 +2508,13 @@
case value_t::object:
{
- result.m_it.object_iterator = m_data.m_value.object->erase(first.m_it.object_iterator,
- last.m_it.object_iterator);
+ result.m_it.object_iterator = m_data.m_value.object->erase(first.m_it.object_iterator, last.m_it.object_iterator);
break;
}
case value_t::array:
{
- result.m_it.array_iterator = m_data.m_value.array->erase(first.m_it.array_iterator,
- last.m_it.array_iterator);
+ result.m_it.array_iterator = m_data.m_value.array->erase(first.m_it.array_iterator, last.m_it.array_iterator);
break;
}
@@ -3163,9 +3141,7 @@
if (is_object() && init.size() == 2 && (*init.begin())->is_string())
{
basic_json&& key = init.begin()->moved_or_copied();
- push_back(typename object_t::value_type(
- std::move(key.get_ref<string_t&>()),
- (init.begin() + 1)->moved_or_copied()));
+ push_back(typename object_t::value_type(std::move(key.get_ref<string_t&>()), (init.begin() + 1)->moved_or_copied()));
}
else
{
@@ -3438,8 +3414,7 @@
/// @brief exchanges the values
/// @sa https://json.nlohmann.me/api/basic_json/swap/
void swap(reference other) noexcept(
- std::is_nothrow_move_constructible<value_t>::value &&
- std::is_nothrow_move_assignable<value_t>::value &&
+ std::is_nothrow_move_constructible<value_t>::value && std::is_nothrow_move_assignable<value_t>::value &&
std::is_nothrow_move_constructible<json_value>::value && // NOLINT(cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
std::is_nothrow_move_assignable<json_value>::value)
{
@@ -3454,8 +3429,7 @@
/// @brief exchanges the values
/// @sa https://json.nlohmann.me/api/basic_json/swap/
friend void swap(reference left, reference right) noexcept(
- std::is_nothrow_move_constructible<value_t>::value &&
- std::is_nothrow_move_assignable<value_t>::value &&
+ std::is_nothrow_move_constructible<value_t>::value && std::is_nothrow_move_assignable<value_t>::value &&
std::is_nothrow_move_constructible<json_value>::value && // NOLINT(cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
std::is_nothrow_move_assignable<json_value>::value)
{
@@ -3553,75 +3527,75 @@
// note parentheses around operands are necessary; see
// https://github.com/nlohmann/json/issues/1530
-#define JSON_IMPLEMENT_OPERATOR(op, null_result, unordered_result, default_result) \
- const auto lhs_type = lhs.type(); \
- const auto rhs_type = rhs.type(); \
- \
- if (lhs_type == rhs_type) /* NOLINT(readability/braces) */ \
- { \
- switch (lhs_type) \
- { \
- case value_t::array: \
- return (*lhs.m_data.m_value.array)op(*rhs.m_data.m_value.array); \
- \
- case value_t::object: \
- return (*lhs.m_data.m_value.object)op(*rhs.m_data.m_value.object); \
- \
- case value_t::null: \
- return (null_result); \
- \
- case value_t::string: \
- return (*lhs.m_data.m_value.string)op(*rhs.m_data.m_value.string); \
- \
- case value_t::boolean: \
- return (lhs.m_data.m_value.boolean)op(rhs.m_data.m_value.boolean); \
- \
- case value_t::number_integer: \
- return (lhs.m_data.m_value.number_integer)op(rhs.m_data.m_value.number_integer); \
- \
- case value_t::number_unsigned: \
- return (lhs.m_data.m_value.number_unsigned)op(rhs.m_data.m_value.number_unsigned); \
- \
- case value_t::number_float: \
- return (lhs.m_data.m_value.number_float)op(rhs.m_data.m_value.number_float); \
- \
- case value_t::binary: \
- return (*lhs.m_data.m_value.binary)op(*rhs.m_data.m_value.binary); \
- \
- case value_t::discarded: \
- default: \
- return (unordered_result); \
- } \
- } \
- else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) \
- { \
- return static_cast<number_float_t>(lhs.m_data.m_value.number_integer) op rhs.m_data.m_value.number_float; \
- } \
- else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) \
- { \
- return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_integer); \
- } \
- else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) \
- { \
- return static_cast<number_float_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_float; \
- } \
- else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) \
- { \
- return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_unsigned); \
- } \
- else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) \
- { \
- return static_cast<number_integer_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_integer; \
- } \
- else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) \
- { \
- return lhs.m_data.m_value.number_integer op static_cast<number_integer_t>(rhs.m_data.m_value.number_unsigned); \
- } \
- else if (compares_unordered(lhs, rhs)) \
- { \
- return (unordered_result); \
- } \
- \
+#define JSON_IMPLEMENT_OPERATOR(op, null_result, unordered_result, default_result) \
+ const auto lhs_type = lhs.type(); \
+ const auto rhs_type = rhs.type(); \
+ \
+ if (lhs_type == rhs_type) /* NOLINT(readability/braces) */ \
+ { \
+ switch (lhs_type) \
+ { \
+ case value_t::array: \
+ return (*lhs.m_data.m_value.array)op(*rhs.m_data.m_value.array); \
+ \
+ case value_t::object: \
+ return (*lhs.m_data.m_value.object)op(*rhs.m_data.m_value.object); \
+ \
+ case value_t::null: \
+ return (null_result); \
+ \
+ case value_t::string: \
+ return (*lhs.m_data.m_value.string)op(*rhs.m_data.m_value.string); \
+ \
+ case value_t::boolean: \
+ return (lhs.m_data.m_value.boolean)op(rhs.m_data.m_value.boolean); \
+ \
+ case value_t::number_integer: \
+ return (lhs.m_data.m_value.number_integer)op(rhs.m_data.m_value.number_integer); \
+ \
+ case value_t::number_unsigned: \
+ return (lhs.m_data.m_value.number_unsigned)op(rhs.m_data.m_value.number_unsigned); \
+ \
+ case value_t::number_float: \
+ return (lhs.m_data.m_value.number_float)op(rhs.m_data.m_value.number_float); \
+ \
+ case value_t::binary: \
+ return (*lhs.m_data.m_value.binary)op(*rhs.m_data.m_value.binary); \
+ \
+ case value_t::discarded: \
+ default: \
+ return (unordered_result); \
+ } \
+ } \
+ else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) \
+ { \
+ return static_cast<number_float_t>(lhs.m_data.m_value.number_integer) op rhs.m_data.m_value.number_float; \
+ } \
+ else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) \
+ { \
+ return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_integer); \
+ } \
+ else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) \
+ { \
+ return static_cast<number_float_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_float; \
+ } \
+ else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) \
+ { \
+ return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_unsigned); \
+ } \
+ else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) \
+ { \
+ return static_cast<number_integer_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_integer; \
+ } \
+ else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) \
+ { \
+ return lhs.m_data.m_value.number_integer op static_cast<number_integer_t>(rhs.m_data.m_value.number_unsigned); \
+ } \
+ else if (compares_unordered(lhs, rhs)) \
+ { \
+ return (unordered_result); \
+ } \
+ \
return (default_result);
JSON_PRIVATE_UNLESS_TESTED :
@@ -3633,7 +3607,8 @@
static bool
compares_unordered(const_reference lhs, const_reference rhs, bool inverse = false) noexcept
{
- if ((lhs.is_number_float() && std::isnan(lhs.m_data.m_value.number_float) && rhs.is_number()) || (rhs.is_number_float() && std::isnan(rhs.m_data.m_value.number_float) && lhs.is_number()))
+ if ((lhs.is_number_float() && std::isnan(lhs.m_data.m_value.number_float) && rhs.is_number()) ||
+ (rhs.is_number_float() && std::isnan(rhs.m_data.m_value.number_float) && lhs.is_number()))
{
return true;
}
@@ -3975,10 +3950,8 @@
/// @brief deserialize from a compatible input
/// @sa https://json.nlohmann.me/api/basic_json/parse/
template<typename InputType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json parse(InputType&& i,
- const parser_callback_t cb = nullptr,
- const bool allow_exceptions = true,
- const bool ignore_comments = false)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json
+ parse(InputType&& i, const parser_callback_t cb = nullptr, const bool allow_exceptions = true, const bool ignore_comments = false)
{
basic_json result;
parser(detail::input_adapter(std::forward<InputType>(i)), cb, allow_exceptions, ignore_comments).parse(true, result);
@@ -3988,11 +3961,8 @@
/// @brief deserialize from a pair of character iterators
/// @sa https://json.nlohmann.me/api/basic_json/parse/
template<typename IteratorType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json parse(IteratorType first,
- IteratorType last,
- const parser_callback_t cb = nullptr,
- const bool allow_exceptions = true,
- const bool ignore_comments = false)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json
+ parse(IteratorType first, IteratorType last, const parser_callback_t cb = nullptr, const bool allow_exceptions = true, const bool ignore_comments = false)
{
basic_json result;
parser(detail::input_adapter(std::move(first), std::move(last)), cb, allow_exceptions, ignore_comments).parse(true, result);
@@ -4001,10 +3971,8 @@
JSON_HEDLEY_WARN_UNUSED_RESULT
JSON_HEDLEY_DEPRECATED_FOR(3.8.0, parse(ptr, ptr + len))
- static basic_json parse(detail::span_input_adapter&& i,
- const parser_callback_t cb = nullptr,
- const bool allow_exceptions = true,
- const bool ignore_comments = false)
+ static basic_json
+ parse(detail::span_input_adapter&& i, const parser_callback_t cb = nullptr, const bool allow_exceptions = true, const bool ignore_comments = false)
{
basic_json result;
parser(i.get(), cb, allow_exceptions, ignore_comments).parse(true, result);
@@ -4014,8 +3982,7 @@
/// @brief check if the input is valid JSON
/// @sa https://json.nlohmann.me/api/basic_json/accept/
template<typename InputType>
- static bool accept(InputType&& i,
- const bool ignore_comments = false)
+ static bool accept(InputType&& i, const bool ignore_comments = false)
{
return parser(detail::input_adapter(std::forward<InputType>(i)), nullptr, false, ignore_comments).accept(true);
}
@@ -4030,8 +3997,7 @@
JSON_HEDLEY_WARN_UNUSED_RESULT
JSON_HEDLEY_DEPRECATED_FOR(3.8.0, accept(ptr, ptr + len))
- static bool accept(detail::span_input_adapter&& i,
- const bool ignore_comments = false)
+ static bool accept(detail::span_input_adapter&& i, const bool ignore_comments = false)
{
return parser(i.get(), nullptr, false, ignore_comments).accept(true);
}
@@ -4043,21 +4009,24 @@
static bool sax_parse(InputType&& i, SAX* sax, input_format_t format = input_format_t::json, const bool strict = true, const bool ignore_comments = false)
{
auto ia = detail::input_adapter(std::forward<InputType>(i));
- return format == input_format_t::json
- ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)
- : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);
+ return format == input_format_t::json ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)
+ : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);
}
/// @brief generate SAX events
/// @sa https://json.nlohmann.me/api/basic_json/sax_parse/
template<class IteratorType, class SAX>
JSON_HEDLEY_NON_NULL(3)
- static bool sax_parse(IteratorType first, IteratorType last, SAX* sax, input_format_t format = input_format_t::json, const bool strict = true, const bool ignore_comments = false)
+ static bool sax_parse(IteratorType first,
+ IteratorType last,
+ SAX* sax,
+ input_format_t format = input_format_t::json,
+ const bool strict = true,
+ const bool ignore_comments = false)
{
auto ia = detail::input_adapter(std::move(first), std::move(last));
- return format == input_format_t::json
- ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)
- : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);
+ return format == input_format_t::json ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)
+ : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);
}
/// @brief generate SAX events
@@ -4067,7 +4036,11 @@
/// sax_parse(ptr, ptr + len) instead.
template<typename SAX>
JSON_HEDLEY_DEPRECATED_FOR(3.8.0, sax_parse(ptr, ptr + len, ...))
- JSON_HEDLEY_NON_NULL(2) static bool sax_parse(detail::span_input_adapter&& i, SAX* sax, input_format_t format = input_format_t::json, const bool strict = true, const bool ignore_comments = false)
+ JSON_HEDLEY_NON_NULL(2) static bool sax_parse(detail::span_input_adapter&& i,
+ SAX* sax,
+ input_format_t format = input_format_t::json,
+ const bool strict = true,
+ const bool ignore_comments = false)
{
auto ia = i.get();
return format == input_format_t::json
@@ -4148,8 +4121,7 @@
data(const value_t v)
: m_type(v)
, m_value(v)
- {
- }
+ {}
data(size_type cnt, const basic_json& val)
: m_type(value_t::array)
@@ -4232,9 +4204,7 @@
/// @brief create a UBJSON serialization of a given JSON value
/// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/
- static std::vector<std::uint8_t> to_ubjson(const basic_json& j,
- const bool use_size = false,
- const bool use_type = false)
+ static std::vector<std::uint8_t> to_ubjson(const basic_json& j, const bool use_size = false, const bool use_type = false)
{
std::vector<std::uint8_t> result;
to_ubjson(j, result, use_size, use_type);
@@ -4257,9 +4227,7 @@
/// @brief create a BJData serialization of a given JSON value
/// @sa https://json.nlohmann.me/api/basic_json/to_bjdata/
- static std::vector<std::uint8_t> to_bjdata(const basic_json& j,
- const bool use_size = false,
- const bool use_type = false)
+ static std::vector<std::uint8_t> to_bjdata(const basic_json& j, const bool use_size = false, const bool use_type = false)
{
std::vector<std::uint8_t> result;
to_bjdata(j, result, use_size, use_type);
@@ -4306,10 +4274,8 @@
/// @brief create a JSON value from an input in CBOR format
/// @sa https://json.nlohmann.me/api/basic_json/from_cbor/
template<typename InputType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_cbor(InputType&& i,
- const bool strict = true,
- const bool allow_exceptions = true,
- const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json
+ from_cbor(InputType&& i, const bool strict = true, const bool allow_exceptions = true, const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -4321,7 +4287,11 @@
/// @brief create a JSON value from an input in CBOR format
/// @sa https://json.nlohmann.me/api/basic_json/from_cbor/
template<typename IteratorType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_cbor(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true, const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_cbor(IteratorType first,
+ IteratorType last,
+ const bool strict = true,
+ const bool allow_exceptions = true,
+ const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -4331,8 +4301,12 @@
}
template<typename T>
- JSON_HEDLEY_WARN_UNUSED_RESULT
- JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) static basic_json from_cbor(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true, const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
+ JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) static basic_json
+ from_cbor(const T* ptr,
+ std::size_t len,
+ const bool strict = true,
+ const bool allow_exceptions = true,
+ const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
{
return from_cbor(ptr, ptr + len, strict, allow_exceptions, tag_handler);
}
@@ -4355,9 +4329,7 @@
/// @brief create a JSON value from an input in MessagePack format
/// @sa https://json.nlohmann.me/api/basic_json/from_msgpack/
template<typename InputType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_msgpack(InputType&& i,
- const bool strict = true,
- const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_msgpack(InputType&& i, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -4369,7 +4341,8 @@
/// @brief create a JSON value from an input in MessagePack format
/// @sa https://json.nlohmann.me/api/basic_json/from_msgpack/
template<typename IteratorType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_msgpack(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json
+ from_msgpack(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -4379,17 +4352,15 @@
}
template<typename T>
- JSON_HEDLEY_WARN_UNUSED_RESULT
- JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) static basic_json from_msgpack(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) static basic_json
+ from_msgpack(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true)
{
return from_msgpack(ptr, ptr + len, strict, allow_exceptions);
}
JSON_HEDLEY_WARN_UNUSED_RESULT
JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len))
- static basic_json from_msgpack(detail::span_input_adapter&& i,
- const bool strict = true,
- const bool allow_exceptions = true)
+ static basic_json from_msgpack(detail::span_input_adapter&& i, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -4402,9 +4373,7 @@
/// @brief create a JSON value from an input in UBJSON format
/// @sa https://json.nlohmann.me/api/basic_json/from_ubjson/
template<typename InputType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_ubjson(InputType&& i,
- const bool strict = true,
- const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_ubjson(InputType&& i, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -4416,7 +4385,8 @@
/// @brief create a JSON value from an input in UBJSON format
/// @sa https://json.nlohmann.me/api/basic_json/from_ubjson/
template<typename IteratorType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_ubjson(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json
+ from_ubjson(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -4426,17 +4396,15 @@
}
template<typename T>
- JSON_HEDLEY_WARN_UNUSED_RESULT
- JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) static basic_json from_ubjson(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) static basic_json
+ from_ubjson(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true)
{
return from_ubjson(ptr, ptr + len, strict, allow_exceptions);
}
JSON_HEDLEY_WARN_UNUSED_RESULT
JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len))
- static basic_json from_ubjson(detail::span_input_adapter&& i,
- const bool strict = true,
- const bool allow_exceptions = true)
+ static basic_json from_ubjson(detail::span_input_adapter&& i, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -4449,9 +4417,7 @@
/// @brief create a JSON value from an input in BJData format
/// @sa https://json.nlohmann.me/api/basic_json/from_bjdata/
template<typename InputType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_bjdata(InputType&& i,
- const bool strict = true,
- const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_bjdata(InputType&& i, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -4463,7 +4429,8 @@
/// @brief create a JSON value from an input in BJData format
/// @sa https://json.nlohmann.me/api/basic_json/from_bjdata/
template<typename IteratorType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_bjdata(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json
+ from_bjdata(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -4475,9 +4442,7 @@
/// @brief create a JSON value from an input in BSON format
/// @sa https://json.nlohmann.me/api/basic_json/from_bson/
template<typename InputType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_bson(InputType&& i,
- const bool strict = true,
- const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_bson(InputType&& i, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -4489,7 +4454,8 @@
/// @brief create a JSON value from an input in BSON format
/// @sa https://json.nlohmann.me/api/basic_json/from_bson/
template<typename IteratorType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_bson(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json
+ from_bson(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -4499,17 +4465,15 @@
}
template<typename T>
- JSON_HEDLEY_WARN_UNUSED_RESULT
- JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) static basic_json from_bson(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) static basic_json
+ from_bson(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true)
{
return from_bson(ptr, ptr + len, strict, allow_exceptions);
}
JSON_HEDLEY_WARN_UNUSED_RESULT
JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len))
- static basic_json from_bson(detail::span_input_adapter&& i,
- const bool strict = true,
- const bool allow_exceptions = true)
+ static basic_json from_bson(detail::span_input_adapter&& i, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -4759,9 +4723,7 @@
for (const auto& val : json_patch)
{
// wrapper to get a value for an operation
- const auto get_value = [&val](const std::string& op,
- const std::string& member,
- bool string_type) -> basic_json& {
+ const auto get_value = [&val](const std::string& op, const std::string& member, bool string_type) -> basic_json& {
// find value
auto it = val.m_data.m_value.object->find(member);
@@ -4910,8 +4872,7 @@
if (source.type() != target.type())
{
// different types: replace value
- result.push_back(
- {{"op", "replace"}, {"path", path}, {"value", target}});
+ result.push_back({{"op", "replace"}, {"path", path}, {"value", target}});
return result;
}
@@ -4945,10 +4906,7 @@
// add other remaining elements
while (i < target.size())
{
- result.push_back(
- {{"op", "add"},
- {"path", detail::concat(path, "/-")},
- {"value", target[i]}});
+ result.push_back({{"op", "add"}, {"path", detail::concat(path, "/-")}, {"value", target[i]}});
++i;
}
@@ -4972,8 +4930,7 @@
else
{
// found a key that is not in o -> remove it
- result.push_back(object(
- {{"op", "remove"}, {"path", path_key}}));
+ result.push_back(object({{"op", "remove"}, {"path", path_key}}));
}
}
@@ -4984,8 +4941,7 @@
{
// found a key that is not in this -> add it
const auto path_key = detail::concat(path, '/', detail::escape(it.key()));
- result.push_back(
- {{"op", "add"}, {"path", path_key}, {"value", it.value()}});
+ result.push_back({{"op", "add"}, {"path", path_key}, {"value", it.value()}});
}
}
@@ -5003,8 +4959,7 @@
default:
{
// both primitive type: replace value
- result.push_back(
- {{"op", "replace"}, {"path", path}, {"value", target}});
+ result.push_back({{"op", "replace"}, {"path", path}, {"value", target}});
break;
}
}
@@ -5059,8 +5014,10 @@
return j.dump();
}
-inline namespace literals {
-inline namespace json_literals {
+inline namespace literals
+{
+inline namespace json_literals
+{
/// @brief user-defined string literal for JSON values
/// @sa https://json.nlohmann.me/api/basic_json/operator_literal_json/
@@ -5116,8 +5073,7 @@
@brief compare two value_t enum values
@since version 3.0.0
*/
- bool operator()(::nlohmann::detail::value_t lhs,
- ::nlohmann::detail::value_t rhs) const noexcept
+ bool operator()(::nlohmann::detail::value_t lhs, ::nlohmann::detail::value_t rhs) const noexcept
{
#if JSON_HAS_THREE_WAY_COMPARISON
return std::is_lt(lhs <=> rhs); // *NOPAD*
@@ -5133,8 +5089,10 @@
/// @brief exchanges the values of two JSON objects
/// @sa https://json.nlohmann.me/api/basic_json/std_swap/
NLOHMANN_BASIC_JSON_TPL_DECLARATION
-inline void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL& j1, nlohmann::NLOHMANN_BASIC_JSON_TPL& j2) noexcept( // NOLINT(readability-inconsistent-declaration-parameter-name, cert-dcl58-cpp)
- is_nothrow_move_constructible<nlohmann::NLOHMANN_BASIC_JSON_TPL>::value && // NOLINT(misc-redundant-expression,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
+inline void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL& j1,
+ nlohmann::NLOHMANN_BASIC_JSON_TPL& j2) noexcept( // NOLINT(readability-inconsistent-declaration-parameter-name, cert-dcl58-cpp)
+ is_nothrow_move_constructible<
+ nlohmann::NLOHMANN_BASIC_JSON_TPL>::value && // NOLINT(misc-redundant-expression,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
is_nothrow_move_assignable<nlohmann::NLOHMANN_BASIC_JSON_TPL>::value)
{
j1.swap(j2);
diff --git a/include/nlohmann/json_fwd.hpp b/include/nlohmann/json_fwd.hpp
index 4e57a91..66d7e8c 100644
--- a/include/nlohmann/json_fwd.hpp
+++ b/include/nlohmann/json_fwd.hpp
@@ -36,8 +36,7 @@
/// a class to store JSON values
/// @sa https://json.nlohmann.me/api/basic_json/
-template<template<typename U, typename V, typename... Args> class ObjectType =
- std::map,
+template<template<typename U, typename V, typename... Args> class ObjectType = std::map,
template<typename U, typename... Args> class ArrayType = std::vector,
class StringType = std::string,
class BooleanType = bool,
@@ -45,8 +44,7 @@
class NumberUnsignedType = std::uint64_t,
class NumberFloatType = double,
template<typename U> class AllocatorType = std::allocator,
- template<typename T, typename SFINAE = void> class JSONSerializer =
- adl_serializer,
+ template<typename T, typename SFINAE = void> class JSONSerializer = adl_serializer,
class BinaryType = std::vector<std::uint8_t>, // cppcheck-suppress syntaxError
class CustomBaseClass = void>
class basic_json;
diff --git a/include/nlohmann/ordered_map.hpp b/include/nlohmann/ordered_map.hpp
index 0f73460..3cc4e97 100644
--- a/include/nlohmann/ordered_map.hpp
+++ b/include/nlohmann/ordered_map.hpp
@@ -337,8 +337,8 @@
}
template<typename InputIt>
- using require_input_iter = typename std::enable_if<std::is_convertible<typename std::iterator_traits<InputIt>::iterator_category,
- std::input_iterator_tag>::value>::type;
+ using require_input_iter =
+ typename std::enable_if<std::is_convertible<typename std::iterator_traits<InputIt>::iterator_category, std::input_iterator_tag>::value>::type;
template<typename InputIt, typename = require_input_iter<InputIt>>
void insert(InputIt first, InputIt last)
diff --git a/include/nlohmann/thirdparty/hedley/hedley.hpp b/include/nlohmann/thirdparty/hedley/hedley.hpp
index 3fa94ad..17c8669 100644
--- a/include/nlohmann/thirdparty/hedley/hedley.hpp
+++ b/include/nlohmann/thirdparty/hedley/hedley.hpp
@@ -91,7 +91,8 @@
#undef JSON_HEDLEY_MSVC_VERSION
#endif
#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL)
- #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100)
+ #define JSON_HEDLEY_MSVC_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100)
#elif defined(_MSC_FULL_VER) && !defined(__ICL)
#define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10)
#elif defined(_MSC_VER) && !defined(__ICL)
@@ -165,11 +166,17 @@
#undef JSON_HEDLEY_SUNPRO_VERSION
#endif
#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)
- #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10)
+ #define JSON_HEDLEY_SUNPRO_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), \
+ (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), \
+ (__SUNPRO_C & 0xf) * 10)
#elif defined(__SUNPRO_C)
#define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf)
#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)
- #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10)
+ #define JSON_HEDLEY_SUNPRO_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), \
+ (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), \
+ (__SUNPRO_CC & 0xf) * 10)
#elif defined(__SUNPRO_CC)
#define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf)
#endif
@@ -203,9 +210,11 @@
#undef JSON_HEDLEY_ARM_VERSION
#endif
#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)
- #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100)
+ #define JSON_HEDLEY_ARM_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100)
#elif defined(__CC_ARM) && defined(__ARMCC_VERSION)
- #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100)
+ #define JSON_HEDLEY_ARM_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100)
#endif
#if defined(JSON_HEDLEY_ARM_VERSION_CHECK)
@@ -240,12 +249,10 @@
#if defined(JSON_HEDLEY_TI_VERSION)
#undef JSON_HEDLEY_TI_VERSION
#endif
- #if defined(__TI_COMPILER_VERSION__) && \
- (defined(__TMS470__) || defined(__TI_ARM__) || \
- defined(__MSP430__) || \
- defined(__TMS320C2000__))
+ #if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__) || defined(__MSP430__) || defined(__TMS320C2000__))
#if (__TI_COMPILER_VERSION__ >= 16000000)
- #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
+ #define JSON_HEDLEY_TI_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif
#endif
@@ -262,7 +269,8 @@
#undef JSON_HEDLEY_TI_CL2000_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__)
- #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
+ #define JSON_HEDLEY_TI_CL2000_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif
#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK)
@@ -278,7 +286,8 @@
#undef JSON_HEDLEY_TI_CL430_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__)
- #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
+ #define JSON_HEDLEY_TI_CL430_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif
#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK)
@@ -294,7 +303,8 @@
#undef JSON_HEDLEY_TI_ARMCL_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__))
- #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
+ #define JSON_HEDLEY_TI_ARMCL_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif
#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK)
@@ -310,7 +320,8 @@
#undef JSON_HEDLEY_TI_CL6X_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__)
- #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
+ #define JSON_HEDLEY_TI_CL6X_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif
#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK)
@@ -326,7 +337,8 @@
#undef JSON_HEDLEY_TI_CL7X_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__)
- #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
+ #define JSON_HEDLEY_TI_CL7X_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif
#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK)
@@ -342,7 +354,8 @@
#undef JSON_HEDLEY_TI_CLPRU_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__)
- #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
+ #define JSON_HEDLEY_TI_CLPRU_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif
#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK)
@@ -430,7 +443,8 @@
#undef JSON_HEDLEY_COMPCERT_VERSION
#endif
#if defined(__COMPCERT_VERSION__)
- #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100)
+ #define JSON_HEDLEY_COMPCERT_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100)
#endif
#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK)
@@ -477,20 +491,10 @@
#if defined(JSON_HEDLEY_GCC_VERSION)
#undef JSON_HEDLEY_GCC_VERSION
#endif
- #if defined(JSON_HEDLEY_GNUC_VERSION) && \
- !defined(__clang__) && \
- !defined(JSON_HEDLEY_INTEL_VERSION) && \
- !defined(JSON_HEDLEY_PGI_VERSION) && \
- !defined(JSON_HEDLEY_ARM_VERSION) && \
- !defined(JSON_HEDLEY_CRAY_VERSION) && \
- !defined(JSON_HEDLEY_TI_VERSION) && \
- !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \
- !defined(JSON_HEDLEY_TI_CL430_VERSION) && \
- !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \
- !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \
- !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \
- !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \
- !defined(__COMPCERT__) && \
+ #if defined(JSON_HEDLEY_GNUC_VERSION) && !defined(__clang__) && !defined(JSON_HEDLEY_INTEL_VERSION) && !defined(JSON_HEDLEY_PGI_VERSION) && \
+ !defined(JSON_HEDLEY_ARM_VERSION) && !defined(JSON_HEDLEY_CRAY_VERSION) && !defined(JSON_HEDLEY_TI_VERSION) && \
+ !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && !defined(JSON_HEDLEY_TI_CL430_VERSION) && !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \
+ !defined(JSON_HEDLEY_TI_CL6X_VERSION) && !defined(JSON_HEDLEY_TI_CL7X_VERSION) && !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && !defined(__COMPCERT__) && \
!defined(JSON_HEDLEY_MCST_LCC_VERSION)
#define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION
#endif
@@ -507,8 +511,7 @@
#if defined(JSON_HEDLEY_HAS_ATTRIBUTE)
#undef JSON_HEDLEY_HAS_ATTRIBUTE
#endif
- #if defined(__has_attribute) && \
- ((!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8, 5, 9)))
+ #if defined(__has_attribute) && ((!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8, 5, 9)))
#define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute)
#else
#define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0)
@@ -535,9 +538,7 @@
#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE)
#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE
#endif
- #if defined(__has_cpp_attribute) && \
- defined(__cplusplus) && \
- (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0))
+ #if defined(__has_cpp_attribute) && defined(__cplusplus) && (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0))
#define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute)
#else
#define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0)
@@ -548,9 +549,8 @@
#endif
#if !defined(__cplusplus) || !defined(__has_cpp_attribute)
#define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns, attribute) (0)
- #elif !defined(JSON_HEDLEY_PGI_VERSION) && \
- !defined(JSON_HEDLEY_IAR_VERSION) && \
- (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0)) && \
+ #elif !defined(JSON_HEDLEY_PGI_VERSION) && !defined(JSON_HEDLEY_IAR_VERSION) && \
+ (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0)) && \
(!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19, 20, 0))
#define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns, attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute)
#else
@@ -710,23 +710,12 @@
#define JSON_HEDLEY_GCC_HAS_WARNING(warning, major, minor, patch) JSON_HEDLEY_GCC_VERSION_CHECK(major, minor, patch)
#endif
- #if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
- defined(__clang__) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 0, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_IAR_VERSION_CHECK(8, 0, 0) || \
- JSON_HEDLEY_PGI_VERSION_CHECK(18, 4, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 7, 0) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(2, 0, 1) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 1, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 0, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_CRAY_VERSION_CHECK(5, 0, 0) || \
- JSON_HEDLEY_TINYC_VERSION_CHECK(0, 9, 17) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(8, 0, 0) || \
+ #if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || defined(__clang__) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 0, 0) || \
+ JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || JSON_HEDLEY_IAR_VERSION_CHECK(8, 0, 0) || JSON_HEDLEY_PGI_VERSION_CHECK(18, 4, 0) || \
+ JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 7, 0) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(2, 0, 1) || JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 1, 0) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 0, 0) || \
+ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || JSON_HEDLEY_CRAY_VERSION_CHECK(5, 0, 0) || \
+ JSON_HEDLEY_TINYC_VERSION_CHECK(0, 9, 17) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(8, 0, 0) || \
(JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) && defined(__C99_PRAGMA_OPERATOR))
#define JSON_HEDLEY_PRAGMA(value) _Pragma(#value)
#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15, 0, 0)
@@ -750,19 +739,14 @@
#elif JSON_HEDLEY_GCC_VERSION_CHECK(4, 6, 0)
#define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push")
#define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop")
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15, 0, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push))
#define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop))
#elif JSON_HEDLEY_ARM_VERSION_CHECK(5, 6, 0)
#define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push")
#define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop")
- #elif JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 4, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 1, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0)
+ #elif JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 4, 0) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 1, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0)
#define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push")
#define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop")
#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2, 90, 0)
@@ -782,27 +766,20 @@
#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat")
#if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions")
#if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions")
- #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
- _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
- _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \
- xpr \
- JSON_HEDLEY_DIAGNOSTIC_POP
+ #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
+ _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") xpr JSON_HEDLEY_DIAGNOSTIC_POP
#else
- #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
- _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
- xpr \
- JSON_HEDLEY_DIAGNOSTIC_POP
+ #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
+ xpr JSON_HEDLEY_DIAGNOSTIC_POP
#endif
#else
- #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
- xpr \
- JSON_HEDLEY_DIAGNOSTIC_POP
+ #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") xpr JSON_HEDLEY_DIAGNOSTIC_POP
#endif
#endif
#endif
@@ -815,14 +792,13 @@
#endif
#if defined(__cplusplus)
#define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast<T>(expr))
- #elif JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 6, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
- #define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__({ \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL((T)(expr)); \
- JSON_HEDLEY_DIAGNOSTIC_POP \
- }))
+ #elif JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || JSON_HEDLEY_GCC_VERSION_CHECK(4, 6, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
+ #define JSON_HEDLEY_CONST_CAST(T, expr) \
+ (__extension__({ \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL((T)(expr)); \
+ JSON_HEDLEY_DIAGNOSTIC_POP \
+ }))
#else
#define JSON_HEDLEY_CONST_CAST(T, expr) ((T)(expr))
#endif
@@ -850,15 +826,13 @@
#endif
#if defined(__cplusplus)
#if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast")
- #define JSON_HEDLEY_CPP_CAST(T, expr) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- _Pragma("clang diagnostic ignored \"-Wold-style-cast\"")((T)(expr)) \
- JSON_HEDLEY_DIAGNOSTIC_POP
+ #define JSON_HEDLEY_CPP_CAST(T, expr) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ _Pragma("clang diagnostic ignored \"-Wold-style-cast\"")((T)(expr)) JSON_HEDLEY_DIAGNOSTIC_POP
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8, 3, 0)
- #define JSON_HEDLEY_CPP_CAST(T, expr) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- _Pragma("diag_suppress=Pe137") \
- JSON_HEDLEY_DIAGNOSTIC_POP
+ #define JSON_HEDLEY_CPP_CAST(T, expr) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ _Pragma("diag_suppress=Pe137") JSON_HEDLEY_DIAGNOSTIC_POP
#else
#define JSON_HEDLEY_CPP_CAST(T, expr) ((T)(expr))
#endif
@@ -885,17 +859,11 @@
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable : 4996))
#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444")
- #elif JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0)
+ #elif JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0)
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718")
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 13, 0) && !defined(__cplusplus)
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)")
@@ -924,9 +892,7 @@
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15, 0, 0)
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable : 4068))
- #elif JSON_HEDLEY_TI_VERSION_CHECK(16, 9, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 0, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
+ #elif JSON_HEDLEY_TI_VERSION_CHECK(16, 9, 0) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 0, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 3, 0)
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 0, 0)
@@ -958,9 +924,7 @@
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097")
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus)
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)")
- #elif JSON_HEDLEY_TI_VERSION_CHECK(18, 1, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 3, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0)
+ #elif JSON_HEDLEY_TI_VERSION_CHECK(18, 1, 0) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 3, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0)
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173")
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8, 0, 0)
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097")
@@ -1004,48 +968,30 @@
#if defined(JSON_HEDLEY_DEPRECATED_FOR)
#undef JSON_HEDLEY_DEPRECATED_FOR
#endif
- #if JSON_HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #if JSON_HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " #since))
#define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement))
- #elif (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 5, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(5, 6, 0) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 13, 0) || \
- JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(18, 1, 0) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18, 1, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 3, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 3, 0) || \
+ #elif (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || JSON_HEDLEY_GCC_VERSION_CHECK(4, 5, 0) || \
+ JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(5, 6, 0) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 13, 0) || \
+ JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || JSON_HEDLEY_TI_VERSION_CHECK(18, 1, 0) || JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18, 1, 0) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 3, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 3, 0) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since)))
#define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement)))
#elif defined(__cplusplus) && (__cplusplus >= 201402L)
#define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]])
- #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]])
- #elif JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10) || \
- JSON_HEDLEY_IAR_VERSION_CHECK(8, 10, 0)
+ #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) \
+ JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]])
+ #elif JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
+ JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10) || JSON_HEDLEY_IAR_VERSION_CHECK(8, 10, 0)
#define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__))
#define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__))
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || \
- JSON_HEDLEY_PELLES_VERSION_CHECK(6, 50, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || JSON_HEDLEY_PELLES_VERSION_CHECK(6, 50, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated)
#define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated)
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8, 0, 0)
@@ -1059,9 +1005,7 @@
#if defined(JSON_HEDLEY_UNAVAILABLE)
#undef JSON_HEDLEY_UNAVAILABLE
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 3, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(warning) || JSON_HEDLEY_GCC_VERSION_CHECK(4, 3, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since)))
#else
@@ -1074,22 +1018,13 @@
#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG)
#undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0) && defined(__cplusplus)) || \
- JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || \
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0) && defined(__cplusplus)) || JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
#define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__))
@@ -1110,11 +1045,8 @@
#if defined(JSON_HEDLEY_SENTINEL)
#undef JSON_HEDLEY_SENTINEL
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 0, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(5, 4, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || JSON_HEDLEY_GCC_VERSION_CHECK(4, 0, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_ARM_VERSION_CHECK(5, 4, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position)))
#else
#define JSON_HEDLEY_SENTINEL(position)
@@ -1125,35 +1057,23 @@
#endif
#if JSON_HEDLEY_IAR_VERSION_CHECK(8, 0, 0)
#define JSON_HEDLEY_NO_RETURN __noreturn
- #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__))
#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
#define JSON_HEDLEY_NO_RETURN _Noreturn
#elif defined(__cplusplus) && (__cplusplus >= 201103L)
#define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]])
- #elif JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 2, 0) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_IAR_VERSION_CHECK(8, 10, 0)
+ #elif JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 2, 0) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
+ JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
+ (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
+ (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
+ (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
+ (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
+ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || JSON_HEDLEY_IAR_VERSION_CHECK(8, 10, 0)
#define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__))
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0)
#define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return")
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_NO_RETURN __declspec(noreturn)
#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6, 0, 0) && defined(__cplusplus)
#define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;")
@@ -1183,27 +1103,20 @@
#if defined(JSON_HEDLEY_ASSUME)
#undef JSON_HEDLEY_ASSUME
#endif
- #if JSON_HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #if JSON_HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_ASSUME(expr) __assume(expr)
#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume)
#define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr)
- #elif JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4, 0, 0)
+ #elif JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 0) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4, 0, 0)
#if defined(__cplusplus)
#define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr)
#else
#define JSON_HEDLEY_ASSUME(expr) _nassert(expr)
#endif
#endif
- #if (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 5, 0) || \
- JSON_HEDLEY_PGI_VERSION_CHECK(18, 10, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(13, 1, 5) || \
- JSON_HEDLEY_CRAY_VERSION_CHECK(10, 0, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #if (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || JSON_HEDLEY_GCC_VERSION_CHECK(4, 5, 0) || \
+ JSON_HEDLEY_PGI_VERSION_CHECK(18, 10, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(13, 1, 5) || \
+ JSON_HEDLEY_CRAY_VERSION_CHECK(10, 0, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable()
#elif defined(JSON_HEDLEY_ASSUME)
#define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0)
@@ -1216,8 +1129,7 @@
#endif
#endif
#if defined(JSON_HEDLEY_UNREACHABLE)
- #if JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4, 0, 0)
+ #if JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 0) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4, 0, 0)
#define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value))
#else
#define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE()
@@ -1246,9 +1158,7 @@
#if defined(JSON_HEDLEY_NON_NULL)
#undef JSON_HEDLEY_NON_NULL
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 3, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 3, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0)
#define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__)))
#else
@@ -1263,23 +1173,13 @@
#define JSON_HEDLEY_PRINTF_FORMAT(string_idx, first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check)))
#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format, 4, 4, 0) && defined(__USE_MINGW_ANSI_STDIO)
#define JSON_HEDLEY_PRINTF_FORMAT(string_idx, first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check)))
- #elif JSON_HEDLEY_HAS_ATTRIBUTE(format) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(5, 6, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #elif JSON_HEDLEY_HAS_ATTRIBUTE(format) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_ARM_VERSION_CHECK(5, 6, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
+ (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
+ (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
+ (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
+ (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
+ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_PRINTF_FORMAT(string_idx, first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check)))
#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6, 0, 0)
#define JSON_HEDLEY_PRINTF_FORMAT(string_idx, first_to_check) __declspec(vaformat(printf, string_idx, first_to_check))
@@ -1314,41 +1214,30 @@
#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable)
#define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr))
#endif
- #if (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(9, 0, 0) || \
+ #if (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || JSON_HEDLEY_GCC_VERSION_CHECK(9, 0, 0) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability((expr), (value), (probability))
#define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1, (probability))
#define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0, (probability))
#define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1)
#define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0)
- #elif (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 0, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0) && defined(__cplusplus)) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 7, 0) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(3, 1, 0) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 1, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6, 1, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_TINYC_VERSION_CHECK(0, 9, 27) || \
- JSON_HEDLEY_CRAY_VERSION_CHECK(8, 1, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
- #define JSON_HEDLEY_PREDICT(expr, expected, probability) \
+ #elif (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 0, 0) || \
+ JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0) && defined(__cplusplus)) || \
+ JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 7, 0) || JSON_HEDLEY_TI_CL430_VERSION_CHECK(3, 1, 0) || JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 1, 0) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6, 1, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ JSON_HEDLEY_TINYC_VERSION_CHECK(0, 9, 27) || JSON_HEDLEY_CRAY_VERSION_CHECK(8, 1, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #define JSON_HEDLEY_PREDICT(expr, expected, probability) \
(((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)))
- #define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \
- (__extension__({ \
- double hedley_probability_ = (probability); \
- ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \
+ #define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \
+ (__extension__({ \
+ double hedley_probability_ = (probability); \
+ ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \
}))
- #define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \
- (__extension__({ \
- double hedley_probability_ = (probability); \
- ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \
+ #define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \
+ (__extension__({ \
+ double hedley_probability_ = (probability); \
+ ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \
}))
#define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1)
#define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0)
@@ -1366,29 +1255,18 @@
#if defined(JSON_HEDLEY_MALLOC)
#undef JSON_HEDLEY_MALLOC
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(12, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(12, 1, 0) || \
+ JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_MALLOC __attribute__((__malloc__))
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0)
#define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory")
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_MALLOC __declspec(restrict)
#else
#define JSON_HEDLEY_MALLOC
@@ -1397,32 +1275,19 @@
#if defined(JSON_HEDLEY_PURE)
#undef JSON_HEDLEY_PURE
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(2, 96, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(pure) || JSON_HEDLEY_GCC_VERSION_CHECK(2, 96, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
+ JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_PURE __attribute__((__pure__))
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0)
#define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data")
- #elif defined(__cplusplus) && \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(2, 0, 1) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4, 0, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0))
+ #elif defined(__cplusplus) && \
+ (JSON_HEDLEY_TI_CL430_VERSION_CHECK(2, 0, 1) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4, 0, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0))
#define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;")
#else
#define JSON_HEDLEY_PURE
@@ -1431,25 +1296,14 @@
#if defined(JSON_HEDLEY_CONST)
#undef JSON_HEDLEY_CONST
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(const) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(2, 5, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(const) || JSON_HEDLEY_GCC_VERSION_CHECK(2, 5, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
+ JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_CONST __attribute__((__const__))
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0)
#define JSON_HEDLEY_CONST _Pragma("no_side_effect")
@@ -1462,20 +1316,11 @@
#endif
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus)
#define JSON_HEDLEY_RESTRICT restrict
- #elif JSON_HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || \
- JSON_HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
- JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 4) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 1, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus)) || \
- JSON_HEDLEY_IAR_VERSION_CHECK(8, 0, 0) || \
- defined(__clang__) || \
+ #elif JSON_HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || JSON_HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
+ JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 4) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 1, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
+ (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus)) || JSON_HEDLEY_IAR_VERSION_CHECK(8, 0, 0) || defined(__clang__) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_RESTRICT __restrict
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 3, 0) && !defined(__cplusplus)
@@ -1487,21 +1332,13 @@
#if defined(JSON_HEDLEY_INLINE)
#undef JSON_HEDLEY_INLINE
#endif
- #if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
- (defined(__cplusplus) && (__cplusplus >= 199711L))
+ #if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || (defined(__cplusplus) && (__cplusplus >= 199711L))
#define JSON_HEDLEY_INLINE inline
- #elif defined(JSON_HEDLEY_GCC_VERSION) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(6, 2, 0)
+ #elif defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_ARM_VERSION_CHECK(6, 2, 0)
#define JSON_HEDLEY_INLINE __inline__
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(12, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 1, 0) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(3, 1, 0) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 0, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(12, 0, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 1, 0) || JSON_HEDLEY_TI_CL430_VERSION_CHECK(3, 1, 0) || JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 0) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 0, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_INLINE __inline
#else
@@ -1511,36 +1348,20 @@
#if defined(JSON_HEDLEY_ALWAYS_INLINE)
#undef JSON_HEDLEY_ALWAYS_INLINE
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 0, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10) || \
- JSON_HEDLEY_IAR_VERSION_CHECK(8, 10, 0)
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || JSON_HEDLEY_GCC_VERSION_CHECK(4, 0, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
+ JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10) || JSON_HEDLEY_IAR_VERSION_CHECK(8, 10, 0)
#define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(12, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(12, 0, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_ALWAYS_INLINE __forceinline
- #elif defined(__cplusplus) && \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6, 1, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0))
+ #elif defined(__cplusplus) && \
+ (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6, 1, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0))
#define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;")
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8, 0, 0)
#define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced")
@@ -1551,28 +1372,16 @@
#if defined(JSON_HEDLEY_NEVER_INLINE)
#undef JSON_HEDLEY_NEVER_INLINE
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 0, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10) || \
- JSON_HEDLEY_IAR_VERSION_CHECK(8, 10, 0)
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || JSON_HEDLEY_GCC_VERSION_CHECK(4, 0, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
+ JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10) || JSON_HEDLEY_IAR_VERSION_CHECK(8, 10, 0)
#define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__))
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_NEVER_INLINE __declspec(noinline)
#elif JSON_HEDLEY_PGI_VERSION_CHECK(10, 2, 0)
#define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline")
@@ -1602,15 +1411,10 @@
#define JSON_HEDLEY_PUBLIC __declspec(dllexport)
#define JSON_HEDLEY_IMPORT __declspec(dllimport)
#else
- #if JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 3, 0) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(13, 1, 0) || \
- (defined(__TI_EABI__) && \
- ((JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0))) || \
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 3, 0) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
+ JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(13, 1, 0) || \
+ (defined(__TI_EABI__) && \
+ ((JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0))) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden")))
#define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default")))
@@ -1624,14 +1428,10 @@
#if defined(JSON_HEDLEY_NO_THROW)
#undef JSON_HEDLEY_NO_THROW
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 3, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 3, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__))
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13, 1, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0)
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13, 1, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0)
#define JSON_HEDLEY_NO_THROW __declspec(nothrow)
#else
#define JSON_HEDLEY_NO_THROW
@@ -1640,9 +1440,7 @@
#if defined(JSON_HEDLEY_FALL_THROUGH)
#undef JSON_HEDLEY_FALL_THROUGH
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(7, 0, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || JSON_HEDLEY_GCC_VERSION_CHECK(7, 0, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__))
#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang, fallthrough)
#define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]])
@@ -1657,9 +1455,7 @@
#if defined(JSON_HEDLEY_RETURNS_NON_NULL)
#undef JSON_HEDLEY_RETURNS_NON_NULL
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 9, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || JSON_HEDLEY_GCC_VERSION_CHECK(4, 9, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__))
#elif defined(_Ret_notnull_) /* SAL */
#define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_
@@ -1670,11 +1466,8 @@
#if defined(JSON_HEDLEY_ARRAY_PARAM)
#undef JSON_HEDLEY_ARRAY_PARAM
#endif
- #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
- !defined(__STDC_NO_VLA__) && \
- !defined(__cplusplus) && \
- !defined(JSON_HEDLEY_PGI_VERSION) && \
- !defined(JSON_HEDLEY_TINYC_VERSION)
+ #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__STDC_NO_VLA__) && !defined(__cplusplus) && \
+ !defined(JSON_HEDLEY_PGI_VERSION) && !defined(JSON_HEDLEY_TINYC_VERSION)
#define JSON_HEDLEY_ARRAY_PARAM(name) (name)
#else
#define JSON_HEDLEY_ARRAY_PARAM(name)
@@ -1691,25 +1484,15 @@
#if defined(JSON_HEDLEY_IS_CONSTEXPR_)
#undef JSON_HEDLEY_IS_CONSTEXPR_
#endif
- #if JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_TINYC_VERSION_CHECK(0, 9, 19) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(13, 1, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6, 1, 0) || \
- (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0) && !defined(__cplusplus)) || \
- JSON_HEDLEY_CRAY_VERSION_CHECK(8, 1, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #if JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_TINYC_VERSION_CHECK(0, 9, 19) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(13, 1, 0) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6, 1, 0) || (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0) && !defined(__cplusplus)) || \
+ JSON_HEDLEY_CRAY_VERSION_CHECK(8, 1, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr)
#endif
#if !defined(__cplusplus)
- #if JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(13, 1, 0) || \
- JSON_HEDLEY_CRAY_VERSION_CHECK(8, 1, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(5, 4, 0) || \
+ #if JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_IBM_VERSION_CHECK(13, 1, 0) || JSON_HEDLEY_CRAY_VERSION_CHECK(8, 1, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(5, 4, 0) || \
JSON_HEDLEY_TINYC_VERSION_CHECK(0, 9, 24)
#if defined(__INTPTR_TYPE__)
#define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*)((__INTPTR_TYPE__)((expr) * 0)) : (int*)0)), int*)
@@ -1717,36 +1500,20 @@
#include <stdint.h>
#define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*)((intptr_t)((expr) * 0)) : (int*)0)), int*)
#endif
- #elif ( \
- defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \
- !defined(JSON_HEDLEY_SUNPRO_VERSION) && \
- !defined(JSON_HEDLEY_PGI_VERSION) && \
- !defined(JSON_HEDLEY_IAR_VERSION)) || \
- (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 9, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(17, 0, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(12, 1, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(5, 3, 0)
+ #elif (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && !defined(JSON_HEDLEY_SUNPRO_VERSION) && !defined(JSON_HEDLEY_PGI_VERSION) && \
+ !defined(JSON_HEDLEY_IAR_VERSION)) || \
+ (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || JSON_HEDLEY_GCC_VERSION_CHECK(4, 9, 0) || \
+ JSON_HEDLEY_INTEL_VERSION_CHECK(17, 0, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(12, 1, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(5, 3, 0)
#if defined(__INTPTR_TYPE__)
#define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*)((__INTPTR_TYPE__)((expr) * 0)) : (int*)0), int*: 1, void*: 0)
#else
#include <stdint.h>
#define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*)((intptr_t) * 0) : (int*)0), int*: 1, void*: 0)
#endif
- #elif defined(JSON_HEDLEY_GCC_VERSION) || \
- defined(JSON_HEDLEY_INTEL_VERSION) || \
- defined(JSON_HEDLEY_TINYC_VERSION) || \
- defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(18, 12, 0) || \
- defined(JSON_HEDLEY_TI_CL2000_VERSION) || \
- defined(JSON_HEDLEY_TI_CL6X_VERSION) || \
- defined(JSON_HEDLEY_TI_CL7X_VERSION) || \
- defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \
- defined(__clang__)
- #define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \
- sizeof(void) != \
- sizeof(*( \
- 1 ? ((void*)((expr) * 0L)) : ((struct { char v[sizeof(void) * 2]; }*)1))))
+ #elif defined(JSON_HEDLEY_GCC_VERSION) || defined(JSON_HEDLEY_INTEL_VERSION) || defined(JSON_HEDLEY_TINYC_VERSION) || \
+ defined(JSON_HEDLEY_TI_ARMCL_VERSION) || JSON_HEDLEY_TI_CL430_VERSION_CHECK(18, 12, 0) || defined(JSON_HEDLEY_TI_CL2000_VERSION) || \
+ defined(JSON_HEDLEY_TI_CL6X_VERSION) || defined(JSON_HEDLEY_TI_CL7X_VERSION) || defined(JSON_HEDLEY_TI_CLPRU_VERSION) || defined(__clang__)
+ #define JSON_HEDLEY_IS_CONSTEXPR_(expr) (sizeof(void) != sizeof(*(1 ? ((void*)((expr) * 0L)) : ((struct { char v[sizeof(void) * 2]; }*)1))))
#endif
#endif
#if defined(JSON_HEDLEY_IS_CONSTEXPR_)
@@ -1783,15 +1550,11 @@
#if defined(JSON_HEDLEY_STATIC_ASSERT)
#undef JSON_HEDLEY_STATIC_ASSERT
#endif
- #if !defined(__cplusplus) && ((defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \
- (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(6, 0, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- defined(_Static_assert))
+ #if !defined(__cplusplus) && ((defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \
+ (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \
+ JSON_HEDLEY_GCC_VERSION_CHECK(6, 0, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || defined(_Static_assert))
#define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message)
- #elif (defined(__cplusplus) && (__cplusplus >= 201103L)) || \
- JSON_HEDLEY_MSVC_VERSION_CHECK(16, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #elif (defined(__cplusplus) && (__cplusplus >= 201103L)) || JSON_HEDLEY_MSVC_VERSION_CHECK(16, 0, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message))
#else
#define JSON_HEDLEY_STATIC_ASSERT(expr, message)
@@ -1818,13 +1581,12 @@
#undef JSON_HEDLEY_MESSAGE
#endif
#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
- #define JSON_HEDLEY_MESSAGE(msg) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
- JSON_HEDLEY_PRAGMA(message msg) \
+ #define JSON_HEDLEY_MESSAGE(msg) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
+ JSON_HEDLEY_PRAGMA(message msg) \
JSON_HEDLEY_DIAGNOSTIC_POP
- #elif JSON_HEDLEY_GCC_VERSION_CHECK(4, 4, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
+ #elif JSON_HEDLEY_GCC_VERSION_CHECK(4, 4, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
#define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg)
#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5, 0, 0)
#define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg)
@@ -1840,17 +1602,14 @@
#undef JSON_HEDLEY_WARNING
#endif
#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
- #define JSON_HEDLEY_WARNING(msg) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
- JSON_HEDLEY_PRAGMA(clang warning msg) \
+ #define JSON_HEDLEY_WARNING(msg) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
+ JSON_HEDLEY_PRAGMA(clang warning msg) \
JSON_HEDLEY_DIAGNOSTIC_POP
- #elif JSON_HEDLEY_GCC_VERSION_CHECK(4, 8, 0) || \
- JSON_HEDLEY_PGI_VERSION_CHECK(18, 4, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
+ #elif JSON_HEDLEY_GCC_VERSION_CHECK(4, 8, 0) || JSON_HEDLEY_PGI_VERSION_CHECK(18, 4, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
#define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg)
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15, 0, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg))
#else
#define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg)
@@ -1864,16 +1623,12 @@
#endif
#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if)
#if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat")
- #define JSON_HEDLEY_REQUIRE(expr) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \
- __attribute__((diagnose_if(!(expr), #expr, "error"))) \
- JSON_HEDLEY_DIAGNOSTIC_POP
- #define JSON_HEDLEY_REQUIRE_MSG(expr, msg) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \
- __attribute__((diagnose_if(!(expr), msg, "error"))) \
- JSON_HEDLEY_DIAGNOSTIC_POP
+ #define JSON_HEDLEY_REQUIRE(expr) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") __attribute__((diagnose_if(!(expr), #expr, "error"))) JSON_HEDLEY_DIAGNOSTIC_POP
+ #define JSON_HEDLEY_REQUIRE_MSG(expr, msg) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") __attribute__((diagnose_if(!(expr), msg, "error"))) JSON_HEDLEY_DIAGNOSTIC_POP
#else
#define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error")))
#define JSON_HEDLEY_REQUIRE_MSG(expr, msg) __attribute__((diagnose_if(!(expr), msg, "error")))
@@ -1896,11 +1651,12 @@
#undef JSON_HEDLEY_FLAGS_CAST
#endif
#if JSON_HEDLEY_INTEL_VERSION_CHECK(19, 0, 0)
- #define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__({ \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- _Pragma("warning(disable:188)")((T)(expr)); \
- JSON_HEDLEY_DIAGNOSTIC_POP \
- }))
+ #define JSON_HEDLEY_FLAGS_CAST(T, expr) \
+ (__extension__({ \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ _Pragma("warning(disable:188)")((T)(expr)); \
+ JSON_HEDLEY_DIAGNOSTIC_POP \
+ }))
#else
#define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr)
#endif
@@ -1908,8 +1664,7 @@
#if defined(JSON_HEDLEY_EMPTY_BASES)
#undef JSON_HEDLEY_EMPTY_BASES
#endif
- #if (JSON_HEDLEY_MSVC_VERSION_CHECK(19, 0, 23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20, 0, 0)) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #if (JSON_HEDLEY_MSVC_VERSION_CHECK(19, 0, 23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20, 0, 0)) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases)
#else
#define JSON_HEDLEY_EMPTY_BASES
diff --git a/single_include/nlohmann/json.hpp b/single_include/nlohmann/json.hpp
index ed8a232..5ff5df8 100644
--- a/single_include/nlohmann/json.hpp
+++ b/single_include/nlohmann/json.hpp
@@ -91,52 +91,40 @@
// Construct the namespace ABI tags component
#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) json_abi##a##b
-#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) \
- NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b)
+#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b)
-#define NLOHMANN_JSON_ABI_TAGS \
- NLOHMANN_JSON_ABI_TAGS_CONCAT( \
- NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \
- NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON)
+#define NLOHMANN_JSON_ABI_TAGS NLOHMANN_JSON_ABI_TAGS_CONCAT(NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON)
// Construct the namespace version component
-#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \
- _v##major##_##minor##_##patch
-#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \
- NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch)
+#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) _v##major##_##minor##_##patch
+#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch)
#if NLOHMANN_JSON_NAMESPACE_NO_VERSION
#define NLOHMANN_JSON_NAMESPACE_VERSION
#else
- #define NLOHMANN_JSON_NAMESPACE_VERSION \
- NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \
- NLOHMANN_JSON_VERSION_MINOR, \
- NLOHMANN_JSON_VERSION_PATCH)
+ #define NLOHMANN_JSON_NAMESPACE_VERSION \
+ NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH)
#endif
// Combine namespace components
#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a##b
-#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \
- NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b)
+#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b)
#ifndef NLOHMANN_JSON_NAMESPACE
- #define NLOHMANN_JSON_NAMESPACE \
- nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \
- NLOHMANN_JSON_ABI_TAGS, \
- NLOHMANN_JSON_NAMESPACE_VERSION)
+ #define NLOHMANN_JSON_NAMESPACE nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT(NLOHMANN_JSON_ABI_TAGS, NLOHMANN_JSON_NAMESPACE_VERSION)
#endif
#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN
- #define NLOHMANN_JSON_NAMESPACE_BEGIN \
- namespace nlohmann { \
- inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \
- NLOHMANN_JSON_ABI_TAGS, \
- NLOHMANN_JSON_NAMESPACE_VERSION) {
+ #define NLOHMANN_JSON_NAMESPACE_BEGIN \
+ namespace nlohmann \
+ { \
+ inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT(NLOHMANN_JSON_ABI_TAGS, NLOHMANN_JSON_NAMESPACE_VERSION) \
+ {
#endif
#ifndef NLOHMANN_JSON_NAMESPACE_END
- #define NLOHMANN_JSON_NAMESPACE_END \
- } /* namespace (inline namespace) NOLINT(readability/namespace) */ \
+ #define NLOHMANN_JSON_NAMESPACE_END \
+ } /* namespace (inline namespace) NOLINT(readability/namespace) */ \
} // namespace nlohmann
#endif
@@ -193,7 +181,8 @@
// #include <nlohmann/detail/abi_macros.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/// struct to capture the start position of the current token
struct position_t
@@ -247,7 +236,8 @@
// #include <nlohmann/detail/abi_macros.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
template<typename... Ts>
struct make_void
@@ -261,7 +251,8 @@
NLOHMANN_JSON_NAMESPACE_END
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
// https://en.cppreference.com/w/cpp/experimental/is_detected
struct nonesuch
@@ -274,11 +265,7 @@
void operator=(nonesuch&&) = delete;
};
-template<class Default,
- class AlwaysVoid,
- template<class...>
- class Op,
- class... Args>
+template<class Default, class AlwaysVoid, template<class...> class Op, class... Args>
struct detector
{
using value_t = std::false_type;
@@ -312,8 +299,7 @@
using is_detected_exact = std::is_same<Expected, detected_t<Op, Args...>>;
template<class To, template<class...> class Op, class... Args>
-using is_detected_convertible =
- std::is_convertible<detected_t<Op, Args...>, To>;
+using is_detected_convertible = std::is_convertible<detected_t<Op, Args...>, To>;
} // namespace detail
NLOHMANN_JSON_NAMESPACE_END
@@ -411,7 +397,8 @@
#undef JSON_HEDLEY_MSVC_VERSION
#endif
#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL)
- #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100)
+ #define JSON_HEDLEY_MSVC_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100)
#elif defined(_MSC_FULL_VER) && !defined(__ICL)
#define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10)
#elif defined(_MSC_VER) && !defined(__ICL)
@@ -485,11 +472,17 @@
#undef JSON_HEDLEY_SUNPRO_VERSION
#endif
#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)
- #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10)
+ #define JSON_HEDLEY_SUNPRO_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), \
+ (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), \
+ (__SUNPRO_C & 0xf) * 10)
#elif defined(__SUNPRO_C)
#define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf)
#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)
- #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10)
+ #define JSON_HEDLEY_SUNPRO_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), \
+ (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), \
+ (__SUNPRO_CC & 0xf) * 10)
#elif defined(__SUNPRO_CC)
#define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf)
#endif
@@ -523,9 +516,11 @@
#undef JSON_HEDLEY_ARM_VERSION
#endif
#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)
- #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100)
+ #define JSON_HEDLEY_ARM_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100)
#elif defined(__CC_ARM) && defined(__ARMCC_VERSION)
- #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100)
+ #define JSON_HEDLEY_ARM_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100)
#endif
#if defined(JSON_HEDLEY_ARM_VERSION_CHECK)
@@ -560,12 +555,10 @@
#if defined(JSON_HEDLEY_TI_VERSION)
#undef JSON_HEDLEY_TI_VERSION
#endif
- #if defined(__TI_COMPILER_VERSION__) && \
- (defined(__TMS470__) || defined(__TI_ARM__) || \
- defined(__MSP430__) || \
- defined(__TMS320C2000__))
+ #if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__) || defined(__MSP430__) || defined(__TMS320C2000__))
#if (__TI_COMPILER_VERSION__ >= 16000000)
- #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
+ #define JSON_HEDLEY_TI_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif
#endif
@@ -582,7 +575,8 @@
#undef JSON_HEDLEY_TI_CL2000_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__)
- #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
+ #define JSON_HEDLEY_TI_CL2000_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif
#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK)
@@ -598,7 +592,8 @@
#undef JSON_HEDLEY_TI_CL430_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__)
- #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
+ #define JSON_HEDLEY_TI_CL430_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif
#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK)
@@ -614,7 +609,8 @@
#undef JSON_HEDLEY_TI_ARMCL_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__))
- #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
+ #define JSON_HEDLEY_TI_ARMCL_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif
#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK)
@@ -630,7 +626,8 @@
#undef JSON_HEDLEY_TI_CL6X_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__)
- #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
+ #define JSON_HEDLEY_TI_CL6X_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif
#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK)
@@ -646,7 +643,8 @@
#undef JSON_HEDLEY_TI_CL7X_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__)
- #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
+ #define JSON_HEDLEY_TI_CL7X_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif
#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK)
@@ -662,7 +660,8 @@
#undef JSON_HEDLEY_TI_CLPRU_VERSION
#endif
#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__)
- #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
+ #define JSON_HEDLEY_TI_CLPRU_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000))
#endif
#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK)
@@ -750,7 +749,8 @@
#undef JSON_HEDLEY_COMPCERT_VERSION
#endif
#if defined(__COMPCERT_VERSION__)
- #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100)
+ #define JSON_HEDLEY_COMPCERT_VERSION \
+ JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100)
#endif
#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK)
@@ -797,20 +797,10 @@
#if defined(JSON_HEDLEY_GCC_VERSION)
#undef JSON_HEDLEY_GCC_VERSION
#endif
- #if defined(JSON_HEDLEY_GNUC_VERSION) && \
- !defined(__clang__) && \
- !defined(JSON_HEDLEY_INTEL_VERSION) && \
- !defined(JSON_HEDLEY_PGI_VERSION) && \
- !defined(JSON_HEDLEY_ARM_VERSION) && \
- !defined(JSON_HEDLEY_CRAY_VERSION) && \
- !defined(JSON_HEDLEY_TI_VERSION) && \
- !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \
- !defined(JSON_HEDLEY_TI_CL430_VERSION) && \
- !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \
- !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \
- !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \
- !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \
- !defined(__COMPCERT__) && \
+ #if defined(JSON_HEDLEY_GNUC_VERSION) && !defined(__clang__) && !defined(JSON_HEDLEY_INTEL_VERSION) && !defined(JSON_HEDLEY_PGI_VERSION) && \
+ !defined(JSON_HEDLEY_ARM_VERSION) && !defined(JSON_HEDLEY_CRAY_VERSION) && !defined(JSON_HEDLEY_TI_VERSION) && \
+ !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && !defined(JSON_HEDLEY_TI_CL430_VERSION) && !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \
+ !defined(JSON_HEDLEY_TI_CL6X_VERSION) && !defined(JSON_HEDLEY_TI_CL7X_VERSION) && !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && !defined(__COMPCERT__) && \
!defined(JSON_HEDLEY_MCST_LCC_VERSION)
#define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION
#endif
@@ -827,8 +817,7 @@
#if defined(JSON_HEDLEY_HAS_ATTRIBUTE)
#undef JSON_HEDLEY_HAS_ATTRIBUTE
#endif
- #if defined(__has_attribute) && \
- ((!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8, 5, 9)))
+ #if defined(__has_attribute) && ((!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8, 5, 9)))
#define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute)
#else
#define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0)
@@ -855,9 +844,7 @@
#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE)
#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE
#endif
- #if defined(__has_cpp_attribute) && \
- defined(__cplusplus) && \
- (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0))
+ #if defined(__has_cpp_attribute) && defined(__cplusplus) && (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0))
#define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute)
#else
#define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0)
@@ -868,9 +855,8 @@
#endif
#if !defined(__cplusplus) || !defined(__has_cpp_attribute)
#define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns, attribute) (0)
- #elif !defined(JSON_HEDLEY_PGI_VERSION) && \
- !defined(JSON_HEDLEY_IAR_VERSION) && \
- (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0)) && \
+ #elif !defined(JSON_HEDLEY_PGI_VERSION) && !defined(JSON_HEDLEY_IAR_VERSION) && \
+ (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0)) && \
(!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19, 20, 0))
#define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns, attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute)
#else
@@ -1030,23 +1016,12 @@
#define JSON_HEDLEY_GCC_HAS_WARNING(warning, major, minor, patch) JSON_HEDLEY_GCC_VERSION_CHECK(major, minor, patch)
#endif
- #if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
- defined(__clang__) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 0, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_IAR_VERSION_CHECK(8, 0, 0) || \
- JSON_HEDLEY_PGI_VERSION_CHECK(18, 4, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 7, 0) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(2, 0, 1) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 1, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 0, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_CRAY_VERSION_CHECK(5, 0, 0) || \
- JSON_HEDLEY_TINYC_VERSION_CHECK(0, 9, 17) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(8, 0, 0) || \
+ #if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || defined(__clang__) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 0, 0) || \
+ JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || JSON_HEDLEY_IAR_VERSION_CHECK(8, 0, 0) || JSON_HEDLEY_PGI_VERSION_CHECK(18, 4, 0) || \
+ JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 7, 0) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(2, 0, 1) || JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 1, 0) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 0, 0) || \
+ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || JSON_HEDLEY_CRAY_VERSION_CHECK(5, 0, 0) || \
+ JSON_HEDLEY_TINYC_VERSION_CHECK(0, 9, 17) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(8, 0, 0) || \
(JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) && defined(__C99_PRAGMA_OPERATOR))
#define JSON_HEDLEY_PRAGMA(value) _Pragma(#value)
#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15, 0, 0)
@@ -1070,19 +1045,14 @@
#elif JSON_HEDLEY_GCC_VERSION_CHECK(4, 6, 0)
#define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push")
#define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop")
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15, 0, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push))
#define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop))
#elif JSON_HEDLEY_ARM_VERSION_CHECK(5, 6, 0)
#define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push")
#define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop")
- #elif JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 4, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 1, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0)
+ #elif JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 4, 0) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 1, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0)
#define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push")
#define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop")
#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2, 90, 0)
@@ -1102,27 +1072,20 @@
#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat")
#if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions")
#if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions")
- #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
- _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
- _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \
- xpr \
- JSON_HEDLEY_DIAGNOSTIC_POP
+ #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
+ _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") xpr JSON_HEDLEY_DIAGNOSTIC_POP
#else
- #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
- _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
- xpr \
- JSON_HEDLEY_DIAGNOSTIC_POP
+ #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \
+ xpr JSON_HEDLEY_DIAGNOSTIC_POP
#endif
#else
- #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \
- xpr \
- JSON_HEDLEY_DIAGNOSTIC_POP
+ #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") xpr JSON_HEDLEY_DIAGNOSTIC_POP
#endif
#endif
#endif
@@ -1135,14 +1098,13 @@
#endif
#if defined(__cplusplus)
#define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast<T>(expr))
- #elif JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 6, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
- #define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__({ \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL((T)(expr)); \
- JSON_HEDLEY_DIAGNOSTIC_POP \
- }))
+ #elif JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || JSON_HEDLEY_GCC_VERSION_CHECK(4, 6, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
+ #define JSON_HEDLEY_CONST_CAST(T, expr) \
+ (__extension__({ \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL((T)(expr)); \
+ JSON_HEDLEY_DIAGNOSTIC_POP \
+ }))
#else
#define JSON_HEDLEY_CONST_CAST(T, expr) ((T)(expr))
#endif
@@ -1170,15 +1132,13 @@
#endif
#if defined(__cplusplus)
#if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast")
- #define JSON_HEDLEY_CPP_CAST(T, expr) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- _Pragma("clang diagnostic ignored \"-Wold-style-cast\"")((T)(expr)) \
- JSON_HEDLEY_DIAGNOSTIC_POP
+ #define JSON_HEDLEY_CPP_CAST(T, expr) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ _Pragma("clang diagnostic ignored \"-Wold-style-cast\"")((T)(expr)) JSON_HEDLEY_DIAGNOSTIC_POP
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8, 3, 0)
- #define JSON_HEDLEY_CPP_CAST(T, expr) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- _Pragma("diag_suppress=Pe137") \
- JSON_HEDLEY_DIAGNOSTIC_POP
+ #define JSON_HEDLEY_CPP_CAST(T, expr) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ _Pragma("diag_suppress=Pe137") JSON_HEDLEY_DIAGNOSTIC_POP
#else
#define JSON_HEDLEY_CPP_CAST(T, expr) ((T)(expr))
#endif
@@ -1205,17 +1165,11 @@
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable : 4996))
#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444")
- #elif JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0)
+ #elif JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0)
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718")
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 13, 0) && !defined(__cplusplus)
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)")
@@ -1244,9 +1198,7 @@
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15, 0, 0)
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable : 4068))
- #elif JSON_HEDLEY_TI_VERSION_CHECK(16, 9, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 0, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
+ #elif JSON_HEDLEY_TI_VERSION_CHECK(16, 9, 0) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 0, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 3, 0)
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 0, 0)
@@ -1278,9 +1230,7 @@
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097")
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus)
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)")
- #elif JSON_HEDLEY_TI_VERSION_CHECK(18, 1, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 3, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0)
+ #elif JSON_HEDLEY_TI_VERSION_CHECK(18, 1, 0) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 3, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0)
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173")
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8, 0, 0)
#define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097")
@@ -1324,48 +1274,30 @@
#if defined(JSON_HEDLEY_DEPRECATED_FOR)
#undef JSON_HEDLEY_DEPRECATED_FOR
#endif
- #if JSON_HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #if JSON_HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " #since))
#define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement))
- #elif (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 5, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(5, 6, 0) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 13, 0) || \
- JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(18, 1, 0) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18, 1, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 3, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 3, 0) || \
+ #elif (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || JSON_HEDLEY_GCC_VERSION_CHECK(4, 5, 0) || \
+ JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(5, 6, 0) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 13, 0) || \
+ JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || JSON_HEDLEY_TI_VERSION_CHECK(18, 1, 0) || JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18, 1, 0) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 3, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 3, 0) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since)))
#define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement)))
#elif defined(__cplusplus) && (__cplusplus >= 201402L)
#define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]])
- #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]])
- #elif JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10) || \
- JSON_HEDLEY_IAR_VERSION_CHECK(8, 10, 0)
+ #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) \
+ JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]])
+ #elif JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
+ JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10) || JSON_HEDLEY_IAR_VERSION_CHECK(8, 10, 0)
#define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__))
#define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__))
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || \
- JSON_HEDLEY_PELLES_VERSION_CHECK(6, 50, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || JSON_HEDLEY_PELLES_VERSION_CHECK(6, 50, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated)
#define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated)
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8, 0, 0)
@@ -1379,9 +1311,7 @@
#if defined(JSON_HEDLEY_UNAVAILABLE)
#undef JSON_HEDLEY_UNAVAILABLE
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 3, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(warning) || JSON_HEDLEY_GCC_VERSION_CHECK(4, 3, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since)))
#else
@@ -1394,22 +1324,13 @@
#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG)
#undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0) && defined(__cplusplus)) || \
- JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || \
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0) && defined(__cplusplus)) || JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
#define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__))
@@ -1430,11 +1351,8 @@
#if defined(JSON_HEDLEY_SENTINEL)
#undef JSON_HEDLEY_SENTINEL
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 0, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(5, 4, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || JSON_HEDLEY_GCC_VERSION_CHECK(4, 0, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_ARM_VERSION_CHECK(5, 4, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position)))
#else
#define JSON_HEDLEY_SENTINEL(position)
@@ -1445,35 +1363,23 @@
#endif
#if JSON_HEDLEY_IAR_VERSION_CHECK(8, 0, 0)
#define JSON_HEDLEY_NO_RETURN __noreturn
- #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #elif JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__))
#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
#define JSON_HEDLEY_NO_RETURN _Noreturn
#elif defined(__cplusplus) && (__cplusplus >= 201103L)
#define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]])
- #elif JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 2, 0) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_IAR_VERSION_CHECK(8, 10, 0)
+ #elif JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 2, 0) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
+ JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
+ (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
+ (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
+ (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
+ (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
+ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || JSON_HEDLEY_IAR_VERSION_CHECK(8, 10, 0)
#define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__))
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0)
#define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return")
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_NO_RETURN __declspec(noreturn)
#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6, 0, 0) && defined(__cplusplus)
#define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;")
@@ -1503,27 +1409,20 @@
#if defined(JSON_HEDLEY_ASSUME)
#undef JSON_HEDLEY_ASSUME
#endif
- #if JSON_HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #if JSON_HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_ASSUME(expr) __assume(expr)
#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume)
#define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr)
- #elif JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4, 0, 0)
+ #elif JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 0) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4, 0, 0)
#if defined(__cplusplus)
#define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr)
#else
#define JSON_HEDLEY_ASSUME(expr) _nassert(expr)
#endif
#endif
- #if (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 5, 0) || \
- JSON_HEDLEY_PGI_VERSION_CHECK(18, 10, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(13, 1, 5) || \
- JSON_HEDLEY_CRAY_VERSION_CHECK(10, 0, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #if (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || JSON_HEDLEY_GCC_VERSION_CHECK(4, 5, 0) || \
+ JSON_HEDLEY_PGI_VERSION_CHECK(18, 10, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(13, 1, 5) || \
+ JSON_HEDLEY_CRAY_VERSION_CHECK(10, 0, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable()
#elif defined(JSON_HEDLEY_ASSUME)
#define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0)
@@ -1536,8 +1435,7 @@
#endif
#endif
#if defined(JSON_HEDLEY_UNREACHABLE)
- #if JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4, 0, 0)
+ #if JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 0) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4, 0, 0)
#define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value))
#else
#define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE()
@@ -1566,9 +1464,7 @@
#if defined(JSON_HEDLEY_NON_NULL)
#undef JSON_HEDLEY_NON_NULL
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 3, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 3, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0)
#define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__)))
#else
@@ -1583,23 +1479,13 @@
#define JSON_HEDLEY_PRINTF_FORMAT(string_idx, first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check)))
#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format, 4, 4, 0) && defined(__USE_MINGW_ANSI_STDIO)
#define JSON_HEDLEY_PRINTF_FORMAT(string_idx, first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check)))
- #elif JSON_HEDLEY_HAS_ATTRIBUTE(format) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(5, 6, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #elif JSON_HEDLEY_HAS_ATTRIBUTE(format) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_ARM_VERSION_CHECK(5, 6, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
+ (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
+ (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
+ (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
+ (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
+ JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_PRINTF_FORMAT(string_idx, first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check)))
#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6, 0, 0)
#define JSON_HEDLEY_PRINTF_FORMAT(string_idx, first_to_check) __declspec(vaformat(printf, string_idx, first_to_check))
@@ -1634,41 +1520,30 @@
#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable)
#define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr))
#endif
- #if (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(9, 0, 0) || \
+ #if (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || JSON_HEDLEY_GCC_VERSION_CHECK(9, 0, 0) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability((expr), (value), (probability))
#define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1, (probability))
#define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0, (probability))
#define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1)
#define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0)
- #elif (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 0, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0) && defined(__cplusplus)) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 7, 0) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(3, 1, 0) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 1, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6, 1, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_TINYC_VERSION_CHECK(0, 9, 27) || \
- JSON_HEDLEY_CRAY_VERSION_CHECK(8, 1, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
- #define JSON_HEDLEY_PREDICT(expr, expected, probability) \
+ #elif (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 0, 0) || \
+ JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 15, 0) && defined(__cplusplus)) || \
+ JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 7, 0) || JSON_HEDLEY_TI_CL430_VERSION_CHECK(3, 1, 0) || JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 1, 0) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6, 1, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ JSON_HEDLEY_TINYC_VERSION_CHECK(0, 9, 27) || JSON_HEDLEY_CRAY_VERSION_CHECK(8, 1, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #define JSON_HEDLEY_PREDICT(expr, expected, probability) \
(((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)))
- #define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \
- (__extension__({ \
- double hedley_probability_ = (probability); \
- ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \
+ #define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \
+ (__extension__({ \
+ double hedley_probability_ = (probability); \
+ ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \
}))
- #define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \
- (__extension__({ \
- double hedley_probability_ = (probability); \
- ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \
+ #define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \
+ (__extension__({ \
+ double hedley_probability_ = (probability); \
+ ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \
}))
#define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1)
#define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0)
@@ -1686,29 +1561,18 @@
#if defined(JSON_HEDLEY_MALLOC)
#undef JSON_HEDLEY_MALLOC
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(12, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(12, 1, 0) || \
+ JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_MALLOC __attribute__((__malloc__))
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0)
#define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory")
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_MALLOC __declspec(restrict)
#else
#define JSON_HEDLEY_MALLOC
@@ -1717,32 +1581,19 @@
#if defined(JSON_HEDLEY_PURE)
#undef JSON_HEDLEY_PURE
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(2, 96, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(pure) || JSON_HEDLEY_GCC_VERSION_CHECK(2, 96, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
+ JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_PURE __attribute__((__pure__))
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0)
#define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data")
- #elif defined(__cplusplus) && \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(2, 0, 1) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4, 0, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0))
+ #elif defined(__cplusplus) && \
+ (JSON_HEDLEY_TI_CL430_VERSION_CHECK(2, 0, 1) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4, 0, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0))
#define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;")
#else
#define JSON_HEDLEY_PURE
@@ -1751,25 +1602,14 @@
#if defined(JSON_HEDLEY_CONST)
#undef JSON_HEDLEY_CONST
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(const) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(2, 5, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(const) || JSON_HEDLEY_GCC_VERSION_CHECK(2, 5, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
+ JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_CONST __attribute__((__const__))
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0)
#define JSON_HEDLEY_CONST _Pragma("no_side_effect")
@@ -1782,20 +1622,11 @@
#endif
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus)
#define JSON_HEDLEY_RESTRICT restrict
- #elif JSON_HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || \
- JSON_HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
- JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 4) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 1, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus)) || \
- JSON_HEDLEY_IAR_VERSION_CHECK(8, 0, 0) || \
- defined(__clang__) || \
+ #elif JSON_HEDLEY_GCC_VERSION_CHECK(3, 1, 0) || JSON_HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
+ JSON_HEDLEY_PGI_VERSION_CHECK(17, 10, 0) || JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 4) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 1, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
+ (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus)) || JSON_HEDLEY_IAR_VERSION_CHECK(8, 0, 0) || defined(__clang__) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_RESTRICT __restrict
#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 3, 0) && !defined(__cplusplus)
@@ -1807,21 +1638,13 @@
#if defined(JSON_HEDLEY_INLINE)
#undef JSON_HEDLEY_INLINE
#endif
- #if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
- (defined(__cplusplus) && (__cplusplus >= 199711L))
+ #if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || (defined(__cplusplus) && (__cplusplus >= 199711L))
#define JSON_HEDLEY_INLINE inline
- #elif defined(JSON_HEDLEY_GCC_VERSION) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(6, 2, 0)
+ #elif defined(JSON_HEDLEY_GCC_VERSION) || JSON_HEDLEY_ARM_VERSION_CHECK(6, 2, 0)
#define JSON_HEDLEY_INLINE __inline__
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(12, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 1, 0) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(3, 1, 0) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 0, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(12, 0, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 1, 0) || JSON_HEDLEY_TI_CL430_VERSION_CHECK(3, 1, 0) || JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 2, 0) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8, 0, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_INLINE __inline
#else
@@ -1831,36 +1654,20 @@
#if defined(JSON_HEDLEY_ALWAYS_INLINE)
#undef JSON_HEDLEY_ALWAYS_INLINE
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 0, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10) || \
- JSON_HEDLEY_IAR_VERSION_CHECK(8, 10, 0)
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || JSON_HEDLEY_GCC_VERSION_CHECK(4, 0, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
+ JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10) || JSON_HEDLEY_IAR_VERSION_CHECK(8, 10, 0)
#define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(12, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(12, 0, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_ALWAYS_INLINE __forceinline
- #elif defined(__cplusplus) && \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6, 1, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0))
+ #elif defined(__cplusplus) && \
+ (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6, 1, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0))
#define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;")
#elif JSON_HEDLEY_IAR_VERSION_CHECK(8, 0, 0)
#define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced")
@@ -1871,28 +1678,16 @@
#if defined(JSON_HEDLEY_NEVER_INLINE)
#undef JSON_HEDLEY_NEVER_INLINE
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 0, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
- JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || \
- (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || \
- (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || \
- (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || \
- (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || \
- JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || \
- JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10) || \
- JSON_HEDLEY_IAR_VERSION_CHECK(8, 10, 0)
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || JSON_HEDLEY_GCC_VERSION_CHECK(4, 0, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(10, 1, 0) || \
+ JSON_HEDLEY_TI_VERSION_CHECK(15, 12, 0) || (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4, 8, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5, 2, 0) || (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6, 4, 0) || (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 0, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL430_VERSION_CHECK(4, 3, 0) || (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0) || JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1, 2, 0) || JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2, 1, 0) || \
+ JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10) || JSON_HEDLEY_IAR_VERSION_CHECK(8, 10, 0)
#define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__))
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13, 10, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_NEVER_INLINE __declspec(noinline)
#elif JSON_HEDLEY_PGI_VERSION_CHECK(10, 2, 0)
#define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline")
@@ -1922,15 +1717,10 @@
#define JSON_HEDLEY_PUBLIC __declspec(dllexport)
#define JSON_HEDLEY_IMPORT __declspec(dllimport)
#else
- #if JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 3, 0) || \
- JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(13, 1, 0) || \
- (defined(__TI_EABI__) && \
- ((JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0))) || \
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 3, 0) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 11, 0) || \
+ JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(13, 1, 0) || \
+ (defined(__TI_EABI__) && \
+ ((JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 2, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7, 5, 0))) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden")))
#define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default")))
@@ -1944,14 +1734,10 @@
#if defined(JSON_HEDLEY_NO_THROW)
#undef JSON_HEDLEY_NO_THROW
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 3, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 3, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__))
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13, 1, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0)
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(13, 1, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0)
#define JSON_HEDLEY_NO_THROW __declspec(nothrow)
#else
#define JSON_HEDLEY_NO_THROW
@@ -1960,9 +1746,7 @@
#if defined(JSON_HEDLEY_FALL_THROUGH)
#undef JSON_HEDLEY_FALL_THROUGH
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(7, 0, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || JSON_HEDLEY_GCC_VERSION_CHECK(7, 0, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__))
#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang, fallthrough)
#define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]])
@@ -1977,9 +1761,7 @@
#if defined(JSON_HEDLEY_RETURNS_NON_NULL)
#undef JSON_HEDLEY_RETURNS_NON_NULL
#endif
- #if JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 9, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #if JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || JSON_HEDLEY_GCC_VERSION_CHECK(4, 9, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__))
#elif defined(_Ret_notnull_) /* SAL */
#define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_
@@ -1990,11 +1772,8 @@
#if defined(JSON_HEDLEY_ARRAY_PARAM)
#undef JSON_HEDLEY_ARRAY_PARAM
#endif
- #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
- !defined(__STDC_NO_VLA__) && \
- !defined(__cplusplus) && \
- !defined(JSON_HEDLEY_PGI_VERSION) && \
- !defined(JSON_HEDLEY_TINYC_VERSION)
+ #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__STDC_NO_VLA__) && !defined(__cplusplus) && \
+ !defined(JSON_HEDLEY_PGI_VERSION) && !defined(JSON_HEDLEY_TINYC_VERSION)
#define JSON_HEDLEY_ARRAY_PARAM(name) (name)
#else
#define JSON_HEDLEY_ARRAY_PARAM(name)
@@ -2011,25 +1790,15 @@
#if defined(JSON_HEDLEY_IS_CONSTEXPR_)
#undef JSON_HEDLEY_IS_CONSTEXPR_
#endif
- #if JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_TINYC_VERSION_CHECK(0, 9, 19) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(13, 1, 0) || \
- JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6, 1, 0) || \
- (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0) && !defined(__cplusplus)) || \
- JSON_HEDLEY_CRAY_VERSION_CHECK(8, 1, 0) || \
- JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
+ #if JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_TINYC_VERSION_CHECK(0, 9, 19) || JSON_HEDLEY_ARM_VERSION_CHECK(4, 1, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(13, 1, 0) || \
+ JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6, 1, 0) || (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5, 10, 0) && !defined(__cplusplus)) || \
+ JSON_HEDLEY_CRAY_VERSION_CHECK(8, 1, 0) || JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1, 25, 10)
#define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr)
#endif
#if !defined(__cplusplus)
- #if JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(13, 1, 0) || \
- JSON_HEDLEY_CRAY_VERSION_CHECK(8, 1, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(5, 4, 0) || \
+ #if JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || JSON_HEDLEY_GCC_VERSION_CHECK(3, 4, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
+ JSON_HEDLEY_IBM_VERSION_CHECK(13, 1, 0) || JSON_HEDLEY_CRAY_VERSION_CHECK(8, 1, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(5, 4, 0) || \
JSON_HEDLEY_TINYC_VERSION_CHECK(0, 9, 24)
#if defined(__INTPTR_TYPE__)
#define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*)((__INTPTR_TYPE__)((expr) * 0)) : (int*)0)), int*)
@@ -2037,36 +1806,20 @@
#include <stdint.h>
#define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*)((intptr_t)((expr) * 0)) : (int*)0)), int*)
#endif
- #elif ( \
- defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \
- !defined(JSON_HEDLEY_SUNPRO_VERSION) && \
- !defined(JSON_HEDLEY_PGI_VERSION) && \
- !defined(JSON_HEDLEY_IAR_VERSION)) || \
- (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(4, 9, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(17, 0, 0) || \
- JSON_HEDLEY_IBM_VERSION_CHECK(12, 1, 0) || \
- JSON_HEDLEY_ARM_VERSION_CHECK(5, 3, 0)
+ #elif (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && !defined(JSON_HEDLEY_SUNPRO_VERSION) && !defined(JSON_HEDLEY_PGI_VERSION) && \
+ !defined(JSON_HEDLEY_IAR_VERSION)) || \
+ (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || JSON_HEDLEY_GCC_VERSION_CHECK(4, 9, 0) || \
+ JSON_HEDLEY_INTEL_VERSION_CHECK(17, 0, 0) || JSON_HEDLEY_IBM_VERSION_CHECK(12, 1, 0) || JSON_HEDLEY_ARM_VERSION_CHECK(5, 3, 0)
#if defined(__INTPTR_TYPE__)
#define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*)((__INTPTR_TYPE__)((expr) * 0)) : (int*)0), int*: 1, void*: 0)
#else
#include <stdint.h>
#define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*)((intptr_t) * 0) : (int*)0), int*: 1, void*: 0)
#endif
- #elif defined(JSON_HEDLEY_GCC_VERSION) || \
- defined(JSON_HEDLEY_INTEL_VERSION) || \
- defined(JSON_HEDLEY_TINYC_VERSION) || \
- defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \
- JSON_HEDLEY_TI_CL430_VERSION_CHECK(18, 12, 0) || \
- defined(JSON_HEDLEY_TI_CL2000_VERSION) || \
- defined(JSON_HEDLEY_TI_CL6X_VERSION) || \
- defined(JSON_HEDLEY_TI_CL7X_VERSION) || \
- defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \
- defined(__clang__)
- #define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \
- sizeof(void) != \
- sizeof(*( \
- 1 ? ((void*)((expr) * 0L)) : ((struct { char v[sizeof(void) * 2]; }*)1))))
+ #elif defined(JSON_HEDLEY_GCC_VERSION) || defined(JSON_HEDLEY_INTEL_VERSION) || defined(JSON_HEDLEY_TINYC_VERSION) || \
+ defined(JSON_HEDLEY_TI_ARMCL_VERSION) || JSON_HEDLEY_TI_CL430_VERSION_CHECK(18, 12, 0) || defined(JSON_HEDLEY_TI_CL2000_VERSION) || \
+ defined(JSON_HEDLEY_TI_CL6X_VERSION) || defined(JSON_HEDLEY_TI_CL7X_VERSION) || defined(JSON_HEDLEY_TI_CLPRU_VERSION) || defined(__clang__)
+ #define JSON_HEDLEY_IS_CONSTEXPR_(expr) (sizeof(void) != sizeof(*(1 ? ((void*)((expr) * 0L)) : ((struct { char v[sizeof(void) * 2]; }*)1))))
#endif
#endif
#if defined(JSON_HEDLEY_IS_CONSTEXPR_)
@@ -2103,15 +1856,11 @@
#if defined(JSON_HEDLEY_STATIC_ASSERT)
#undef JSON_HEDLEY_STATIC_ASSERT
#endif
- #if !defined(__cplusplus) && ((defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \
- (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \
- JSON_HEDLEY_GCC_VERSION_CHECK(6, 0, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || \
- defined(_Static_assert))
+ #if !defined(__cplusplus) && ((defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \
+ (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \
+ JSON_HEDLEY_GCC_VERSION_CHECK(6, 0, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0) || defined(_Static_assert))
#define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message)
- #elif (defined(__cplusplus) && (__cplusplus >= 201103L)) || \
- JSON_HEDLEY_MSVC_VERSION_CHECK(16, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #elif (defined(__cplusplus) && (__cplusplus >= 201103L)) || JSON_HEDLEY_MSVC_VERSION_CHECK(16, 0, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message))
#else
#define JSON_HEDLEY_STATIC_ASSERT(expr, message)
@@ -2138,13 +1887,12 @@
#undef JSON_HEDLEY_MESSAGE
#endif
#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
- #define JSON_HEDLEY_MESSAGE(msg) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
- JSON_HEDLEY_PRAGMA(message msg) \
+ #define JSON_HEDLEY_MESSAGE(msg) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
+ JSON_HEDLEY_PRAGMA(message msg) \
JSON_HEDLEY_DIAGNOSTIC_POP
- #elif JSON_HEDLEY_GCC_VERSION_CHECK(4, 4, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
+ #elif JSON_HEDLEY_GCC_VERSION_CHECK(4, 4, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
#define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg)
#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5, 0, 0)
#define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg)
@@ -2160,17 +1908,14 @@
#undef JSON_HEDLEY_WARNING
#endif
#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas")
- #define JSON_HEDLEY_WARNING(msg) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
- JSON_HEDLEY_PRAGMA(clang warning msg) \
+ #define JSON_HEDLEY_WARNING(msg) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \
+ JSON_HEDLEY_PRAGMA(clang warning msg) \
JSON_HEDLEY_DIAGNOSTIC_POP
- #elif JSON_HEDLEY_GCC_VERSION_CHECK(4, 8, 0) || \
- JSON_HEDLEY_PGI_VERSION_CHECK(18, 4, 0) || \
- JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
+ #elif JSON_HEDLEY_GCC_VERSION_CHECK(4, 8, 0) || JSON_HEDLEY_PGI_VERSION_CHECK(18, 4, 0) || JSON_HEDLEY_INTEL_VERSION_CHECK(13, 0, 0)
#define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg)
- #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15, 0, 0) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #elif JSON_HEDLEY_MSVC_VERSION_CHECK(15, 0, 0) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg))
#else
#define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg)
@@ -2184,16 +1929,12 @@
#endif
#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if)
#if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat")
- #define JSON_HEDLEY_REQUIRE(expr) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \
- __attribute__((diagnose_if(!(expr), #expr, "error"))) \
- JSON_HEDLEY_DIAGNOSTIC_POP
- #define JSON_HEDLEY_REQUIRE_MSG(expr, msg) \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \
- __attribute__((diagnose_if(!(expr), msg, "error"))) \
- JSON_HEDLEY_DIAGNOSTIC_POP
+ #define JSON_HEDLEY_REQUIRE(expr) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") __attribute__((diagnose_if(!(expr), #expr, "error"))) JSON_HEDLEY_DIAGNOSTIC_POP
+ #define JSON_HEDLEY_REQUIRE_MSG(expr, msg) \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") __attribute__((diagnose_if(!(expr), msg, "error"))) JSON_HEDLEY_DIAGNOSTIC_POP
#else
#define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error")))
#define JSON_HEDLEY_REQUIRE_MSG(expr, msg) __attribute__((diagnose_if(!(expr), msg, "error")))
@@ -2216,11 +1957,12 @@
#undef JSON_HEDLEY_FLAGS_CAST
#endif
#if JSON_HEDLEY_INTEL_VERSION_CHECK(19, 0, 0)
- #define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__({ \
- JSON_HEDLEY_DIAGNOSTIC_PUSH \
- _Pragma("warning(disable:188)")((T)(expr)); \
- JSON_HEDLEY_DIAGNOSTIC_POP \
- }))
+ #define JSON_HEDLEY_FLAGS_CAST(T, expr) \
+ (__extension__({ \
+ JSON_HEDLEY_DIAGNOSTIC_PUSH \
+ _Pragma("warning(disable:188)")((T)(expr)); \
+ JSON_HEDLEY_DIAGNOSTIC_POP \
+ }))
#else
#define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr)
#endif
@@ -2228,8 +1970,7 @@
#if defined(JSON_HEDLEY_EMPTY_BASES)
#undef JSON_HEDLEY_EMPTY_BASES
#endif
- #if (JSON_HEDLEY_MSVC_VERSION_CHECK(19, 0, 23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20, 0, 0)) || \
- JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
+ #if (JSON_HEDLEY_MSVC_VERSION_CHECK(19, 0, 23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20, 0, 0)) || JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021, 1, 0)
#define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases)
#else
#define JSON_HEDLEY_EMPTY_BASES
@@ -2387,7 +2128,8 @@
#endif
#ifndef JSON_HAS_THREE_WAY_COMPARISON
- #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L
+ #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L && defined(__cpp_lib_three_way_comparison) && \
+ __cpp_lib_three_way_comparison >= 201907L
#define JSON_HAS_THREE_WAY_COMPARISON 1
#else
#define JSON_HAS_THREE_WAY_COMPARISON 0
@@ -2484,119 +2226,196 @@
@def NLOHMANN_JSON_SERIALIZE_ENUM
@since version 3.4.0
*/
-#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \
- template<typename BasicJsonType> \
- inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \
- { \
- static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \
- static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \
- auto it = std::find_if(std::begin(m), std::end(m), [e](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool { \
- return ej_pair.first == e; \
- }); \
- j = ((it != std::end(m)) ? it : std::begin(m))->second; \
- } \
- template<typename BasicJsonType> \
- inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \
- { \
- static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \
- static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \
- auto it = std::find_if(std::begin(m), std::end(m), [&j](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool { \
- return ej_pair.second == j; \
- }); \
- e = ((it != std::end(m)) ? it : std::begin(m))->first; \
+#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \
+ template<typename BasicJsonType> \
+ inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \
+ { \
+ static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \
+ static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \
+ auto it = std::find_if(std::begin(m), std::end(m), [e](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool { \
+ return ej_pair.first == e; \
+ }); \
+ j = ((it != std::end(m)) ? it : std::begin(m))->second; \
+ } \
+ template<typename BasicJsonType> \
+ inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \
+ { \
+ static_assert(std::is_enum<ENUM_TYPE>::value, #ENUM_TYPE " must be an enum!"); \
+ static const std::pair<ENUM_TYPE, BasicJsonType> m[] = __VA_ARGS__; \
+ auto it = std::find_if(std::begin(m), std::end(m), [&j](const std::pair<ENUM_TYPE, BasicJsonType>& ej_pair) -> bool { \
+ return ej_pair.second == j; \
+ }); \
+ e = ((it != std::end(m)) ? it : std::begin(m))->first; \
}
// Ugly macros to avoid uglier copy-paste when specializing basic_json. They
// may be removed in the future once the class is split.
-#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \
- template<template<typename, typename, typename...> class ObjectType, \
- template<typename, typename...> \
- class ArrayType, \
- class StringType, \
- class BooleanType, \
- class NumberIntegerType, \
- class NumberUnsignedType, \
- class NumberFloatType, \
- template<typename> \
- class AllocatorType, \
- template<typename, typename = void> \
- class JSONSerializer, \
- class BinaryType, \
+#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \
+ template<template<typename, typename, typename...> class ObjectType, \
+ template<typename, typename...> \
+ class ArrayType, \
+ class StringType, \
+ class BooleanType, \
+ class NumberIntegerType, \
+ class NumberUnsignedType, \
+ class NumberFloatType, \
+ template<typename> \
+ class AllocatorType, \
+ template<typename, typename = void> \
+ class JSONSerializer, \
+ class BinaryType, \
class CustomBaseClass>
-#define NLOHMANN_BASIC_JSON_TPL \
- basic_json<ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType, CustomBaseClass>
+#define NLOHMANN_BASIC_JSON_TPL \
+ basic_json<ObjectType, \
+ ArrayType, \
+ StringType, \
+ BooleanType, \
+ NumberIntegerType, \
+ NumberUnsignedType, \
+ NumberFloatType, \
+ AllocatorType, \
+ JSONSerializer, \
+ BinaryType, \
+ CustomBaseClass>
// Macros to simplify conversion from/to types
#define NLOHMANN_JSON_EXPAND(x) x
-#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME, ...) NAME
-#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \
- NLOHMANN_JSON_PASTE64, \
- NLOHMANN_JSON_PASTE63, \
- NLOHMANN_JSON_PASTE62, \
- NLOHMANN_JSON_PASTE61, \
- NLOHMANN_JSON_PASTE60, \
- NLOHMANN_JSON_PASTE59, \
- NLOHMANN_JSON_PASTE58, \
- NLOHMANN_JSON_PASTE57, \
- NLOHMANN_JSON_PASTE56, \
- NLOHMANN_JSON_PASTE55, \
- NLOHMANN_JSON_PASTE54, \
- NLOHMANN_JSON_PASTE53, \
- NLOHMANN_JSON_PASTE52, \
- NLOHMANN_JSON_PASTE51, \
- NLOHMANN_JSON_PASTE50, \
- NLOHMANN_JSON_PASTE49, \
- NLOHMANN_JSON_PASTE48, \
- NLOHMANN_JSON_PASTE47, \
- NLOHMANN_JSON_PASTE46, \
- NLOHMANN_JSON_PASTE45, \
- NLOHMANN_JSON_PASTE44, \
- NLOHMANN_JSON_PASTE43, \
- NLOHMANN_JSON_PASTE42, \
- NLOHMANN_JSON_PASTE41, \
- NLOHMANN_JSON_PASTE40, \
- NLOHMANN_JSON_PASTE39, \
- NLOHMANN_JSON_PASTE38, \
- NLOHMANN_JSON_PASTE37, \
- NLOHMANN_JSON_PASTE36, \
- NLOHMANN_JSON_PASTE35, \
- NLOHMANN_JSON_PASTE34, \
- NLOHMANN_JSON_PASTE33, \
- NLOHMANN_JSON_PASTE32, \
- NLOHMANN_JSON_PASTE31, \
- NLOHMANN_JSON_PASTE30, \
- NLOHMANN_JSON_PASTE29, \
- NLOHMANN_JSON_PASTE28, \
- NLOHMANN_JSON_PASTE27, \
- NLOHMANN_JSON_PASTE26, \
- NLOHMANN_JSON_PASTE25, \
- NLOHMANN_JSON_PASTE24, \
- NLOHMANN_JSON_PASTE23, \
- NLOHMANN_JSON_PASTE22, \
- NLOHMANN_JSON_PASTE21, \
- NLOHMANN_JSON_PASTE20, \
- NLOHMANN_JSON_PASTE19, \
- NLOHMANN_JSON_PASTE18, \
- NLOHMANN_JSON_PASTE17, \
- NLOHMANN_JSON_PASTE16, \
- NLOHMANN_JSON_PASTE15, \
- NLOHMANN_JSON_PASTE14, \
- NLOHMANN_JSON_PASTE13, \
- NLOHMANN_JSON_PASTE12, \
- NLOHMANN_JSON_PASTE11, \
- NLOHMANN_JSON_PASTE10, \
- NLOHMANN_JSON_PASTE9, \
- NLOHMANN_JSON_PASTE8, \
- NLOHMANN_JSON_PASTE7, \
- NLOHMANN_JSON_PASTE6, \
- NLOHMANN_JSON_PASTE5, \
- NLOHMANN_JSON_PASTE4, \
- NLOHMANN_JSON_PASTE3, \
- NLOHMANN_JSON_PASTE2, \
- NLOHMANN_JSON_PASTE1)(__VA_ARGS__))
+#define NLOHMANN_JSON_GET_MACRO(_1, \
+ _2, \
+ _3, \
+ _4, \
+ _5, \
+ _6, \
+ _7, \
+ _8, \
+ _9, \
+ _10, \
+ _11, \
+ _12, \
+ _13, \
+ _14, \
+ _15, \
+ _16, \
+ _17, \
+ _18, \
+ _19, \
+ _20, \
+ _21, \
+ _22, \
+ _23, \
+ _24, \
+ _25, \
+ _26, \
+ _27, \
+ _28, \
+ _29, \
+ _30, \
+ _31, \
+ _32, \
+ _33, \
+ _34, \
+ _35, \
+ _36, \
+ _37, \
+ _38, \
+ _39, \
+ _40, \
+ _41, \
+ _42, \
+ _43, \
+ _44, \
+ _45, \
+ _46, \
+ _47, \
+ _48, \
+ _49, \
+ _50, \
+ _51, \
+ _52, \
+ _53, \
+ _54, \
+ _55, \
+ _56, \
+ _57, \
+ _58, \
+ _59, \
+ _60, \
+ _61, \
+ _62, \
+ _63, \
+ _64, \
+ NAME, \
+ ...) \
+ NAME
+#define NLOHMANN_JSON_PASTE(...) \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \
+ NLOHMANN_JSON_PASTE64, \
+ NLOHMANN_JSON_PASTE63, \
+ NLOHMANN_JSON_PASTE62, \
+ NLOHMANN_JSON_PASTE61, \
+ NLOHMANN_JSON_PASTE60, \
+ NLOHMANN_JSON_PASTE59, \
+ NLOHMANN_JSON_PASTE58, \
+ NLOHMANN_JSON_PASTE57, \
+ NLOHMANN_JSON_PASTE56, \
+ NLOHMANN_JSON_PASTE55, \
+ NLOHMANN_JSON_PASTE54, \
+ NLOHMANN_JSON_PASTE53, \
+ NLOHMANN_JSON_PASTE52, \
+ NLOHMANN_JSON_PASTE51, \
+ NLOHMANN_JSON_PASTE50, \
+ NLOHMANN_JSON_PASTE49, \
+ NLOHMANN_JSON_PASTE48, \
+ NLOHMANN_JSON_PASTE47, \
+ NLOHMANN_JSON_PASTE46, \
+ NLOHMANN_JSON_PASTE45, \
+ NLOHMANN_JSON_PASTE44, \
+ NLOHMANN_JSON_PASTE43, \
+ NLOHMANN_JSON_PASTE42, \
+ NLOHMANN_JSON_PASTE41, \
+ NLOHMANN_JSON_PASTE40, \
+ NLOHMANN_JSON_PASTE39, \
+ NLOHMANN_JSON_PASTE38, \
+ NLOHMANN_JSON_PASTE37, \
+ NLOHMANN_JSON_PASTE36, \
+ NLOHMANN_JSON_PASTE35, \
+ NLOHMANN_JSON_PASTE34, \
+ NLOHMANN_JSON_PASTE33, \
+ NLOHMANN_JSON_PASTE32, \
+ NLOHMANN_JSON_PASTE31, \
+ NLOHMANN_JSON_PASTE30, \
+ NLOHMANN_JSON_PASTE29, \
+ NLOHMANN_JSON_PASTE28, \
+ NLOHMANN_JSON_PASTE27, \
+ NLOHMANN_JSON_PASTE26, \
+ NLOHMANN_JSON_PASTE25, \
+ NLOHMANN_JSON_PASTE24, \
+ NLOHMANN_JSON_PASTE23, \
+ NLOHMANN_JSON_PASTE22, \
+ NLOHMANN_JSON_PASTE21, \
+ NLOHMANN_JSON_PASTE20, \
+ NLOHMANN_JSON_PASTE19, \
+ NLOHMANN_JSON_PASTE18, \
+ NLOHMANN_JSON_PASTE17, \
+ NLOHMANN_JSON_PASTE16, \
+ NLOHMANN_JSON_PASTE15, \
+ NLOHMANN_JSON_PASTE14, \
+ NLOHMANN_JSON_PASTE13, \
+ NLOHMANN_JSON_PASTE12, \
+ NLOHMANN_JSON_PASTE11, \
+ NLOHMANN_JSON_PASTE10, \
+ NLOHMANN_JSON_PASTE9, \
+ NLOHMANN_JSON_PASTE8, \
+ NLOHMANN_JSON_PASTE7, \
+ NLOHMANN_JSON_PASTE6, \
+ NLOHMANN_JSON_PASTE5, \
+ NLOHMANN_JSON_PASTE4, \
+ NLOHMANN_JSON_PASTE3, \
+ NLOHMANN_JSON_PASTE2, \
+ NLOHMANN_JSON_PASTE1)(__VA_ARGS__))
#define NLOHMANN_JSON_PASTE2(func, v1) func(v1)
#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2)
#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3)
@@ -2605,61 +2424,3397 @@
#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6)
#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7)
#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8)
-#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9)
-#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10)
-#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11)
-#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12)
-#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13)
-#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14)
-#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15)
-#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16)
-#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17)
-#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18)
-#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19)
-#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20)
-#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21)
-#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22)
-#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23)
-#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24)
-#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25)
-#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26)
-#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27)
-#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28)
-#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29)
-#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30)
-#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31)
-#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32)
-#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33)
-#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34)
-#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35)
-#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36)
-#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37)
-#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38)
-#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39)
-#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40)
-#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41)
-#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42)
-#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43)
-#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44)
-#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45)
-#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46)
-#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47)
-#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48)
-#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49)
-#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50)
-#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51)
-#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52)
-#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53)
-#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54)
-#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55)
-#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56)
-#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57)
-#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58)
-#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59)
-#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60)
-#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61)
-#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62)
-#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63)
+#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9)
+#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10)
+#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11)
+#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12)
+#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13)
+#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14)
+#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15)
+#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16)
+#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17)
+#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18)
+#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19)
+#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20)
+#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21)
+#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) \
+ NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22)
+#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23)
+#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24)
+#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25)
+#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26)
+#define NLOHMANN_JSON_PASTE28(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27)
+#define NLOHMANN_JSON_PASTE29(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28)
+#define NLOHMANN_JSON_PASTE30(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE29(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29)
+#define NLOHMANN_JSON_PASTE31(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE30(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30)
+#define NLOHMANN_JSON_PASTE32(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE31(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31)
+#define NLOHMANN_JSON_PASTE33(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE32(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32)
+#define NLOHMANN_JSON_PASTE34(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE33(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33)
+#define NLOHMANN_JSON_PASTE35(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE34(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34)
+#define NLOHMANN_JSON_PASTE36(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE35(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35)
+#define NLOHMANN_JSON_PASTE37(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE36(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36)
+#define NLOHMANN_JSON_PASTE38(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE37(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37)
+#define NLOHMANN_JSON_PASTE39(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE38(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38)
+#define NLOHMANN_JSON_PASTE40(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE39(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39)
+#define NLOHMANN_JSON_PASTE41(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE40(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40)
+#define NLOHMANN_JSON_PASTE42(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE41(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41)
+#define NLOHMANN_JSON_PASTE43(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE42(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42)
+#define NLOHMANN_JSON_PASTE44(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE43(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43)
+#define NLOHMANN_JSON_PASTE45(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE44(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44)
+#define NLOHMANN_JSON_PASTE46(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE45(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45)
+#define NLOHMANN_JSON_PASTE47(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE46(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46)
+#define NLOHMANN_JSON_PASTE48(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE47(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47)
+#define NLOHMANN_JSON_PASTE49(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE48(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48)
+#define NLOHMANN_JSON_PASTE50(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE49(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49)
+#define NLOHMANN_JSON_PASTE51(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE50(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50)
+#define NLOHMANN_JSON_PASTE52(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE51(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51)
+#define NLOHMANN_JSON_PASTE53(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE52(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52)
+#define NLOHMANN_JSON_PASTE54(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE53(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53)
+#define NLOHMANN_JSON_PASTE55(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE54(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54)
+#define NLOHMANN_JSON_PASTE56(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE55(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55)
+#define NLOHMANN_JSON_PASTE57(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE56(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56)
+#define NLOHMANN_JSON_PASTE58(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE57(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57)
+#define NLOHMANN_JSON_PASTE59(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE58(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58)
+#define NLOHMANN_JSON_PASTE60(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE59(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59)
+#define NLOHMANN_JSON_PASTE61(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59, \
+ v60) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE60(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59, \
+ v60)
+#define NLOHMANN_JSON_PASTE62(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59, \
+ v60, \
+ v61) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE61(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59, \
+ v60, \
+ v61)
+#define NLOHMANN_JSON_PASTE63(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59, \
+ v60, \
+ v61, \
+ v62) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE62(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59, \
+ v60, \
+ v61, \
+ v62)
+#define NLOHMANN_JSON_PASTE64(func, \
+ v1, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59, \
+ v60, \
+ v61, \
+ v62, \
+ v63) \
+ NLOHMANN_JSON_PASTE2(func, v1) \
+ NLOHMANN_JSON_PASTE63(func, \
+ v2, \
+ v3, \
+ v4, \
+ v5, \
+ v6, \
+ v7, \
+ v8, \
+ v9, \
+ v10, \
+ v11, \
+ v12, \
+ v13, \
+ v14, \
+ v15, \
+ v16, \
+ v17, \
+ v18, \
+ v19, \
+ v20, \
+ v21, \
+ v22, \
+ v23, \
+ v24, \
+ v25, \
+ v26, \
+ v27, \
+ v28, \
+ v29, \
+ v30, \
+ v31, \
+ v32, \
+ v33, \
+ v34, \
+ v35, \
+ v36, \
+ v37, \
+ v38, \
+ v39, \
+ v40, \
+ v41, \
+ v42, \
+ v43, \
+ v44, \
+ v45, \
+ v46, \
+ v47, \
+ v48, \
+ v49, \
+ v50, \
+ v51, \
+ v52, \
+ v53, \
+ v54, \
+ v55, \
+ v56, \
+ v57, \
+ v58, \
+ v59, \
+ v60, \
+ v61, \
+ v62, \
+ v63)
#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1;
#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1);
@@ -2670,31 +5825,31 @@
@def NLOHMANN_DEFINE_TYPE_INTRUSIVE
@since version 3.9.0
*/
-#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \
- friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
- { \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
- } \
- friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
- { \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) \
+#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \
+ friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
+ { \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
+ } \
+ friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
+ { \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) \
}
-#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \
- friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
- { \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
- } \
- friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
- { \
- const Type nlohmann_json_default_obj{}; \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) \
+#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \
+ friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
+ { \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
+ } \
+ friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
+ { \
+ const Type nlohmann_json_default_obj{}; \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) \
}
-#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \
- friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
- { \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
+#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \
+ friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
+ { \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
}
/*!
@@ -2702,31 +5857,31 @@
@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE
@since version 3.9.0
*/
-#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \
- inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
- { \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
- } \
- inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
- { \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) \
+#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \
+ inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
+ { \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
+ } \
+ inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
+ { \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) \
}
-#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \
- inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
- { \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
+#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \
+ inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
+ { \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
}
-#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \
- inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
- { \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
- } \
- inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
- { \
- const Type nlohmann_json_default_obj{}; \
- NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) \
+#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \
+ inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) \
+ { \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) \
+ } \
+ inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) \
+ { \
+ const Type nlohmann_json_default_obj{}; \
+ NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) \
}
// inspired from https://stackoverflow.com/a/26745591
@@ -2735,37 +5890,36 @@
//
// it allows using the detected idiom to retrieve the return type
// of such an expression
-#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \
- namespace detail { \
- using std::std_name; \
- \
- template<typename... T> \
- using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
- } \
- \
- namespace detail2 { \
- struct std_name##_tag \
- { \
- }; \
- \
- template<typename... T> \
- std_name##_tag std_name(T&&...); \
- \
- template<typename... T> \
- using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
- \
- template<typename... T> \
- struct would_call_std_##std_name \
- { \
- static constexpr auto const value = ::nlohmann::detail:: \
- is_detected_exact<std_name##_tag, result_of_##std_name, T...>::value; \
- }; \
- } /* namespace detail2 */ \
- \
- template<typename... T> \
- struct would_call_std_##std_name : detail2::would_call_std_##std_name<T...> \
- { \
- }
+#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \
+ namespace detail \
+ { \
+ using std::std_name; \
+ \
+ template<typename... T> \
+ using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
+ } \
+ \
+ namespace detail2 \
+ { \
+ struct std_name##_tag \
+ {}; \
+ \
+ template<typename... T> \
+ std_name##_tag std_name(T&&...); \
+ \
+ template<typename... T> \
+ using result_of_##std_name = decltype(std_name(std::declval<T>()...)); \
+ \
+ template<typename... T> \
+ struct would_call_std_##std_name \
+ { \
+ static constexpr auto const value = ::nlohmann::detail::is_detected_exact<std_name##_tag, result_of_##std_name, T...>::value; \
+ }; \
+ } /* namespace detail2 */ \
+ \
+ template<typename... T> \
+ struct would_call_std_##std_name : detail2::would_call_std_##std_name<T...> \
+ {}
#ifndef JSON_USE_IMPLICIT_CONVERSIONS
#define JSON_USE_IMPLICIT_CONVERSIONS 1
@@ -2803,7 +5957,8 @@
// #include <nlohmann/detail/macro_scope.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
template<typename T>
using uncvref_t = typename std::remove_cv<typename std::remove_reference<T>::type>::type;
@@ -2864,7 +6019,8 @@
template<size_t... Ints>
using index_sequence = integer_sequence<size_t, Ints...>;
-namespace utility_internal {
+namespace utility_internal
+{
template<typename Seq, size_t SeqSize, size_t Rem>
struct Extend;
@@ -2887,8 +6043,7 @@
template<typename T, size_t N>
struct Gen
{
- using type =
- typename Extend<typename Gen<T, N / 2>::type, N / 2, N % 2>::type;
+ using type = typename Extend<typename Gen<T, N / 2>::type, N / 2, N % 2>::type;
};
template<typename T>
@@ -2991,7 +6146,8 @@
// #include <nlohmann/detail/meta/void_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
template<typename It, typename = void>
struct iterator_types
@@ -3013,14 +6169,11 @@
// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341.
template<typename T, typename = void>
struct iterator_traits
-{
-};
+{};
template<typename T>
-struct iterator_traits<T, enable_if_t<!std::is_pointer<T>::value>>
- : iterator_types<T>
-{
-};
+struct iterator_traits<T, enable_if_t<!std::is_pointer<T>::value>> : iterator_types<T>
+{};
template<typename T>
struct iterator_traits<T*, enable_if_t<std::is_object<T>::value>>
@@ -3114,8 +6267,7 @@
/// a class to store JSON values
/// @sa https://json.nlohmann.me/api/basic_json/
-template<template<typename U, typename V, typename... Args> class ObjectType =
- std::map,
+template<template<typename U, typename V, typename... Args> class ObjectType = std::map,
template<typename U, typename... Args> class ArrayType = std::vector,
class StringType = std::string,
class BooleanType = bool,
@@ -3123,8 +6275,7 @@
class NumberUnsignedType = std::uint64_t,
class NumberFloatType = double,
template<typename U> class AllocatorType = std::allocator,
- template<typename T, typename SFINAE = void> class JSONSerializer =
- adl_serializer,
+ template<typename T, typename SFINAE = void> class JSONSerializer = adl_serializer,
class BinaryType = std::vector<std::uint8_t>, // cppcheck-suppress syntaxError
class CustomBaseClass = void>
class basic_json;
@@ -3162,7 +6313,8 @@
@since version 2.1.0
*/
-namespace detail {
+namespace detail
+{
/////////////
// helpers //
@@ -3189,8 +6341,10 @@
// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t
// false_type otherwise
template<typename BasicJsonContext>
-struct is_basic_json_context : std::integral_constant<bool,
- is_basic_json<typename std::remove_cv<typename std::remove_pointer<BasicJsonContext>::type>::type>::value || std::is_same<BasicJsonContext, std::nullptr_t>::value>
+struct is_basic_json_context
+ : std::integral_constant<bool,
+ is_basic_json<typename std::remove_cv<typename std::remove_pointer<BasicJsonContext>::type>::type>::value ||
+ std::is_same<BasicJsonContext, std::nullptr_t>::value>
{};
//////////////////////
@@ -3262,8 +6416,7 @@
{
using serializer = typename BasicJsonType::template json_serializer<T, void>;
- static constexpr bool value =
- is_detected_exact<void, from_json_function, serializer, const BasicJsonType&, T&>::value;
+ static constexpr bool value = is_detected_exact<void, from_json_function, serializer, const BasicJsonType&, T&>::value;
};
// This trait checks if JSONSerializer<T>::from_json(json const&) exists
@@ -3277,8 +6430,7 @@
{
using serializer = typename BasicJsonType::template json_serializer<T, void>;
- static constexpr bool value =
- is_detected_exact<T, from_json_function, serializer, const BasicJsonType&>::value;
+ static constexpr bool value = is_detected_exact<T, from_json_function, serializer, const BasicJsonType&>::value;
};
// This trait checks if BasicJsonType::json_serializer<T>::to_json exists
@@ -3292,8 +6444,7 @@
{
using serializer = typename BasicJsonType::template json_serializer<T, void>;
- static constexpr bool value =
- is_detected_exact<void, to_json_function, serializer, BasicJsonType&, T>::value;
+ static constexpr bool value = is_detected_exact<void, to_json_function, serializer, BasicJsonType&, T>::value;
};
template<typename T>
@@ -3309,9 +6460,7 @@
{
using object_t = typename BasicJsonType::object_t;
using object_comparator_t = typename BasicJsonType::default_object_comparator_t;
- using type = typename std::conditional<has_key_compare<object_t>::value,
- typename object_t::key_compare,
- object_comparator_t>::type;
+ using type = typename std::conditional<has_key_compare<object_t>::value, typename object_t::key_compare, object_comparator_t>::type;
};
template<typename BasicJsonType>
@@ -3386,8 +6535,7 @@
struct conjunction<B> : B
{};
template<class B, class... Bn>
-struct conjunction<B, Bn...>
- : std::conditional<static_cast<bool>(B::value), conjunction<Bn...>, B>::type
+struct conjunction<B, Bn...> : std::conditional<static_cast<bool>(B::value), conjunction<Bn...>, B>::type
{};
// https://en.cppreference.com/w/cpp/types/negation
@@ -3403,23 +6551,19 @@
{};
template<typename T1, typename T2>
-struct is_default_constructible<std::pair<T1, T2>>
- : conjunction<is_default_constructible<T1>, is_default_constructible<T2>>
+struct is_default_constructible<std::pair<T1, T2>> : conjunction<is_default_constructible<T1>, is_default_constructible<T2>>
{};
template<typename T1, typename T2>
-struct is_default_constructible<const std::pair<T1, T2>>
- : conjunction<is_default_constructible<T1>, is_default_constructible<T2>>
+struct is_default_constructible<const std::pair<T1, T2>> : conjunction<is_default_constructible<T1>, is_default_constructible<T2>>
{};
template<typename... Ts>
-struct is_default_constructible<std::tuple<Ts...>>
- : conjunction<is_default_constructible<Ts>...>
+struct is_default_constructible<std::tuple<Ts...>> : conjunction<is_default_constructible<Ts>...>
{};
template<typename... Ts>
-struct is_default_constructible<const std::tuple<Ts...>>
- : conjunction<is_default_constructible<Ts>...>
+struct is_default_constructible<const std::tuple<Ts...>> : conjunction<is_default_constructible<Ts>...>
{};
template<typename T, typename... Args>
@@ -3453,12 +6597,9 @@
using traits = iterator_traits<T>;
public:
- static constexpr auto value =
- is_detected<value_type_t, traits>::value &&
- is_detected<difference_type_t, traits>::value &&
- is_detected<pointer_t, traits>::value &&
- is_detected<iterator_category_t, traits>::value &&
- is_detected<reference_t, traits>::value;
+ static constexpr auto value = is_detected<value_type_t, traits>::value && is_detected<difference_type_t, traits>::value &&
+ is_detected<pointer_t, traits>::value && is_detected<iterator_category_t, traits>::value &&
+ is_detected<reference_t, traits>::value;
};
template<typename T>
@@ -3473,8 +6614,7 @@
// to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator
// and https://en.cppreference.com/w/cpp/iterator/sentinel_for
// but reimplementing these would be too much work, as a lot of other concepts are used underneath
- static constexpr auto is_iterator_begin =
- is_iterator_traits<iterator_traits<iterator>>::value;
+ static constexpr auto is_iterator_begin = is_iterator_traits<iterator_traits<iterator>>::value;
public:
static constexpr bool value = !std::is_same<iterator, nonesuch>::value && !std::is_same<sentinel, nonesuch>::value && is_iterator_begin;
@@ -3506,22 +6646,17 @@
struct is_compatible_object_type_impl<
BasicJsonType,
CompatibleObjectType,
- enable_if_t<is_detected<mapped_type_t, CompatibleObjectType>::value &&
- is_detected<key_type_t, CompatibleObjectType>::value>>
+ enable_if_t<is_detected<mapped_type_t, CompatibleObjectType>::value && is_detected<key_type_t, CompatibleObjectType>::value>>
{
using object_t = typename BasicJsonType::object_t;
// macOS's is_constructible does not play well with nonesuch...
- static constexpr bool value =
- is_constructible<typename object_t::key_type,
- typename CompatibleObjectType::key_type>::value &&
- is_constructible<typename object_t::mapped_type,
- typename CompatibleObjectType::mapped_type>::value;
+ static constexpr bool value = is_constructible<typename object_t::key_type, typename CompatibleObjectType::key_type>::value &&
+ is_constructible<typename object_t::mapped_type, typename CompatibleObjectType::mapped_type>::value;
};
template<typename BasicJsonType, typename CompatibleObjectType>
-struct is_compatible_object_type
- : is_compatible_object_type_impl<BasicJsonType, CompatibleObjectType>
+struct is_compatible_object_type : is_compatible_object_type_impl<BasicJsonType, CompatibleObjectType>
{};
template<typename BasicJsonType, typename ConstructibleObjectType, typename = void>
@@ -3532,38 +6667,26 @@
struct is_constructible_object_type_impl<
BasicJsonType,
ConstructibleObjectType,
- enable_if_t<is_detected<mapped_type_t, ConstructibleObjectType>::value &&
- is_detected<key_type_t, ConstructibleObjectType>::value>>
+ enable_if_t<is_detected<mapped_type_t, ConstructibleObjectType>::value && is_detected<key_type_t, ConstructibleObjectType>::value>>
{
using object_t = typename BasicJsonType::object_t;
- static constexpr bool value =
- (is_default_constructible<ConstructibleObjectType>::value &&
- (std::is_move_assignable<ConstructibleObjectType>::value ||
- std::is_copy_assignable<ConstructibleObjectType>::value) &&
- (is_constructible<typename ConstructibleObjectType::key_type,
- typename object_t::key_type>::value &&
- std::is_same<
- typename object_t::mapped_type,
- typename ConstructibleObjectType::mapped_type>::value)) ||
- (has_from_json<BasicJsonType,
- typename ConstructibleObjectType::mapped_type>::value ||
- has_non_default_from_json<
- BasicJsonType,
- typename ConstructibleObjectType::mapped_type>::value);
+ static constexpr bool value = (is_default_constructible<ConstructibleObjectType>::value &&
+ (std::is_move_assignable<ConstructibleObjectType>::value || std::is_copy_assignable<ConstructibleObjectType>::value) &&
+ (is_constructible<typename ConstructibleObjectType::key_type, typename object_t::key_type>::value &&
+ std::is_same<typename object_t::mapped_type, typename ConstructibleObjectType::mapped_type>::value)) ||
+ (has_from_json<BasicJsonType, typename ConstructibleObjectType::mapped_type>::value ||
+ has_non_default_from_json<BasicJsonType, typename ConstructibleObjectType::mapped_type>::value);
};
template<typename BasicJsonType, typename ConstructibleObjectType>
-struct is_constructible_object_type
- : is_constructible_object_type_impl<BasicJsonType,
- ConstructibleObjectType>
+struct is_constructible_object_type : is_constructible_object_type_impl<BasicJsonType, ConstructibleObjectType>
{};
template<typename BasicJsonType, typename CompatibleStringType>
struct is_compatible_string_type
{
- static constexpr auto value =
- is_constructible<typename BasicJsonType::string_t, CompatibleStringType>::value;
+ static constexpr auto value = is_constructible<typename BasicJsonType::string_t, CompatibleStringType>::value;
};
template<typename BasicJsonType, typename ConstructibleStringType>
@@ -3576,12 +6699,8 @@
using laundered_type = ConstructibleStringType;
#endif
- static constexpr auto value =
- conjunction<
- is_constructible<laundered_type, typename BasicJsonType::string_t>,
- is_detected_exact<typename BasicJsonType::string_t::value_type,
- value_type_t,
- laundered_type>>::value;
+ static constexpr auto value = conjunction<is_constructible<laundered_type, typename BasicJsonType::string_t>,
+ is_detected_exact<typename BasicJsonType::string_t::value_type, value_type_t, laundered_type>>::value;
};
template<typename BasicJsonType, typename CompatibleArrayType, typename = void>
@@ -3589,24 +6708,19 @@
{};
template<typename BasicJsonType, typename CompatibleArrayType>
-struct is_compatible_array_type_impl<
- BasicJsonType,
- CompatibleArrayType,
- enable_if_t<
- is_detected<iterator_t, CompatibleArrayType>::value &&
- is_iterator_traits<iterator_traits<detected_t<iterator_t, CompatibleArrayType>>>::value &&
- // special case for types like std::filesystem::path whose iterator's value_type are themselves
- // c.f. https://github.com/nlohmann/json/pull/3073
- !std::is_same<CompatibleArrayType, detected_t<range_value_t, CompatibleArrayType>>::value>>
+struct is_compatible_array_type_impl<BasicJsonType,
+ CompatibleArrayType,
+ enable_if_t<is_detected<iterator_t, CompatibleArrayType>::value &&
+ is_iterator_traits<iterator_traits<detected_t<iterator_t, CompatibleArrayType>>>::value &&
+ // special case for types like std::filesystem::path whose iterator's value_type are themselves
+ // c.f. https://github.com/nlohmann/json/pull/3073
+ !std::is_same<CompatibleArrayType, detected_t<range_value_t, CompatibleArrayType>>::value>>
{
- static constexpr bool value =
- is_constructible<BasicJsonType,
- range_value_t<CompatibleArrayType>>::value;
+ static constexpr bool value = is_constructible<BasicJsonType, range_value_t<CompatibleArrayType>>::value;
};
template<typename BasicJsonType, typename CompatibleArrayType>
-struct is_compatible_array_type
- : is_compatible_array_type_impl<BasicJsonType, CompatibleArrayType>
+struct is_compatible_array_type : is_compatible_array_type_impl<BasicJsonType, CompatibleArrayType>
{};
template<typename BasicJsonType, typename ConstructibleArrayType, typename = void>
@@ -3614,48 +6728,34 @@
{};
template<typename BasicJsonType, typename ConstructibleArrayType>
-struct is_constructible_array_type_impl<
- BasicJsonType,
- ConstructibleArrayType,
- enable_if_t<std::is_same<ConstructibleArrayType,
- typename BasicJsonType::value_type>::value>>
- : std::true_type
+struct is_constructible_array_type_impl<BasicJsonType,
+ ConstructibleArrayType,
+ enable_if_t<std::is_same<ConstructibleArrayType, typename BasicJsonType::value_type>::value>> : std::true_type
{};
template<typename BasicJsonType, typename ConstructibleArrayType>
struct is_constructible_array_type_impl<
BasicJsonType,
ConstructibleArrayType,
- enable_if_t<!std::is_same<ConstructibleArrayType,
- typename BasicJsonType::value_type>::value &&
- !is_compatible_string_type<BasicJsonType, ConstructibleArrayType>::value &&
- is_default_constructible<ConstructibleArrayType>::value &&
- (std::is_move_assignable<ConstructibleArrayType>::value ||
- std::is_copy_assignable<ConstructibleArrayType>::value) &&
+ enable_if_t<!std::is_same<ConstructibleArrayType, typename BasicJsonType::value_type>::value &&
+ !is_compatible_string_type<BasicJsonType, ConstructibleArrayType>::value && is_default_constructible<ConstructibleArrayType>::value &&
+ (std::is_move_assignable<ConstructibleArrayType>::value || std::is_copy_assignable<ConstructibleArrayType>::value) &&
is_detected<iterator_t, ConstructibleArrayType>::value &&
is_iterator_traits<iterator_traits<detected_t<iterator_t, ConstructibleArrayType>>>::value &&
is_detected<range_value_t, ConstructibleArrayType>::value &&
// special case for types like std::filesystem::path whose iterator's value_type are themselves
// c.f. https://github.com/nlohmann/json/pull/3073
!std::is_same<ConstructibleArrayType, detected_t<range_value_t, ConstructibleArrayType>>::value &&
- is_complete_type<
- detected_t<range_value_t, ConstructibleArrayType>>::value>>
+ is_complete_type<detected_t<range_value_t, ConstructibleArrayType>>::value>>
{
using value_type = range_value_t<ConstructibleArrayType>;
- static constexpr bool value =
- std::is_same<value_type,
- typename BasicJsonType::array_t::value_type>::value ||
- has_from_json<BasicJsonType,
- value_type>::value ||
- has_non_default_from_json<
- BasicJsonType,
- value_type>::value;
+ static constexpr bool value = std::is_same<value_type, typename BasicJsonType::array_t::value_type>::value ||
+ has_from_json<BasicJsonType, value_type>::value || has_non_default_from_json<BasicJsonType, value_type>::value;
};
template<typename BasicJsonType, typename ConstructibleArrayType>
-struct is_constructible_array_type
- : is_constructible_array_type_impl<BasicJsonType, ConstructibleArrayType>
+struct is_constructible_array_type : is_constructible_array_type_impl<BasicJsonType, ConstructibleArrayType>
{};
template<typename RealIntegerType, typename CompatibleNumberIntegerType, typename = void>
@@ -3663,28 +6763,21 @@
{};
template<typename RealIntegerType, typename CompatibleNumberIntegerType>
-struct is_compatible_integer_type_impl<
- RealIntegerType,
- CompatibleNumberIntegerType,
- enable_if_t<std::is_integral<RealIntegerType>::value &&
- std::is_integral<CompatibleNumberIntegerType>::value &&
- !std::is_same<bool, CompatibleNumberIntegerType>::value>>
+struct is_compatible_integer_type_impl<RealIntegerType,
+ CompatibleNumberIntegerType,
+ enable_if_t<std::is_integral<RealIntegerType>::value && std::is_integral<CompatibleNumberIntegerType>::value &&
+ !std::is_same<bool, CompatibleNumberIntegerType>::value>>
{
// is there an assert somewhere on overflows?
using RealLimits = std::numeric_limits<RealIntegerType>;
using CompatibleLimits = std::numeric_limits<CompatibleNumberIntegerType>;
- static constexpr auto value =
- is_constructible<RealIntegerType,
- CompatibleNumberIntegerType>::value &&
- CompatibleLimits::is_integer &&
- RealLimits::is_signed == CompatibleLimits::is_signed;
+ static constexpr auto value = is_constructible<RealIntegerType, CompatibleNumberIntegerType>::value && CompatibleLimits::is_integer &&
+ RealLimits::is_signed == CompatibleLimits::is_signed;
};
template<typename RealIntegerType, typename CompatibleNumberIntegerType>
-struct is_compatible_integer_type
- : is_compatible_integer_type_impl<RealIntegerType,
- CompatibleNumberIntegerType>
+struct is_compatible_integer_type : is_compatible_integer_type_impl<RealIntegerType, CompatibleNumberIntegerType>
{};
template<typename BasicJsonType, typename CompatibleType, typename = void>
@@ -3692,18 +6785,13 @@
{};
template<typename BasicJsonType, typename CompatibleType>
-struct is_compatible_type_impl<
- BasicJsonType,
- CompatibleType,
- enable_if_t<is_complete_type<CompatibleType>::value>>
+struct is_compatible_type_impl<BasicJsonType, CompatibleType, enable_if_t<is_complete_type<CompatibleType>::value>>
{
- static constexpr bool value =
- has_to_json<BasicJsonType, CompatibleType>::value;
+ static constexpr bool value = has_to_json<BasicJsonType, CompatibleType>::value;
};
template<typename BasicJsonType, typename CompatibleType>
-struct is_compatible_type
- : is_compatible_type_impl<BasicJsonType, CompatibleType>
+struct is_compatible_type : is_compatible_type_impl<BasicJsonType, CompatibleType>
{};
template<typename T1, typename T2>
@@ -3744,7 +6832,12 @@
{};
template<typename Compare, typename A, typename B>
-struct is_comparable<Compare, A, B, void_t<decltype(std::declval<Compare>()(std::declval<A>(), std::declval<B>())), decltype(std::declval<Compare>()(std::declval<B>(), std::declval<A>()))>> : std::true_type
+struct is_comparable<
+ Compare,
+ A,
+ B,
+ void_t<decltype(std::declval<Compare>()(std::declval<A>(), std::declval<B>())), decltype(std::declval<Compare>()(std::declval<B>(), std::declval<A>()))>>
+ : std::true_type
{};
template<typename T>
@@ -3752,11 +6845,18 @@
// type trait to check if KeyType can be used as object key (without a BasicJsonType)
// see is_usable_as_basic_json_key_type below
-template<typename Comparator, typename ObjectKeyType, typename KeyTypeCVRef, bool RequireTransparentComparator = true, bool ExcludeObjectKeyType = RequireTransparentComparator, typename KeyType = uncvref_t<KeyTypeCVRef>>
-using is_usable_as_key_type = typename std::conditional<
- is_comparable<Comparator, ObjectKeyType, KeyTypeCVRef>::value && !(ExcludeObjectKeyType && std::is_same<KeyType, ObjectKeyType>::value) && (!RequireTransparentComparator || is_detected<detect_is_transparent, Comparator>::value) && !is_json_pointer<KeyType>::value,
- std::true_type,
- std::false_type>::type;
+template<typename Comparator,
+ typename ObjectKeyType,
+ typename KeyTypeCVRef,
+ bool RequireTransparentComparator = true,
+ bool ExcludeObjectKeyType = RequireTransparentComparator,
+ typename KeyType = uncvref_t<KeyTypeCVRef>>
+using is_usable_as_key_type =
+ typename std::conditional<is_comparable<Comparator, ObjectKeyType, KeyTypeCVRef>::value &&
+ !(ExcludeObjectKeyType && std::is_same<KeyType, ObjectKeyType>::value) &&
+ (!RequireTransparentComparator || is_detected<detect_is_transparent, Comparator>::value) && !is_json_pointer<KeyType>::value,
+ std::true_type,
+ std::false_type>::type;
// type trait to check if KeyType can be used as object key
// true if:
@@ -3764,29 +6864,27 @@
// - if ExcludeObjectKeyType is true, KeyType is not BasicJsonType::object_t::key_type
// - the comparator is transparent or RequireTransparentComparator is false
// - KeyType is not a JSON iterator or json_pointer
-template<typename BasicJsonType, typename KeyTypeCVRef, bool RequireTransparentComparator = true, bool ExcludeObjectKeyType = RequireTransparentComparator, typename KeyType = uncvref_t<KeyTypeCVRef>>
-using is_usable_as_basic_json_key_type = typename std::conditional<
- is_usable_as_key_type<typename BasicJsonType::object_comparator_t,
- typename BasicJsonType::object_t::key_type,
- KeyTypeCVRef,
- RequireTransparentComparator,
- ExcludeObjectKeyType>::value &&
- !is_json_iterator_of<BasicJsonType, KeyType>::value,
- std::true_type,
- std::false_type>::type;
+template<typename BasicJsonType,
+ typename KeyTypeCVRef,
+ bool RequireTransparentComparator = true,
+ bool ExcludeObjectKeyType = RequireTransparentComparator,
+ typename KeyType = uncvref_t<KeyTypeCVRef>>
+using is_usable_as_basic_json_key_type = typename std::conditional<is_usable_as_key_type<typename BasicJsonType::object_comparator_t,
+ typename BasicJsonType::object_t::key_type,
+ KeyTypeCVRef,
+ RequireTransparentComparator,
+ ExcludeObjectKeyType>::value &&
+ !is_json_iterator_of<BasicJsonType, KeyType>::value,
+ std::true_type,
+ std::false_type>::type;
template<typename ObjectType, typename KeyType>
using detect_erase_with_key_type = decltype(std::declval<ObjectType&>().erase(std::declval<KeyType>()));
// type trait to check if object_t has an erase() member functions accepting KeyType
template<typename BasicJsonType, typename KeyType>
-using has_erase_with_key_type = typename std::conditional<
- is_detected<
- detect_erase_with_key_type,
- typename BasicJsonType::object_t,
- KeyType>::value,
- std::true_type,
- std::false_type>::type;
+using has_erase_with_key_type =
+ typename std::conditional<is_detected<detect_erase_with_key_type, typename BasicJsonType::object_t, KeyType>::value, std::true_type, std::false_type>::type;
// a naive helper to check if a type is an ordered_map (exploits the fact that
// ordered_map inherits capacity() from std::vector)
@@ -3835,12 +6933,12 @@
// there's a disjunction trait in another PR; replace when merged
template<typename... Types>
-using same_sign = std::integral_constant<bool,
- all_signed<Types...>::value || all_unsigned<Types...>::value>;
+using same_sign = std::integral_constant<bool, all_signed<Types...>::value || all_unsigned<Types...>::value>;
template<typename OfType, typename T>
-using never_out_of_range = std::integral_constant<bool,
- (std::is_signed<OfType>::value && (sizeof(T) < sizeof(OfType))) || (same_sign<OfType, T>::value && sizeof(OfType) == sizeof(T))>;
+using never_out_of_range =
+ std::integral_constant<bool,
+ (std::is_signed<OfType>::value && (sizeof(T) < sizeof(OfType))) || (same_sign<OfType, T>::value && sizeof(OfType) == sizeof(T))>;
template<typename OfType, typename T, bool OfTypeSigned = std::is_signed<OfType>::value, bool TSigned = std::is_signed<T>::value>
struct value_in_range_of_impl2;
@@ -3881,11 +6979,15 @@
static constexpr bool test(T val)
{
using CommonType = typename std::common_type<OfType, T>::type;
- return static_cast<CommonType>(val) >= static_cast<CommonType>((std::numeric_limits<OfType>::min)()) && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
+ return static_cast<CommonType>(val) >= static_cast<CommonType>((std::numeric_limits<OfType>::min)()) &&
+ static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
}
};
-template<typename OfType, typename T, bool NeverOutOfRange = never_out_of_range<OfType, T>::value, typename = detail::enable_if_t<all_integral<OfType, T>::value>>
+template<typename OfType,
+ typename T,
+ bool NeverOutOfRange = never_out_of_range<OfType, T>::value,
+ typename = detail::enable_if_t<all_integral<OfType, T>::value>>
struct value_in_range_of_impl1;
template<typename OfType, typename T>
@@ -3919,7 +7021,8 @@
// is_c_string
///////////////////////////////////////////////////////////////////////////////
-namespace impl {
+namespace impl
+{
template<typename T>
inline constexpr bool is_c_string()
@@ -3945,7 +7048,8 @@
// is_transparent
///////////////////////////////////////////////////////////////////////////////
-namespace impl {
+namespace impl
+{
template<typename T>
inline constexpr bool is_transparent()
@@ -3983,7 +7087,8 @@
// #include <nlohmann/detail/meta/detected.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
inline std::size_t concat_length()
{
@@ -4043,13 +7148,26 @@
template<typename StringType, typename Arg>
using detect_string_can_append_data = is_detected<string_can_append_data, StringType, Arg>;
-template<typename OutStringType, typename Arg, typename... Args, enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && detect_string_can_append_op<OutStringType, Arg>::value, int> = 0>
+template<typename OutStringType,
+ typename Arg,
+ typename... Args,
+ enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && detect_string_can_append_op<OutStringType, Arg>::value, int> = 0>
inline void concat_into(OutStringType& out, Arg&& arg, Args&&... rest);
-template<typename OutStringType, typename Arg, typename... Args, enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && !detect_string_can_append_op<OutStringType, Arg>::value && detect_string_can_append_iter<OutStringType, Arg>::value, int> = 0>
+template<typename OutStringType,
+ typename Arg,
+ typename... Args,
+ enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && !detect_string_can_append_op<OutStringType, Arg>::value &&
+ detect_string_can_append_iter<OutStringType, Arg>::value,
+ int> = 0>
inline void concat_into(OutStringType& out, const Arg& arg, Args&&... rest);
-template<typename OutStringType, typename Arg, typename... Args, enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && !detect_string_can_append_op<OutStringType, Arg>::value && !detect_string_can_append_iter<OutStringType, Arg>::value && detect_string_can_append_data<OutStringType, Arg>::value, int> = 0>
+template<typename OutStringType,
+ typename Arg,
+ typename... Args,
+ enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && !detect_string_can_append_op<OutStringType, Arg>::value &&
+ !detect_string_can_append_iter<OutStringType, Arg>::value && detect_string_can_append_data<OutStringType, Arg>::value,
+ int> = 0>
inline void concat_into(OutStringType& out, const Arg& arg, Args&&... rest);
template<typename OutStringType, typename Arg, typename... Args, enable_if_t<detect_string_can_append<OutStringType, Arg>::value, int> = 0>
@@ -4059,21 +7177,34 @@
concat_into(out, std::forward<Args>(rest)...);
}
-template<typename OutStringType, typename Arg, typename... Args, enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && detect_string_can_append_op<OutStringType, Arg>::value, int>>
+template<typename OutStringType,
+ typename Arg,
+ typename... Args,
+ enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && detect_string_can_append_op<OutStringType, Arg>::value, int>>
inline void concat_into(OutStringType& out, Arg&& arg, Args&&... rest)
{
out += std::forward<Arg>(arg);
concat_into(out, std::forward<Args>(rest)...);
}
-template<typename OutStringType, typename Arg, typename... Args, enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && !detect_string_can_append_op<OutStringType, Arg>::value && detect_string_can_append_iter<OutStringType, Arg>::value, int>>
+template<typename OutStringType,
+ typename Arg,
+ typename... Args,
+ enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && !detect_string_can_append_op<OutStringType, Arg>::value &&
+ detect_string_can_append_iter<OutStringType, Arg>::value,
+ int>>
inline void concat_into(OutStringType& out, const Arg& arg, Args&&... rest)
{
out.append(arg.begin(), arg.end());
concat_into(out, std::forward<Args>(rest)...);
}
-template<typename OutStringType, typename Arg, typename... Args, enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && !detect_string_can_append_op<OutStringType, Arg>::value && !detect_string_can_append_iter<OutStringType, Arg>::value && detect_string_can_append_data<OutStringType, Arg>::value, int>>
+template<typename OutStringType,
+ typename Arg,
+ typename... Args,
+ enable_if_t<!detect_string_can_append<OutStringType, Arg>::value && !detect_string_can_append_op<OutStringType, Arg>::value &&
+ !detect_string_can_append_iter<OutStringType, Arg>::value && detect_string_can_append_data<OutStringType, Arg>::value,
+ int>>
inline void concat_into(OutStringType& out, const Arg& arg, Args&&... rest)
{
out.append(arg.data(), arg.size());
@@ -4104,7 +7235,8 @@
// #include <nlohmann/detail/abi_macros.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/*!
@brief replace all occurrences of a substring by another string
@@ -4183,7 +7315,8 @@
#endif
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
///////////////////////////
// JSON type enumeration //
@@ -4241,7 +7374,7 @@
@since version 1.0.0
*/
#if JSON_HAS_THREE_WAY_COMPARISON
-inline std::partial_ordering operator<=> (const value_t lhs, const value_t rhs) noexcept // *NOPAD*
+inline std::partial_ordering operator<=>(const value_t lhs, const value_t rhs) noexcept // *NOPAD*
#else
inline bool operator<(const value_t lhs, const value_t rhs) noexcept
#endif
@@ -4286,7 +7419,8 @@
NLOHMANN_JSON_NAMESPACE_END
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
////////////////
// exceptions //
@@ -4415,7 +7549,12 @@
template<typename BasicJsonContext, enable_if_t<is_basic_json_context<BasicJsonContext>::value, int> = 0>
static parse_error create(int id_, std::size_t byte_, const std::string& what_arg, BasicJsonContext context)
{
- const std::string w = concat(exception::name("parse_error", id_), "parse error", (byte_ != 0 ? (concat(" at byte ", std::to_string(byte_))) : ""), ": ", exception::diagnostics(context), what_arg);
+ const std::string w = concat(exception::name("parse_error", id_),
+ "parse error",
+ (byte_ != 0 ? (concat(" at byte ", std::to_string(byte_))) : ""),
+ ": ",
+ exception::diagnostics(context),
+ what_arg);
return {id_, byte_, w.c_str()};
}
@@ -4537,7 +7676,8 @@
// #include <nlohmann/detail/abi_macros.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
// dispatching helper struct
template<class T>
@@ -4561,14 +7701,16 @@
#if JSON_HAS_EXPERIMENTAL_FILESYSTEM
#include <experimental/filesystem>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
namespace std_fs = std::experimental::filesystem;
} // namespace detail
NLOHMANN_JSON_NAMESPACE_END
#elif JSON_HAS_FILESYSTEM
#include <filesystem>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
namespace std_fs = std::filesystem;
} // namespace detail
NLOHMANN_JSON_NAMESPACE_END
@@ -4581,7 +7723,8 @@
// #include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
template<typename BasicJsonType>
inline void from_json(const BasicJsonType& j, typename std::nullptr_t& n)
@@ -4594,7 +7737,9 @@
}
// overloads for basic_json template parameters
-template<typename BasicJsonType, typename ArithmeticType, enable_if_t<std::is_arithmetic<ArithmeticType>::value && !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value, int> = 0>
+template<typename BasicJsonType,
+ typename ArithmeticType,
+ enable_if_t<std::is_arithmetic<ArithmeticType>::value && !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value, int> = 0>
void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val)
{
switch (static_cast<value_t>(j))
@@ -4647,12 +7792,12 @@
s = *j.template get_ptr<const typename BasicJsonType::string_t*>();
}
-template<
- typename BasicJsonType,
- typename StringType,
- enable_if_t<
- std::is_assignable<StringType&, const typename BasicJsonType::string_t>::value && is_detected_exact<typename BasicJsonType::string_t::value_type, value_type_t, StringType>::value && !std::is_same<typename BasicJsonType::string_t, StringType>::value && !is_json_ref<StringType>::value,
- int> = 0>
+template<typename BasicJsonType,
+ typename StringType,
+ enable_if_t<std::is_assignable<StringType&, const typename BasicJsonType::string_t>::value &&
+ is_detected_exact<typename BasicJsonType::string_t::value_type, value_type_t, StringType>::value &&
+ !std::is_same<typename BasicJsonType::string_t, StringType>::value && !is_json_ref<StringType>::value,
+ int> = 0>
inline void from_json(const BasicJsonType& j, StringType& s)
{
if (JSON_HEDLEY_UNLIKELY(!j.is_string()))
@@ -4736,8 +7881,7 @@
}
template<typename BasicJsonType, typename T, std::size_t N>
-auto from_json_array_impl(const BasicJsonType& j, std::array<T, N>& arr, priority_tag<2> /*unused*/)
- -> decltype(j.template get<T>(), void())
+auto from_json_array_impl(const BasicJsonType& j, std::array<T, N>& arr, priority_tag<2> /*unused*/) -> decltype(j.template get<T>(), void())
{
for (std::size_t i = 0; i < N; ++i)
{
@@ -4745,11 +7889,11 @@
}
}
-template<typename BasicJsonType, typename ConstructibleArrayType, enable_if_t<std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value, int> = 0>
+template<typename BasicJsonType,
+ typename ConstructibleArrayType,
+ enable_if_t<std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value, int> = 0>
auto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<1> /*unused*/)
- -> decltype(arr.reserve(std::declval<typename ConstructibleArrayType::size_type>()),
- j.template get<typename ConstructibleArrayType::value_type>(),
- void())
+ -> decltype(arr.reserve(std::declval<typename ConstructibleArrayType::size_type>()), j.template get<typename ConstructibleArrayType::value_type>(), void())
{
using std::end;
@@ -4763,29 +7907,31 @@
arr = std::move(ret);
}
-template<typename BasicJsonType, typename ConstructibleArrayType, enable_if_t<std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value, int> = 0>
+template<typename BasicJsonType,
+ typename ConstructibleArrayType,
+ enable_if_t<std::is_assignable<ConstructibleArrayType&, ConstructibleArrayType>::value, int> = 0>
inline void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<0> /*unused*/)
{
using std::end;
ConstructibleArrayType ret;
- std::transform(
- j.begin(),
- j.end(),
- std::inserter(ret, end(ret)),
- [](const BasicJsonType& i) {
- // get<BasicJsonType>() returns *this, this won't call a from_json
- // method when value_type is BasicJsonType
- return i.template get<typename ConstructibleArrayType::value_type>();
- });
+ std::transform(j.begin(), j.end(), std::inserter(ret, end(ret)), [](const BasicJsonType& i) {
+ // get<BasicJsonType>() returns *this, this won't call a from_json
+ // method when value_type is BasicJsonType
+ return i.template get<typename ConstructibleArrayType::value_type>();
+ });
arr = std::move(ret);
}
-template<typename BasicJsonType, typename ConstructibleArrayType, enable_if_t<is_constructible_array_type<BasicJsonType, ConstructibleArrayType>::value && !is_constructible_object_type<BasicJsonType, ConstructibleArrayType>::value && !is_constructible_string_type<BasicJsonType, ConstructibleArrayType>::value && !std::is_same<ConstructibleArrayType, typename BasicJsonType::binary_t>::value && !is_basic_json<ConstructibleArrayType>::value, int> = 0>
+template<typename BasicJsonType,
+ typename ConstructibleArrayType,
+ enable_if_t<is_constructible_array_type<BasicJsonType, ConstructibleArrayType>::value &&
+ !is_constructible_object_type<BasicJsonType, ConstructibleArrayType>::value &&
+ !is_constructible_string_type<BasicJsonType, ConstructibleArrayType>::value &&
+ !std::is_same<ConstructibleArrayType, typename BasicJsonType::binary_t>::value && !is_basic_json<ConstructibleArrayType>::value,
+ int> = 0>
auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr)
- -> decltype(from_json_array_impl(j, arr, priority_tag<3>{}),
- j.template get<typename ConstructibleArrayType::value_type>(),
- void())
+ -> decltype(from_json_array_impl(j, arr, priority_tag<3>{}), j.template get<typename ConstructibleArrayType::value_type>(), void())
{
if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
{
@@ -4796,9 +7942,8 @@
}
template<typename BasicJsonType, typename T, std::size_t... Idx>
-std::array<T, sizeof...(Idx)> from_json_inplace_array_impl(BasicJsonType&& j,
- identity_tag<std::array<T, sizeof...(Idx)>> /*unused*/,
- index_sequence<Idx...> /*unused*/)
+std::array<T, sizeof...(Idx)>
+from_json_inplace_array_impl(BasicJsonType&& j, identity_tag<std::array<T, sizeof...(Idx)>> /*unused*/, index_sequence<Idx...> /*unused*/)
{
return {{std::forward<BasicJsonType>(j).at(Idx).template get<T>()...}};
}
@@ -4826,7 +7971,9 @@
bin = *j.template get_ptr<const typename BasicJsonType::binary_t*>();
}
-template<typename BasicJsonType, typename ConstructibleObjectType, enable_if_t<is_constructible_object_type<BasicJsonType, ConstructibleObjectType>::value, int> = 0>
+template<typename BasicJsonType,
+ typename ConstructibleObjectType,
+ enable_if_t<is_constructible_object_type<BasicJsonType, ConstructibleObjectType>::value, int> = 0>
inline void from_json(const BasicJsonType& j, ConstructibleObjectType& obj)
{
if (JSON_HEDLEY_UNLIKELY(!j.is_object()))
@@ -4837,13 +7984,9 @@
ConstructibleObjectType ret;
const auto* inner_object = j.template get_ptr<const typename BasicJsonType::object_t*>();
using value_type = typename ConstructibleObjectType::value_type;
- std::transform(
- inner_object->begin(),
- inner_object->end(),
- std::inserter(ret, ret.begin()),
- [](typename BasicJsonType::object_t::value_type const& p) {
- return value_type(p.first, p.second.template get<typename ConstructibleObjectType::mapped_type>());
- });
+ std::transform(inner_object->begin(), inner_object->end(), std::inserter(ret, ret.begin()), [](typename BasicJsonType::object_t::value_type const& p) {
+ return value_type(p.first, p.second.template get<typename ConstructibleObjectType::mapped_type>());
+ });
obj = std::move(ret);
}
@@ -4851,7 +7994,13 @@
// (BooleanType, etc..); note: Is it really necessary to provide explicit
// overloads for boolean_t etc. in case of a custom BooleanType which is not
// an arithmetic type?
-template<typename BasicJsonType, typename ArithmeticType, enable_if_t<std::is_arithmetic<ArithmeticType>::value && !std::is_same<ArithmeticType, typename BasicJsonType::number_unsigned_t>::value && !std::is_same<ArithmeticType, typename BasicJsonType::number_integer_t>::value && !std::is_same<ArithmeticType, typename BasicJsonType::number_float_t>::value && !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value, int> = 0>
+template<typename BasicJsonType,
+ typename ArithmeticType,
+ enable_if_t<std::is_arithmetic<ArithmeticType>::value && !std::is_same<ArithmeticType, typename BasicJsonType::number_unsigned_t>::value &&
+ !std::is_same<ArithmeticType, typename BasicJsonType::number_integer_t>::value &&
+ !std::is_same<ArithmeticType, typename BasicJsonType::number_float_t>::value &&
+ !std::is_same<ArithmeticType, typename BasicJsonType::boolean_t>::value,
+ int> = 0>
inline void from_json(const BasicJsonType& j, ArithmeticType& val)
{
switch (static_cast<value_t>(j))
@@ -4897,8 +8046,7 @@
template<typename BasicJsonType, class A1, class A2>
std::pair<A1, A2> from_json_tuple_impl(BasicJsonType&& j, identity_tag<std::pair<A1, A2>> /*unused*/, priority_tag<0> /*unused*/)
{
- return {std::forward<BasicJsonType>(j).at(0).template get<A1>(),
- std::forward<BasicJsonType>(j).at(1).template get<A2>()};
+ return {std::forward<BasicJsonType>(j).at(0).template get<A1>(), std::forward<BasicJsonType>(j).at(1).template get<A2>()};
}
template<typename BasicJsonType, typename A1, typename A2>
@@ -4931,7 +8079,12 @@
return from_json_tuple_impl(std::forward<BasicJsonType>(j), std::forward<TupleRelated>(t), priority_tag<3>{});
}
-template<typename BasicJsonType, typename Key, typename Value, typename Compare, typename Allocator, typename = enable_if_t<!std::is_constructible<typename BasicJsonType::string_t, Key>::value>>
+template<typename BasicJsonType,
+ typename Key,
+ typename Value,
+ typename Compare,
+ typename Allocator,
+ typename = enable_if_t<!std::is_constructible<typename BasicJsonType::string_t, Key>::value>>
inline void from_json(const BasicJsonType& j, std::map<Key, Value, Compare, Allocator>& m)
{
if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
@@ -4949,7 +8102,13 @@
}
}
-template<typename BasicJsonType, typename Key, typename Value, typename Hash, typename KeyEqual, typename Allocator, typename = enable_if_t<!std::is_constructible<typename BasicJsonType::string_t, Key>::value>>
+template<typename BasicJsonType,
+ typename Key,
+ typename Value,
+ typename Hash,
+ typename KeyEqual,
+ typename Allocator,
+ typename = enable_if_t<!std::is_constructible<typename BasicJsonType::string_t, Key>::value>>
inline void from_json(const BasicJsonType& j, std::unordered_map<Key, Value, Hash, KeyEqual, Allocator>& m)
{
if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
@@ -4982,9 +8141,8 @@
struct from_json_fn
{
template<typename BasicJsonType, typename T>
- auto operator()(const BasicJsonType& j, T&& val) const
- noexcept(noexcept(from_json(j, std::forward<T>(val))))
- -> decltype(from_json(j, std::forward<T>(val)))
+ auto operator()(const BasicJsonType& j, T&& val) const noexcept(noexcept(from_json(j, std::forward<T>(val))))
+ -> decltype(from_json(j, std::forward<T>(val)))
{
return from_json(j, std::forward<T>(val));
}
@@ -5051,7 +8209,8 @@
// #include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
template<typename string_type>
void int_to_string(string_type& target, std::size_t value)
@@ -5085,7 +8244,8 @@
public:
explicit iteration_proxy_value() = default;
- explicit iteration_proxy_value(IteratorType it, std::size_t array_index_ = 0) noexcept(std::is_nothrow_move_constructible<IteratorType>::value && std::is_nothrow_default_constructible<string_type>::value)
+ explicit iteration_proxy_value(IteratorType it, std::size_t array_index_ = 0) noexcept(std::is_nothrow_move_constructible<IteratorType>::value &&
+ std::is_nothrow_default_constructible<string_type>::value)
: anchor(std::move(it))
, array_index(array_index_)
{}
@@ -5093,8 +8253,12 @@
iteration_proxy_value(iteration_proxy_value const&) = default;
iteration_proxy_value& operator=(iteration_proxy_value const&) = default;
// older GCCs are a bit fussy and require explicit noexcept specifiers on defaulted functions
- iteration_proxy_value(iteration_proxy_value&&) noexcept(std::is_nothrow_move_constructible<IteratorType>::value && std::is_nothrow_move_constructible<string_type>::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations)
- iteration_proxy_value& operator=(iteration_proxy_value&&) noexcept(std::is_nothrow_move_assignable<IteratorType>::value && std::is_nothrow_move_assignable<string_type>::value) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations)
+ iteration_proxy_value(iteration_proxy_value&&) noexcept(std::is_nothrow_move_constructible<IteratorType>::value &&
+ std::is_nothrow_move_constructible<string_type>::value) =
+ default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations)
+ iteration_proxy_value& operator=(iteration_proxy_value&&) noexcept(std::is_nothrow_move_assignable<IteratorType>::value &&
+ std::is_nothrow_move_assignable<string_type>::value) =
+ default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor,cppcoreguidelines-noexcept-move-operations)
~iteration_proxy_value() = default;
/// dereference operator (needed for range-based for)
@@ -5234,7 +8398,8 @@
// Structured Bindings Support to the iteration_proxy_value class
// For further reference see https://blog.tartanllama.xyz/structured-bindings/
// And see https://github.com/nlohmann/json/pull/1391
-namespace std {
+namespace std
+{
#if defined(__clang__)
// Fix: https://github.com/nlohmann/json/issues/1401
@@ -5250,8 +8415,7 @@
class tuple_element<N, ::nlohmann::detail::iteration_proxy_value<IteratorType>> // NOLINT(cert-dcl58-cpp)
{
public:
- using type = decltype(get<N>(std::declval<
- ::nlohmann::detail::iteration_proxy_value<IteratorType>>()));
+ using type = decltype(get<N>(std::declval<::nlohmann::detail::iteration_proxy_value<IteratorType>>()));
};
#if defined(__clang__)
#pragma clang diagnostic pop
@@ -5275,7 +8439,8 @@
// #include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
//////////////////
// constructors //
@@ -5325,7 +8490,9 @@
j.assert_invariant();
}
- template<typename BasicJsonType, typename CompatibleStringType, enable_if_t<!std::is_same<CompatibleStringType, typename BasicJsonType::string_t>::value, int> = 0>
+ template<typename BasicJsonType,
+ typename CompatibleStringType,
+ enable_if_t<!std::is_same<CompatibleStringType, typename BasicJsonType::string_t>::value, int> = 0>
static void construct(BasicJsonType& j, const CompatibleStringType& str)
{
j.m_data.m_value.destroy(j.m_data.m_type);
@@ -5419,7 +8586,9 @@
j.assert_invariant();
}
- template<typename BasicJsonType, typename CompatibleArrayType, enable_if_t<!std::is_same<CompatibleArrayType, typename BasicJsonType::array_t>::value, int> = 0>
+ template<typename BasicJsonType,
+ typename CompatibleArrayType,
+ enable_if_t<!std::is_same<CompatibleArrayType, typename BasicJsonType::array_t>::value, int> = 0>
static void construct(BasicJsonType& j, const CompatibleArrayType& arr)
{
using std::begin;
@@ -5486,7 +8655,9 @@
j.assert_invariant();
}
- template<typename BasicJsonType, typename CompatibleObjectType, enable_if_t<!std::is_same<CompatibleObjectType, typename BasicJsonType::object_t>::value, int> = 0>
+ template<typename BasicJsonType,
+ typename CompatibleObjectType,
+ enable_if_t<!std::is_same<CompatibleObjectType, typename BasicJsonType::object_t>::value, int> = 0>
static void construct(BasicJsonType& j, const CompatibleObjectType& obj)
{
using std::begin;
@@ -5510,13 +8681,22 @@
external_constructor<value_t::boolean>::construct(j, b);
}
-template<typename BasicJsonType, typename BoolRef, enable_if_t<((std::is_same<std::vector<bool>::reference, BoolRef>::value && !std::is_same<std::vector<bool>::reference, typename BasicJsonType::boolean_t&>::value) || (std::is_same<std::vector<bool>::const_reference, BoolRef>::value && !std::is_same<detail::uncvref_t<std::vector<bool>::const_reference>, typename BasicJsonType::boolean_t>::value)) && std::is_convertible<const BoolRef&, typename BasicJsonType::boolean_t>::value, int> = 0>
+template<typename BasicJsonType,
+ typename BoolRef,
+ enable_if_t<((std::is_same<std::vector<bool>::reference, BoolRef>::value &&
+ !std::is_same<std::vector<bool>::reference, typename BasicJsonType::boolean_t&>::value) ||
+ (std::is_same<std::vector<bool>::const_reference, BoolRef>::value &&
+ !std::is_same<detail::uncvref_t<std::vector<bool>::const_reference>, typename BasicJsonType::boolean_t>::value)) &&
+ std::is_convertible<const BoolRef&, typename BasicJsonType::boolean_t>::value,
+ int> = 0>
inline void to_json(BasicJsonType& j, const BoolRef& b) noexcept
{
external_constructor<value_t::boolean>::construct(j, static_cast<typename BasicJsonType::boolean_t>(b));
}
-template<typename BasicJsonType, typename CompatibleString, enable_if_t<std::is_constructible<typename BasicJsonType::string_t, CompatibleString>::value, int> = 0>
+template<typename BasicJsonType,
+ typename CompatibleString,
+ enable_if_t<std::is_constructible<typename BasicJsonType::string_t, CompatibleString>::value, int> = 0>
inline void to_json(BasicJsonType& j, const CompatibleString& s)
{
external_constructor<value_t::string>::construct(j, s);
@@ -5534,13 +8714,17 @@
external_constructor<value_t::number_float>::construct(j, static_cast<typename BasicJsonType::number_float_t>(val));
}
-template<typename BasicJsonType, typename CompatibleNumberUnsignedType, enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_unsigned_t, CompatibleNumberUnsignedType>::value, int> = 0>
+template<typename BasicJsonType,
+ typename CompatibleNumberUnsignedType,
+ enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_unsigned_t, CompatibleNumberUnsignedType>::value, int> = 0>
inline void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept
{
external_constructor<value_t::number_unsigned>::construct(j, static_cast<typename BasicJsonType::number_unsigned_t>(val));
}
-template<typename BasicJsonType, typename CompatibleNumberIntegerType, enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_integer_t, CompatibleNumberIntegerType>::value, int> = 0>
+template<typename BasicJsonType,
+ typename CompatibleNumberIntegerType,
+ enable_if_t<is_compatible_integer_type<typename BasicJsonType::number_integer_t, CompatibleNumberIntegerType>::value, int> = 0>
inline void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept
{
external_constructor<value_t::number_integer>::construct(j, static_cast<typename BasicJsonType::number_integer_t>(val));
@@ -5561,7 +8745,13 @@
external_constructor<value_t::array>::construct(j, e);
}
-template<typename BasicJsonType, typename CompatibleArrayType, enable_if_t<is_compatible_array_type<BasicJsonType, CompatibleArrayType>::value && !is_compatible_object_type<BasicJsonType, CompatibleArrayType>::value && !is_compatible_string_type<BasicJsonType, CompatibleArrayType>::value && !std::is_same<typename BasicJsonType::binary_t, CompatibleArrayType>::value && !is_basic_json<CompatibleArrayType>::value, int> = 0>
+template<
+ typename BasicJsonType,
+ typename CompatibleArrayType,
+ enable_if_t<is_compatible_array_type<BasicJsonType, CompatibleArrayType>::value && !is_compatible_object_type<BasicJsonType, CompatibleArrayType>::value &&
+ !is_compatible_string_type<BasicJsonType, CompatibleArrayType>::value &&
+ !std::is_same<typename BasicJsonType::binary_t, CompatibleArrayType>::value && !is_basic_json<CompatibleArrayType>::value,
+ int> = 0>
inline void to_json(BasicJsonType& j, const CompatibleArrayType& arr)
{
external_constructor<value_t::array>::construct(j, arr);
@@ -5585,7 +8775,9 @@
external_constructor<value_t::array>::construct(j, std::move(arr));
}
-template<typename BasicJsonType, typename CompatibleObjectType, enable_if_t<is_compatible_object_type<BasicJsonType, CompatibleObjectType>::value && !is_basic_json<CompatibleObjectType>::value, int> = 0>
+template<typename BasicJsonType,
+ typename CompatibleObjectType,
+ enable_if_t<is_compatible_object_type<BasicJsonType, CompatibleObjectType>::value && !is_basic_json<CompatibleObjectType>::value, int> = 0>
inline void to_json(BasicJsonType& j, const CompatibleObjectType& obj)
{
external_constructor<value_t::object>::construct(j, obj);
@@ -5597,19 +8789,21 @@
external_constructor<value_t::object>::construct(j, std::move(obj));
}
-template<
- typename BasicJsonType,
- typename T,
- std::size_t N,
- enable_if_t<!std::is_constructible<typename BasicJsonType::string_t,
- const T (&)[N]>::value, // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
- int> = 0>
+template<typename BasicJsonType,
+ typename T,
+ std::size_t N,
+ enable_if_t<!std::is_constructible<typename BasicJsonType::string_t,
+ const T (&)[N]>::value, // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
+ int> = 0>
inline void to_json(BasicJsonType& j, const T (&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
{
external_constructor<value_t::array>::construct(j, arr);
}
-template<typename BasicJsonType, typename T1, typename T2, enable_if_t<std::is_constructible<BasicJsonType, T1>::value && std::is_constructible<BasicJsonType, T2>::value, int> = 0>
+template<typename BasicJsonType,
+ typename T1,
+ typename T2,
+ enable_if_t<std::is_constructible<BasicJsonType, T1>::value && std::is_constructible<BasicJsonType, T2>::value, int> = 0>
inline void to_json(BasicJsonType& j, const std::pair<T1, T2>& p)
{
j = {p.first, p.second};
@@ -5645,8 +8839,7 @@
struct to_json_fn
{
template<typename BasicJsonType, typename T>
- auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward<T>(val))))
- -> decltype(to_json(j, std::forward<T>(val)), void())
+ auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward<T>(val)))) -> decltype(to_json(j, std::forward<T>(val)), void())
{
return to_json(j, std::forward<T>(val));
}
@@ -5679,8 +8872,7 @@
/// @brief convert a JSON value to any value type
/// @sa https://json.nlohmann.me/api/adl_serializer/from_json/
template<typename BasicJsonType, typename TargetType = ValueType>
- static auto from_json(BasicJsonType&& j, TargetType& val) noexcept(
- noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))
+ static auto from_json(BasicJsonType&& j, TargetType& val) noexcept(noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))
-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), val), void())
{
::nlohmann::from_json(std::forward<BasicJsonType>(j), val);
@@ -5689,8 +8881,7 @@
/// @brief convert a JSON value to any value type
/// @sa https://json.nlohmann.me/api/adl_serializer/from_json/
template<typename BasicJsonType, typename TargetType = ValueType>
- static auto from_json(BasicJsonType&& j) noexcept(
- noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType>{})))
+ static auto from_json(BasicJsonType&& j) noexcept(noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType>{})))
-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType>{}))
{
return ::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType>{});
@@ -5699,8 +8890,7 @@
/// @brief convert any value type to a JSON value
/// @sa https://json.nlohmann.me/api/adl_serializer/to_json/
template<typename BasicJsonType, typename TargetType = ValueType>
- static auto to_json(BasicJsonType& j, TargetType&& val) noexcept(
- noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))
+ static auto to_json(BasicJsonType& j, TargetType&& val) noexcept(noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))
-> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void())
{
::nlohmann::to_json(j, std::forward<TargetType>(val));
@@ -5836,7 +9026,8 @@
// #include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
// boost::hash_combine
inline std::size_t combine(std::size_t seed, std::size_t h) noexcept
@@ -6002,7 +9193,8 @@
// #include <nlohmann/detail/meta/type_traits.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/// the supported input formats
enum class input_format_t
@@ -6161,10 +9353,8 @@
struct wide_string_input_helper<BaseInputAdapter, 4>
{
// UTF-32
- static void fill_buffer(BaseInputAdapter& input,
- std::array<std::char_traits<char>::int_type, 4>& utf8_bytes,
- size_t& utf8_bytes_index,
- size_t& utf8_bytes_filled)
+ static void
+ fill_buffer(BaseInputAdapter& input, std::array<std::char_traits<char>::int_type, 4>& utf8_bytes, size_t& utf8_bytes_index, size_t& utf8_bytes_filled)
{
utf8_bytes_index = 0;
@@ -6219,10 +9409,8 @@
struct wide_string_input_helper<BaseInputAdapter, 2>
{
// UTF-16
- static void fill_buffer(BaseInputAdapter& input,
- std::array<std::char_traits<char>::int_type, 4>& utf8_bytes,
- size_t& utf8_bytes_index,
- size_t& utf8_bytes_filled)
+ static void
+ fill_buffer(BaseInputAdapter& input, std::array<std::char_traits<char>::int_type, 4>& utf8_bytes, size_t& utf8_bytes_index, size_t& utf8_bytes_filled)
{
utf8_bytes_index = 0;
@@ -6372,7 +9560,8 @@
// Enables ADL on begin(container) and end(container)
// Encloses the using declarations in namespace for not to leak them to outside scope
-namespace container_input_adapter_factory_impl {
+namespace container_input_adapter_factory_impl
+{
using std::begin;
using std::end;
@@ -6382,8 +9571,7 @@
{};
template<typename ContainerType>
-struct container_input_adapter_factory<ContainerType,
- void_t<decltype(begin(std::declval<ContainerType>()), end(std::declval<ContainerType>()))>>
+struct container_input_adapter_factory<ContainerType, void_t<decltype(begin(std::declval<ContainerType>()), end(std::declval<ContainerType>()))>>
{
using adapter_type = decltype(input_adapter(begin(std::declval<ContainerType>()), end(std::declval<ContainerType>())));
@@ -6422,13 +9610,11 @@
using contiguous_bytes_input_adapter = decltype(input_adapter(std::declval<const char*>(), std::declval<const char*>()));
// Null-delimited strings, and the like.
-template<typename CharT,
- typename std::enable_if<
- std::is_pointer<CharT>::value &&
- !std::is_array<CharT>::value &&
- std::is_integral<typename std::remove_pointer<CharT>::type>::value &&
- sizeof(typename std::remove_pointer<CharT>::type) == 1,
- int>::type = 0>
+template<
+ typename CharT,
+ typename std::enable_if<std::is_pointer<CharT>::value && !std::is_array<CharT>::value &&
+ std::is_integral<typename std::remove_pointer<CharT>::type>::value && sizeof(typename std::remove_pointer<CharT>::type) == 1,
+ int>::type = 0>
contiguous_bytes_input_adapter input_adapter(CharT b)
{
auto length = std::strlen(reinterpret_cast<const char*>(b));
@@ -6437,7 +9623,8 @@
}
template<typename T, std::size_t N>
-auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
+auto input_adapter(T (&array)[N])
+ -> decltype(input_adapter(array, array + N)) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
{
return input_adapter(array, array + N);
}
@@ -6449,19 +9636,16 @@
{
public:
template<typename CharT,
- typename std::enable_if<
- std::is_pointer<CharT>::value &&
- std::is_integral<typename std::remove_pointer<CharT>::type>::value &&
- sizeof(typename std::remove_pointer<CharT>::type) == 1,
- int>::type = 0>
+ typename std::enable_if<std::is_pointer<CharT>::value && std::is_integral<typename std::remove_pointer<CharT>::type>::value &&
+ sizeof(typename std::remove_pointer<CharT>::type) == 1,
+ int>::type = 0>
span_input_adapter(CharT b, std::size_t l)
: ia(reinterpret_cast<const char*>(b), reinterpret_cast<const char*>(b) + l)
{}
- template<class IteratorType,
- typename std::enable_if<
- std::is_same<typename iterator_traits<IteratorType>::iterator_category, std::random_access_iterator_tag>::value,
- int>::type = 0>
+ template<
+ class IteratorType,
+ typename std::enable_if<std::is_same<typename iterator_traits<IteratorType>::iterator_category, std::random_access_iterator_tag>::value, int>::type = 0>
span_input_adapter(IteratorType first, IteratorType last)
: ia(input_adapter(first, last))
{}
@@ -6611,9 +9795,7 @@
@param[in] ex an exception object describing the error
@return whether parsing should proceed (must return false)
*/
- virtual bool parse_error(std::size_t position,
- const std::string& last_token,
- const detail::exception& ex) = 0;
+ virtual bool parse_error(std::size_t position, const std::string& last_token, const detail::exception& ex) = 0;
json_sax() = default;
json_sax(const json_sax&) = default;
@@ -6623,7 +9805,8 @@
virtual ~json_sax() = default;
};
-namespace detail {
+namespace detail
+{
/*!
@brief SAX implementation to create a JSON value from SAX events
@@ -6785,9 +9968,7 @@
object to which we can add elements
*/
template<typename Value>
- JSON_HEDLEY_RETURNS_NON_NULL
- BasicJsonType*
- handle_value(Value&& v)
+ JSON_HEDLEY_RETURNS_NON_NULL BasicJsonType* handle_value(Value&& v)
{
if (ref_stack.empty())
{
@@ -6833,9 +10014,7 @@
using parser_callback_t = typename BasicJsonType::parser_callback_t;
using parse_event_t = typename BasicJsonType::parse_event_t;
- json_sax_dom_callback_parser(BasicJsonType& r,
- const parser_callback_t cb,
- const bool allow_exceptions_ = true)
+ json_sax_dom_callback_parser(BasicJsonType& r, const parser_callback_t cb, const bool allow_exceptions_ = true)
: root(r)
, callback(cb)
, allow_exceptions(allow_exceptions_)
@@ -7236,7 +10415,8 @@
// #include <nlohmann/detail/meta/type_traits.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
///////////
// lexer //
@@ -8396,8 +11576,7 @@
default:
{
- error_message =
- "invalid number; expected '+', '-', or digit after exponent";
+ error_message = "invalid number; expected '+', '-', or digit after exponent";
return token_type::parse_error;
}
}
@@ -8666,7 +11845,8 @@
{
// escape control characters
std::array<char, 9> cs{{}};
- static_cast<void>((std::snprintf)(cs.data(), cs.size(), "<U+%.4X>", static_cast<unsigned char>(c))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
+ static_cast<void>((
+ std::snprintf)(cs.data(), cs.size(), "<U+%.4X>", static_cast<unsigned char>(c))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
result += cs.data();
}
else
@@ -8759,17 +11939,23 @@
// literals
case 't':
{
- std::array<char_type, 4> true_literal = {{static_cast<char_type>('t'), static_cast<char_type>('r'), static_cast<char_type>('u'), static_cast<char_type>('e')}};
+ std::array<char_type, 4> true_literal = {
+ {static_cast<char_type>('t'), static_cast<char_type>('r'), static_cast<char_type>('u'), static_cast<char_type>('e')}};
return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true);
}
case 'f':
{
- std::array<char_type, 5> false_literal = {{static_cast<char_type>('f'), static_cast<char_type>('a'), static_cast<char_type>('l'), static_cast<char_type>('s'), static_cast<char_type>('e')}};
+ std::array<char_type, 5> false_literal = {{static_cast<char_type>('f'),
+ static_cast<char_type>('a'),
+ static_cast<char_type>('l'),
+ static_cast<char_type>('s'),
+ static_cast<char_type>('e')}};
return scan_literal(false_literal.data(), false_literal.size(), token_type::literal_false);
}
case 'n':
{
- std::array<char_type, 4> null_literal = {{static_cast<char_type>('n'), static_cast<char_type>('u'), static_cast<char_type>('l'), static_cast<char_type>('l')}};
+ std::array<char_type, 4> null_literal = {
+ {static_cast<char_type>('n'), static_cast<char_type>('u'), static_cast<char_type>('l'), static_cast<char_type>('l')}};
return scan_literal(null_literal.data(), null_literal.size(), token_type::literal_null);
}
@@ -8863,66 +12049,54 @@
// #include <nlohmann/detail/meta/type_traits.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
template<typename T>
using null_function_t = decltype(std::declval<T&>().null());
template<typename T>
-using boolean_function_t =
- decltype(std::declval<T&>().boolean(std::declval<bool>()));
+using boolean_function_t = decltype(std::declval<T&>().boolean(std::declval<bool>()));
template<typename T, typename Integer>
-using number_integer_function_t =
- decltype(std::declval<T&>().number_integer(std::declval<Integer>()));
+using number_integer_function_t = decltype(std::declval<T&>().number_integer(std::declval<Integer>()));
template<typename T, typename Unsigned>
-using number_unsigned_function_t =
- decltype(std::declval<T&>().number_unsigned(std::declval<Unsigned>()));
+using number_unsigned_function_t = decltype(std::declval<T&>().number_unsigned(std::declval<Unsigned>()));
template<typename T, typename Float, typename String>
-using number_float_function_t = decltype(std::declval<T&>().number_float(
- std::declval<Float>(),
- std::declval<const String&>()));
+using number_float_function_t = decltype(std::declval<T&>().number_float(std::declval<Float>(), std::declval<const String&>()));
template<typename T, typename String>
-using string_function_t =
- decltype(std::declval<T&>().string(std::declval<String&>()));
+using string_function_t = decltype(std::declval<T&>().string(std::declval<String&>()));
template<typename T, typename Binary>
-using binary_function_t =
- decltype(std::declval<T&>().binary(std::declval<Binary&>()));
+using binary_function_t = decltype(std::declval<T&>().binary(std::declval<Binary&>()));
template<typename T>
-using start_object_function_t =
- decltype(std::declval<T&>().start_object(std::declval<std::size_t>()));
+using start_object_function_t = decltype(std::declval<T&>().start_object(std::declval<std::size_t>()));
template<typename T, typename String>
-using key_function_t =
- decltype(std::declval<T&>().key(std::declval<String&>()));
+using key_function_t = decltype(std::declval<T&>().key(std::declval<String&>()));
template<typename T>
using end_object_function_t = decltype(std::declval<T&>().end_object());
template<typename T>
-using start_array_function_t =
- decltype(std::declval<T&>().start_array(std::declval<std::size_t>()));
+using start_array_function_t = decltype(std::declval<T&>().start_array(std::declval<std::size_t>()));
template<typename T>
using end_array_function_t = decltype(std::declval<T&>().end_array());
template<typename T, typename Exception>
-using parse_error_function_t = decltype(std::declval<T&>().parse_error(
- std::declval<std::size_t>(),
- std::declval<const std::string&>(),
- std::declval<const Exception&>()));
+using parse_error_function_t =
+ decltype(std::declval<T&>().parse_error(std::declval<std::size_t>(), std::declval<const std::string&>(), std::declval<const Exception&>()));
template<typename SAX, typename BasicJsonType>
struct is_sax
{
private:
- static_assert(is_basic_json<BasicJsonType>::value,
- "BasicJsonType must be of type basic_json<...>");
+ static_assert(is_basic_json<BasicJsonType>::value, "BasicJsonType must be of type basic_json<...>");
using number_integer_t = typename BasicJsonType::number_integer_t;
using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
@@ -8933,27 +12107,21 @@
public:
static constexpr bool value =
- is_detected_exact<bool, null_function_t, SAX>::value &&
- is_detected_exact<bool, boolean_function_t, SAX>::value &&
+ is_detected_exact<bool, null_function_t, SAX>::value && is_detected_exact<bool, boolean_function_t, SAX>::value &&
is_detected_exact<bool, number_integer_function_t, SAX, number_integer_t>::value &&
is_detected_exact<bool, number_unsigned_function_t, SAX, number_unsigned_t>::value &&
is_detected_exact<bool, number_float_function_t, SAX, number_float_t, string_t>::value &&
- is_detected_exact<bool, string_function_t, SAX, string_t>::value &&
- is_detected_exact<bool, binary_function_t, SAX, binary_t>::value &&
- is_detected_exact<bool, start_object_function_t, SAX>::value &&
- is_detected_exact<bool, key_function_t, SAX, string_t>::value &&
- is_detected_exact<bool, end_object_function_t, SAX>::value &&
- is_detected_exact<bool, start_array_function_t, SAX>::value &&
- is_detected_exact<bool, end_array_function_t, SAX>::value &&
- is_detected_exact<bool, parse_error_function_t, SAX, exception_t>::value;
+ is_detected_exact<bool, string_function_t, SAX, string_t>::value && is_detected_exact<bool, binary_function_t, SAX, binary_t>::value &&
+ is_detected_exact<bool, start_object_function_t, SAX>::value && is_detected_exact<bool, key_function_t, SAX, string_t>::value &&
+ is_detected_exact<bool, end_object_function_t, SAX>::value && is_detected_exact<bool, start_array_function_t, SAX>::value &&
+ is_detected_exact<bool, end_array_function_t, SAX>::value && is_detected_exact<bool, parse_error_function_t, SAX, exception_t>::value;
};
template<typename SAX, typename BasicJsonType>
struct is_sax_static_asserts
{
private:
- static_assert(is_basic_json<BasicJsonType>::value,
- "BasicJsonType must be of type basic_json<...>");
+ static_assert(is_basic_json<BasicJsonType>::value, "BasicJsonType must be of type basic_json<...>");
using number_integer_t = typename BasicJsonType::number_integer_t;
using number_unsigned_t = typename BasicJsonType::number_unsigned_t;
@@ -8963,40 +12131,25 @@
using exception_t = typename BasicJsonType::exception;
public:
- static_assert(is_detected_exact<bool, null_function_t, SAX>::value,
- "Missing/invalid function: bool null()");
- static_assert(is_detected_exact<bool, boolean_function_t, SAX>::value,
- "Missing/invalid function: bool boolean(bool)");
- static_assert(is_detected_exact<bool, boolean_function_t, SAX>::value,
- "Missing/invalid function: bool boolean(bool)");
- static_assert(
- is_detected_exact<bool, number_integer_function_t, SAX, number_integer_t>::value,
- "Missing/invalid function: bool number_integer(number_integer_t)");
- static_assert(
- is_detected_exact<bool, number_unsigned_function_t, SAX, number_unsigned_t>::value,
- "Missing/invalid function: bool number_unsigned(number_unsigned_t)");
+ static_assert(is_detected_exact<bool, null_function_t, SAX>::value, "Missing/invalid function: bool null()");
+ static_assert(is_detected_exact<bool, boolean_function_t, SAX>::value, "Missing/invalid function: bool boolean(bool)");
+ static_assert(is_detected_exact<bool, boolean_function_t, SAX>::value, "Missing/invalid function: bool boolean(bool)");
+ static_assert(is_detected_exact<bool, number_integer_function_t, SAX, number_integer_t>::value,
+ "Missing/invalid function: bool number_integer(number_integer_t)");
+ static_assert(is_detected_exact<bool, number_unsigned_function_t, SAX, number_unsigned_t>::value,
+ "Missing/invalid function: bool number_unsigned(number_unsigned_t)");
static_assert(is_detected_exact<bool, number_float_function_t, SAX, number_float_t, string_t>::value,
"Missing/invalid function: bool number_float(number_float_t, const string_t&)");
- static_assert(
- is_detected_exact<bool, string_function_t, SAX, string_t>::value,
- "Missing/invalid function: bool string(string_t&)");
- static_assert(
- is_detected_exact<bool, binary_function_t, SAX, binary_t>::value,
- "Missing/invalid function: bool binary(binary_t&)");
- static_assert(is_detected_exact<bool, start_object_function_t, SAX>::value,
- "Missing/invalid function: bool start_object(std::size_t)");
- static_assert(is_detected_exact<bool, key_function_t, SAX, string_t>::value,
- "Missing/invalid function: bool key(string_t&)");
- static_assert(is_detected_exact<bool, end_object_function_t, SAX>::value,
- "Missing/invalid function: bool end_object()");
- static_assert(is_detected_exact<bool, start_array_function_t, SAX>::value,
- "Missing/invalid function: bool start_array(std::size_t)");
- static_assert(is_detected_exact<bool, end_array_function_t, SAX>::value,
- "Missing/invalid function: bool end_array()");
- static_assert(
- is_detected_exact<bool, parse_error_function_t, SAX, exception_t>::value,
- "Missing/invalid function: bool parse_error(std::size_t, const "
- "std::string&, const exception&)");
+ static_assert(is_detected_exact<bool, string_function_t, SAX, string_t>::value, "Missing/invalid function: bool string(string_t&)");
+ static_assert(is_detected_exact<bool, binary_function_t, SAX, binary_t>::value, "Missing/invalid function: bool binary(binary_t&)");
+ static_assert(is_detected_exact<bool, start_object_function_t, SAX>::value, "Missing/invalid function: bool start_object(std::size_t)");
+ static_assert(is_detected_exact<bool, key_function_t, SAX, string_t>::value, "Missing/invalid function: bool key(string_t&)");
+ static_assert(is_detected_exact<bool, end_object_function_t, SAX>::value, "Missing/invalid function: bool end_object()");
+ static_assert(is_detected_exact<bool, start_array_function_t, SAX>::value, "Missing/invalid function: bool start_array(std::size_t)");
+ static_assert(is_detected_exact<bool, end_array_function_t, SAX>::value, "Missing/invalid function: bool end_array()");
+ static_assert(is_detected_exact<bool, parse_error_function_t, SAX, exception_t>::value,
+ "Missing/invalid function: bool parse_error(std::size_t, const "
+ "std::string&, const exception&)");
};
} // namespace detail
@@ -9009,7 +12162,8 @@
// #include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/// how to treat CBOR tags
enum class cbor_tag_handler_t
@@ -9079,10 +12233,7 @@
@return whether parsing was successful
*/
JSON_HEDLEY_NON_NULL(3)
- bool sax_parse(const input_format_t format,
- json_sax_t* sax_,
- const bool strict = true,
- const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
+ bool sax_parse(const input_format_t format, json_sax_t* sax_, const bool strict = true, const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
{
sax = sax_;
bool result = false;
@@ -9125,7 +12276,13 @@
if (JSON_HEDLEY_UNLIKELY(current != char_traits<char_type>::eof()))
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(110, chars_read, exception_message(input_format, concat("expected end of input; last byte: 0x", get_token_string()), "value"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ get_token_string(),
+ parse_error::create(110,
+ chars_read,
+ exception_message(input_format, concat("expected end of input; last byte: 0x", get_token_string()), "value"),
+ nullptr));
}
}
@@ -9201,7 +12358,13 @@
if (JSON_HEDLEY_UNLIKELY(len < 1))
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, concat("string length must be at least 1, is ", std::to_string(len)), "string"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(112,
+ chars_read,
+ exception_message(input_format_t::bson, concat("string length must be at least 1, is ", std::to_string(len)), "string"),
+ nullptr));
}
return get_string(input_format_t::bson, len - static_cast<NumberType>(1), result) && get() != char_traits<char_type>::eof();
@@ -9222,7 +12385,13 @@
if (JSON_HEDLEY_UNLIKELY(len < 0))
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, concat("byte array length cannot be negative, is ", std::to_string(len)), "binary"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(112,
+ chars_read,
+ exception_message(input_format_t::bson, concat("byte array length cannot be negative, is ", std::to_string(len)), "binary"),
+ nullptr));
}
// All BSON binary values have a subtype
@@ -9243,8 +12412,7 @@
Unsupported BSON record type 0x...
@return whether a valid BSON-object/array was passed to the SAX parser
*/
- bool parse_bson_element_internal(const char_int_type element_type,
- const std::size_t element_type_parse_position)
+ bool parse_bson_element_internal(const char_int_type element_type, const std::size_t element_type_parse_position)
{
switch (element_type)
{
@@ -9303,9 +12471,14 @@
default: // anything else not supported (yet)
{
std::array<char, 3> cr{{}};
- static_cast<void>((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast<unsigned char>(element_type))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
+ static_cast<void>((std::snprintf)(cr.data(),
+ cr.size(),
+ "%.2hhX",
+ static_cast<unsigned char>(element_type))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
const std::string cr_str{cr.data()};
- return sax->parse_error(element_type_parse_position, cr_str, parse_error::create(114, element_type_parse_position, concat("Unsupported BSON record type 0x", cr_str), nullptr));
+ return sax->parse_error(element_type_parse_position,
+ cr_str,
+ parse_error::create(114, element_type_parse_position, concat("Unsupported BSON record type 0x", cr_str), nullptr));
}
}
}
@@ -9390,8 +12563,7 @@
@return whether a valid CBOR value was passed to the SAX parser
*/
- bool parse_cbor_internal(const bool get_char,
- const cbor_tag_handler_t tag_handler)
+ bool parse_cbor_internal(const bool get_char, const cbor_tag_handler_t tag_handler)
{
switch (get_char ? get() : current)
{
@@ -9498,7 +12670,8 @@
case 0x3B: // Negative integer -1-n (eight-byte uint64_t follows)
{
std::uint64_t number{};
- return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast<number_integer_t>(-1) - static_cast<number_integer_t>(number));
+ return get_number(input_format_t::cbor, number) &&
+ sax->number_integer(static_cast<number_integer_t>(-1) - static_cast<number_integer_t>(number));
}
// Binary data (0x00..0x17 bytes follow)
@@ -9596,9 +12769,7 @@
case 0x95:
case 0x96:
case 0x97:
- return get_cbor_array(
- conditional_static_cast<std::size_t>(static_cast<unsigned int>(current) & 0x1Fu),
- tag_handler);
+ return get_cbor_array(conditional_static_cast<std::size_t>(static_cast<unsigned int>(current) & 0x1Fu), tag_handler);
case 0x98: // array (one-byte uint8_t for n follows)
{
@@ -9706,7 +12877,12 @@
case cbor_tag_handler_t::error:
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"), nullptr));
+ return sax->parse_error(chars_read,
+ last_token,
+ parse_error::create(112,
+ chars_read,
+ exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"),
+ nullptr));
}
case cbor_tag_handler_t::ignore:
@@ -9835,17 +13011,12 @@
case 0:
return std::ldexp(mant, -24);
case 31:
- return (mant == 0)
- ? std::numeric_limits<double>::infinity()
- : std::numeric_limits<double>::quiet_NaN();
+ return (mant == 0) ? std::numeric_limits<double>::infinity() : std::numeric_limits<double>::quiet_NaN();
default:
return std::ldexp(mant + 1024, exp - 25);
}
}();
- return sax->number_float((half & 0x8000u) != 0
- ? static_cast<number_float_t>(-val)
- : static_cast<number_float_t>(val),
- "");
+ return sax->number_float((half & 0x8000u) != 0 ? static_cast<number_float_t>(-val) : static_cast<number_float_t>(val), "");
}
case 0xFA: // Single-Precision Float (four-byte IEEE 754)
@@ -9863,7 +13034,10 @@
default: // anything else (0xFF is handled inside the other types)
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(112, chars_read, exception_message(input_format_t::cbor, concat("invalid byte: 0x", last_token), "value"), nullptr));
}
}
}
@@ -9958,7 +13132,16 @@
default:
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, concat("expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x", last_token), "string"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(
+ 113,
+ chars_read,
+ exception_message(input_format_t::cbor,
+ concat("expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x", last_token),
+ "string"),
+ nullptr));
}
}
}
@@ -10015,29 +13198,25 @@
case 0x58: // Binary data (one-byte uint8_t for n follows)
{
std::uint8_t len{};
- return get_number(input_format_t::cbor, len) &&
- get_binary(input_format_t::cbor, len, result);
+ return get_number(input_format_t::cbor, len) && get_binary(input_format_t::cbor, len, result);
}
case 0x59: // Binary data (two-byte uint16_t for n follow)
{
std::uint16_t len{};
- return get_number(input_format_t::cbor, len) &&
- get_binary(input_format_t::cbor, len, result);
+ return get_number(input_format_t::cbor, len) && get_binary(input_format_t::cbor, len, result);
}
case 0x5A: // Binary data (four-byte uint32_t for n follow)
{
std::uint32_t len{};
- return get_number(input_format_t::cbor, len) &&
- get_binary(input_format_t::cbor, len, result);
+ return get_number(input_format_t::cbor, len) && get_binary(input_format_t::cbor, len, result);
}
case 0x5B: // Binary data (eight-byte uint64_t for n follow)
{
std::uint64_t len{};
- return get_number(input_format_t::cbor, len) &&
- get_binary(input_format_t::cbor, len, result);
+ return get_number(input_format_t::cbor, len) && get_binary(input_format_t::cbor, len, result);
}
case 0x5F: // Binary data (indefinite length)
@@ -10057,7 +13236,16 @@
default:
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, concat("expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x", last_token), "binary"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(
+ 113,
+ chars_read,
+ exception_message(input_format_t::cbor,
+ concat("expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x", last_token),
+ "binary"),
+ nullptr));
}
}
}
@@ -10068,8 +13256,7 @@
@param[in] tag_handler how CBOR tags should be treated
@return whether array creation completed
*/
- bool get_cbor_array(const std::size_t len,
- const cbor_tag_handler_t tag_handler)
+ bool get_cbor_array(const std::size_t len, const cbor_tag_handler_t tag_handler)
{
if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len)))
{
@@ -10106,8 +13293,7 @@
@param[in] tag_handler how CBOR tags should be treated
@return whether object creation completed
*/
- bool get_cbor_object(const std::size_t len,
- const cbor_tag_handler_t tag_handler)
+ bool get_cbor_object(const std::size_t len, const cbor_tag_handler_t tag_handler)
{
if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len)))
{
@@ -10527,7 +13713,10 @@
default: // anything else
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::msgpack, concat("invalid byte: 0x", last_token), "value"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(112, chars_read, exception_message(input_format_t::msgpack, concat("invalid byte: 0x", last_token), "value"), nullptr));
}
}
}
@@ -10609,7 +13798,15 @@
default:
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::msgpack, concat("expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0x", last_token), "string"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(113,
+ chars_read,
+ exception_message(input_format_t::msgpack,
+ concat("expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0x", last_token),
+ "string"),
+ nullptr));
}
}
}
@@ -10637,92 +13834,73 @@
case 0xC4: // bin 8
{
std::uint8_t len{};
- return get_number(input_format_t::msgpack, len) &&
- get_binary(input_format_t::msgpack, len, result);
+ return get_number(input_format_t::msgpack, len) && get_binary(input_format_t::msgpack, len, result);
}
case 0xC5: // bin 16
{
std::uint16_t len{};
- return get_number(input_format_t::msgpack, len) &&
- get_binary(input_format_t::msgpack, len, result);
+ return get_number(input_format_t::msgpack, len) && get_binary(input_format_t::msgpack, len, result);
}
case 0xC6: // bin 32
{
std::uint32_t len{};
- return get_number(input_format_t::msgpack, len) &&
- get_binary(input_format_t::msgpack, len, result);
+ return get_number(input_format_t::msgpack, len) && get_binary(input_format_t::msgpack, len, result);
}
case 0xC7: // ext 8
{
std::uint8_t len{};
std::int8_t subtype{};
- return get_number(input_format_t::msgpack, len) &&
- get_number(input_format_t::msgpack, subtype) &&
- get_binary(input_format_t::msgpack, len, result) &&
- assign_and_return_true(subtype);
+ return get_number(input_format_t::msgpack, len) && get_number(input_format_t::msgpack, subtype) &&
+ get_binary(input_format_t::msgpack, len, result) && assign_and_return_true(subtype);
}
case 0xC8: // ext 16
{
std::uint16_t len{};
std::int8_t subtype{};
- return get_number(input_format_t::msgpack, len) &&
- get_number(input_format_t::msgpack, subtype) &&
- get_binary(input_format_t::msgpack, len, result) &&
- assign_and_return_true(subtype);
+ return get_number(input_format_t::msgpack, len) && get_number(input_format_t::msgpack, subtype) &&
+ get_binary(input_format_t::msgpack, len, result) && assign_and_return_true(subtype);
}
case 0xC9: // ext 32
{
std::uint32_t len{};
std::int8_t subtype{};
- return get_number(input_format_t::msgpack, len) &&
- get_number(input_format_t::msgpack, subtype) &&
- get_binary(input_format_t::msgpack, len, result) &&
- assign_and_return_true(subtype);
+ return get_number(input_format_t::msgpack, len) && get_number(input_format_t::msgpack, subtype) &&
+ get_binary(input_format_t::msgpack, len, result) && assign_and_return_true(subtype);
}
case 0xD4: // fixext 1
{
std::int8_t subtype{};
- return get_number(input_format_t::msgpack, subtype) &&
- get_binary(input_format_t::msgpack, 1, result) &&
- assign_and_return_true(subtype);
+ return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 1, result) && assign_and_return_true(subtype);
}
case 0xD5: // fixext 2
{
std::int8_t subtype{};
- return get_number(input_format_t::msgpack, subtype) &&
- get_binary(input_format_t::msgpack, 2, result) &&
- assign_and_return_true(subtype);
+ return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 2, result) && assign_and_return_true(subtype);
}
case 0xD6: // fixext 4
{
std::int8_t subtype{};
- return get_number(input_format_t::msgpack, subtype) &&
- get_binary(input_format_t::msgpack, 4, result) &&
- assign_and_return_true(subtype);
+ return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 4, result) && assign_and_return_true(subtype);
}
case 0xD7: // fixext 8
{
std::int8_t subtype{};
- return get_number(input_format_t::msgpack, subtype) &&
- get_binary(input_format_t::msgpack, 8, result) &&
- assign_and_return_true(subtype);
+ return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 8, result) && assign_and_return_true(subtype);
}
case 0xD8: // fixext 16
{
std::int8_t subtype{};
- return get_number(input_format_t::msgpack, subtype) &&
- get_binary(input_format_t::msgpack, 16, result) &&
- assign_and_return_true(subtype);
+ return get_number(input_format_t::msgpack, subtype) && get_binary(input_format_t::msgpack, 16, result) && assign_and_return_true(subtype);
}
default: // LCOV_EXCL_LINE
@@ -11001,7 +14179,12 @@
}
if (number < 0)
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr));
+ return sax->parse_error(chars_read,
+ get_token_string(),
+ parse_error::create(113,
+ chars_read,
+ exception_message(input_format, "count in an optimized container must be positive", "size"),
+ nullptr));
}
result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
return true;
@@ -11016,7 +14199,12 @@
}
if (number < 0)
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr));
+ return sax->parse_error(chars_read,
+ get_token_string(),
+ parse_error::create(113,
+ chars_read,
+ exception_message(input_format, "count in an optimized container must be positive", "size"),
+ nullptr));
}
result = static_cast<std::size_t>(number);
return true;
@@ -11031,7 +14219,12 @@
}
if (number < 0)
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr));
+ return sax->parse_error(chars_read,
+ get_token_string(),
+ parse_error::create(113,
+ chars_read,
+ exception_message(input_format, "count in an optimized container must be positive", "size"),
+ nullptr));
}
result = static_cast<std::size_t>(number);
return true;
@@ -11046,11 +14239,18 @@
}
if (number < 0)
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "count in an optimized container must be positive", "size"), nullptr));
+ return sax->parse_error(chars_read,
+ get_token_string(),
+ parse_error::create(113,
+ chars_read,
+ exception_message(input_format, "count in an optimized container must be positive", "size"),
+ nullptr));
}
if (!value_in_range_of<std::size_t>(number))
{
- return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, exception_message(input_format, "integer value overflow", "size"), nullptr));
+ return sax->parse_error(chars_read,
+ get_token_string(),
+ out_of_range::create(408, exception_message(input_format, "integer value overflow", "size"), nullptr));
}
result = static_cast<std::size_t>(number);
return true;
@@ -11099,7 +14299,9 @@
}
if (!value_in_range_of<std::size_t>(number))
{
- return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, exception_message(input_format, "integer value overflow", "size"), nullptr));
+ return sax->parse_error(chars_read,
+ get_token_string(),
+ out_of_range::create(408, exception_message(input_format, "integer value overflow", "size"), nullptr));
}
result = detail::conditional_static_cast<std::size_t>(number);
return true;
@@ -11113,7 +14315,10 @@
}
if (is_ndarray) // ndarray dimensional vector can only contain integers, and can not embed another array
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(113, chars_read, exception_message(input_format, "ndarray dimensional vector is not allowed", "size"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ get_token_string(),
+ parse_error::create(113, chars_read, exception_message(input_format, "ndarray dimensional vector is not allowed", "size"), nullptr));
}
std::vector<size_t> dim;
if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim)))
@@ -11145,9 +14350,14 @@
for (auto i : dim)
{
result *= i;
- if (result == 0 || result == npos) // because dim elements shall not have zeros, result = 0 means overflow happened; it also can't be npos as it is used to initialize size in get_ubjson_size_type()
+ if (result == 0 ||
+ result ==
+ npos) // because dim elements shall not have zeros, result = 0 means overflow happened; it also can't be npos as it is used to initialize size in get_ubjson_size_type()
{
- return sax->parse_error(chars_read, get_token_string(), out_of_range::create(408, exception_message(input_format, "excessive ndarray size caused overflow", "size"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ get_token_string(),
+ out_of_range::create(408, exception_message(input_format, "excessive ndarray size caused overflow", "size"), nullptr));
}
if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(static_cast<number_unsigned_t>(i))))
{
@@ -11200,10 +14410,17 @@
if (current == '$')
{
result.second = get(); // must not ignore 'N', because 'N' maybe the type
- if (input_format == input_format_t::bjdata && JSON_HEDLEY_UNLIKELY(std::binary_search(bjd_optimized_type_markers.begin(), bjd_optimized_type_markers.end(), result.second)))
+ if (input_format == input_format_t::bjdata &&
+ JSON_HEDLEY_UNLIKELY(std::binary_search(bjd_optimized_type_markers.begin(), bjd_optimized_type_markers.end(), result.second)))
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, concat("marker 0x", last_token, " is not a permitted optimized array type"), "type"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(112,
+ chars_read,
+ exception_message(input_format, concat("marker 0x", last_token, " is not a permitted optimized array type"), "type"),
+ nullptr));
}
if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format, "type")))
@@ -11219,7 +14436,13 @@
return false;
}
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, concat("expected '#' after type information; last byte: 0x", last_token), "size"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(112,
+ chars_read,
+ exception_message(input_format, concat("expected '#' after type information; last byte: 0x", last_token), "size"),
+ nullptr));
}
const bool is_error = get_ubjson_size_value(result.first, is_ndarray);
@@ -11227,7 +14450,10 @@
{
if (inside_ndarray)
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read, exception_message(input_format, "ndarray can not be recursive", "size"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ get_token_string(),
+ parse_error::create(112, chars_read, exception_message(input_format, "ndarray can not be recursive", "size"), nullptr));
}
result.second |= (1 << 8); // use bit 8 to indicate ndarray, all UBJSON and BJData markers should be ASCII letters
}
@@ -11239,7 +14465,10 @@
const bool is_error = get_ubjson_size_value(result.first, is_ndarray);
if (input_format == input_format_t::bjdata && is_ndarray)
{
- return sax->parse_error(chars_read, get_token_string(), parse_error::create(112, chars_read, exception_message(input_format, "ndarray requires both type and size", "size"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ get_token_string(),
+ parse_error::create(112, chars_read, exception_message(input_format, "ndarray requires both type and size", "size"), nullptr));
}
return is_error;
}
@@ -11365,17 +14594,12 @@
case 0:
return std::ldexp(mant, -24);
case 31:
- return (mant == 0)
- ? std::numeric_limits<double>::infinity()
- : std::numeric_limits<double>::quiet_NaN();
+ return (mant == 0) ? std::numeric_limits<double>::infinity() : std::numeric_limits<double>::quiet_NaN();
default:
return std::ldexp(mant + 1024, exp - 25);
}
}();
- return sax->number_float((half & 0x8000u) != 0
- ? static_cast<number_float_t>(-val)
- : static_cast<number_float_t>(val),
- "");
+ return sax->number_float((half & 0x8000u) != 0 ? static_cast<number_float_t>(-val) : static_cast<number_float_t>(val), "");
}
case 'd':
@@ -11405,7 +14629,14 @@
if (JSON_HEDLEY_UNLIKELY(current > 127))
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format, concat("byte after 'C' must be in range 0x00..0x7F; last byte: 0x", last_token), "char"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(
+ 113,
+ chars_read,
+ exception_message(input_format, concat("byte after 'C' must be in range 0x00..0x7F; last byte: 0x", last_token), "char"),
+ nullptr));
}
string_t s(1, static_cast<typename string_t::value_type>(current));
return sax->string(s);
@@ -11427,7 +14658,9 @@
break;
}
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, "invalid byte: 0x" + last_token, "value"), nullptr));
+ return sax->parse_error(chars_read,
+ last_token,
+ parse_error::create(112, chars_read, exception_message(input_format, "invalid byte: 0x" + last_token, "value"), nullptr));
}
/*!
@@ -11454,7 +14687,10 @@
if (JSON_HEDLEY_UNLIKELY(it == bjd_types_map.end() || it->first != size_and_type.second))
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, "invalid byte: 0x" + last_token, "type"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(112, chars_read, exception_message(input_format, "invalid byte: 0x" + last_token, "type"), nullptr));
}
string_t type = it->second; // sax->string() takes a reference
@@ -11551,7 +14787,13 @@
if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0)
{
auto last_token = get_token_string();
- return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format, "BJData object does not support ND-array size in optimized format", "object"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ last_token,
+ parse_error::create(112,
+ chars_read,
+ exception_message(input_format, "BJData object does not support ND-array size in optimized format", "object"),
+ nullptr));
}
string_t key;
@@ -11655,7 +14897,13 @@
if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input))
{
- return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ number_string,
+ parse_error::create(115,
+ chars_read,
+ exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"),
+ nullptr));
}
switch (result_number)
@@ -11681,7 +14929,14 @@
case token_type::end_of_input:
case token_type::literal_or_value:
default:
- return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
+ return sax->parse_error(
+ chars_read,
+ number_string,
+ parse_error::create(
+ 115,
+ chars_read,
+ exception_message(input_format, concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"),
+ nullptr));
}
}
@@ -11776,9 +15031,7 @@
the input before we run out of string memory.
*/
template<typename NumberType>
- bool get_string(const input_format_t format,
- const NumberType len,
- string_t& result)
+ bool get_string(const input_format_t format, const NumberType len, string_t& result)
{
bool success = true;
for (NumberType i = 0; i < len; i++)
@@ -11809,9 +15062,7 @@
the input before we run out of memory.
*/
template<typename NumberType>
- bool get_binary(const input_format_t format,
- const NumberType len,
- binary_t& result)
+ bool get_binary(const input_format_t format, const NumberType len, binary_t& result)
{
bool success = true;
for (NumberType i = 0; i < len; i++)
@@ -11837,7 +15088,9 @@
{
if (JSON_HEDLEY_UNLIKELY(current == char_traits<char_type>::eof()))
{
- return sax->parse_error(chars_read, "<end of file>", parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context), nullptr));
+ return sax->parse_error(chars_read,
+ "<end of file>",
+ parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context), nullptr));
}
return true;
}
@@ -11848,7 +15101,8 @@
std::string get_token_string() const
{
std::array<char, 3> cr{{}};
- static_cast<void>((std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast<unsigned char>(current))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
+ static_cast<void>(
+ (std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast<unsigned char>(current))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
return std::string{cr.data()};
}
@@ -11858,9 +15112,7 @@
@param[in] context further context information
@return a message string to use in the parse_error exceptions
*/
- std::string exception_message(const input_format_t format,
- const std::string& detail,
- const std::string& context) const
+ std::string exception_message(const input_format_t format, const std::string& detail, const std::string& context) const
{
std::string error_msg = "syntax error while parsing ";
@@ -11916,33 +15168,29 @@
json_sax_t* sax = nullptr;
// excluded markers in bjdata optimized type
-#define JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_ \
- make_array<char_int_type>('F', 'H', 'N', 'S', 'T', 'Z', '[', '{')
+#define JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_ make_array<char_int_type>('F', 'H', 'N', 'S', 'T', 'Z', '[', '{')
-#define JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_ \
- make_array<bjd_type>( \
- bjd_type{'C', "char"}, \
- bjd_type{'D', "double"}, \
- bjd_type{'I', "int16"}, \
- bjd_type{'L', "int64"}, \
- bjd_type{'M', "uint64"}, \
- bjd_type{'U', "uint8"}, \
- bjd_type{'d', "single"}, \
- bjd_type{'i', "int8"}, \
- bjd_type{'l', "int32"}, \
- bjd_type{'m', "uint32"}, \
- bjd_type{'u', "uint16"})
+#define JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_ \
+ make_array<bjd_type>(bjd_type{'C', "char"}, \
+ bjd_type{'D', "double"}, \
+ bjd_type{'I', "int16"}, \
+ bjd_type{'L', "int64"}, \
+ bjd_type{'M', "uint64"}, \
+ bjd_type{'U', "uint8"}, \
+ bjd_type{'d', "single"}, \
+ bjd_type{'i', "int8"}, \
+ bjd_type{'l', "int32"}, \
+ bjd_type{'m', "uint32"}, \
+ bjd_type{'u', "uint16"})
JSON_PRIVATE_UNLESS_TESTED :
// lookup tables
// NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes)
- const decltype(JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_) bjd_optimized_type_markers =
- JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_;
+ const decltype(JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_) bjd_optimized_type_markers = JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_;
using bjd_type = std::pair<char_int_type, string_t>;
// NOLINTNEXTLINE(cppcoreguidelines-non-private-member-variables-in-classes)
- const decltype(JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_) bjd_types_map =
- JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_;
+ const decltype(JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_) bjd_types_map = JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_;
#undef JSON_BINARY_READER_MAKE_BJD_OPTIMIZED_TYPE_MARKERS_
#undef JSON_BINARY_READER_MAKE_BJD_TYPES_MAP_
@@ -11993,7 +15241,8 @@
// #include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
////////////
// parser //
////////////
@@ -12015,8 +15264,7 @@
};
template<typename BasicJsonType>
-using parser_callback_t =
- std::function<bool(int /*depth*/, parse_event_t /*event*/, BasicJsonType& /*parsed*/)>;
+using parser_callback_t = std::function<bool(int /*depth*/, parse_event_t /*event*/, BasicJsonType& /*parsed*/)>;
/*!
@brief syntax analysis
@@ -12178,9 +15426,10 @@
// parse key
if (JSON_HEDLEY_UNLIKELY(last_token != token_type::value_string))
{
- return sax->parse_error(m_lexer.get_position(),
- m_lexer.get_token_string(),
- parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr));
+ return sax->parse_error(
+ m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr));
}
if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string())))
{
@@ -12190,9 +15439,10 @@
// parse separator (:)
if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator))
{
- return sax->parse_error(m_lexer.get_position(),
- m_lexer.get_token_string(),
- parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr));
+ return sax->parse_error(
+ m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr));
}
// remember we are now inside an object
@@ -12303,22 +15553,28 @@
case token_type::parse_error:
{
// using "uninitialized" to avoid "expected" message
- return sax->parse_error(m_lexer.get_position(),
- m_lexer.get_token_string(),
- parse_error::create(101, m_lexer.get_position(), exception_message(token_type::uninitialized, "value"), nullptr));
+ return sax->parse_error(
+ m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101, m_lexer.get_position(), exception_message(token_type::uninitialized, "value"), nullptr));
}
case token_type::end_of_input:
{
if (JSON_HEDLEY_UNLIKELY(m_lexer.get_position().chars_read_total == 1))
{
- return sax->parse_error(m_lexer.get_position(),
- m_lexer.get_token_string(),
- parse_error::create(101, m_lexer.get_position(), "attempting to parse an empty input; check that your input string or stream contains the expected JSON", nullptr));
+ return sax->parse_error(
+ m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101,
+ m_lexer.get_position(),
+ "attempting to parse an empty input; check that your input string or stream contains the expected JSON",
+ nullptr));
}
- return sax->parse_error(m_lexer.get_position(),
- m_lexer.get_token_string(),
- parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr));
+ return sax->parse_error(
+ m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr));
}
case token_type::uninitialized:
case token_type::end_array:
@@ -12328,9 +15584,10 @@
case token_type::literal_or_value:
default: // the last token was unexpected
{
- return sax->parse_error(m_lexer.get_position(),
- m_lexer.get_token_string(),
- parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr));
+ return sax->parse_error(
+ m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), nullptr));
}
}
}
@@ -12387,9 +15644,10 @@
// parse key
if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::value_string))
{
- return sax->parse_error(m_lexer.get_position(),
- m_lexer.get_token_string(),
- parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr));
+ return sax->parse_error(
+ m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), nullptr));
}
if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string())))
@@ -12400,9 +15658,10 @@
// parse separator (:)
if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator))
{
- return sax->parse_error(m_lexer.get_position(),
- m_lexer.get_token_string(),
- parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr));
+ return sax->parse_error(
+ m_lexer.get_position(),
+ m_lexer.get_token_string(),
+ parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), nullptr));
}
// parse values
@@ -12508,7 +15767,8 @@
// #include <nlohmann/detail/macro_scope.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/*
@brief an iterator for primitive JSON types
@@ -12625,7 +15885,8 @@
NLOHMANN_JSON_NAMESPACE_END
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/*!
@brief an iterator value
@@ -12674,7 +15935,8 @@
// #include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
// forward declare, to be able to friend it later on
template<typename IteratorType>
@@ -12702,7 +15964,8 @@
class iter_impl // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions)
{
/// the iterator with BasicJsonType of different const-ness
- using other_iter_impl = iter_impl<typename std::conditional<std::is_const<BasicJsonType>::value, typename std::remove_const<BasicJsonType>::type, const BasicJsonType>::type>;
+ using other_iter_impl =
+ iter_impl<typename std::conditional<std::is_const<BasicJsonType>::value, typename std::remove_const<BasicJsonType>::type, const BasicJsonType>::type>;
/// allow basic_json to access private members
friend other_iter_impl;
friend BasicJsonType;
@@ -12712,10 +15975,10 @@
using object_t = typename BasicJsonType::object_t;
using array_t = typename BasicJsonType::array_t;
// make sure BasicJsonType is basic_json or const basic_json
- static_assert(is_basic_json<typename std::remove_const<BasicJsonType>::type>::value,
- "iter_impl only accepts (const) basic_json");
+ static_assert(is_basic_json<typename std::remove_const<BasicJsonType>::type>::value, "iter_impl only accepts (const) basic_json");
// superficial check for the LegacyBidirectionalIterator named requirement
- static_assert(std::is_base_of<std::bidirectional_iterator_tag, std::bidirectional_iterator_tag>::value && std::is_base_of<std::bidirectional_iterator_tag, typename std::iterator_traits<typename array_t::iterator>::iterator_category>::value,
+ static_assert(std::is_base_of<std::bidirectional_iterator_tag, std::bidirectional_iterator_tag>::value &&
+ std::is_base_of<std::bidirectional_iterator_tag, typename std::iterator_traits<typename array_t::iterator>::iterator_category>::value,
"basic_json iterator assumes array and object type iterators satisfy the LegacyBidirectionalIterator named requirement.");
public:
@@ -12731,14 +15994,11 @@
/// a type to represent differences between iterators
using difference_type = typename BasicJsonType::difference_type;
/// defines a pointer to the type iterated over (value_type)
- using pointer = typename std::conditional<std::is_const<BasicJsonType>::value,
- typename BasicJsonType::const_pointer,
- typename BasicJsonType::pointer>::type;
+ using pointer =
+ typename std::conditional<std::is_const<BasicJsonType>::value, typename BasicJsonType::const_pointer, typename BasicJsonType::pointer>::type;
/// defines a reference to the type iterated over (value_type)
using reference =
- typename std::conditional<std::is_const<BasicJsonType>::value,
- typename BasicJsonType::const_reference,
- typename BasicJsonType::reference>::type;
+ typename std::conditional<std::is_const<BasicJsonType>::value, typename BasicJsonType::const_reference, typename BasicJsonType::reference>::type;
iter_impl() = default;
~iter_impl() = default;
@@ -13123,7 +16383,8 @@
@brief comparison: equal
@pre The iterator is initialized; i.e. `m_object != nullptr`.
*/
- template<typename IterImpl, detail::enable_if_t<(std::is_same<IterImpl, iter_impl>::value || std::is_same<IterImpl, other_iter_impl>::value), std::nullptr_t> = nullptr>
+ template<typename IterImpl,
+ detail::enable_if_t<(std::is_same<IterImpl, iter_impl>::value || std::is_same<IterImpl, other_iter_impl>::value), std::nullptr_t> = nullptr>
bool operator==(const IterImpl& other) const
{
// if objects are not the same, the comparison is undefined
@@ -13159,7 +16420,8 @@
@brief comparison: not equal
@pre The iterator is initialized; i.e. `m_object != nullptr`.
*/
- template<typename IterImpl, detail::enable_if_t<(std::is_same<IterImpl, iter_impl>::value || std::is_same<IterImpl, other_iter_impl>::value), std::nullptr_t> = nullptr>
+ template<typename IterImpl,
+ detail::enable_if_t<(std::is_same<IterImpl, iter_impl>::value || std::is_same<IterImpl, other_iter_impl>::value), std::nullptr_t> = nullptr>
bool operator!=(const IterImpl& other) const
{
return !operator==(other);
@@ -13426,7 +16688,8 @@
// #include <nlohmann/detail/abi_macros.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
//////////////////////
// reverse_iterator //
@@ -13558,7 +16821,8 @@
// #include <nlohmann/detail/abi_macros.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/*!
@brief Default base class of the @ref basic_json class.
@@ -13574,10 +16838,7 @@
{};
template<class T>
-using json_base_class = typename std::conditional<
- std::is_same<T, void>::value,
- json_default_base,
- T>::type;
+using json_base_class = typename std::conditional<std::is_same<T, void>::value, json_default_base, T>::type;
} // namespace detail
NLOHMANN_JSON_NAMESPACE_END
@@ -13681,9 +16942,7 @@
/// @sa https://json.nlohmann.me/api/json_pointer/operator_slasheq/
json_pointer& operator/=(const json_pointer& ptr)
{
- reference_tokens.insert(reference_tokens.end(),
- ptr.reference_tokens.begin(),
- ptr.reference_tokens.end());
+ reference_tokens.insert(reference_tokens.end(), ptr.reference_tokens.begin(), ptr.reference_tokens.end());
return *this;
}
@@ -13704,8 +16963,7 @@
/// @brief create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer
/// @sa https://json.nlohmann.me/api/json_pointer/operator_slash/
- friend json_pointer operator/(const json_pointer& lhs,
- const json_pointer& rhs)
+ friend json_pointer operator/(const json_pointer& lhs, const json_pointer& rhs)
{
return json_pointer(lhs) /= rhs;
}
@@ -13942,15 +17200,12 @@
if (ptr->is_null())
{
// check if reference token is a number
- const bool nums =
- std::all_of(reference_token.begin(), reference_token.end(), [](const unsigned char x) {
- return std::isdigit(x);
- });
+ const bool nums = std::all_of(reference_token.begin(), reference_token.end(), [](const unsigned char x) {
+ return std::isdigit(x);
+ });
// change value to array for numbers or "-" or to object otherwise
- *ptr = (nums || reference_token == "-")
- ? detail::value_t::array
- : detail::value_t::object;
+ *ptr = (nums || reference_token == "-") ? detail::value_t::array : detail::value_t::object;
}
switch (ptr->type())
@@ -14018,7 +17273,10 @@
if (JSON_HEDLEY_UNLIKELY(reference_token == "-"))
{
// "-" always fails the range check
- JSON_THROW(detail::out_of_range::create(402, detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"), ptr));
+ JSON_THROW(detail::out_of_range::create(
+ 402,
+ detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"),
+ ptr));
}
// note: at performs range check
@@ -14074,7 +17332,10 @@
if (JSON_HEDLEY_UNLIKELY(reference_token == "-"))
{
// "-" cannot be used for const access
- JSON_THROW(detail::out_of_range::create(402, detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"), ptr));
+ JSON_THROW(detail::out_of_range::create(
+ 402,
+ detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"),
+ ptr));
}
// use unchecked array access
@@ -14123,7 +17384,10 @@
if (JSON_HEDLEY_UNLIKELY(reference_token == "-"))
{
// "-" always fails the range check
- JSON_THROW(detail::out_of_range::create(402, detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"), ptr));
+ JSON_THROW(detail::out_of_range::create(
+ 402,
+ detail::concat("array index '-' (", std::to_string(ptr->m_data.m_value.array->size()), ") is out of range"),
+ ptr));
}
// note: at performs range check
@@ -14253,7 +17517,8 @@
// check if nonempty reference string begins with slash
if (JSON_HEDLEY_UNLIKELY(reference_string[0] != '/'))
{
- JSON_THROW(detail::parse_error::create(107, 1, detail::concat("JSON pointer must be empty or begin with '/' - was: '", reference_string, "'"), nullptr));
+ JSON_THROW(
+ detail::parse_error::create(107, 1, detail::concat("JSON pointer must be empty or begin with '/' - was: '", reference_string, "'"), nullptr));
}
// extract the reference tokens:
@@ -14277,16 +17542,12 @@
auto reference_token = reference_string.substr(start, slash - start);
// check reference tokens are properly escaped
- for (std::size_t pos = reference_token.find_first_of('~');
- pos != string_t::npos;
- pos = reference_token.find_first_of('~', pos + 1))
+ for (std::size_t pos = reference_token.find_first_of('~'); pos != string_t::npos; pos = reference_token.find_first_of('~', pos + 1))
{
JSON_ASSERT(reference_token[pos] == '~');
// ~ must be followed by 0 or 1
- if (JSON_HEDLEY_UNLIKELY(pos == reference_token.size() - 1 ||
- (reference_token[pos + 1] != '0' &&
- reference_token[pos + 1] != '1')))
+ if (JSON_HEDLEY_UNLIKELY(pos == reference_token.size() - 1 || (reference_token[pos + 1] != '0' && reference_token[pos + 1] != '1')))
{
JSON_THROW(detail::parse_error::create(108, 0, "escape character '~' must be followed with '0' or '1'", nullptr));
}
@@ -14309,9 +17570,7 @@
@note Empty objects or arrays are flattened to `null`.
*/
template<typename BasicJsonType>
- static void flatten(const string_t& reference_string,
- const BasicJsonType& value,
- BasicJsonType& result)
+ static void flatten(const string_t& reference_string, const BasicJsonType& value, BasicJsonType& result)
{
switch (value.type())
{
@@ -14327,9 +17586,7 @@
// iterate array and use index as reference string
for (std::size_t i = 0; i < value.m_data.m_value.array->size(); ++i)
{
- flatten(detail::concat(reference_string, '/', std::to_string(i)),
- value.m_data.m_value.array->operator[](i),
- result);
+ flatten(detail::concat(reference_string, '/', std::to_string(i)), value.m_data.m_value.array->operator[](i), result);
}
}
break;
@@ -14381,8 +17638,7 @@
@throw type_error.313 if value cannot be unflattened
*/
template<typename BasicJsonType>
- static BasicJsonType
- unflatten(const BasicJsonType& value)
+ static BasicJsonType unflatten(const BasicJsonType& value)
{
if (JSON_HEDLEY_UNLIKELY(!value.is_object()))
{
@@ -14444,7 +17700,7 @@
/// @brief 3-way compares two JSON pointers
template<typename RefStringTypeRhs>
- std::strong_ordering operator<=> (const json_pointer<RefStringTypeRhs>& rhs) const noexcept // *NOPAD*
+ std::strong_ordering operator<=>(const json_pointer<RefStringTypeRhs>& rhs) const noexcept // *NOPAD*
{
return reference_tokens <=> rhs.reference_tokens; // *NOPAD*
}
@@ -14453,49 +17709,42 @@
/// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
template<typename RefStringTypeLhs, typename RefStringTypeRhs>
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator==(const json_pointer<RefStringTypeLhs>& lhs,
- const json_pointer<RefStringTypeRhs>& rhs) noexcept;
+ friend bool operator==(const json_pointer<RefStringTypeLhs>& lhs, const json_pointer<RefStringTypeRhs>& rhs) noexcept;
/// @brief compares JSON pointer and string for equality
/// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
template<typename RefStringTypeLhs, typename StringType>
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator==(const json_pointer<RefStringTypeLhs>& lhs,
- const StringType& rhs);
+ friend bool operator==(const json_pointer<RefStringTypeLhs>& lhs, const StringType& rhs);
/// @brief compares string and JSON pointer for equality
/// @sa https://json.nlohmann.me/api/json_pointer/operator_eq/
template<typename RefStringTypeRhs, typename StringType>
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator==(const StringType& lhs,
- const json_pointer<RefStringTypeRhs>& rhs);
+ friend bool operator==(const StringType& lhs, const json_pointer<RefStringTypeRhs>& rhs);
/// @brief compares two JSON pointers for inequality
/// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/
template<typename RefStringTypeLhs, typename RefStringTypeRhs>
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator!=(const json_pointer<RefStringTypeLhs>& lhs,
- const json_pointer<RefStringTypeRhs>& rhs) noexcept;
+ friend bool operator!=(const json_pointer<RefStringTypeLhs>& lhs, const json_pointer<RefStringTypeRhs>& rhs) noexcept;
/// @brief compares JSON pointer and string for inequality
/// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/
template<typename RefStringTypeLhs, typename StringType>
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator!=(const json_pointer<RefStringTypeLhs>& lhs,
- const StringType& rhs);
+ friend bool operator!=(const json_pointer<RefStringTypeLhs>& lhs, const StringType& rhs);
/// @brief compares string and JSON pointer for inequality
/// @sa https://json.nlohmann.me/api/json_pointer/operator_ne/
template<typename RefStringTypeRhs, typename StringType>
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator!=(const StringType& lhs,
- const json_pointer<RefStringTypeRhs>& rhs);
+ friend bool operator!=(const StringType& lhs, const json_pointer<RefStringTypeRhs>& rhs);
/// @brief compares two JSON pointer for less-than
template<typename RefStringTypeLhs, typename RefStringTypeRhs>
// NOLINTNEXTLINE(readability-redundant-declaration)
- friend bool operator<(const json_pointer<RefStringTypeLhs>& lhs,
- const json_pointer<RefStringTypeRhs>& rhs) noexcept;
+ friend bool operator<(const json_pointer<RefStringTypeLhs>& lhs, const json_pointer<RefStringTypeRhs>& rhs) noexcept;
#endif
private:
@@ -14506,58 +17755,47 @@
#if !JSON_HAS_THREE_WAY_COMPARISON
// functions cannot be defined inside class due to ODR violations
template<typename RefStringTypeLhs, typename RefStringTypeRhs>
-inline bool operator==(const json_pointer<RefStringTypeLhs>& lhs,
- const json_pointer<RefStringTypeRhs>& rhs) noexcept
+inline bool operator==(const json_pointer<RefStringTypeLhs>& lhs, const json_pointer<RefStringTypeRhs>& rhs) noexcept
{
return lhs.reference_tokens == rhs.reference_tokens;
}
-template<typename RefStringTypeLhs,
- typename StringType = typename json_pointer<RefStringTypeLhs>::string_t>
+template<typename RefStringTypeLhs, typename StringType = typename json_pointer<RefStringTypeLhs>::string_t>
JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer, json_pointer))
-inline bool operator==(const json_pointer<RefStringTypeLhs>& lhs,
- const StringType& rhs)
+inline bool operator==(const json_pointer<RefStringTypeLhs>& lhs, const StringType& rhs)
{
return lhs == json_pointer<RefStringTypeLhs>(rhs);
}
-template<typename RefStringTypeRhs,
- typename StringType = typename json_pointer<RefStringTypeRhs>::string_t>
+template<typename RefStringTypeRhs, typename StringType = typename json_pointer<RefStringTypeRhs>::string_t>
JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator==(json_pointer, json_pointer))
-inline bool operator==(const StringType& lhs,
- const json_pointer<RefStringTypeRhs>& rhs)
+inline bool operator==(const StringType& lhs, const json_pointer<RefStringTypeRhs>& rhs)
{
return json_pointer<RefStringTypeRhs>(lhs) == rhs;
}
template<typename RefStringTypeLhs, typename RefStringTypeRhs>
-inline bool operator!=(const json_pointer<RefStringTypeLhs>& lhs,
- const json_pointer<RefStringTypeRhs>& rhs) noexcept
+inline bool operator!=(const json_pointer<RefStringTypeLhs>& lhs, const json_pointer<RefStringTypeRhs>& rhs) noexcept
{
return !(lhs == rhs);
}
-template<typename RefStringTypeLhs,
- typename StringType = typename json_pointer<RefStringTypeLhs>::string_t>
+template<typename RefStringTypeLhs, typename StringType = typename json_pointer<RefStringTypeLhs>::string_t>
JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator!=(json_pointer, json_pointer))
-inline bool operator!=(const json_pointer<RefStringTypeLhs>& lhs,
- const StringType& rhs)
+inline bool operator!=(const json_pointer<RefStringTypeLhs>& lhs, const StringType& rhs)
{
return !(lhs == rhs);
}
-template<typename RefStringTypeRhs,
- typename StringType = typename json_pointer<RefStringTypeRhs>::string_t>
+template<typename RefStringTypeRhs, typename StringType = typename json_pointer<RefStringTypeRhs>::string_t>
JSON_HEDLEY_DEPRECATED_FOR(3.11.2, operator!=(json_pointer, json_pointer))
-inline bool operator!=(const StringType& lhs,
- const json_pointer<RefStringTypeRhs>& rhs)
+inline bool operator!=(const StringType& lhs, const json_pointer<RefStringTypeRhs>& rhs)
{
return !(lhs == rhs);
}
template<typename RefStringTypeLhs, typename RefStringTypeRhs>
-inline bool operator<(const json_pointer<RefStringTypeLhs>& lhs,
- const json_pointer<RefStringTypeRhs>& rhs) noexcept
+inline bool operator<(const json_pointer<RefStringTypeLhs>& lhs, const json_pointer<RefStringTypeRhs>& rhs) noexcept
{
return lhs.reference_tokens < rhs.reference_tokens;
}
@@ -14582,7 +17820,8 @@
// #include <nlohmann/detail/meta/type_traits.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
template<typename BasicJsonType>
class json_ref
@@ -14602,9 +17841,7 @@
: owned_value(init)
{}
- template<
- class... Args,
- enable_if_t<std::is_constructible<value_type, Args...>::value, int> = 0>
+ template<class... Args, enable_if_t<std::is_constructible<value_type, Args...>::value, int> = 0>
json_ref(Args&&... args)
: owned_value(std::forward<Args>(args)...)
{}
@@ -14697,7 +17934,8 @@
// #include <nlohmann/detail/macro_scope.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/// abstract output adapter interface
template<typename CharType>
@@ -14826,7 +18064,8 @@
// #include <nlohmann/detail/string_concat.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
///////////////////
// binary writer //
@@ -14899,9 +18138,7 @@
case value_t::boolean:
{
- oa->write_character(j.m_data.m_value.boolean
- ? to_char_type(0xF5)
- : to_char_type(0xF4));
+ oa->write_character(j.m_data.m_value.boolean ? to_char_type(0xF5) : to_char_type(0xF4));
break;
}
@@ -15054,9 +18291,7 @@
// LCOV_EXCL_STOP
// step 2: write the string
- oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),
- j.m_data.m_value.string->size());
+ oa->write_characters(reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()), j.m_data.m_value.string->size());
break;
}
@@ -15155,9 +18390,7 @@
// LCOV_EXCL_STOP
// step 2: write each element
- oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),
- N);
+ oa->write_characters(reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()), N);
break;
}
@@ -15223,9 +18456,7 @@
case value_t::boolean: // true and false
{
- oa->write_character(j.m_data.m_value.boolean
- ? to_char_type(0xC3)
- : to_char_type(0xC2));
+ oa->write_character(j.m_data.m_value.boolean ? to_char_type(0xC3) : to_char_type(0xC2));
break;
}
@@ -15374,9 +18605,7 @@
}
// step 2: write the string
- oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),
- j.m_data.m_value.string->size());
+ oa->write_characters(reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()), j.m_data.m_value.string->size());
break;
}
@@ -15461,18 +18690,16 @@
}
else if (N <= (std::numeric_limits<std::uint16_t>::max)())
{
- const std::uint8_t output_type = use_ext
- ? 0xC8 // ext 16
- : 0xC5; // bin 16
+ const std::uint8_t output_type = use_ext ? 0xC8 // ext 16
+ : 0xC5; // bin 16
oa->write_character(to_char_type(output_type));
write_number(static_cast<std::uint16_t>(N));
}
else if (N <= (std::numeric_limits<std::uint32_t>::max)())
{
- const std::uint8_t output_type = use_ext
- ? 0xC9 // ext 32
- : 0xC6; // bin 32
+ const std::uint8_t output_type = use_ext ? 0xC9 // ext 32
+ : 0xC6; // bin 32
oa->write_character(to_char_type(output_type));
write_number(static_cast<std::uint32_t>(N));
@@ -15485,9 +18712,7 @@
}
// step 2: write the byte string
- oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),
- N);
+ oa->write_characters(reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()), N);
break;
}
@@ -15553,9 +18778,7 @@
{
if (add_prefix)
{
- oa->write_character(j.m_data.m_value.boolean
- ? to_char_type('T')
- : to_char_type('F'));
+ oa->write_character(j.m_data.m_value.boolean ? to_char_type('T') : to_char_type('F'));
}
break;
}
@@ -15585,9 +18808,7 @@
oa->write_character(to_char_type('S'));
}
write_number_with_ubjson_prefix(j.m_data.m_value.string->size(), true, use_bjdata);
- oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()),
- j.m_data.m_value.string->size());
+ oa->write_characters(reinterpret_cast<const CharType*>(j.m_data.m_value.string->c_str()), j.m_data.m_value.string->size());
break;
}
@@ -15658,9 +18879,7 @@
if (use_type)
{
- oa->write_characters(
- reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),
- j.m_data.m_value.binary->size());
+ oa->write_characters(reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()), j.m_data.m_value.binary->size());
}
else
{
@@ -15681,9 +18900,13 @@
case value_t::object:
{
- if (use_bjdata && j.m_data.m_value.object->size() == 3 && j.m_data.m_value.object->find("_ArrayType_") != j.m_data.m_value.object->end() && j.m_data.m_value.object->find("_ArraySize_") != j.m_data.m_value.object->end() && j.m_data.m_value.object->find("_ArrayData_") != j.m_data.m_value.object->end())
+ if (use_bjdata && j.m_data.m_value.object->size() == 3 && j.m_data.m_value.object->find("_ArrayType_") != j.m_data.m_value.object->end() &&
+ j.m_data.m_value.object->find("_ArraySize_") != j.m_data.m_value.object->end() &&
+ j.m_data.m_value.object->find("_ArrayData_") != j.m_data.m_value.object->end())
{
- if (!write_bjdata_ndarray(*j.m_data.m_value.object, use_count, use_type)) // decode bjdata ndarray in the JData format (https://github.com/NeuroJSON/jdata)
+ if (!write_bjdata_ndarray(*j.m_data.m_value.object,
+ use_count,
+ use_type)) // decode bjdata ndarray in the JData format (https://github.com/NeuroJSON/jdata)
{
break;
}
@@ -15722,9 +18945,7 @@
for (const auto& el : *j.m_data.m_value.object)
{
write_number_with_ubjson_prefix(el.first.size(), true, use_bjdata);
- oa->write_characters(
- reinterpret_cast<const CharType*>(el.first.c_str()),
- el.first.size());
+ oa->write_characters(reinterpret_cast<const CharType*>(el.first.c_str()), el.first.size());
write_ubjson(el.second, use_count, use_type, prefix_required, use_bjdata);
}
@@ -15766,20 +18987,16 @@
/*!
@brief Writes the given @a element_type and @a name to the output adapter
*/
- void write_bson_entry_header(const string_t& name,
- const std::uint8_t element_type)
+ void write_bson_entry_header(const string_t& name, const std::uint8_t element_type)
{
oa->write_character(to_char_type(element_type)); // boolean
- oa->write_characters(
- reinterpret_cast<const CharType*>(name.c_str()),
- name.size() + 1u);
+ oa->write_characters(reinterpret_cast<const CharType*>(name.c_str()), name.size() + 1u);
}
/*!
@brief Writes a BSON element with key @a name and boolean value @a value
*/
- void write_bson_boolean(const string_t& name,
- const bool value)
+ void write_bson_boolean(const string_t& name, const bool value)
{
write_bson_entry_header(name, 0x08);
oa->write_character(value ? to_char_type(0x01) : to_char_type(0x00));
@@ -15788,8 +19005,7 @@
/*!
@brief Writes a BSON element with key @a name and double value @a value
*/
- void write_bson_double(const string_t& name,
- const double value)
+ void write_bson_double(const string_t& name, const double value)
{
write_bson_entry_header(name, 0x01);
write_number<double>(value, true);
@@ -15806,15 +19022,12 @@
/*!
@brief Writes a BSON element with key @a name and string value @a value
*/
- void write_bson_string(const string_t& name,
- const string_t& value)
+ void write_bson_string(const string_t& name, const string_t& value)
{
write_bson_entry_header(name, 0x02);
write_number<std::int32_t>(static_cast<std::int32_t>(value.size() + 1ul), true);
- oa->write_characters(
- reinterpret_cast<const CharType*>(value.c_str()),
- value.size() + 1);
+ oa->write_characters(reinterpret_cast<const CharType*>(value.c_str()), value.size() + 1);
}
/*!
@@ -15830,16 +19043,14 @@
*/
static std::size_t calc_bson_integer_size(const std::int64_t value)
{
- return (std::numeric_limits<std::int32_t>::min)() <= value && value <= (std::numeric_limits<std::int32_t>::max)()
- ? sizeof(std::int32_t)
- : sizeof(std::int64_t);
+ return (std::numeric_limits<std::int32_t>::min)() <= value && value <= (std::numeric_limits<std::int32_t>::max)() ? sizeof(std::int32_t)
+ : sizeof(std::int64_t);
}
/*!
@brief Writes a BSON element with key @a name and integer @a value
*/
- void write_bson_integer(const string_t& name,
- const std::int64_t value)
+ void write_bson_integer(const string_t& name, const std::int64_t value)
{
if ((std::numeric_limits<std::int32_t>::min)() <= value && value <= (std::numeric_limits<std::int32_t>::max)())
{
@@ -15858,16 +19069,13 @@
*/
static constexpr std::size_t calc_bson_unsigned_size(const std::uint64_t value) noexcept
{
- return (value <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))
- ? sizeof(std::int32_t)
- : sizeof(std::int64_t);
+ return (value <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)())) ? sizeof(std::int32_t) : sizeof(std::int64_t);
}
/*!
@brief Writes a BSON element with key @a name and unsigned @a value
*/
- void write_bson_unsigned(const string_t& name,
- const BasicJsonType& j)
+ void write_bson_unsigned(const string_t& name, const BasicJsonType& j)
{
if (j.m_data.m_value.number_unsigned <= static_cast<std::uint64_t>((std::numeric_limits<std::int32_t>::max)()))
{
@@ -15881,15 +19089,17 @@
}
else
{
- JSON_THROW(out_of_range::create(407, concat("integer number ", std::to_string(j.m_data.m_value.number_unsigned), " cannot be represented by BSON as it does not fit int64"), &j));
+ JSON_THROW(out_of_range::create(
+ 407,
+ concat("integer number ", std::to_string(j.m_data.m_value.number_unsigned), " cannot be represented by BSON as it does not fit int64"),
+ &j));
}
}
/*!
@brief Writes a BSON element with key @a name and object @a value
*/
- void write_bson_object_entry(const string_t& name,
- const typename BasicJsonType::object_t& value)
+ void write_bson_object_entry(const string_t& name, const typename BasicJsonType::object_t& value)
{
write_bson_entry_header(name, 0x03); // object
write_bson_object(value);
@@ -15902,9 +19112,12 @@
{
std::size_t array_index = 0ul;
- const std::size_t embedded_document_size = std::accumulate(std::begin(value), std::end(value), static_cast<std::size_t>(0), [&array_index](std::size_t result, const typename BasicJsonType::array_t::value_type& el) {
- return result + calc_bson_element_size(std::to_string(array_index++), el);
- });
+ const std::size_t embedded_document_size = std::accumulate(std::begin(value),
+ std::end(value),
+ static_cast<std::size_t>(0),
+ [&array_index](std::size_t result, const typename BasicJsonType::array_t::value_type& el) {
+ return result + calc_bson_element_size(std::to_string(array_index++), el);
+ });
return sizeof(std::int32_t) + embedded_document_size + 1ul;
}
@@ -15920,8 +19133,7 @@
/*!
@brief Writes a BSON element with key @a name and array @a value
*/
- void write_bson_array(const string_t& name,
- const typename BasicJsonType::array_t& value)
+ void write_bson_array(const string_t& name, const typename BasicJsonType::array_t& value)
{
write_bson_entry_header(name, 0x04); // array
write_number<std::int32_t>(static_cast<std::int32_t>(calc_bson_array_size(value)), true);
@@ -15939,8 +19151,7 @@
/*!
@brief Writes a BSON element with key @a name and binary value @a value
*/
- void write_bson_binary(const string_t& name,
- const binary_t& value)
+ void write_bson_binary(const string_t& name, const binary_t& value)
{
write_bson_entry_header(name, 0x05);
@@ -15954,8 +19165,7 @@
@brief Calculates the size necessary to serialize the JSON value @a j with its @a name
@return The calculated size for the BSON document entry for @a j with the given @a name.
*/
- static std::size_t calc_bson_element_size(const string_t& name,
- const BasicJsonType& j)
+ static std::size_t calc_bson_element_size(const string_t& name, const BasicJsonType& j)
{
const auto header_size = calc_bson_entry_header_size(name, j);
switch (j.type())
@@ -16002,8 +19212,7 @@
@param name The name to associate with the JSON entity @a j within the
current BSON document
*/
- void write_bson_element(const string_t& name,
- const BasicJsonType& j)
+ void write_bson_element(const string_t& name, const BasicJsonType& j)
{
switch (j.type())
{
@@ -16051,9 +19260,10 @@
*/
static std::size_t calc_bson_object_size(const typename BasicJsonType::object_t& value)
{
- const std::size_t document_size = std::accumulate(value.begin(), value.end(), static_cast<std::size_t>(0), [](size_t result, const typename BasicJsonType::object_t::value_type& el) {
- return result += calc_bson_element_size(el.first, el.second);
- });
+ const std::size_t document_size =
+ std::accumulate(value.begin(), value.end(), static_cast<std::size_t>(0), [](size_t result, const typename BasicJsonType::object_t::value_type& el) {
+ return result += calc_bson_element_size(el.first, el.second);
+ });
return sizeof(std::int32_t) + document_size + 1ul;
}
@@ -16108,9 +19318,7 @@
// UBJSON: write number (floating point)
template<typename NumberType, typename std::enable_if<std::is_floating_point<NumberType>::value, int>::type = 0>
- void write_number_with_ubjson_prefix(const NumberType n,
- const bool add_prefix,
- const bool use_bjdata)
+ void write_number_with_ubjson_prefix(const NumberType n, const bool add_prefix, const bool use_bjdata)
{
if (add_prefix)
{
@@ -16121,9 +19329,7 @@
// UBJSON: write number (unsigned integer)
template<typename NumberType, typename std::enable_if<std::is_unsigned<NumberType>::value, int>::type = 0>
- void write_number_with_ubjson_prefix(const NumberType n,
- const bool add_prefix,
- const bool use_bjdata)
+ void write_number_with_ubjson_prefix(const NumberType n, const bool add_prefix, const bool use_bjdata)
{
if (n <= static_cast<std::uint64_t>((std::numeric_limits<std::int8_t>::max)()))
{
@@ -16207,9 +19413,7 @@
// UBJSON: write number (signed integer)
template<typename NumberType, typename std::enable_if<std::is_signed<NumberType>::value && !std::is_floating_point<NumberType>::value, int>::type = 0>
- void write_number_with_ubjson_prefix(const NumberType n,
- const bool add_prefix,
- const bool use_bjdata)
+ void write_number_with_ubjson_prefix(const NumberType n, const bool add_prefix, const bool use_bjdata)
{
if ((std::numeric_limits<std::int8_t>::min)() <= n && n <= (std::numeric_limits<std::int8_t>::max)())
{
@@ -16219,7 +19423,8 @@
}
write_number(static_cast<std::int8_t>(n), use_bjdata);
}
- else if (static_cast<std::int64_t>((std::numeric_limits<std::uint8_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint8_t>::max)()))
+ else if (static_cast<std::int64_t>((std::numeric_limits<std::uint8_t>::min)()) <= n &&
+ n <= static_cast<std::int64_t>((std::numeric_limits<std::uint8_t>::max)()))
{
if (add_prefix)
{
@@ -16235,7 +19440,8 @@
}
write_number(static_cast<std::int16_t>(n), use_bjdata);
}
- else if (use_bjdata && (static_cast<std::int64_t>((std::numeric_limits<std::uint16_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint16_t>::max)())))
+ else if (use_bjdata && (static_cast<std::int64_t>((std::numeric_limits<std::uint16_t>::min)()) <= n &&
+ n <= static_cast<std::int64_t>((std::numeric_limits<std::uint16_t>::max)())))
{
if (add_prefix)
{
@@ -16251,7 +19457,8 @@
}
write_number(static_cast<std::int32_t>(n), use_bjdata);
}
- else if (use_bjdata && (static_cast<std::int64_t>((std::numeric_limits<std::uint32_t>::min)()) <= n && n <= static_cast<std::int64_t>((std::numeric_limits<std::uint32_t>::max)())))
+ else if (use_bjdata && (static_cast<std::int64_t>((std::numeric_limits<std::uint32_t>::min)()) <= n &&
+ n <= static_cast<std::int64_t>((std::numeric_limits<std::uint32_t>::max)())))
{
if (add_prefix)
{
@@ -16300,31 +19507,38 @@
case value_t::number_integer:
{
- if ((std::numeric_limits<std::int8_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int8_t>::max)())
+ if ((std::numeric_limits<std::int8_t>::min)() <= j.m_data.m_value.number_integer &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::int8_t>::max)())
{
return 'i';
}
- if ((std::numeric_limits<std::uint8_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())
+ if ((std::numeric_limits<std::uint8_t>::min)() <= j.m_data.m_value.number_integer &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())
{
return 'U';
}
- if ((std::numeric_limits<std::int16_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int16_t>::max)())
+ if ((std::numeric_limits<std::int16_t>::min)() <= j.m_data.m_value.number_integer &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::int16_t>::max)())
{
return 'I';
}
- if (use_bjdata && ((std::numeric_limits<std::uint16_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)()))
+ if (use_bjdata && ((std::numeric_limits<std::uint16_t>::min)() <= j.m_data.m_value.number_integer &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)()))
{
return 'u';
}
- if ((std::numeric_limits<std::int32_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int32_t>::max)())
+ if ((std::numeric_limits<std::int32_t>::min)() <= j.m_data.m_value.number_integer &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::int32_t>::max)())
{
return 'l';
}
- if (use_bjdata && ((std::numeric_limits<std::uint32_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)()))
+ if (use_bjdata && ((std::numeric_limits<std::uint32_t>::min)() <= j.m_data.m_value.number_integer &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)()))
{
return 'm';
}
- if ((std::numeric_limits<std::int64_t>::min)() <= j.m_data.m_value.number_integer && j.m_data.m_value.number_integer <= (std::numeric_limits<std::int64_t>::max)())
+ if ((std::numeric_limits<std::int64_t>::min)() <= j.m_data.m_value.number_integer &&
+ j.m_data.m_value.number_integer <= (std::numeric_limits<std::int64_t>::max)())
{
return 'L';
}
@@ -16404,7 +19618,17 @@
*/
bool write_bjdata_ndarray(const typename BasicJsonType::object_t& value, const bool use_count, const bool use_type)
{
- std::map<string_t, CharType> bjdtype = {{"uint8", 'U'}, {"int8", 'i'}, {"uint16", 'u'}, {"int16", 'I'}, {"uint32", 'm'}, {"int32", 'l'}, {"uint64", 'M'}, {"int64", 'L'}, {"single", 'd'}, {"double", 'D'}, {"char", 'C'}};
+ std::map<string_t, CharType> bjdtype = {{"uint8", 'U'},
+ {"int8", 'i'},
+ {"uint16", 'u'},
+ {"int16", 'I'},
+ {"uint32", 'm'},
+ {"int32", 'l'},
+ {"uint64", 'M'},
+ {"int64", 'L'},
+ {"single", 'd'},
+ {"double", 'D'},
+ {"char", 'C'}};
string_t key = "_ArrayType_";
auto it = bjdtype.find(static_cast<string_t>(value.at(key)));
@@ -16553,16 +19777,13 @@
static_cast<double>(n) <= static_cast<double>((std::numeric_limits<float>::max)()) &&
static_cast<double>(static_cast<float>(n)) == static_cast<double>(n))
{
- oa->write_character(format == detail::input_format_t::cbor
- ? get_cbor_float_prefix(static_cast<float>(n))
- : get_msgpack_float_prefix(static_cast<float>(n)));
+ oa->write_character(format == detail::input_format_t::cbor ? get_cbor_float_prefix(static_cast<float>(n))
+ : get_msgpack_float_prefix(static_cast<float>(n)));
write_number(static_cast<float>(n));
}
else
{
- oa->write_character(format == detail::input_format_t::cbor
- ? get_cbor_float_prefix(n)
- : get_msgpack_float_prefix(n));
+ oa->write_character(format == detail::input_format_t::cbor ? get_cbor_float_prefix(n) : get_msgpack_float_prefix(n));
write_number(n);
}
#ifdef __GNUC__
@@ -16575,15 +19796,13 @@
// between uint8_t and CharType. In case CharType is not unsigned,
// such a conversion is required to allow values greater than 128.
// See <https://github.com/nlohmann/json/issues/1286> for a discussion.
- template<typename C = CharType,
- enable_if_t<std::is_signed<C>::value && std::is_signed<char>::value>* = nullptr>
+ template<typename C = CharType, enable_if_t<std::is_signed<C>::value && std::is_signed<char>::value>* = nullptr>
static constexpr CharType to_char_type(std::uint8_t x) noexcept
{
return *reinterpret_cast<char*>(&x);
}
- template<typename C = CharType,
- enable_if_t<std::is_signed<C>::value && std::is_unsigned<char>::value>* = nullptr>
+ template<typename C = CharType, enable_if_t<std::is_signed<C>::value && std::is_unsigned<char>::value>* = nullptr>
static CharType to_char_type(std::uint8_t x) noexcept
{
static_assert(sizeof(std::uint8_t) == sizeof(CharType), "size of CharType must be equal to std::uint8_t");
@@ -16593,14 +19812,16 @@
return result;
}
- template<typename C = CharType,
- enable_if_t<std::is_unsigned<C>::value>* = nullptr>
+ template<typename C = CharType, enable_if_t<std::is_unsigned<C>::value>* = nullptr>
static constexpr CharType to_char_type(std::uint8_t x) noexcept
{
return x;
}
- template<typename InputCharType, typename C = CharType, enable_if_t<std::is_signed<C>::value && std::is_signed<char>::value && std::is_same<char, typename std::remove_cv<InputCharType>::type>::value>* = nullptr>
+ template<typename InputCharType,
+ typename C = CharType,
+ enable_if_t<std::is_signed<C>::value && std::is_signed<char>::value && std::is_same<char, typename std::remove_cv<InputCharType>::type>::value>* =
+ nullptr>
static constexpr CharType to_char_type(InputCharType x) noexcept
{
return x;
@@ -16662,7 +19883,8 @@
// #include <nlohmann/detail/macro_scope.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
/*!
@brief implements the Grisu2 algorithm for binary to decimal floating-point
@@ -16683,7 +19905,8 @@
Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language
Design and Implementation, PLDI 1996
*/
-namespace dtoa_impl {
+namespace dtoa_impl
+{
template<typename Target, typename Source>
Target reinterpret_bits(const Source source)
@@ -16842,8 +20065,7 @@
// If v is normalized:
// value = 1.F * 2^(E - bias) = (2^(p-1) + F) * 2^(E - bias - (p-1))
- static_assert(std::numeric_limits<FloatType>::is_iec559,
- "internal error: dtoa_short requires an IEEE-754 floating-point implementation");
+ static_assert(std::numeric_limits<FloatType>::is_iec559, "internal error: dtoa_short requires an IEEE-754 floating-point implementation");
constexpr int kPrecision = std::numeric_limits<FloatType>::digits; // = p (includes the hidden bit)
constexpr int kBias = std::numeric_limits<FloatType>::max_exponent - 1 + (kPrecision - 1);
@@ -16857,9 +20079,7 @@
const std::uint64_t F = bits & (kHiddenBit - 1);
const bool is_denormal = E == 0;
- const diyfp v = is_denormal
- ? diyfp(F, kMinExp)
- : diyfp(F + kHiddenBit, static_cast<int>(E) - kBias);
+ const diyfp v = is_denormal ? diyfp(F, kMinExp) : diyfp(F + kHiddenBit, static_cast<int>(E) - kBias);
// Compute the boundaries m- and m+ of the floating-point value
// v = f * 2^e.
@@ -16884,9 +20104,8 @@
const bool lower_boundary_is_closer = F == 0 && E > 1;
const diyfp m_plus = diyfp(2 * v.f + 1, v.e - 1);
- const diyfp m_minus = lower_boundary_is_closer
- ? diyfp(4 * v.f - 1, v.e - 2) // (B)
- : diyfp(2 * v.f - 1, v.e - 1); // (A)
+ const diyfp m_minus = lower_boundary_is_closer ? diyfp(4 * v.f - 1, v.e - 2) // (B)
+ : diyfp(2 * v.f - 1, v.e - 1); // (A)
// Determine the normalized w+ = m+.
const diyfp w_plus = diyfp::normalize(m_plus);
@@ -17024,89 +20243,28 @@
constexpr int kCachedPowersMinDecExp = -300;
constexpr int kCachedPowersDecStep = 8;
- static constexpr std::array<cached_power, 79> kCachedPowers =
- {
- {
- {0xAB70FE17C79AC6CA, -1060, -300},
- {0xFF77B1FCBEBCDC4F, -1034, -292},
- {0xBE5691EF416BD60C, -1007, -284},
- {0x8DD01FAD907FFC3C, -980, -276},
- {0xD3515C2831559A83, -954, -268},
- {0x9D71AC8FADA6C9B5, -927, -260},
- {0xEA9C227723EE8BCB, -901, -252},
- {0xAECC49914078536D, -874, -244},
- {0x823C12795DB6CE57, -847, -236},
- {0xC21094364DFB5637, -821, -228},
- {0x9096EA6F3848984F, -794, -220},
- {0xD77485CB25823AC7, -768, -212},
- {0xA086CFCD97BF97F4, -741, -204},
- {0xEF340A98172AACE5, -715, -196},
- {0xB23867FB2A35B28E, -688, -188},
- {0x84C8D4DFD2C63F3B, -661, -180},
- {0xC5DD44271AD3CDBA, -635, -172},
- {0x936B9FCEBB25C996, -608, -164},
- {0xDBAC6C247D62A584, -582, -156},
- {0xA3AB66580D5FDAF6, -555, -148},
- {0xF3E2F893DEC3F126, -529, -140},
- {0xB5B5ADA8AAFF80B8, -502, -132},
- {0x87625F056C7C4A8B, -475, -124},
- {0xC9BCFF6034C13053, -449, -116},
- {0x964E858C91BA2655, -422, -108},
- {0xDFF9772470297EBD, -396, -100},
- {0xA6DFBD9FB8E5B88F, -369, -92},
- {0xF8A95FCF88747D94, -343, -84},
- {0xB94470938FA89BCF, -316, -76},
- {0x8A08F0F8BF0F156B, -289, -68},
- {0xCDB02555653131B6, -263, -60},
- {0x993FE2C6D07B7FAC, -236, -52},
- {0xE45C10C42A2B3B06, -210, -44},
- {0xAA242499697392D3, -183, -36},
- {0xFD87B5F28300CA0E, -157, -28},
- {0xBCE5086492111AEB, -130, -20},
- {0x8CBCCC096F5088CC, -103, -12},
- {0xD1B71758E219652C, -77, -4},
- {0x9C40000000000000, -50, 4},
- {0xE8D4A51000000000, -24, 12},
- {0xAD78EBC5AC620000, 3, 20},
- {0x813F3978F8940984, 30, 28},
- {0xC097CE7BC90715B3, 56, 36},
- {0x8F7E32CE7BEA5C70, 83, 44},
- {0xD5D238A4ABE98068, 109, 52},
- {0x9F4F2726179A2245, 136, 60},
- {0xED63A231D4C4FB27, 162, 68},
- {0xB0DE65388CC8ADA8, 189, 76},
- {0x83C7088E1AAB65DB, 216, 84},
- {0xC45D1DF942711D9A, 242, 92},
- {0x924D692CA61BE758, 269, 100},
- {0xDA01EE641A708DEA, 295, 108},
- {0xA26DA3999AEF774A, 322, 116},
- {0xF209787BB47D6B85, 348, 124},
- {0xB454E4A179DD1877, 375, 132},
- {0x865B86925B9BC5C2, 402, 140},
- {0xC83553C5C8965D3D, 428, 148},
- {0x952AB45CFA97A0B3, 455, 156},
- {0xDE469FBD99A05FE3, 481, 164},
- {0xA59BC234DB398C25, 508, 172},
- {0xF6C69A72A3989F5C, 534, 180},
- {0xB7DCBF5354E9BECE, 561, 188},
- {0x88FCF317F22241E2, 588, 196},
- {0xCC20CE9BD35C78A5, 614, 204},
- {0x98165AF37B2153DF, 641, 212},
- {0xE2A0B5DC971F303A, 667, 220},
- {0xA8D9D1535CE3B396, 694, 228},
- {0xFB9B7CD9A4A7443C, 720, 236},
- {0xBB764C4CA7A44410, 747, 244},
- {0x8BAB8EEFB6409C1A, 774, 252},
- {0xD01FEF10A657842C, 800, 260},
- {0x9B10A4E5E9913129, 827, 268},
- {0xE7109BFBA19C0C9D, 853, 276},
- {0xAC2820D9623BF429, 880, 284},
- {0x80444B5E7AA7CF85, 907, 292},
- {0xBF21E44003ACDD2D, 933, 300},
- {0x8E679C2F5E44FF8F, 960, 308},
- {0xD433179D9C8CB841, 986, 316},
- {0x9E19DB92B4E31BA9, 1013, 324},
- }};
+ static constexpr std::array<cached_power, 79> kCachedPowers = {{
+ {0xAB70FE17C79AC6CA, -1060, -300}, {0xFF77B1FCBEBCDC4F, -1034, -292}, {0xBE5691EF416BD60C, -1007, -284}, {0x8DD01FAD907FFC3C, -980, -276},
+ {0xD3515C2831559A83, -954, -268}, {0x9D71AC8FADA6C9B5, -927, -260}, {0xEA9C227723EE8BCB, -901, -252}, {0xAECC49914078536D, -874, -244},
+ {0x823C12795DB6CE57, -847, -236}, {0xC21094364DFB5637, -821, -228}, {0x9096EA6F3848984F, -794, -220}, {0xD77485CB25823AC7, -768, -212},
+ {0xA086CFCD97BF97F4, -741, -204}, {0xEF340A98172AACE5, -715, -196}, {0xB23867FB2A35B28E, -688, -188}, {0x84C8D4DFD2C63F3B, -661, -180},
+ {0xC5DD44271AD3CDBA, -635, -172}, {0x936B9FCEBB25C996, -608, -164}, {0xDBAC6C247D62A584, -582, -156}, {0xA3AB66580D5FDAF6, -555, -148},
+ {0xF3E2F893DEC3F126, -529, -140}, {0xB5B5ADA8AAFF80B8, -502, -132}, {0x87625F056C7C4A8B, -475, -124}, {0xC9BCFF6034C13053, -449, -116},
+ {0x964E858C91BA2655, -422, -108}, {0xDFF9772470297EBD, -396, -100}, {0xA6DFBD9FB8E5B88F, -369, -92}, {0xF8A95FCF88747D94, -343, -84},
+ {0xB94470938FA89BCF, -316, -76}, {0x8A08F0F8BF0F156B, -289, -68}, {0xCDB02555653131B6, -263, -60}, {0x993FE2C6D07B7FAC, -236, -52},
+ {0xE45C10C42A2B3B06, -210, -44}, {0xAA242499697392D3, -183, -36}, {0xFD87B5F28300CA0E, -157, -28}, {0xBCE5086492111AEB, -130, -20},
+ {0x8CBCCC096F5088CC, -103, -12}, {0xD1B71758E219652C, -77, -4}, {0x9C40000000000000, -50, 4}, {0xE8D4A51000000000, -24, 12},
+ {0xAD78EBC5AC620000, 3, 20}, {0x813F3978F8940984, 30, 28}, {0xC097CE7BC90715B3, 56, 36}, {0x8F7E32CE7BEA5C70, 83, 44},
+ {0xD5D238A4ABE98068, 109, 52}, {0x9F4F2726179A2245, 136, 60}, {0xED63A231D4C4FB27, 162, 68}, {0xB0DE65388CC8ADA8, 189, 76},
+ {0x83C7088E1AAB65DB, 216, 84}, {0xC45D1DF942711D9A, 242, 92}, {0x924D692CA61BE758, 269, 100}, {0xDA01EE641A708DEA, 295, 108},
+ {0xA26DA3999AEF774A, 322, 116}, {0xF209787BB47D6B85, 348, 124}, {0xB454E4A179DD1877, 375, 132}, {0x865B86925B9BC5C2, 402, 140},
+ {0xC83553C5C8965D3D, 428, 148}, {0x952AB45CFA97A0B3, 455, 156}, {0xDE469FBD99A05FE3, 481, 164}, {0xA59BC234DB398C25, 508, 172},
+ {0xF6C69A72A3989F5C, 534, 180}, {0xB7DCBF5354E9BECE, 561, 188}, {0x88FCF317F22241E2, 588, 196}, {0xCC20CE9BD35C78A5, 614, 204},
+ {0x98165AF37B2153DF, 641, 212}, {0xE2A0B5DC971F303A, 667, 220}, {0xA8D9D1535CE3B396, 694, 228}, {0xFB9B7CD9A4A7443C, 720, 236},
+ {0xBB764C4CA7A44410, 747, 244}, {0x8BAB8EEFB6409C1A, 774, 252}, {0xD01FEF10A657842C, 800, 260}, {0x9B10A4E5E9913129, 827, 268},
+ {0xE7109BFBA19C0C9D, 853, 276}, {0xAC2820D9623BF429, 880, 284}, {0x80444B5E7AA7CF85, 907, 292}, {0xBF21E44003ACDD2D, 933, 300},
+ {0x8E679C2F5E44FF8F, 960, 308}, {0xD433179D9C8CB841, 986, 316}, {0x9E19DB92B4E31BA9, 1013, 324},
+ }};
// This computation gives exactly the same results for k as
// k = ceil((kAlpha - e - 1) * 0.30102999566398114)
@@ -17525,8 +20683,7 @@
JSON_HEDLEY_NON_NULL(1)
void grisu2(char* buf, int& len, int& decimal_exponent, FloatType value)
{
- static_assert(diyfp::kPrecision >= std::numeric_limits<FloatType>::digits + 3,
- "internal error: not enough precision");
+ static_assert(diyfp::kPrecision >= std::numeric_limits<FloatType>::digits + 3, "internal error: not enough precision");
JSON_ASSERT(std::isfinite(value));
JSON_ASSERT(value > 0);
@@ -17698,8 +20855,7 @@
*/
template<typename FloatType>
JSON_HEDLEY_NON_NULL(1, 2)
-JSON_HEDLEY_RETURNS_NON_NULL
- char* to_chars(char* first, const char* last, FloatType value)
+JSON_HEDLEY_RETURNS_NON_NULL char* to_chars(char* first, const char* last, FloatType value)
{
static_cast<void>(last); // maybe unused - fix warning
JSON_ASSERT(std::isfinite(value));
@@ -17769,7 +20925,8 @@
// #include <nlohmann/detail/value_t.hpp>
NLOHMANN_JSON_NAMESPACE_BEGIN
-namespace detail {
+namespace detail
+{
///////////////////
// serialization //
@@ -17839,11 +20996,7 @@
@param[in] indent_step the indent level
@param[in] current_indent the current indent level (only used internally)
*/
- void dump(const BasicJsonType& val,
- const bool pretty_print,
- const bool ensure_ascii,
- const unsigned int indent_step,
- const unsigned int current_indent = 0)
+ void dump(const BasicJsonType& val, const bool pretty_print, const bool ensure_ascii, const unsigned int indent_step, const unsigned int current_indent = 0)
{
switch (val.m_data.m_type)
{
@@ -17940,9 +21093,7 @@
}
// first n-1 elements
- for (auto i = val.m_data.m_value.array->cbegin();
- i != val.m_data.m_value.array->cend() - 1;
- ++i)
+ for (auto i = val.m_data.m_value.array->cbegin(); i != val.m_data.m_value.array->cend() - 1; ++i)
{
o->write_characters(indent_string.c_str(), new_indent);
dump(*i, true, ensure_ascii, indent_step, new_indent);
@@ -17963,9 +21114,7 @@
o->write_character('[');
// first n-1 elements
- for (auto i = val.m_data.m_value.array->cbegin();
- i != val.m_data.m_value.array->cend() - 1;
- ++i)
+ for (auto i = val.m_data.m_value.array->cbegin(); i != val.m_data.m_value.array->cend() - 1; ++i)
{
dump(*i, false, ensure_ascii, indent_step, current_indent);
o->write_character(',');
@@ -18008,9 +21157,7 @@
if (!val.m_data.m_value.binary->empty())
{
- for (auto i = val.m_data.m_value.binary->cbegin();
- i != val.m_data.m_value.binary->cend() - 1;
- ++i)
+ for (auto i = val.m_data.m_value.binary->cbegin(); i != val.m_data.m_value.binary->cend() - 1; ++i)
{
dump_integer(*i);
o->write_characters(", ", 2);
@@ -18040,9 +21187,7 @@
if (!val.m_data.m_value.binary->empty())
{
- for (auto i = val.m_data.m_value.binary->cbegin();
- i != val.m_data.m_value.binary->cend() - 1;
- ++i)
+ for (auto i = val.m_data.m_value.binary->cbegin(); i != val.m_data.m_value.binary->cend() - 1; ++i)
{
dump_integer(*i);
o->write_character(',');
@@ -18212,7 +21357,11 @@
else
{
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
- static_cast<void>((std::snprintf)(string_buffer.data() + bytes, 13, "\\u%04x\\u%04x", static_cast<std::uint16_t>(0xD7C0u + (codepoint >> 10u)), static_cast<std::uint16_t>(0xDC00u + (codepoint & 0x3FFu))));
+ static_cast<void>((std::snprintf)(string_buffer.data() + bytes,
+ 13,
+ "\\u%04x\\u%04x",
+ static_cast<std::uint16_t>(0xD7C0u + (codepoint >> 10u)),
+ static_cast<std::uint16_t>(0xDC00u + (codepoint & 0x3FFu))));
bytes += 12;
}
}
@@ -18247,7 +21396,8 @@
{
case error_handler_t::strict:
{
- JSON_THROW(type_error::create(316, concat("invalid UTF-8 byte at index ", std::to_string(i), ": 0x", hex_bytes(byte | 0)), nullptr));
+ JSON_THROW(
+ type_error::create(316, concat("invalid UTF-8 byte at index ", std::to_string(i), ": 0x", hex_bytes(byte | 0)), nullptr));
}
case error_handler_t::ignore:
@@ -18339,7 +21489,8 @@
{
case error_handler_t::strict:
{
- JSON_THROW(type_error::create(316, concat("incomplete UTF-8 string; last byte: 0x", hex_bytes(static_cast<std::uint8_t>(s.back() | 0))), nullptr));
+ JSON_THROW(
+ type_error::create(316, concat("incomplete UTF-8 string; last byte: 0x", hex_bytes(static_cast<std::uint8_t>(s.back() | 0))), nullptr));
}
case error_handler_t::ignore:
@@ -18442,112 +21593,24 @@
@param[in] x integer number (signed or unsigned) to dump
@tparam NumberType either @a number_integer_t or @a number_unsigned_t
*/
- template<typename NumberType, detail::enable_if_t<std::is_integral<NumberType>::value || std::is_same<NumberType, number_unsigned_t>::value || std::is_same<NumberType, number_integer_t>::value || std::is_same<NumberType, binary_char_t>::value, int> = 0>
+ template<typename NumberType,
+ detail::enable_if_t<std::is_integral<NumberType>::value || std::is_same<NumberType, number_unsigned_t>::value ||
+ std::is_same<NumberType, number_integer_t>::value || std::is_same<NumberType, binary_char_t>::value,
+ int> = 0>
void dump_integer(NumberType x)
{
- static constexpr std::array<std::array<char, 2>, 100> digits_to_99{
- {
- {{'0', '0'}},
- {{'0', '1'}},
- {{'0', '2'}},
- {{'0', '3'}},
- {{'0', '4'}},
- {{'0', '5'}},
- {{'0', '6'}},
- {{'0', '7'}},
- {{'0', '8'}},
- {{'0', '9'}},
- {{'1', '0'}},
- {{'1', '1'}},
- {{'1', '2'}},
- {{'1', '3'}},
- {{'1', '4'}},
- {{'1', '5'}},
- {{'1', '6'}},
- {{'1', '7'}},
- {{'1', '8'}},
- {{'1', '9'}},
- {{'2', '0'}},
- {{'2', '1'}},
- {{'2', '2'}},
- {{'2', '3'}},
- {{'2', '4'}},
- {{'2', '5'}},
- {{'2', '6'}},
- {{'2', '7'}},
- {{'2', '8'}},
- {{'2', '9'}},
- {{'3', '0'}},
- {{'3', '1'}},
- {{'3', '2'}},
- {{'3', '3'}},
- {{'3', '4'}},
- {{'3', '5'}},
- {{'3', '6'}},
- {{'3', '7'}},
- {{'3', '8'}},
- {{'3', '9'}},
- {{'4', '0'}},
- {{'4', '1'}},
- {{'4', '2'}},
- {{'4', '3'}},
- {{'4', '4'}},
- {{'4', '5'}},
- {{'4', '6'}},
- {{'4', '7'}},
- {{'4', '8'}},
- {{'4', '9'}},
- {{'5', '0'}},
- {{'5', '1'}},
- {{'5', '2'}},
- {{'5', '3'}},
- {{'5', '4'}},
- {{'5', '5'}},
- {{'5', '6'}},
- {{'5', '7'}},
- {{'5', '8'}},
- {{'5', '9'}},
- {{'6', '0'}},
- {{'6', '1'}},
- {{'6', '2'}},
- {{'6', '3'}},
- {{'6', '4'}},
- {{'6', '5'}},
- {{'6', '6'}},
- {{'6', '7'}},
- {{'6', '8'}},
- {{'6', '9'}},
- {{'7', '0'}},
- {{'7', '1'}},
- {{'7', '2'}},
- {{'7', '3'}},
- {{'7', '4'}},
- {{'7', '5'}},
- {{'7', '6'}},
- {{'7', '7'}},
- {{'7', '8'}},
- {{'7', '9'}},
- {{'8', '0'}},
- {{'8', '1'}},
- {{'8', '2'}},
- {{'8', '3'}},
- {{'8', '4'}},
- {{'8', '5'}},
- {{'8', '6'}},
- {{'8', '7'}},
- {{'8', '8'}},
- {{'8', '9'}},
- {{'9', '0'}},
- {{'9', '1'}},
- {{'9', '2'}},
- {{'9', '3'}},
- {{'9', '4'}},
- {{'9', '5'}},
- {{'9', '6'}},
- {{'9', '7'}},
- {{'9', '8'}},
- {{'9', '9'}},
- }};
+ static constexpr std::array<std::array<char, 2>, 100> digits_to_99{{
+ {{'0', '0'}}, {{'0', '1'}}, {{'0', '2'}}, {{'0', '3'}}, {{'0', '4'}}, {{'0', '5'}}, {{'0', '6'}}, {{'0', '7'}}, {{'0', '8'}}, {{'0', '9'}},
+ {{'1', '0'}}, {{'1', '1'}}, {{'1', '2'}}, {{'1', '3'}}, {{'1', '4'}}, {{'1', '5'}}, {{'1', '6'}}, {{'1', '7'}}, {{'1', '8'}}, {{'1', '9'}},
+ {{'2', '0'}}, {{'2', '1'}}, {{'2', '2'}}, {{'2', '3'}}, {{'2', '4'}}, {{'2', '5'}}, {{'2', '6'}}, {{'2', '7'}}, {{'2', '8'}}, {{'2', '9'}},
+ {{'3', '0'}}, {{'3', '1'}}, {{'3', '2'}}, {{'3', '3'}}, {{'3', '4'}}, {{'3', '5'}}, {{'3', '6'}}, {{'3', '7'}}, {{'3', '8'}}, {{'3', '9'}},
+ {{'4', '0'}}, {{'4', '1'}}, {{'4', '2'}}, {{'4', '3'}}, {{'4', '4'}}, {{'4', '5'}}, {{'4', '6'}}, {{'4', '7'}}, {{'4', '8'}}, {{'4', '9'}},
+ {{'5', '0'}}, {{'5', '1'}}, {{'5', '2'}}, {{'5', '3'}}, {{'5', '4'}}, {{'5', '5'}}, {{'5', '6'}}, {{'5', '7'}}, {{'5', '8'}}, {{'5', '9'}},
+ {{'6', '0'}}, {{'6', '1'}}, {{'6', '2'}}, {{'6', '3'}}, {{'6', '4'}}, {{'6', '5'}}, {{'6', '6'}}, {{'6', '7'}}, {{'6', '8'}}, {{'6', '9'}},
+ {{'7', '0'}}, {{'7', '1'}}, {{'7', '2'}}, {{'7', '3'}}, {{'7', '4'}}, {{'7', '5'}}, {{'7', '6'}}, {{'7', '7'}}, {{'7', '8'}}, {{'7', '9'}},
+ {{'8', '0'}}, {{'8', '1'}}, {{'8', '2'}}, {{'8', '3'}}, {{'8', '4'}}, {{'8', '5'}}, {{'8', '6'}}, {{'8', '7'}}, {{'8', '8'}}, {{'8', '9'}},
+ {{'9', '0'}}, {{'9', '1'}}, {{'9', '2'}}, {{'9', '3'}}, {{'9', '4'}}, {{'9', '5'}}, {{'9', '6'}}, {{'9', '7'}}, {{'9', '8'}}, {{'9', '9'}},
+ }};
// special case for "0"
if (x == 0)
@@ -18630,8 +21693,10 @@
// guaranteed to round-trip, using strtof and strtod, resp.
//
// NB: The test below works if <long double> == <double>.
- static constexpr bool is_ieee_single_or_double = (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 24 && std::numeric_limits<number_float_t>::max_exponent == 128) ||
- (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 53 && std::numeric_limits<number_float_t>::max_exponent == 1024);
+ static constexpr bool is_ieee_single_or_double = (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 24 &&
+ std::numeric_limits<number_float_t>::max_exponent == 128) ||
+ (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 53 &&
+ std::numeric_limits<number_float_t>::max_exponent == 1024);
dump_float(x, std::integral_constant<bool, is_ieee_single_or_double>());
}
@@ -18682,10 +21747,9 @@
o->write_characters(number_buffer.data(), static_cast<std::size_t>(len));
// determine if we need to append ".0"
- const bool value_is_int_like =
- std::none_of(number_buffer.begin(), number_buffer.begin() + len + 1, [](char c) {
- return c == '.' || c == 'e';
- });
+ const bool value_is_int_like = std::none_of(number_buffer.begin(), number_buffer.begin() + len + 1, [](char c) {
+ return c == '.' || c == 'e';
+ });
if (value_is_int_like)
{
@@ -18716,417 +21780,41 @@
*/
static std::uint8_t decode(std::uint8_t& state, std::uint32_t& codep, const std::uint8_t byte) noexcept
{
- static const std::array<std::uint8_t, 400> utf8d =
- {
- {
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0, // 00..1F
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0, // 20..3F
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0, // 40..5F
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0, // 60..7F
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9,
- 9, // 80..9F
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7,
- 7, // A0..BF
- 8,
- 8,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2,
- 2, // C0..DF
- 0xA,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x3,
- 0x4,
- 0x3,
- 0x3, // E0..EF
- 0xB,
- 0x6,
- 0x6,
- 0x6,
- 0x5,
- 0x8,
- 0x8,
- 0x8,
- 0x8,
- 0x8,
- 0x8,
- 0x8,
- 0x8,
- 0x8,
- 0x8,
- 0x8, // F0..FF
- 0x0,
- 0x1,
- 0x2,
- 0x3,
- 0x5,
- 0x8,
- 0x7,
- 0x1,
- 0x1,
- 0x1,
- 0x4,
- 0x6,
- 0x1,
- 0x1,
- 0x1,
- 0x1, // s0..s0
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 0,
- 1,
- 1,
- 1,
- 1,
- 1,
- 0,
- 1,
- 0,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1, // s1..s2
- 1,
- 2,
- 1,
- 1,
- 1,
- 1,
- 1,
- 2,
- 1,
- 2,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 2,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1, // s3..s4
- 1,
- 2,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 2,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 3,
- 1,
- 3,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1, // s5..s6
- 1,
- 3,
- 1,
- 1,
- 1,
- 1,
- 1,
- 3,
- 1,
- 3,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 3,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1,
- 1 // s7..s8
- }};
+ static const std::array<std::uint8_t, 400> utf8d = {{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, // 00..1F
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, // 20..3F
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, // 40..5F
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, // 60..7F
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, // 80..9F
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, // A0..BF
+ 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, // C0..DF
+ 0xA, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3,
+ 0x3, // E0..EF
+ 0xB, 0x6, 0x6, 0x6, 0x5, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8,
+ 0x8, // F0..FF
+ 0x0, 0x1, 0x2, 0x3, 0x5, 0x8, 0x7, 0x1, 0x1, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1,
+ 0x1, // s0..s0
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1,
+ 1, // s1..s2
+ 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, // s3..s4
+ 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1,
+ 1, // s5..s6
+ 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1 // s7..s8
+ }};
JSON_ASSERT(byte < utf8d.size());
const std::uint8_t type = utf8d[byte];
- codep = (state != UTF8_ACCEPT)
- ? (byte & 0x3fu) | (codep << 6u)
- : (0xFFu >> type) & (byte);
+ codep = (state != UTF8_ACCEPT) ? (byte & 0x3fu) | (codep << 6u) : (0xFFu >> type) & (byte);
const std::size_t index = 256u + static_cast<size_t>(state) * 16u + static_cast<size_t>(type);
JSON_ASSERT(index < utf8d.size());
@@ -19536,8 +22224,8 @@
}
template<typename InputIt>
- using require_input_iter = typename std::enable_if<std::is_convertible<typename std::iterator_traits<InputIt>::iterator_category,
- std::input_iterator_tag>::value>::type;
+ using require_input_iter =
+ typename std::enable_if<std::is_convertible<typename std::iterator_traits<InputIt>::iterator_category, std::input_iterator_tag>::value>::type;
template<typename InputIt, typename = require_input_iter<InputIt>>
void insert(InputIt first, InputIt last)
@@ -19623,16 +22311,10 @@
using lexer = ::nlohmann::detail::lexer_base<basic_json>;
template<typename InputAdapterType>
- static ::nlohmann::detail::parser<basic_json, InputAdapterType> parser(
- InputAdapterType adapter,
- detail::parser_callback_t<basic_json> cb = nullptr,
- const bool allow_exceptions = true,
- const bool ignore_comments = false)
+ static ::nlohmann::detail::parser<basic_json, InputAdapterType>
+ parser(InputAdapterType adapter, detail::parser_callback_t<basic_json> cb = nullptr, const bool allow_exceptions = true, const bool ignore_comments = false)
{
- return ::nlohmann::detail::parser<basic_json, InputAdapterType>(std::move(adapter),
- std::move(cb),
- allow_exceptions,
- ignore_comments);
+ return ::nlohmann::detail::parser<basic_json, InputAdapterType>(std::move(adapter), std::move(cb), allow_exceptions, ignore_comments);
}
private:
@@ -19748,8 +22430,11 @@
result["copyright"] = "(C) 2013-2023 Niels Lohmann";
result["name"] = "JSON for Modern C++";
result["url"] = "https://github.com/nlohmann/json";
- result["version"]["string"] =
- detail::concat(std::to_string(NLOHMANN_JSON_VERSION_MAJOR), '.', std::to_string(NLOHMANN_JSON_VERSION_MINOR), '.', std::to_string(NLOHMANN_JSON_VERSION_PATCH));
+ result["version"]["string"] = detail::concat(std::to_string(NLOHMANN_JSON_VERSION_MAJOR),
+ '.',
+ std::to_string(NLOHMANN_JSON_VERSION_MINOR),
+ '.',
+ std::to_string(NLOHMANN_JSON_VERSION_PATCH));
result["version"]["major"] = NLOHMANN_JSON_VERSION_MAJOR;
result["version"]["minor"] = NLOHMANN_JSON_VERSION_MINOR;
result["version"]["patch"] = NLOHMANN_JSON_VERSION_PATCH;
@@ -19767,34 +22452,23 @@
#endif
#if defined(__ICC) || defined(__INTEL_COMPILER)
- result["compiler"] = {{"family", "icc"}, { "version",
- __INTEL_COMPILER }};
+ result["compiler"] = {{"family", "icc"}, { "version", __INTEL_COMPILER }};
#elif defined(__clang__)
- result["compiler"] = {{"family", "clang"}, { "version",
- __clang_version__ }};
+ result["compiler"] = {{"family", "clang"}, { "version", __clang_version__ }};
#elif defined(__GNUC__) || defined(__GNUG__)
- result["compiler"] = {{"family", "gcc"}, { "version",
- detail::concat(
- std::to_string(__GNUC__),
- '.',
- std::to_string(__GNUC_MINOR__),
- '.',
- std::to_string(__GNUC_PATCHLEVEL__))
- }};
+ result["compiler"] = {{"family", "gcc"},
+ { "version",
+ detail::concat(std::to_string(__GNUC__), '.', std::to_string(__GNUC_MINOR__), '.', std::to_string(__GNUC_PATCHLEVEL__)) }};
#elif defined(__HP_cc) || defined(__HP_aCC)
result["compiler"] = "hp"
#elif defined(__IBMCPP__)
- result["compiler"] = {{"family", "ilecpp"}, { "version",
- __IBMCPP__ }};
+ result["compiler"] = {{"family", "ilecpp"}, { "version", __IBMCPP__ }};
#elif defined(_MSC_VER)
- result["compiler"] = {{"family", "msvc"}, { "version",
- _MSC_VER }};
+ result["compiler"] = {{"family", "msvc"}, { "version", _MSC_VER }};
#elif defined(__PGI)
- result["compiler"] = {{"family", "pgcpp"}, { "version",
- __PGI }};
+ result["compiler"] = {{"family", "pgcpp"}, { "version", __PGI }};
#elif defined(__SUNPRO_CC)
- result["compiler"] = {{"family", "sunpro"}, { "version",
- __SUNPRO_CC }};
+ result["compiler"] = {{"family", "sunpro"}, { "version", __SUNPRO_CC }};
#else
result["compiler"] = {{"family", "unknown"}, {"version", "unknown"}};
#endif
@@ -19832,11 +22506,7 @@
/// @brief a type for an object
/// @sa https://json.nlohmann.me/api/basic_json/object_t/
- using object_t = ObjectType<StringType,
- basic_json,
- default_object_comparator_t,
- AllocatorType<std::pair<const StringType,
- basic_json>>>;
+ using object_t = ObjectType<StringType, basic_json, default_object_comparator_t, AllocatorType<std::pair<const StringType, basic_json>>>;
/// @brief a type for an array
/// @sa https://json.nlohmann.me/api/basic_json/array_t/
@@ -20080,10 +22750,7 @@
void destroy(value_t t)
{
- if (
- (t == value_t::object && object == nullptr) ||
- (t == value_t::array && array == nullptr) ||
- (t == value_t::string && string == nullptr) ||
+ if ((t == value_t::object && object == nullptr) || (t == value_t::array && array == nullptr) || (t == value_t::string && string == nullptr) ||
(t == value_t::binary && binary == nullptr))
{
//not initialized (e.g. due to exception in the ctor)
@@ -20355,12 +23022,10 @@
/// @sa https://json.nlohmann.me/api/basic_json/basic_json/
template<typename CompatibleType,
typename U = detail::uncvref_t<CompatibleType>,
- detail::enable_if_t<
- !detail::is_basic_json<U>::value && detail::is_compatible_type<basic_json_t, U>::value,
- int> = 0>
+ detail::enable_if_t<!detail::is_basic_json<U>::value && detail::is_compatible_type<basic_json_t, U>::value,
+ int> = 0>
basic_json(CompatibleType&& val) noexcept(noexcept( // NOLINT(bugprone-forwarding-reference-overload,bugprone-exception-escape)
- JSONSerializer<U>::to_json(std::declval<basic_json_t&>(),
- std::forward<CompatibleType>(val))))
+ JSONSerializer<U>::to_json(std::declval<basic_json_t&>(), std::forward<CompatibleType>(val))))
{
JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));
set_parents();
@@ -20370,9 +23035,7 @@
/// @brief create a JSON value from an existing one
/// @sa https://json.nlohmann.me/api/basic_json/basic_json/
template<typename BasicJsonType,
- detail::enable_if_t<
- detail::is_basic_json<BasicJsonType>::value && !std::is_same<basic_json, BasicJsonType>::value,
- int> = 0>
+ detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value && !std::is_same<basic_json, BasicJsonType>::value, int> = 0>
basic_json(const BasicJsonType& val)
{
using other_boolean_t = typename BasicJsonType::boolean_t;
@@ -20426,9 +23089,7 @@
/// @brief create a container (array or object) from an initializer list
/// @sa https://json.nlohmann.me/api/basic_json/basic_json/
- basic_json(initializer_list_t init,
- bool type_deduction = true,
- value_t manual_type = value_t::array)
+ basic_json(initializer_list_t init, bool type_deduction = true, value_t manual_type = value_t::array)
{
// check if each element is an array with two elements whose first
// element is a string
@@ -20464,9 +23125,8 @@
for (auto& element_ref : init)
{
auto element = element_ref.moved_or_copied();
- m_data.m_value.object->emplace(
- std::move(*((*element.m_data.m_value.array)[0].m_data.m_value.string)),
- std::move((*element.m_data.m_value.array)[1]));
+ m_data.m_value.object->emplace(std::move(*((*element.m_data.m_value.array)[0].m_data.m_value.string)),
+ std::move((*element.m_data.m_value.array)[1]));
}
}
else
@@ -20551,7 +23211,10 @@
/// @brief construct a JSON container given an iterator range
/// @sa https://json.nlohmann.me/api/basic_json/basic_json/
- template<class InputIT, typename std::enable_if<std::is_same<InputIT, typename basic_json_t::iterator>::value || std::is_same<InputIT, typename basic_json_t::const_iterator>::value, int>::type = 0>
+ template<class InputIT,
+ typename std::enable_if<std::is_same<InputIT, typename basic_json_t::iterator>::value ||
+ std::is_same<InputIT, typename basic_json_t::const_iterator>::value,
+ int>::type = 0>
basic_json(InputIT first, InputIT last)
{
JSON_ASSERT(first.m_object != nullptr);
@@ -20625,15 +23288,13 @@
case value_t::object:
{
- m_data.m_value.object = create<object_t>(first.m_it.object_iterator,
- last.m_it.object_iterator);
+ m_data.m_value.object = create<object_t>(first.m_it.object_iterator, last.m_it.object_iterator);
break;
}
case value_t::array:
{
- m_data.m_value.array = create<array_t>(first.m_it.array_iterator,
- last.m_it.array_iterator);
+ m_data.m_value.array = create<array_t>(first.m_it.array_iterator, last.m_it.array_iterator);
break;
}
@@ -20658,9 +23319,7 @@
///////////////////////////////////////
template<typename JsonRef,
- detail::enable_if_t<detail::conjunction<detail::is_json_ref<JsonRef>,
- std::is_same<typename JsonRef::value_type, basic_json>>::value,
- int> = 0>
+ detail::enable_if_t<detail::conjunction<detail::is_json_ref<JsonRef>, std::is_same<typename JsonRef::value_type, basic_json>>::value, int> = 0>
basic_json(const JsonRef& ref)
: basic_json(ref.moved_or_copied())
{}
@@ -20753,12 +23412,10 @@
/// @brief copy assignment
/// @sa https://json.nlohmann.me/api/basic_json/operator=/
- basic_json& operator=(basic_json other) noexcept(
- std::is_nothrow_move_constructible<value_t>::value &&
- std::is_nothrow_move_assignable<value_t>::value &&
- std::is_nothrow_move_constructible<json_value>::value &&
- std::is_nothrow_move_assignable<json_value>::value &&
- std::is_nothrow_move_assignable<json_base_class_t>::value)
+ basic_json& operator=(basic_json other) noexcept(std::is_nothrow_move_constructible<value_t>::value && std::is_nothrow_move_assignable<value_t>::value &&
+ std::is_nothrow_move_constructible<json_value>::value &&
+ std::is_nothrow_move_assignable<json_value>::value &&
+ std::is_nothrow_move_assignable<json_base_class_t>::value)
{
// check that passed value is valid
other.assert_invariant();
@@ -21073,7 +23730,9 @@
/// @brief get a pointer value (implicit)
/// @sa https://json.nlohmann.me/api/basic_json/get_ptr/
- template<typename PointerType, typename std::enable_if<std::is_pointer<PointerType>::value && std::is_const<typename std::remove_pointer<PointerType>::type>::value, int>::type = 0>
+ template<
+ typename PointerType,
+ typename std::enable_if<std::is_pointer<PointerType>::value && std::is_const<typename std::remove_pointer<PointerType>::type>::value, int>::type = 0>
constexpr auto get_ptr() const noexcept -> decltype(std::declval<const basic_json_t&>().get_impl_ptr(std::declval<PointerType>()))
{
// delegate the call to get_impl_ptr<>() const
@@ -21120,12 +23779,9 @@
@since version 2.1.0
*/
template<typename ValueType,
- detail::enable_if_t<
- detail::is_default_constructible<ValueType>::value &&
- detail::has_from_json<basic_json_t, ValueType>::value,
- int> = 0>
- ValueType get_impl(detail::priority_tag<0> /*unused*/) const noexcept(noexcept(
- JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), std::declval<ValueType&>())))
+ detail::enable_if_t<detail::is_default_constructible<ValueType>::value && detail::has_from_json<basic_json_t, ValueType>::value, int> = 0>
+ ValueType get_impl(detail::priority_tag<0> /*unused*/) const
+ noexcept(noexcept(JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), std::declval<ValueType&>())))
{
auto ret = ValueType();
JSONSerializer<ValueType>::from_json(*this, ret);
@@ -21162,12 +23818,8 @@
@since version 2.1.0
*/
- template<typename ValueType,
- detail::enable_if_t<
- detail::has_non_default_from_json<basic_json_t, ValueType>::value,
- int> = 0>
- ValueType get_impl(detail::priority_tag<1> /*unused*/) const noexcept(noexcept(
- JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>())))
+ template<typename ValueType, detail::enable_if_t<detail::has_non_default_from_json<basic_json_t, ValueType>::value, int> = 0>
+ ValueType get_impl(detail::priority_tag<1> /*unused*/) const noexcept(noexcept(JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>())))
{
return JSONSerializer<ValueType>::from_json(*this);
}
@@ -21187,10 +23839,7 @@
@since version 3.2.0
*/
- template<typename BasicJsonType,
- detail::enable_if_t<
- detail::is_basic_json<BasicJsonType>::value,
- int> = 0>
+ template<typename BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value, int> = 0>
BasicJsonType get_impl(detail::priority_tag<2> /*unused*/) const
{
return *this;
@@ -21210,10 +23859,7 @@
@since version 2.1.0
*/
- template<typename BasicJsonType,
- detail::enable_if_t<
- std::is_same<BasicJsonType, basic_json_t>::value,
- int> = 0>
+ template<typename BasicJsonType, detail::enable_if_t<std::is_same<BasicJsonType, basic_json_t>::value, int> = 0>
basic_json get_impl(detail::priority_tag<3> /*unused*/) const
{
return *this;
@@ -21223,12 +23869,8 @@
@brief get a pointer value (explicit)
@copydoc get()
*/
- template<typename PointerType,
- detail::enable_if_t<
- std::is_pointer<PointerType>::value,
- int> = 0>
- constexpr auto get_impl(detail::priority_tag<4> /*unused*/) const noexcept
- -> decltype(std::declval<const basic_json_t&>().template get_ptr<PointerType>())
+ template<typename PointerType, detail::enable_if_t<std::is_pointer<PointerType>::value, int> = 0>
+ constexpr auto get_impl(detail::priority_tag<4> /*unused*/) const noexcept -> decltype(std::declval<const basic_json_t&>().template get_ptr<PointerType>())
{
// delegate the call to get_ptr
return get_ptr<PointerType>();
@@ -21263,15 +23905,13 @@
constexpr
#endif
auto
- get() const noexcept(
- noexcept(std::declval<const basic_json_t&>().template get_impl<ValueType>(detail::priority_tag<4>{})))
+ get() const noexcept(noexcept(std::declval<const basic_json_t&>().template get_impl<ValueType>(detail::priority_tag<4>{})))
-> decltype(std::declval<const basic_json_t&>().template get_impl<ValueType>(detail::priority_tag<4>{}))
{
// we cannot static_assert on ValueTypeCV being non-const, because
// there is support for get<const basic_json_t>(), which is why we
// still need the uncvref
- static_assert(!std::is_reference<ValueTypeCV>::value,
- "get() cannot be used with reference types, you might want to use get_ref()");
+ static_assert(!std::is_reference<ValueTypeCV>::value, "get() cannot be used with reference types, you might want to use get_ref()");
return get_impl<ValueType>(detail::priority_tag<4>{});
}
@@ -21312,12 +23952,8 @@
/// @brief get a value (explicit)
/// @sa https://json.nlohmann.me/api/basic_json/get_to/
template<typename ValueType,
- detail::enable_if_t<
- !detail::is_basic_json<ValueType>::value &&
- detail::has_from_json<basic_json_t, ValueType>::value,
- int> = 0>
- ValueType& get_to(ValueType& v) const noexcept(noexcept(
- JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), v)))
+ detail::enable_if_t<!detail::is_basic_json<ValueType>::value && detail::has_from_json<basic_json_t, ValueType>::value, int> = 0>
+ ValueType& get_to(ValueType& v) const noexcept(noexcept(JSONSerializer<ValueType>::from_json(std::declval<const basic_json_t&>(), v)))
{
JSONSerializer<ValueType>::from_json(*this, v);
return v;
@@ -21325,27 +23961,20 @@
// specialization to allow calling get_to with a basic_json value
// see https://github.com/nlohmann/json/issues/2175
- template<typename ValueType,
- detail::enable_if_t<
- detail::is_basic_json<ValueType>::value,
- int> = 0>
+ template<typename ValueType, detail::enable_if_t<detail::is_basic_json<ValueType>::value, int> = 0>
ValueType& get_to(ValueType& v) const
{
v = *this;
return v;
}
- template<
- typename T,
- std::size_t N,
- typename Array = T (&)[N], // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
- detail::enable_if_t<
- detail::has_from_json<basic_json_t, Array>::value,
- int> = 0>
+ template<typename T,
+ std::size_t N,
+ typename Array = T (&)[N], // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
+ detail::enable_if_t<detail::has_from_json<basic_json_t, Array>::value,
+ int> = 0>
Array get_to(T (&v)[N]) const // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays)
- noexcept(noexcept(JSONSerializer<Array>::from_json(
- std::declval<const basic_json_t&>(),
- v)))
+ noexcept(noexcept(JSONSerializer<Array>::from_json(std::declval<const basic_json_t&>(), v)))
{
JSONSerializer<Array>::from_json(*this, v);
return v;
@@ -21362,7 +23991,9 @@
/// @brief get a reference value (implicit)
/// @sa https://json.nlohmann.me/api/basic_json/get_ref/
- template<typename ReferenceType, typename std::enable_if<std::is_reference<ReferenceType>::value && std::is_const<typename std::remove_reference<ReferenceType>::type>::value, int>::type = 0>
+ template<typename ReferenceType,
+ typename std::enable_if<std::is_reference<ReferenceType>::value && std::is_const<typename std::remove_reference<ReferenceType>::type>::value,
+ int>::type = 0>
ReferenceType get_ref() const
{
// delegate call to get_ref_impl
@@ -21398,15 +24029,21 @@
@since version 1.0.0
*/
- template<typename ValueType, typename std::enable_if<detail::conjunction<detail::negation<std::is_pointer<ValueType>>, detail::negation<std::is_same<ValueType, std::nullptr_t>>, detail::negation<std::is_same<ValueType, detail::json_ref<basic_json>>>, detail::negation<std::is_same<ValueType, typename string_t::value_type>>, detail::negation<detail::is_basic_json<ValueType>>, detail::negation<std::is_same<ValueType, std::initializer_list<typename string_t::value_type>>>,
+ template<typename ValueType,
+ typename std::enable_if<detail::conjunction<detail::negation<std::is_pointer<ValueType>>,
+ detail::negation<std::is_same<ValueType, std::nullptr_t>>,
+ detail::negation<std::is_same<ValueType, detail::json_ref<basic_json>>>,
+ detail::negation<std::is_same<ValueType, typename string_t::value_type>>,
+ detail::negation<detail::is_basic_json<ValueType>>,
+ detail::negation<std::is_same<ValueType, std::initializer_list<typename string_t::value_type>>>,
#if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER >= 1910 && _MSC_VER <= 1914))
- detail::negation<std::is_same<ValueType, std::string_view>>,
+ detail::negation<std::is_same<ValueType, std::string_view>>,
#endif
#if defined(JSON_HAS_CPP_17) && JSON_HAS_STATIC_RTTI
- detail::negation<std::is_same<ValueType, std::any>>,
+ detail::negation<std::is_same<ValueType, std::any>>,
#endif
- detail::is_detected_lazy<detail::get_template_function, const basic_json_t&, ValueType>>::value,
- int>::type = 0>
+ detail::is_detected_lazy<detail::get_template_function, const basic_json_t&, ValueType>>::value,
+ int>::type = 0>
JSON_EXPLICIT operator ValueType() const
{
// delegate the call to get<>() const
@@ -21601,7 +24238,8 @@
else
{
// set parent for values added above
- set_parents(begin() + static_cast<typename iterator::difference_type>(old_size), static_cast<typename iterator::difference_type>(idx + 1 - old_size));
+ set_parents(begin() + static_cast<typename iterator::difference_type>(old_size),
+ static_cast<typename iterator::difference_type>(idx + 1 - old_size));
}
#endif
assert_invariant();
@@ -21718,21 +24356,18 @@
private:
template<typename KeyType>
- using is_comparable_with_object_key = detail::is_comparable<
- object_comparator_t,
- const typename object_t::key_type&,
- KeyType>;
+ using is_comparable_with_object_key = detail::is_comparable<object_comparator_t, const typename object_t::key_type&, KeyType>;
template<typename ValueType>
- using value_return_type = std::conditional<
- detail::is_c_string_uncvref<ValueType>::value,
- string_t,
- typename std::decay<ValueType>::type>;
+ using value_return_type = std::conditional<detail::is_c_string_uncvref<ValueType>::value, string_t, typename std::decay<ValueType>::type>;
public:
/// @brief access specified object element with default value
/// @sa https://json.nlohmann.me/api/basic_json/value/
- template<class ValueType, detail::enable_if_t<!detail::is_transparent<object_comparator_t>::value && detail::is_getable<basic_json_t, ValueType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
+ template<class ValueType,
+ detail::enable_if_t<!detail::is_transparent<object_comparator_t>::value && detail::is_getable<basic_json_t, ValueType>::value &&
+ !std::is_same<value_t, detail::uncvref_t<ValueType>>::value,
+ int> = 0>
ValueType value(const typename object_t::key_type& key, const ValueType& default_value) const
{
// value only works for objects
@@ -21753,7 +24388,11 @@
/// @brief access specified object element with default value
/// @sa https://json.nlohmann.me/api/basic_json/value/
- template<class ValueType, class ReturnType = typename value_return_type<ValueType>::type, detail::enable_if_t<!detail::is_transparent<object_comparator_t>::value && detail::is_getable<basic_json_t, ReturnType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
+ template<class ValueType,
+ class ReturnType = typename value_return_type<ValueType>::type,
+ detail::enable_if_t<!detail::is_transparent<object_comparator_t>::value && detail::is_getable<basic_json_t, ReturnType>::value &&
+ !std::is_same<value_t, detail::uncvref_t<ValueType>>::value,
+ int> = 0>
ReturnType value(const typename object_t::key_type& key, ValueType&& default_value) const
{
// value only works for objects
@@ -21774,7 +24413,12 @@
/// @brief access specified object element with default value
/// @sa https://json.nlohmann.me/api/basic_json/value/
- template<class ValueType, class KeyType, detail::enable_if_t<detail::is_transparent<object_comparator_t>::value && !detail::is_json_pointer<KeyType>::value && is_comparable_with_object_key<KeyType>::value && detail::is_getable<basic_json_t, ValueType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
+ template<class ValueType,
+ class KeyType,
+ detail::enable_if_t<detail::is_transparent<object_comparator_t>::value && !detail::is_json_pointer<KeyType>::value &&
+ is_comparable_with_object_key<KeyType>::value && detail::is_getable<basic_json_t, ValueType>::value &&
+ !std::is_same<value_t, detail::uncvref_t<ValueType>>::value,
+ int> = 0>
ValueType value(KeyType&& key, const ValueType& default_value) const
{
// value only works for objects
@@ -21795,7 +24439,13 @@
/// @brief access specified object element via JSON Pointer with default value
/// @sa https://json.nlohmann.me/api/basic_json/value/
- template<class ValueType, class KeyType, class ReturnType = typename value_return_type<ValueType>::type, detail::enable_if_t<detail::is_transparent<object_comparator_t>::value && !detail::is_json_pointer<KeyType>::value && is_comparable_with_object_key<KeyType>::value && detail::is_getable<basic_json_t, ReturnType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
+ template<class ValueType,
+ class KeyType,
+ class ReturnType = typename value_return_type<ValueType>::type,
+ detail::enable_if_t<detail::is_transparent<object_comparator_t>::value && !detail::is_json_pointer<KeyType>::value &&
+ is_comparable_with_object_key<KeyType>::value && detail::is_getable<basic_json_t, ReturnType>::value &&
+ !std::is_same<value_t, detail::uncvref_t<ValueType>>::value,
+ int> = 0>
ReturnType value(KeyType&& key, ValueType&& default_value) const
{
// value only works for objects
@@ -21816,7 +24466,8 @@
/// @brief access specified object element via JSON Pointer with default value
/// @sa https://json.nlohmann.me/api/basic_json/value/
- template<class ValueType, detail::enable_if_t<detail::is_getable<basic_json_t, ValueType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
+ template<class ValueType,
+ detail::enable_if_t<detail::is_getable<basic_json_t, ValueType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
ValueType value(const json_pointer& ptr, const ValueType& default_value) const
{
// value only works for objects
@@ -21838,7 +24489,9 @@
/// @brief access specified object element via JSON Pointer with default value
/// @sa https://json.nlohmann.me/api/basic_json/value/
- template<class ValueType, class ReturnType = typename value_return_type<ValueType>::type, detail::enable_if_t<detail::is_getable<basic_json_t, ReturnType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
+ template<class ValueType,
+ class ReturnType = typename value_return_type<ValueType>::type,
+ detail::enable_if_t<detail::is_getable<basic_json_t, ReturnType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
ReturnType value(const json_pointer& ptr, ValueType&& default_value) const
{
// value only works for objects
@@ -21858,14 +24511,23 @@
JSON_THROW(type_error::create(306, detail::concat("cannot use value() with ", type_name()), this));
}
- template<class ValueType, class BasicJsonType, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value && detail::is_getable<basic_json_t, ValueType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
+ template<class ValueType,
+ class BasicJsonType,
+ detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value && detail::is_getable<basic_json_t, ValueType>::value &&
+ !std::is_same<value_t, detail::uncvref_t<ValueType>>::value,
+ int> = 0>
JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
ValueType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, const ValueType& default_value) const
{
return value(ptr.convert(), default_value);
}
- template<class ValueType, class BasicJsonType, class ReturnType = typename value_return_type<ValueType>::type, detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value && detail::is_getable<basic_json_t, ReturnType>::value && !std::is_same<value_t, detail::uncvref_t<ValueType>>::value, int> = 0>
+ template<class ValueType,
+ class BasicJsonType,
+ class ReturnType = typename value_return_type<ValueType>::type,
+ detail::enable_if_t<detail::is_basic_json<BasicJsonType>::value && detail::is_getable<basic_json_t, ReturnType>::value &&
+ !std::is_same<value_t, detail::uncvref_t<ValueType>>::value,
+ int> = 0>
JSON_HEDLEY_DEPRECATED_FOR(3.11.0, basic_json::json_pointer or nlohmann::json_pointer<basic_json::string_t>) // NOLINT(readability/alt_tokens)
ReturnType value(const ::nlohmann::json_pointer<BasicJsonType>& ptr, ValueType&& default_value) const
{
@@ -21906,7 +24568,10 @@
/// @brief remove element given an iterator
/// @sa https://json.nlohmann.me/api/basic_json/erase/
- template<class IteratorType, detail::enable_if_t<std::is_same<IteratorType, typename basic_json_t::iterator>::value || std::is_same<IteratorType, typename basic_json_t::const_iterator>::value, int> = 0>
+ template<class IteratorType,
+ detail::enable_if_t<std::is_same<IteratorType, typename basic_json_t::iterator>::value ||
+ std::is_same<IteratorType, typename basic_json_t::const_iterator>::value,
+ int> = 0>
IteratorType erase(IteratorType pos)
{
// make sure iterator fits the current value
@@ -21974,7 +24639,10 @@
/// @brief remove elements given an iterator range
/// @sa https://json.nlohmann.me/api/basic_json/erase/
- template<class IteratorType, detail::enable_if_t<std::is_same<IteratorType, typename basic_json_t::iterator>::value || std::is_same<IteratorType, typename basic_json_t::const_iterator>::value, int> = 0>
+ template<class IteratorType,
+ detail::enable_if_t<std::is_same<IteratorType, typename basic_json_t::iterator>::value ||
+ std::is_same<IteratorType, typename basic_json_t::const_iterator>::value,
+ int> = 0>
IteratorType erase(IteratorType first, IteratorType last)
{
// make sure iterator fits the current value
@@ -22021,15 +24689,13 @@
case value_t::object:
{
- result.m_it.object_iterator = m_data.m_value.object->erase(first.m_it.object_iterator,
- last.m_it.object_iterator);
+ result.m_it.object_iterator = m_data.m_value.object->erase(first.m_it.object_iterator, last.m_it.object_iterator);
break;
}
case value_t::array:
{
- result.m_it.array_iterator = m_data.m_value.array->erase(first.m_it.array_iterator,
- last.m_it.array_iterator);
+ result.m_it.array_iterator = m_data.m_value.array->erase(first.m_it.array_iterator, last.m_it.array_iterator);
break;
}
@@ -22656,9 +25322,7 @@
if (is_object() && init.size() == 2 && (*init.begin())->is_string())
{
basic_json&& key = init.begin()->moved_or_copied();
- push_back(typename object_t::value_type(
- std::move(key.get_ref<string_t&>()),
- (init.begin() + 1)->moved_or_copied()));
+ push_back(typename object_t::value_type(std::move(key.get_ref<string_t&>()), (init.begin() + 1)->moved_or_copied()));
}
else
{
@@ -22931,8 +25595,7 @@
/// @brief exchanges the values
/// @sa https://json.nlohmann.me/api/basic_json/swap/
void swap(reference other) noexcept(
- std::is_nothrow_move_constructible<value_t>::value &&
- std::is_nothrow_move_assignable<value_t>::value &&
+ std::is_nothrow_move_constructible<value_t>::value && std::is_nothrow_move_assignable<value_t>::value &&
std::is_nothrow_move_constructible<json_value>::value && // NOLINT(cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
std::is_nothrow_move_assignable<json_value>::value)
{
@@ -22947,8 +25610,7 @@
/// @brief exchanges the values
/// @sa https://json.nlohmann.me/api/basic_json/swap/
friend void swap(reference left, reference right) noexcept(
- std::is_nothrow_move_constructible<value_t>::value &&
- std::is_nothrow_move_assignable<value_t>::value &&
+ std::is_nothrow_move_constructible<value_t>::value && std::is_nothrow_move_assignable<value_t>::value &&
std::is_nothrow_move_constructible<json_value>::value && // NOLINT(cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
std::is_nothrow_move_assignable<json_value>::value)
{
@@ -23046,75 +25708,75 @@
// note parentheses around operands are necessary; see
// https://github.com/nlohmann/json/issues/1530
-#define JSON_IMPLEMENT_OPERATOR(op, null_result, unordered_result, default_result) \
- const auto lhs_type = lhs.type(); \
- const auto rhs_type = rhs.type(); \
- \
- if (lhs_type == rhs_type) /* NOLINT(readability/braces) */ \
- { \
- switch (lhs_type) \
- { \
- case value_t::array: \
- return (*lhs.m_data.m_value.array)op(*rhs.m_data.m_value.array); \
- \
- case value_t::object: \
- return (*lhs.m_data.m_value.object)op(*rhs.m_data.m_value.object); \
- \
- case value_t::null: \
- return (null_result); \
- \
- case value_t::string: \
- return (*lhs.m_data.m_value.string)op(*rhs.m_data.m_value.string); \
- \
- case value_t::boolean: \
- return (lhs.m_data.m_value.boolean)op(rhs.m_data.m_value.boolean); \
- \
- case value_t::number_integer: \
- return (lhs.m_data.m_value.number_integer)op(rhs.m_data.m_value.number_integer); \
- \
- case value_t::number_unsigned: \
- return (lhs.m_data.m_value.number_unsigned)op(rhs.m_data.m_value.number_unsigned); \
- \
- case value_t::number_float: \
- return (lhs.m_data.m_value.number_float)op(rhs.m_data.m_value.number_float); \
- \
- case value_t::binary: \
- return (*lhs.m_data.m_value.binary)op(*rhs.m_data.m_value.binary); \
- \
- case value_t::discarded: \
- default: \
- return (unordered_result); \
- } \
- } \
- else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) \
- { \
- return static_cast<number_float_t>(lhs.m_data.m_value.number_integer) op rhs.m_data.m_value.number_float; \
- } \
- else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) \
- { \
- return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_integer); \
- } \
- else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) \
- { \
- return static_cast<number_float_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_float; \
- } \
- else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) \
- { \
- return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_unsigned); \
- } \
- else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) \
- { \
- return static_cast<number_integer_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_integer; \
- } \
- else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) \
- { \
- return lhs.m_data.m_value.number_integer op static_cast<number_integer_t>(rhs.m_data.m_value.number_unsigned); \
- } \
- else if (compares_unordered(lhs, rhs)) \
- { \
- return (unordered_result); \
- } \
- \
+#define JSON_IMPLEMENT_OPERATOR(op, null_result, unordered_result, default_result) \
+ const auto lhs_type = lhs.type(); \
+ const auto rhs_type = rhs.type(); \
+ \
+ if (lhs_type == rhs_type) /* NOLINT(readability/braces) */ \
+ { \
+ switch (lhs_type) \
+ { \
+ case value_t::array: \
+ return (*lhs.m_data.m_value.array)op(*rhs.m_data.m_value.array); \
+ \
+ case value_t::object: \
+ return (*lhs.m_data.m_value.object)op(*rhs.m_data.m_value.object); \
+ \
+ case value_t::null: \
+ return (null_result); \
+ \
+ case value_t::string: \
+ return (*lhs.m_data.m_value.string)op(*rhs.m_data.m_value.string); \
+ \
+ case value_t::boolean: \
+ return (lhs.m_data.m_value.boolean)op(rhs.m_data.m_value.boolean); \
+ \
+ case value_t::number_integer: \
+ return (lhs.m_data.m_value.number_integer)op(rhs.m_data.m_value.number_integer); \
+ \
+ case value_t::number_unsigned: \
+ return (lhs.m_data.m_value.number_unsigned)op(rhs.m_data.m_value.number_unsigned); \
+ \
+ case value_t::number_float: \
+ return (lhs.m_data.m_value.number_float)op(rhs.m_data.m_value.number_float); \
+ \
+ case value_t::binary: \
+ return (*lhs.m_data.m_value.binary)op(*rhs.m_data.m_value.binary); \
+ \
+ case value_t::discarded: \
+ default: \
+ return (unordered_result); \
+ } \
+ } \
+ else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) \
+ { \
+ return static_cast<number_float_t>(lhs.m_data.m_value.number_integer) op rhs.m_data.m_value.number_float; \
+ } \
+ else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) \
+ { \
+ return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_integer); \
+ } \
+ else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) \
+ { \
+ return static_cast<number_float_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_float; \
+ } \
+ else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) \
+ { \
+ return lhs.m_data.m_value.number_float op static_cast<number_float_t>(rhs.m_data.m_value.number_unsigned); \
+ } \
+ else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) \
+ { \
+ return static_cast<number_integer_t>(lhs.m_data.m_value.number_unsigned) op rhs.m_data.m_value.number_integer; \
+ } \
+ else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) \
+ { \
+ return lhs.m_data.m_value.number_integer op static_cast<number_integer_t>(rhs.m_data.m_value.number_unsigned); \
+ } \
+ else if (compares_unordered(lhs, rhs)) \
+ { \
+ return (unordered_result); \
+ } \
+ \
return (default_result);
JSON_PRIVATE_UNLESS_TESTED :
@@ -23126,7 +25788,8 @@
static bool
compares_unordered(const_reference lhs, const_reference rhs, bool inverse = false) noexcept
{
- if ((lhs.is_number_float() && std::isnan(lhs.m_data.m_value.number_float) && rhs.is_number()) || (rhs.is_number_float() && std::isnan(rhs.m_data.m_value.number_float) && lhs.is_number()))
+ if ((lhs.is_number_float() && std::isnan(lhs.m_data.m_value.number_float) && rhs.is_number()) ||
+ (rhs.is_number_float() && std::isnan(rhs.m_data.m_value.number_float) && lhs.is_number()))
{
return true;
}
@@ -23164,7 +25827,8 @@
/// @brief comparison: equal
/// @sa https://json.nlohmann.me/api/basic_json/operator_eq/
template<typename ScalarType>
- requires std::is_scalar_v<ScalarType> bool operator==(ScalarType rhs) const noexcept
+ requires std::is_scalar_v<ScalarType>
+ bool operator==(ScalarType rhs) const noexcept
{
return *this == basic_json(rhs);
}
@@ -23182,7 +25846,7 @@
/// @brief comparison: 3-way
/// @sa https://json.nlohmann.me/api/basic_json/operator_spaceship/
- std::partial_ordering operator<=> (const_reference rhs) const noexcept // *NOPAD*
+ std::partial_ordering operator<=>(const_reference rhs) const noexcept // *NOPAD*
{
const_reference lhs = *this;
// default_result is used if we cannot compare values. In that case,
@@ -23197,7 +25861,7 @@
/// @sa https://json.nlohmann.me/api/basic_json/operator_spaceship/
template<typename ScalarType>
requires std::is_scalar_v<ScalarType>
- std::partial_ordering operator<=> (ScalarType rhs) const noexcept // *NOPAD*
+ std::partial_ordering operator<=>(ScalarType rhs) const noexcept // *NOPAD*
{
return *this <=> basic_json(rhs); // *NOPAD*
}
@@ -23221,7 +25885,8 @@
/// @brief comparison: less than or equal
/// @sa https://json.nlohmann.me/api/basic_json/operator_le/
template<typename ScalarType>
- requires std::is_scalar_v<ScalarType> bool operator<=(ScalarType rhs) const noexcept
+ requires std::is_scalar_v<ScalarType>
+ bool operator<=(ScalarType rhs) const noexcept
{
return *this <= basic_json(rhs);
}
@@ -23241,7 +25906,8 @@
/// @brief comparison: greater than or equal
/// @sa https://json.nlohmann.me/api/basic_json/operator_ge/
template<typename ScalarType>
- requires std::is_scalar_v<ScalarType> bool operator>=(ScalarType rhs) const noexcept
+ requires std::is_scalar_v<ScalarType>
+ bool operator>=(ScalarType rhs) const noexcept
{
return *this >= basic_json(rhs);
}
@@ -23465,10 +26131,8 @@
/// @brief deserialize from a compatible input
/// @sa https://json.nlohmann.me/api/basic_json/parse/
template<typename InputType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json parse(InputType&& i,
- const parser_callback_t cb = nullptr,
- const bool allow_exceptions = true,
- const bool ignore_comments = false)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json
+ parse(InputType&& i, const parser_callback_t cb = nullptr, const bool allow_exceptions = true, const bool ignore_comments = false)
{
basic_json result;
parser(detail::input_adapter(std::forward<InputType>(i)), cb, allow_exceptions, ignore_comments).parse(true, result);
@@ -23478,11 +26142,8 @@
/// @brief deserialize from a pair of character iterators
/// @sa https://json.nlohmann.me/api/basic_json/parse/
template<typename IteratorType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json parse(IteratorType first,
- IteratorType last,
- const parser_callback_t cb = nullptr,
- const bool allow_exceptions = true,
- const bool ignore_comments = false)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json
+ parse(IteratorType first, IteratorType last, const parser_callback_t cb = nullptr, const bool allow_exceptions = true, const bool ignore_comments = false)
{
basic_json result;
parser(detail::input_adapter(std::move(first), std::move(last)), cb, allow_exceptions, ignore_comments).parse(true, result);
@@ -23491,10 +26152,8 @@
JSON_HEDLEY_WARN_UNUSED_RESULT
JSON_HEDLEY_DEPRECATED_FOR(3.8.0, parse(ptr, ptr + len))
- static basic_json parse(detail::span_input_adapter&& i,
- const parser_callback_t cb = nullptr,
- const bool allow_exceptions = true,
- const bool ignore_comments = false)
+ static basic_json
+ parse(detail::span_input_adapter&& i, const parser_callback_t cb = nullptr, const bool allow_exceptions = true, const bool ignore_comments = false)
{
basic_json result;
parser(i.get(), cb, allow_exceptions, ignore_comments).parse(true, result);
@@ -23504,8 +26163,7 @@
/// @brief check if the input is valid JSON
/// @sa https://json.nlohmann.me/api/basic_json/accept/
template<typename InputType>
- static bool accept(InputType&& i,
- const bool ignore_comments = false)
+ static bool accept(InputType&& i, const bool ignore_comments = false)
{
return parser(detail::input_adapter(std::forward<InputType>(i)), nullptr, false, ignore_comments).accept(true);
}
@@ -23520,8 +26178,7 @@
JSON_HEDLEY_WARN_UNUSED_RESULT
JSON_HEDLEY_DEPRECATED_FOR(3.8.0, accept(ptr, ptr + len))
- static bool accept(detail::span_input_adapter&& i,
- const bool ignore_comments = false)
+ static bool accept(detail::span_input_adapter&& i, const bool ignore_comments = false)
{
return parser(i.get(), nullptr, false, ignore_comments).accept(true);
}
@@ -23533,21 +26190,24 @@
static bool sax_parse(InputType&& i, SAX* sax, input_format_t format = input_format_t::json, const bool strict = true, const bool ignore_comments = false)
{
auto ia = detail::input_adapter(std::forward<InputType>(i));
- return format == input_format_t::json
- ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)
- : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);
+ return format == input_format_t::json ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)
+ : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);
}
/// @brief generate SAX events
/// @sa https://json.nlohmann.me/api/basic_json/sax_parse/
template<class IteratorType, class SAX>
JSON_HEDLEY_NON_NULL(3)
- static bool sax_parse(IteratorType first, IteratorType last, SAX* sax, input_format_t format = input_format_t::json, const bool strict = true, const bool ignore_comments = false)
+ static bool sax_parse(IteratorType first,
+ IteratorType last,
+ SAX* sax,
+ input_format_t format = input_format_t::json,
+ const bool strict = true,
+ const bool ignore_comments = false)
{
auto ia = detail::input_adapter(std::move(first), std::move(last));
- return format == input_format_t::json
- ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)
- : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);
+ return format == input_format_t::json ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict)
+ : detail::binary_reader<basic_json, decltype(ia), SAX>(std::move(ia), format).sax_parse(format, sax, strict);
}
/// @brief generate SAX events
@@ -23557,7 +26217,11 @@
/// sax_parse(ptr, ptr + len) instead.
template<typename SAX>
JSON_HEDLEY_DEPRECATED_FOR(3.8.0, sax_parse(ptr, ptr + len, ...))
- JSON_HEDLEY_NON_NULL(2) static bool sax_parse(detail::span_input_adapter&& i, SAX* sax, input_format_t format = input_format_t::json, const bool strict = true, const bool ignore_comments = false)
+ JSON_HEDLEY_NON_NULL(2) static bool sax_parse(detail::span_input_adapter&& i,
+ SAX* sax,
+ input_format_t format = input_format_t::json,
+ const bool strict = true,
+ const bool ignore_comments = false)
{
auto ia = i.get();
return format == input_format_t::json
@@ -23638,8 +26302,7 @@
data(const value_t v)
: m_type(v)
, m_value(v)
- {
- }
+ {}
data(size_type cnt, const basic_json& val)
: m_type(value_t::array)
@@ -23722,9 +26385,7 @@
/// @brief create a UBJSON serialization of a given JSON value
/// @sa https://json.nlohmann.me/api/basic_json/to_ubjson/
- static std::vector<std::uint8_t> to_ubjson(const basic_json& j,
- const bool use_size = false,
- const bool use_type = false)
+ static std::vector<std::uint8_t> to_ubjson(const basic_json& j, const bool use_size = false, const bool use_type = false)
{
std::vector<std::uint8_t> result;
to_ubjson(j, result, use_size, use_type);
@@ -23747,9 +26408,7 @@
/// @brief create a BJData serialization of a given JSON value
/// @sa https://json.nlohmann.me/api/basic_json/to_bjdata/
- static std::vector<std::uint8_t> to_bjdata(const basic_json& j,
- const bool use_size = false,
- const bool use_type = false)
+ static std::vector<std::uint8_t> to_bjdata(const basic_json& j, const bool use_size = false, const bool use_type = false)
{
std::vector<std::uint8_t> result;
to_bjdata(j, result, use_size, use_type);
@@ -23796,10 +26455,8 @@
/// @brief create a JSON value from an input in CBOR format
/// @sa https://json.nlohmann.me/api/basic_json/from_cbor/
template<typename InputType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_cbor(InputType&& i,
- const bool strict = true,
- const bool allow_exceptions = true,
- const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json
+ from_cbor(InputType&& i, const bool strict = true, const bool allow_exceptions = true, const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -23811,7 +26468,11 @@
/// @brief create a JSON value from an input in CBOR format
/// @sa https://json.nlohmann.me/api/basic_json/from_cbor/
template<typename IteratorType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_cbor(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true, const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_cbor(IteratorType first,
+ IteratorType last,
+ const bool strict = true,
+ const bool allow_exceptions = true,
+ const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -23821,8 +26482,12 @@
}
template<typename T>
- JSON_HEDLEY_WARN_UNUSED_RESULT
- JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) static basic_json from_cbor(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true, const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
+ JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) static basic_json
+ from_cbor(const T* ptr,
+ std::size_t len,
+ const bool strict = true,
+ const bool allow_exceptions = true,
+ const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error)
{
return from_cbor(ptr, ptr + len, strict, allow_exceptions, tag_handler);
}
@@ -23845,9 +26510,7 @@
/// @brief create a JSON value from an input in MessagePack format
/// @sa https://json.nlohmann.me/api/basic_json/from_msgpack/
template<typename InputType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_msgpack(InputType&& i,
- const bool strict = true,
- const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_msgpack(InputType&& i, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -23859,7 +26522,8 @@
/// @brief create a JSON value from an input in MessagePack format
/// @sa https://json.nlohmann.me/api/basic_json/from_msgpack/
template<typename IteratorType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_msgpack(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json
+ from_msgpack(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -23869,17 +26533,15 @@
}
template<typename T>
- JSON_HEDLEY_WARN_UNUSED_RESULT
- JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) static basic_json from_msgpack(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) static basic_json
+ from_msgpack(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true)
{
return from_msgpack(ptr, ptr + len, strict, allow_exceptions);
}
JSON_HEDLEY_WARN_UNUSED_RESULT
JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len))
- static basic_json from_msgpack(detail::span_input_adapter&& i,
- const bool strict = true,
- const bool allow_exceptions = true)
+ static basic_json from_msgpack(detail::span_input_adapter&& i, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -23892,9 +26554,7 @@
/// @brief create a JSON value from an input in UBJSON format
/// @sa https://json.nlohmann.me/api/basic_json/from_ubjson/
template<typename InputType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_ubjson(InputType&& i,
- const bool strict = true,
- const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_ubjson(InputType&& i, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -23906,7 +26566,8 @@
/// @brief create a JSON value from an input in UBJSON format
/// @sa https://json.nlohmann.me/api/basic_json/from_ubjson/
template<typename IteratorType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_ubjson(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json
+ from_ubjson(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -23916,17 +26577,15 @@
}
template<typename T>
- JSON_HEDLEY_WARN_UNUSED_RESULT
- JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) static basic_json from_ubjson(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) static basic_json
+ from_ubjson(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true)
{
return from_ubjson(ptr, ptr + len, strict, allow_exceptions);
}
JSON_HEDLEY_WARN_UNUSED_RESULT
JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len))
- static basic_json from_ubjson(detail::span_input_adapter&& i,
- const bool strict = true,
- const bool allow_exceptions = true)
+ static basic_json from_ubjson(detail::span_input_adapter&& i, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -23939,9 +26598,7 @@
/// @brief create a JSON value from an input in BJData format
/// @sa https://json.nlohmann.me/api/basic_json/from_bjdata/
template<typename InputType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_bjdata(InputType&& i,
- const bool strict = true,
- const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_bjdata(InputType&& i, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -23953,7 +26610,8 @@
/// @brief create a JSON value from an input in BJData format
/// @sa https://json.nlohmann.me/api/basic_json/from_bjdata/
template<typename IteratorType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_bjdata(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json
+ from_bjdata(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -23965,9 +26623,7 @@
/// @brief create a JSON value from an input in BSON format
/// @sa https://json.nlohmann.me/api/basic_json/from_bson/
template<typename InputType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_bson(InputType&& i,
- const bool strict = true,
- const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_bson(InputType&& i, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -23979,7 +26635,8 @@
/// @brief create a JSON value from an input in BSON format
/// @sa https://json.nlohmann.me/api/basic_json/from_bson/
template<typename IteratorType>
- JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json from_bson(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json
+ from_bson(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -23989,17 +26646,15 @@
}
template<typename T>
- JSON_HEDLEY_WARN_UNUSED_RESULT
- JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) static basic_json from_bson(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true)
+ JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) static basic_json
+ from_bson(const T* ptr, std::size_t len, const bool strict = true, const bool allow_exceptions = true)
{
return from_bson(ptr, ptr + len, strict, allow_exceptions);
}
JSON_HEDLEY_WARN_UNUSED_RESULT
JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len))
- static basic_json from_bson(detail::span_input_adapter&& i,
- const bool strict = true,
- const bool allow_exceptions = true)
+ static basic_json from_bson(detail::span_input_adapter&& i, const bool strict = true, const bool allow_exceptions = true)
{
basic_json result;
detail::json_sax_dom_parser<basic_json> sdp(result, allow_exceptions);
@@ -24249,9 +26904,7 @@
for (const auto& val : json_patch)
{
// wrapper to get a value for an operation
- const auto get_value = [&val](const std::string& op,
- const std::string& member,
- bool string_type) -> basic_json& {
+ const auto get_value = [&val](const std::string& op, const std::string& member, bool string_type) -> basic_json& {
// find value
auto it = val.m_data.m_value.object->find(member);
@@ -24400,8 +27053,7 @@
if (source.type() != target.type())
{
// different types: replace value
- result.push_back(
- {{"op", "replace"}, {"path", path}, {"value", target}});
+ result.push_back({{"op", "replace"}, {"path", path}, {"value", target}});
return result;
}
@@ -24435,10 +27087,7 @@
// add other remaining elements
while (i < target.size())
{
- result.push_back(
- {{"op", "add"},
- {"path", detail::concat(path, "/-")},
- {"value", target[i]}});
+ result.push_back({{"op", "add"}, {"path", detail::concat(path, "/-")}, {"value", target[i]}});
++i;
}
@@ -24462,8 +27111,7 @@
else
{
// found a key that is not in o -> remove it
- result.push_back(object(
- {{"op", "remove"}, {"path", path_key}}));
+ result.push_back(object({{"op", "remove"}, {"path", path_key}}));
}
}
@@ -24474,8 +27122,7 @@
{
// found a key that is not in this -> add it
const auto path_key = detail::concat(path, '/', detail::escape(it.key()));
- result.push_back(
- {{"op", "add"}, {"path", path_key}, {"value", it.value()}});
+ result.push_back({{"op", "add"}, {"path", path_key}, {"value", it.value()}});
}
}
@@ -24493,8 +27140,7 @@
default:
{
// both primitive type: replace value
- result.push_back(
- {{"op", "replace"}, {"path", path}, {"value", target}});
+ result.push_back({{"op", "replace"}, {"path", path}, {"value", target}});
break;
}
}
@@ -24549,8 +27195,10 @@
return j.dump();
}
-inline namespace literals {
-inline namespace json_literals {
+inline namespace literals
+{
+inline namespace json_literals
+{
/// @brief user-defined string literal for JSON values
/// @sa https://json.nlohmann.me/api/basic_json/operator_literal_json/
@@ -24606,8 +27254,7 @@
@brief compare two value_t enum values
@since version 3.0.0
*/
- bool operator()(::nlohmann::detail::value_t lhs,
- ::nlohmann::detail::value_t rhs) const noexcept
+ bool operator()(::nlohmann::detail::value_t lhs, ::nlohmann::detail::value_t rhs) const noexcept
{
#if JSON_HAS_THREE_WAY_COMPARISON
return std::is_lt(lhs <=> rhs); // *NOPAD*
@@ -24623,8 +27270,10 @@
/// @brief exchanges the values of two JSON objects
/// @sa https://json.nlohmann.me/api/basic_json/std_swap/
NLOHMANN_BASIC_JSON_TPL_DECLARATION
-inline void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL& j1, nlohmann::NLOHMANN_BASIC_JSON_TPL& j2) noexcept( // NOLINT(readability-inconsistent-declaration-parameter-name, cert-dcl58-cpp)
- is_nothrow_move_constructible<nlohmann::NLOHMANN_BASIC_JSON_TPL>::value && // NOLINT(misc-redundant-expression,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
+inline void swap(nlohmann::NLOHMANN_BASIC_JSON_TPL& j1,
+ nlohmann::NLOHMANN_BASIC_JSON_TPL& j2) noexcept( // NOLINT(readability-inconsistent-declaration-parameter-name, cert-dcl58-cpp)
+ is_nothrow_move_constructible<
+ nlohmann::NLOHMANN_BASIC_JSON_TPL>::value && // NOLINT(misc-redundant-expression,cppcoreguidelines-noexcept-swap,performance-noexcept-swap)
is_nothrow_move_assignable<nlohmann::NLOHMANN_BASIC_JSON_TPL>::value)
{
j1.swap(j2);
diff --git a/single_include/nlohmann/json_fwd.hpp b/single_include/nlohmann/json_fwd.hpp
index a053939..ccf06a3 100644
--- a/single_include/nlohmann/json_fwd.hpp
+++ b/single_include/nlohmann/json_fwd.hpp
@@ -66,52 +66,40 @@
// Construct the namespace ABI tags component
#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) json_abi##a##b
-#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) \
- NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b)
+#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b)
-#define NLOHMANN_JSON_ABI_TAGS \
- NLOHMANN_JSON_ABI_TAGS_CONCAT( \
- NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \
- NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON)
+#define NLOHMANN_JSON_ABI_TAGS NLOHMANN_JSON_ABI_TAGS_CONCAT(NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON)
// Construct the namespace version component
-#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \
- _v##major##_##minor##_##patch
-#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \
- NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch)
+#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) _v##major##_##minor##_##patch
+#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch)
#if NLOHMANN_JSON_NAMESPACE_NO_VERSION
#define NLOHMANN_JSON_NAMESPACE_VERSION
#else
- #define NLOHMANN_JSON_NAMESPACE_VERSION \
- NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \
- NLOHMANN_JSON_VERSION_MINOR, \
- NLOHMANN_JSON_VERSION_PATCH)
+ #define NLOHMANN_JSON_NAMESPACE_VERSION \
+ NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, NLOHMANN_JSON_VERSION_MINOR, NLOHMANN_JSON_VERSION_PATCH)
#endif
// Combine namespace components
#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a##b
-#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \
- NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b)
+#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b)
#ifndef NLOHMANN_JSON_NAMESPACE
- #define NLOHMANN_JSON_NAMESPACE \
- nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \
- NLOHMANN_JSON_ABI_TAGS, \
- NLOHMANN_JSON_NAMESPACE_VERSION)
+ #define NLOHMANN_JSON_NAMESPACE nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT(NLOHMANN_JSON_ABI_TAGS, NLOHMANN_JSON_NAMESPACE_VERSION)
#endif
#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN
- #define NLOHMANN_JSON_NAMESPACE_BEGIN \
- namespace nlohmann { \
- inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \
- NLOHMANN_JSON_ABI_TAGS, \
- NLOHMANN_JSON_NAMESPACE_VERSION) {
+ #define NLOHMANN_JSON_NAMESPACE_BEGIN \
+ namespace nlohmann \
+ { \
+ inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT(NLOHMANN_JSON_ABI_TAGS, NLOHMANN_JSON_NAMESPACE_VERSION) \
+ {
#endif
#ifndef NLOHMANN_JSON_NAMESPACE_END
- #define NLOHMANN_JSON_NAMESPACE_END \
- } /* namespace (inline namespace) NOLINT(readability/namespace) */ \
+ #define NLOHMANN_JSON_NAMESPACE_END \
+ } /* namespace (inline namespace) NOLINT(readability/namespace) */ \
} // namespace nlohmann
#endif
@@ -135,8 +123,7 @@
/// a class to store JSON values
/// @sa https://json.nlohmann.me/api/basic_json/
-template<template<typename U, typename V, typename... Args> class ObjectType =
- std::map,
+template<template<typename U, typename V, typename... Args> class ObjectType = std::map,
template<typename U, typename... Args> class ArrayType = std::vector,
class StringType = std::string,
class BooleanType = bool,
@@ -144,8 +131,7 @@
class NumberUnsignedType = std::uint64_t,
class NumberFloatType = double,
template<typename U> class AllocatorType = std::allocator,
- template<typename T, typename SFINAE = void> class JSONSerializer =
- adl_serializer,
+ template<typename T, typename SFINAE = void> class JSONSerializer = adl_serializer,
class BinaryType = std::vector<std::uint8_t>, // cppcheck-suppress syntaxError
class CustomBaseClass = void>
class basic_json;
diff --git a/tests/abi/config/custom.cpp b/tests/abi/config/custom.cpp
index dbbb9ca..c643713 100644
--- a/tests/abi/config/custom.cpp
+++ b/tests/abi/config/custom.cpp
@@ -12,7 +12,9 @@
// define custom namespace
#define NLOHMANN_JSON_NAMESPACE nlohmann // this line may be omitted
-#define NLOHMANN_JSON_NAMESPACE_BEGIN namespace nlohmann {
+#define NLOHMANN_JSON_NAMESPACE_BEGIN \
+ namespace nlohmann \
+ {
#define NLOHMANN_JSON_NAMESPACE_END }
#include <nlohmann/json_fwd.hpp>
diff --git a/tests/benchmarks/src/benchmarks.cpp b/tests/benchmarks/src/benchmarks.cpp
index f8d8b90..bc50a9a 100644
--- a/tests/benchmarks/src/benchmarks.cpp
+++ b/tests/benchmarks/src/benchmarks.cpp
@@ -6,12 +6,12 @@
// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
-#include <benchmark/benchmark.h>
#include <fstream>
-#include <nlohmann/json.hpp>
#include <numeric>
#include <test_data.hpp>
#include <vector>
+#include <nlohmann/json.hpp>
+#include <benchmark/benchmark.h>
using json = nlohmann::json;
diff --git a/tests/src/fuzzer-parse_bjdata.cpp b/tests/src/fuzzer-parse_bjdata.cpp
index c52a27d..30f1ddd 100644
--- a/tests/src/fuzzer-parse_bjdata.cpp
+++ b/tests/src/fuzzer-parse_bjdata.cpp
@@ -26,8 +26,8 @@
*/
#include <iostream>
-#include <nlohmann/json.hpp>
#include <sstream>
+#include <nlohmann/json.hpp>
using json = nlohmann::json;
diff --git a/tests/src/fuzzer-parse_bson.cpp b/tests/src/fuzzer-parse_bson.cpp
index 9e514e8..fa2a221 100644
--- a/tests/src/fuzzer-parse_bson.cpp
+++ b/tests/src/fuzzer-parse_bson.cpp
@@ -20,8 +20,8 @@
*/
#include <iostream>
-#include <nlohmann/json.hpp>
#include <sstream>
+#include <nlohmann/json.hpp>
using json = nlohmann::json;
diff --git a/tests/src/fuzzer-parse_cbor.cpp b/tests/src/fuzzer-parse_cbor.cpp
index aea2585..db92aca 100644
--- a/tests/src/fuzzer-parse_cbor.cpp
+++ b/tests/src/fuzzer-parse_cbor.cpp
@@ -20,8 +20,8 @@
*/
#include <iostream>
-#include <nlohmann/json.hpp>
#include <sstream>
+#include <nlohmann/json.hpp>
using json = nlohmann::json;
diff --git a/tests/src/fuzzer-parse_json.cpp b/tests/src/fuzzer-parse_json.cpp
index 152ac5b..be04e80 100644
--- a/tests/src/fuzzer-parse_json.cpp
+++ b/tests/src/fuzzer-parse_json.cpp
@@ -21,8 +21,8 @@
*/
#include <iostream>
-#include <nlohmann/json.hpp>
#include <sstream>
+#include <nlohmann/json.hpp>
using json = nlohmann::json;
diff --git a/tests/src/fuzzer-parse_msgpack.cpp b/tests/src/fuzzer-parse_msgpack.cpp
index 861d7b2..0106b40 100644
--- a/tests/src/fuzzer-parse_msgpack.cpp
+++ b/tests/src/fuzzer-parse_msgpack.cpp
@@ -20,8 +20,8 @@
*/
#include <iostream>
-#include <nlohmann/json.hpp>
#include <sstream>
+#include <nlohmann/json.hpp>
using json = nlohmann::json;
diff --git a/tests/src/fuzzer-parse_ubjson.cpp b/tests/src/fuzzer-parse_ubjson.cpp
index 0c04a3d..2830bef 100644
--- a/tests/src/fuzzer-parse_ubjson.cpp
+++ b/tests/src/fuzzer-parse_ubjson.cpp
@@ -26,8 +26,8 @@
*/
#include <iostream>
-#include <nlohmann/json.hpp>
#include <sstream>
+#include <nlohmann/json.hpp>
using json = nlohmann::json;
diff --git a/tests/src/make_test_data_available.hpp b/tests/src/make_test_data_available.hpp
index 35d4ee2..23c54cd 100644
--- a/tests/src/make_test_data_available.hpp
+++ b/tests/src/make_test_data_available.hpp
@@ -13,7 +13,8 @@
#include <memory> // unique_ptr
#include <test_data.hpp>
-namespace utils {
+namespace utils
+{
inline bool check_testsuite_downloaded()
{
@@ -23,7 +24,10 @@
TEST_CASE("check test suite is downloaded")
{
- REQUIRE_MESSAGE(utils::check_testsuite_downloaded(), "Test data not found in '" TEST_DATA_DIRECTORY "'. Please execute target 'download_test_data' before running this test suite. See <https://github.com/nlohmann/json#execute-unit-tests> for more information.");
+ REQUIRE_MESSAGE(
+ utils::check_testsuite_downloaded(),
+ "Test data not found in '" TEST_DATA_DIRECTORY
+ "'. Please execute target 'download_test_data' before running this test suite. See <https://github.com/nlohmann/json#execute-unit-tests> for more information.");
}
} // namespace utils
diff --git a/tests/src/test_utils.hpp b/tests/src/test_utils.hpp
index c52c7eb..74d1e95 100644
--- a/tests/src/test_utils.hpp
+++ b/tests/src/test_utils.hpp
@@ -12,7 +12,8 @@
#include <fstream> // ifstream, istreambuf_iterator, ios
#include <vector> // vector
-namespace utils {
+namespace utils
+{
inline std::vector<std::uint8_t> read_binary_file(const std::string& filename)
{
diff --git a/tests/src/unit-32bit.cpp b/tests/src/unit-32bit.cpp
index 32f5b83..eceb978 100644
--- a/tests/src/unit-32bit.cpp
+++ b/tests/src/unit-32bit.cpp
@@ -110,10 +110,14 @@
std::vector<uint8_t> const vMX = {'[', '$', 'U', '#', '[', 'M', 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 'U', 0x01, ']'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vM), "[json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vM),
+ "[json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow",
+ json::out_of_range&);
CHECK(json::from_bjdata(vM, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vMX), "[json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vMX),
+ "[json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow",
+ json::out_of_range&);
CHECK(json::from_bjdata(vMX, true, false).is_discarded());
}
@@ -123,10 +127,14 @@
std::vector<uint8_t> const vM = {'[', '$', 'M', '#', '[', 'I', 0x00, 0x20, 'M', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, ']'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vL), "[json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vL),
+ "[json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow",
+ json::out_of_range&);
CHECK(json::from_bjdata(vL, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vM), "[json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vM),
+ "[json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow",
+ json::out_of_range&);
CHECK(json::from_bjdata(vM, true, false).is_discarded());
}
}
diff --git a/tests/src/unit-algorithms.cpp b/tests/src/unit-algorithms.cpp
index e4b6106..1a9049f 100644
--- a/tests/src/unit-algorithms.cpp
+++ b/tests/src/unit-algorithms.cpp
@@ -201,7 +201,9 @@
SECTION("sorting an object")
{
json j({{"one", 1}, {"two", 2}});
- CHECK_THROWS_WITH_AS(std::sort(j.begin(), j.end()), "[json.exception.invalid_iterator.209] cannot use offsets with object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(std::sort(j.begin(), j.end()),
+ "[json.exception.invalid_iterator.209] cannot use offsets with object iterators",
+ json::invalid_iterator&);
}
}
diff --git a/tests/src/unit-allocator.cpp b/tests/src/unit-allocator.cpp
index f5c028c..98a8ac6 100644
--- a/tests/src/unit-allocator.cpp
+++ b/tests/src/unit-allocator.cpp
@@ -12,7 +12,8 @@
#include <nlohmann/json.hpp>
using nlohmann::json;
-namespace {
+namespace
+{
// special test case to check if memory is leaked if constructor throws
template<class T>
struct bad_allocator : std::allocator<T>
@@ -43,21 +44,15 @@
SECTION("bad_alloc")
{
// create JSON type using the throwing allocator
- using bad_json = nlohmann::basic_json<std::map,
- std::vector,
- std::string,
- bool,
- std::int64_t,
- std::uint64_t,
- double,
- bad_allocator>;
+ using bad_json = nlohmann::basic_json<std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, double, bad_allocator>;
// creating an object should throw
CHECK_THROWS_AS(bad_json(bad_json::value_t::object), std::bad_alloc&);
}
}
-namespace {
+namespace
+{
bool next_construct_fails = false;
bool next_destroy_fails = false;
bool next_deallocate_fails = false;
@@ -123,14 +118,7 @@
TEST_CASE("controlled bad_alloc")
{
// create JSON type using the throwing allocator
- using my_json = nlohmann::basic_json<std::map,
- std::vector,
- std::string,
- bool,
- std::int64_t,
- std::uint64_t,
- double,
- my_allocator>;
+ using my_json = nlohmann::basic_json<std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, double, my_allocator>;
SECTION("class json_value")
{
@@ -219,7 +207,8 @@
}
}
-namespace {
+namespace
+{
template<class T>
struct allocator_no_forward : std::allocator<T>
{
@@ -247,14 +236,7 @@
{
SECTION("my_allocator::construct doesn't forward")
{
- using bad_alloc_json = nlohmann::basic_json<std::map,
- std::vector,
- std::string,
- bool,
- std::int64_t,
- std::uint64_t,
- double,
- allocator_no_forward>;
+ using bad_alloc_json = nlohmann::basic_json<std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, double, allocator_no_forward>;
bad_alloc_json j;
j["test"] = bad_alloc_json::array_t();
diff --git a/tests/src/unit-alt-string.cpp b/tests/src/unit-alt-string.cpp
index d86f9d7..4c31f83 100644
--- a/tests/src/unit-alt-string.cpp
+++ b/tests/src/unit-alt-string.cpp
@@ -174,16 +174,7 @@
target = std::to_string(value).c_str();
}
-using alt_json = nlohmann::basic_json<
- std::map,
- std::vector,
- alt_string,
- bool,
- std::int64_t,
- std::uint64_t,
- double,
- std::allocator,
- nlohmann::adl_serializer>;
+using alt_json = nlohmann::basic_json<std::map, std::vector, alt_string, bool, std::int64_t, std::uint64_t, double, std::allocator, nlohmann::adl_serializer>;
bool operator<(const char* op1, const alt_string& op2) noexcept
{
diff --git a/tests/src/unit-assert_macro.cpp b/tests/src/unit-assert_macro.cpp
index d059130..a9a04f1 100644
--- a/tests/src/unit-assert_macro.cpp
+++ b/tests/src/unit-assert_macro.cpp
@@ -18,10 +18,10 @@
static int assert_counter;
/// set failure variable to true instead of calling assert(x)
-#define JSON_ASSERT(x) \
- { \
- if (!(x)) \
- ++assert_counter; \
+#define JSON_ASSERT(x) \
+ { \
+ if (!(x)) \
+ ++assert_counter; \
}
#include <nlohmann/json.hpp>
diff --git a/tests/src/unit-bjdata.cpp b/tests/src/unit-bjdata.cpp
index 6cd927d..dec0a14 100644
--- a/tests/src/unit-bjdata.cpp
+++ b/tests/src/unit-bjdata.cpp
@@ -21,7 +21,8 @@
#include <limits>
#include <set>
-namespace {
+namespace
+{
class SaxCountdown
{
public:
@@ -89,7 +90,9 @@
return events_left-- > 0;
}
- bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const json::exception& /*unused*/) // NOLINT(readability-convert-member-functions-to-static)
+ bool parse_error(std::size_t /*unused*/,
+ const std::string& /*unused*/,
+ const json::exception& /*unused*/) // NOLINT(readability-convert-member-functions-to-static)
{
return false;
}
@@ -316,14 +319,10 @@
// check individual bytes
CHECK(result[0] == 'L');
- int64_t const restored = (static_cast<int64_t>(result[8]) << 070) +
- (static_cast<int64_t>(result[7]) << 060) +
- (static_cast<int64_t>(result[6]) << 050) +
- (static_cast<int64_t>(result[5]) << 040) +
- (static_cast<int64_t>(result[4]) << 030) +
- (static_cast<int64_t>(result[3]) << 020) +
- (static_cast<int64_t>(result[2]) << 010) +
- static_cast<int64_t>(result[1]);
+ int64_t const restored = (static_cast<int64_t>(result[8]) << 070) + (static_cast<int64_t>(result[7]) << 060) +
+ (static_cast<int64_t>(result[6]) << 050) + (static_cast<int64_t>(result[5]) << 040) +
+ (static_cast<int64_t>(result[4]) << 030) + (static_cast<int64_t>(result[3]) << 020) +
+ (static_cast<int64_t>(result[2]) << 010) + static_cast<int64_t>(result[1]);
CHECK(restored == i);
// roundtrip
@@ -369,10 +368,8 @@
// check individual bytes
CHECK(result[0] == 'l');
- int32_t const restored = (static_cast<int32_t>(result[4]) << 030) +
- (static_cast<int32_t>(result[3]) << 020) +
- (static_cast<int32_t>(result[2]) << 010) +
- static_cast<int32_t>(result[1]);
+ int32_t const restored = (static_cast<int32_t>(result[4]) << 030) + (static_cast<int32_t>(result[3]) << 020) +
+ (static_cast<int32_t>(result[2]) << 010) + static_cast<int32_t>(result[1]);
CHECK(restored == i);
// roundtrip
@@ -575,11 +572,7 @@
SECTION("32768..65535 (uint16)")
{
- for (const uint32_t i :
- {
- 32768u,
- 55555u,
- 65535u})
+ for (const uint32_t i : {32768u, 55555u, 65535u})
{
CAPTURE(i)
@@ -615,11 +608,7 @@
SECTION("65536..2147483647 (int32)")
{
- for (const uint32_t i :
- {
- 65536u,
- 77777u,
- 2147483647u})
+ for (const uint32_t i : {65536u, 77777u, 2147483647u})
{
CAPTURE(i)
@@ -646,10 +635,8 @@
// check individual bytes
CHECK(result[0] == 'l');
- uint32_t const restored = (static_cast<uint32_t>(result[4]) << 030) +
- (static_cast<uint32_t>(result[3]) << 020) +
- (static_cast<uint32_t>(result[2]) << 010) +
- static_cast<uint32_t>(result[1]);
+ uint32_t const restored = (static_cast<uint32_t>(result[4]) << 030) + (static_cast<uint32_t>(result[3]) << 020) +
+ (static_cast<uint32_t>(result[2]) << 010) + static_cast<uint32_t>(result[1]);
CHECK(restored == i);
// roundtrip
@@ -660,11 +647,7 @@
SECTION("2147483648..4294967295 (uint32)")
{
- for (const uint32_t i :
- {
- 2147483648u,
- 3333333333u,
- 4294967295u})
+ for (const uint32_t i : {2147483648u, 3333333333u, 4294967295u})
{
CAPTURE(i)
@@ -691,10 +674,8 @@
// check individual bytes
CHECK(result[0] == 'm');
- uint32_t const restored = (static_cast<uint32_t>(result[4]) << 030) +
- (static_cast<uint32_t>(result[3]) << 020) +
- (static_cast<uint32_t>(result[2]) << 010) +
- static_cast<uint32_t>(result[1]);
+ uint32_t const restored = (static_cast<uint32_t>(result[4]) << 030) + (static_cast<uint32_t>(result[3]) << 020) +
+ (static_cast<uint32_t>(result[2]) << 010) + static_cast<uint32_t>(result[1]);
CHECK(restored == i);
// roundtrip
@@ -737,14 +718,10 @@
// check individual bytes
CHECK(result[0] == 'L');
- uint64_t const restored = (static_cast<uint64_t>(result[8]) << 070) +
- (static_cast<uint64_t>(result[7]) << 060) +
- (static_cast<uint64_t>(result[6]) << 050) +
- (static_cast<uint64_t>(result[5]) << 040) +
- (static_cast<uint64_t>(result[4]) << 030) +
- (static_cast<uint64_t>(result[3]) << 020) +
- (static_cast<uint64_t>(result[2]) << 010) +
- static_cast<uint64_t>(result[1]);
+ uint64_t const restored = (static_cast<uint64_t>(result[8]) << 070) + (static_cast<uint64_t>(result[7]) << 060) +
+ (static_cast<uint64_t>(result[6]) << 050) + (static_cast<uint64_t>(result[5]) << 040) +
+ (static_cast<uint64_t>(result[4]) << 030) + (static_cast<uint64_t>(result[3]) << 020) +
+ (static_cast<uint64_t>(result[2]) << 010) + static_cast<uint64_t>(result[1]);
CHECK(restored == i);
// roundtrip
@@ -786,14 +763,10 @@
// check individual bytes
CHECK(result[0] == 'M');
- uint64_t const restored = (static_cast<uint64_t>(result[8]) << 070) +
- (static_cast<uint64_t>(result[7]) << 060) +
- (static_cast<uint64_t>(result[6]) << 050) +
- (static_cast<uint64_t>(result[5]) << 040) +
- (static_cast<uint64_t>(result[4]) << 030) +
- (static_cast<uint64_t>(result[3]) << 020) +
- (static_cast<uint64_t>(result[2]) << 010) +
- static_cast<uint64_t>(result[1]);
+ uint64_t const restored = (static_cast<uint64_t>(result[8]) << 070) + (static_cast<uint64_t>(result[7]) << 060) +
+ (static_cast<uint64_t>(result[6]) << 050) + (static_cast<uint64_t>(result[5]) << 040) +
+ (static_cast<uint64_t>(result[4]) << 030) + (static_cast<uint64_t>(result[3]) << 020) +
+ (static_cast<uint64_t>(result[2]) << 010) + static_cast<uint64_t>(result[1]);
CHECK(restored == i);
// roundtrip
@@ -904,11 +877,7 @@
SECTION("32768..65535 (uint16)")
{
- for (const uint32_t i :
- {
- 32768u,
- 55555u,
- 65535u})
+ for (const uint32_t i : {32768u, 55555u, 65535u})
{
CAPTURE(i)
@@ -942,11 +911,7 @@
}
SECTION("65536..2147483647 (int32)")
{
- for (const uint32_t i :
- {
- 65536u,
- 77777u,
- 2147483647u})
+ for (const uint32_t i : {65536u, 77777u, 2147483647u})
{
CAPTURE(i)
@@ -972,10 +937,8 @@
// check individual bytes
CHECK(result[0] == 'l');
- uint32_t const restored = (static_cast<uint32_t>(result[4]) << 030) +
- (static_cast<uint32_t>(result[3]) << 020) +
- (static_cast<uint32_t>(result[2]) << 010) +
- static_cast<uint32_t>(result[1]);
+ uint32_t const restored = (static_cast<uint32_t>(result[4]) << 030) + (static_cast<uint32_t>(result[3]) << 020) +
+ (static_cast<uint32_t>(result[2]) << 010) + static_cast<uint32_t>(result[1]);
CHECK(restored == i);
// roundtrip
@@ -986,11 +949,7 @@
SECTION("2147483648..4294967295 (uint32)")
{
- for (const uint32_t i :
- {
- 2147483648u,
- 3333333333u,
- 4294967295u})
+ for (const uint32_t i : {2147483648u, 3333333333u, 4294967295u})
{
CAPTURE(i)
@@ -1016,10 +975,8 @@
// check individual bytes
CHECK(result[0] == 'm');
- uint32_t const restored = (static_cast<uint32_t>(result[4]) << 030) +
- (static_cast<uint32_t>(result[3]) << 020) +
- (static_cast<uint32_t>(result[2]) << 010) +
- static_cast<uint32_t>(result[1]);
+ uint32_t const restored = (static_cast<uint32_t>(result[4]) << 030) + (static_cast<uint32_t>(result[3]) << 020) +
+ (static_cast<uint32_t>(result[2]) << 010) + static_cast<uint32_t>(result[1]);
CHECK(restored == i);
// roundtrip
@@ -1061,14 +1018,10 @@
// check individual bytes
CHECK(result[0] == 'L');
- uint64_t const restored = (static_cast<uint64_t>(result[8]) << 070) +
- (static_cast<uint64_t>(result[7]) << 060) +
- (static_cast<uint64_t>(result[6]) << 050) +
- (static_cast<uint64_t>(result[5]) << 040) +
- (static_cast<uint64_t>(result[4]) << 030) +
- (static_cast<uint64_t>(result[3]) << 020) +
- (static_cast<uint64_t>(result[2]) << 010) +
- static_cast<uint64_t>(result[1]);
+ uint64_t const restored = (static_cast<uint64_t>(result[8]) << 070) + (static_cast<uint64_t>(result[7]) << 060) +
+ (static_cast<uint64_t>(result[6]) << 050) + (static_cast<uint64_t>(result[5]) << 040) +
+ (static_cast<uint64_t>(result[4]) << 030) + (static_cast<uint64_t>(result[3]) << 020) +
+ (static_cast<uint64_t>(result[2]) << 010) + static_cast<uint64_t>(result[1]);
CHECK(restored == i);
// roundtrip
@@ -1110,14 +1063,10 @@
// check individual bytes
CHECK(result[0] == 'M');
- uint64_t const restored = (static_cast<uint64_t>(result[8]) << 070) +
- (static_cast<uint64_t>(result[7]) << 060) +
- (static_cast<uint64_t>(result[6]) << 050) +
- (static_cast<uint64_t>(result[5]) << 040) +
- (static_cast<uint64_t>(result[4]) << 030) +
- (static_cast<uint64_t>(result[3]) << 020) +
- (static_cast<uint64_t>(result[2]) << 010) +
- static_cast<uint64_t>(result[1]);
+ uint64_t const restored = (static_cast<uint64_t>(result[8]) << 070) + (static_cast<uint64_t>(result[7]) << 060) +
+ (static_cast<uint64_t>(result[6]) << 050) + (static_cast<uint64_t>(result[5]) << 040) +
+ (static_cast<uint64_t>(result[4]) << 030) + (static_cast<uint64_t>(result[3]) << 020) +
+ (static_cast<uint64_t>(result[2]) << 010) + static_cast<uint64_t>(result[1]);
CHECK(restored == i);
// roundtrip
@@ -1132,17 +1081,7 @@
{
double v = 3.1415925;
json const j = v;
- std::vector<uint8_t> const expected =
- {
- 'D',
- 0xfc,
- 0xde,
- 0xa6,
- 0x3f,
- 0xfb,
- 0x21,
- 0x09,
- 0x40};
+ std::vector<uint8_t> const expected = {'D', 0xfc, 0xde, 0xa6, 0x3f, 0xfb, 0x21, 0x09, 0x40};
const auto result = json::to_bjdata(j);
CHECK(result == expected);
@@ -1170,7 +1109,10 @@
{
json _;
std::vector<uint8_t> const vec0 = {'h'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vec0), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vec0),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vec0, true, false).is_discarded());
}
@@ -1178,7 +1120,10 @@
{
json _;
std::vector<uint8_t> const vec1 = {'h', 0x00};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vec1), "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vec1),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vec1, true, false).is_discarded());
}
}
@@ -1274,7 +1219,8 @@
{
SECTION("unsigned integer number")
{
- std::vector<uint8_t> const vec = {'H', 'i', 0x14, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
+ std::vector<uint8_t> const vec = {'H', 'i', 0x14, '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
const auto j = json::from_bjdata(vec);
CHECK(j.is_number_unsigned());
CHECK(j.dump() == "12345678901234567890");
@@ -1282,7 +1228,8 @@
SECTION("signed integer number")
{
- std::vector<uint8_t> const vec = {'H', 'i', 0x13, '-', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8'};
+ std::vector<uint8_t> const vec = {'H', 'i', 0x13, '-', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8'};
const auto j = json::from_bjdata(vec);
CHECK(j.is_number_integer());
CHECK(j.dump() == "-123456789012345678");
@@ -1290,7 +1237,8 @@
SECTION("floating-point number")
{
- std::vector<uint8_t> const vec = {'H', 'i', 0x16, '3', '.', '1', '4', '1', '5', '9', '2', '6', '5', '3', '5', '8', '9', '7', '9', '3', '2', '3', '8', '4', '6'};
+ std::vector<uint8_t> const vec = {'H', 'i', 0x16, '3', '.', '1', '4', '1', '5', '9', '2', '6', '5',
+ '3', '5', '8', '9', '7', '9', '3', '2', '3', '8', '4', '6'};
const auto j = json::from_bjdata(vec);
CHECK(j.is_number_float());
CHECK(j.dump() == "3.141592653589793");
@@ -1307,11 +1255,20 @@
json _;
std::vector<uint8_t> const vec2 = {'H', 'i', 2, '1', 'A', '3'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vec2), "[json.exception.parse_error.115] parse error at byte 5: syntax error while parsing BJData high-precision number: invalid number text: 1A", json::parse_error);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vec2),
+ "[json.exception.parse_error.115] parse error at byte 5: syntax error while parsing BJData high-precision number: invalid number text: 1A",
+ json::parse_error);
std::vector<uint8_t> const vec3 = {'H', 'i', 2, '1', '.'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vec3), "[json.exception.parse_error.115] parse error at byte 5: syntax error while parsing BJData high-precision number: invalid number text: 1.", json::parse_error);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vec3),
+ "[json.exception.parse_error.115] parse error at byte 5: syntax error while parsing BJData high-precision number: invalid number text: 1.",
+ json::parse_error);
std::vector<uint8_t> const vec4 = {'H', 2, '1', '0'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vec4), "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing BJData size: expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0x02", json::parse_error);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vec4),
+ "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing BJData size: expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0x02",
+ json::parse_error);
}
}
}
@@ -1389,14 +1346,7 @@
SECTION("N = 256..32767")
{
- for (const size_t N :
- {
- 256u,
- 999u,
- 1025u,
- 3333u,
- 2048u,
- 32767u})
+ for (const size_t N : {256u, 999u, 1025u, 3333u, 2048u, 32767u})
{
CAPTURE(N)
@@ -1427,11 +1377,7 @@
SECTION("N = 32768..65535")
{
- for (const size_t N :
- {
- 32768u,
- 55555u,
- 65535u})
+ for (const size_t N : {32768u, 55555u, 65535u})
{
CAPTURE(N)
@@ -1462,11 +1408,7 @@
SECTION("N = 65536..2147483647")
{
- for (const size_t N :
- {
- 65536u,
- 77777u,
- 1048576u})
+ for (const size_t N : {65536u, 77777u, 1048576u})
{
CAPTURE(N)
@@ -1590,14 +1532,7 @@
SECTION("N = 256..32767")
{
- for (const std::size_t N :
- {
- 256u,
- 999u,
- 1025u,
- 3333u,
- 2048u,
- 32767u})
+ for (const std::size_t N : {256u, 999u, 1025u, 3333u, 2048u, 32767u})
{
CAPTURE(N)
@@ -1631,11 +1566,7 @@
SECTION("N = 32768..65535")
{
- for (const std::size_t N :
- {
- 32768u,
- 55555u,
- 65535u})
+ for (const std::size_t N : {32768u, 55555u, 65535u})
{
CAPTURE(N)
@@ -1669,11 +1600,7 @@
SECTION("N = 65536..2147483647")
{
- for (const std::size_t N :
- {
- 65536u,
- 77777u,
- 1048576u})
+ for (const std::size_t N : {65536u, 77777u, 1048576u})
{
CAPTURE(N)
@@ -2101,25 +2028,7 @@
SECTION("size=false type=false")
{
json const j = json::parse(R"({"a": {"b": {"c": {}}}})");
- std::vector<uint8_t> const expected =
- {
- '{',
- 'i',
- 1,
- 'a',
- '{',
- 'i',
- 1,
- 'b',
- '{',
- 'i',
- 1,
- 'c',
- '{',
- '}',
- '}',
- '}',
- '}'};
+ std::vector<uint8_t> const expected = {'{', 'i', 1, 'a', '{', 'i', 1, 'b', '{', 'i', 1, 'c', '{', '}', '}', '}', '}'};
const auto result = json::to_bjdata(j);
CHECK(result == expected);
@@ -2131,33 +2040,8 @@
SECTION("size=true type=false")
{
json const j = json::parse(R"({"a": {"b": {"c": {}}}})");
- std::vector<uint8_t> const expected =
- {
- '{',
- '#',
- 'i',
- 1,
- 'i',
- 1,
- 'a',
- '{',
- '#',
- 'i',
- 1,
- 'i',
- 1,
- 'b',
- '{',
- '#',
- 'i',
- 1,
- 'i',
- 1,
- 'c',
- '{',
- '#',
- 'i',
- 0};
+ std::vector<uint8_t> const expected = {'{', '#', 'i', 1, 'i', 1, 'a', '{', '#', 'i', 1, 'i', 1,
+ 'b', '{', '#', 'i', 1, 'i', 1, 'c', '{', '#', 'i', 0};
const auto result = json::to_bjdata(j, true);
CHECK(result == expected);
@@ -2169,33 +2053,8 @@
SECTION("size=true type=true ignore object type marker")
{
json const j = json::parse(R"({"a": {"b": {"c": {}}}})");
- std::vector<uint8_t> const expected =
- {
- '{',
- '#',
- 'i',
- 1,
- 'i',
- 1,
- 'a',
- '{',
- '#',
- 'i',
- 1,
- 'i',
- 1,
- 'b',
- '{',
- '#',
- 'i',
- 1,
- 'i',
- 1,
- 'c',
- '{',
- '#',
- 'i',
- 0};
+ std::vector<uint8_t> const expected = {'{', '#', 'i', 1, 'i', 1, 'a', '{', '#', 'i', 1, 'i', 1,
+ 'b', '{', '#', 'i', 1, 'i', 1, 'c', '{', '#', 'i', 0};
const auto result = json::to_bjdata(j, true, true);
CHECK(result == expected);
@@ -2221,9 +2080,10 @@
SECTION("strict mode")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vec),
- "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing BJData value: expected end of input; last byte: 0x5A",
- json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vec),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing BJData value: expected end of input; last byte: 0x5A",
+ json::parse_error&);
}
}
}
@@ -2396,9 +2256,12 @@
std::vector<uint8_t> const v_u = {'[', '#', 'i', 2, 'u', 0x0F, 0xA7, 'u', 0x0F, 0xA7};
std::vector<uint8_t> const v_l = {'[', '#', 'i', 2, 'l', 0xFF, 0xFF, 0xFF, 0x7F, 'l', 0xFF, 0xFF, 0xFF, 0x7F};
std::vector<uint8_t> const v_m = {'[', '#', 'i', 2, 'm', 0xFF, 0xC9, 0x9A, 0xBB, 'm', 0xFF, 0xC9, 0x9A, 0xBB};
- std::vector<uint8_t> const v_L = {'[', '#', 'i', 2, 'L', 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 'L', 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F};
- std::vector<uint8_t> const v_M = {'[', '#', 'i', 2, 'M', 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D, 'M', 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D};
- std::vector<uint8_t> const v_D = {'[', '#', 'i', 2, 'D', 0x4a, 0xd8, 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40, 'D', 0x4a, 0xd8, 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40};
+ std::vector<uint8_t> const v_L = {'[', '#', 'i', 2, 'L', 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x7F, 'L', 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F};
+ std::vector<uint8_t> const v_M = {'[', '#', 'i', 2, 'M', 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6,
+ 0xE0, 0x8D, 'M', 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D};
+ std::vector<uint8_t> const v_D = {'[', '#', 'i', 2, 'D', 0x4a, 0xd8, 0x12, 0x4d, 0xfb, 0x21,
+ 0x09, 0x40, 'D', 0x4a, 0xd8, 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40};
std::vector<uint8_t> const v_S = {'[', '#', 'i', 2, 'S', 'i', 1, 'a', 'S', 'i', 1, 'a'};
std::vector<uint8_t> const v_C = {'[', '#', 'i', 2, 'C', 'a', 'C', 'a'};
@@ -2445,9 +2308,12 @@
std::vector<uint8_t> const v_u = {'[', '$', 'u', '#', 'i', 2, 0x0F, 0xA7, 0x0F, 0xA7};
std::vector<uint8_t> const v_l = {'[', '$', 'l', '#', 'i', 2, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F};
std::vector<uint8_t> const v_m = {'[', '$', 'm', '#', 'i', 2, 0xFF, 0xC9, 0x9A, 0xBB, 0xFF, 0xC9, 0x9A, 0xBB};
- std::vector<uint8_t> const v_L = {'[', '$', 'L', '#', 'i', 2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F};
- std::vector<uint8_t> const v_M = {'[', '$', 'M', '#', 'i', 2, 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D, 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D};
- std::vector<uint8_t> const v_D = {'[', '$', 'D', '#', 'i', 2, 0x4a, 0xd8, 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40, 0x4a, 0xd8, 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40};
+ std::vector<uint8_t> const v_L = {'[', '$', 'L', '#', 'i', 2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F};
+ std::vector<uint8_t> const v_M = {'[', '$', 'M', '#', 'i', 2, 0xFF, 0xFF, 0x63, 0xA7, 0xB3,
+ 0xB6, 0xE0, 0x8D, 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D};
+ std::vector<uint8_t> const v_D = {'[', '$', 'D', '#', 'i', 2, 0x4a, 0xd8, 0x12, 0x4d, 0xfb,
+ 0x21, 0x09, 0x40, 0x4a, 0xd8, 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40};
std::vector<uint8_t> const v_S = {'[', '#', 'i', 2, 'S', 'i', 1, 'a', 'S', 'i', 1, 'a'};
std::vector<uint8_t> const v_C = {'[', '$', 'C', '#', 'i', 2, 'a', 'a'};
@@ -2490,9 +2356,12 @@
std::vector<uint8_t> const v_u = {'[', '$', 'u', '#', '[', '$', 'i', '#', 'i', 2, 1, 2, 0x0F, 0xA7, 0x0F, 0xA7};
std::vector<uint8_t> const v_l = {'[', '$', 'l', '#', '[', '$', 'i', '#', 'i', 2, 1, 2, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F};
std::vector<uint8_t> const v_m = {'[', '$', 'm', '#', '[', '$', 'i', '#', 'i', 2, 1, 2, 0xFF, 0xC9, 0x9A, 0xBB, 0xFF, 0xC9, 0x9A, 0xBB};
- std::vector<uint8_t> const v_L = {'[', '$', 'L', '#', '[', '$', 'i', '#', 'i', 2, 1, 2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F};
- std::vector<uint8_t> const v_M = {'[', '$', 'M', '#', '[', '$', 'i', '#', 'i', 2, 1, 2, 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D, 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D};
- std::vector<uint8_t> const v_D = {'[', '$', 'D', '#', '[', '$', 'i', '#', 'i', 2, 1, 2, 0x4a, 0xd8, 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40, 0x4a, 0xd8, 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40};
+ std::vector<uint8_t> const v_L = {'[', '$', 'L', '#', '[', '$', 'i', '#', 'i', 2, 1, 2, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F};
+ std::vector<uint8_t> const v_M = {'[', '$', 'M', '#', '[', '$', 'i', '#', 'i', 2, 1, 2, 0xFF, 0xFF,
+ 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D, 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D};
+ std::vector<uint8_t> const v_D = {'[', '$', 'D', '#', '[', '$', 'i', '#', 'i', 2, 1, 2, 0x4a, 0xd8,
+ 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40, 0x4a, 0xd8, 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40};
std::vector<uint8_t> const v_S = {'[', '#', '[', '$', 'i', '#', 'i', 2, 1, 2, 'S', 'i', 1, 'a', 'S', 'i', 1, 'a'};
std::vector<uint8_t> const v_C = {'[', '$', 'C', '#', '[', '$', 'i', '#', 'i', 2, 1, 2, 'a', 'a'};
@@ -2518,14 +2387,28 @@
std::vector<uint8_t> const v_e = {'[', '$', 'U', '#', '[', '$', 'i', '#', 'i', 2, 2, 1, 0xFE, 0xFF};
std::vector<uint8_t> const v_U = {'[', '$', 'U', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
std::vector<uint8_t> const v_i = {'[', '$', 'i', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06};
- std::vector<uint8_t> const v_u = {'[', '$', 'u', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00};
- std::vector<uint8_t> const v_I = {'[', '$', 'I', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00};
- std::vector<uint8_t> const v_m = {'[', '$', 'm', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00};
- std::vector<uint8_t> const v_l = {'[', '$', 'l', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00};
- std::vector<uint8_t> const v_M = {'[', '$', 'M', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
- std::vector<uint8_t> const v_L = {'[', '$', 'L', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
- std::vector<uint8_t> const v_d = {'[', '$', 'd', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0xA0, 0x40, 0x00, 0x00, 0xC0, 0x40};
- std::vector<uint8_t> const v_D = {'[', '$', 'D', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x40};
+ std::vector<uint8_t> const v_u = {'[', '$', 'u', '#', '[', '$', 'i', '#', 'i', 2, 2, 3,
+ 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00};
+ std::vector<uint8_t> const v_I = {'[', '$', 'I', '#', '[', '$', 'i', '#', 'i', 2, 2, 3,
+ 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00};
+ std::vector<uint8_t> const v_m = {'[', '$', 'm', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00};
+ std::vector<uint8_t> const v_l = {'[', '$', 'l', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00};
+ std::vector<uint8_t> const v_M = {'[', '$', 'M', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ std::vector<uint8_t> const v_L = {'[', '$', 'L', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ std::vector<uint8_t> const v_d = {'[', '$', 'd', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 0x00, 0x00, 0x80, 0x3F, 0x00, 0x00,
+ 0x00, 0x40, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0xA0, 0x40, 0x00, 0x00, 0xC0, 0x40};
+ std::vector<uint8_t> const v_D = {'[', '$', 'D', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x08, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x40};
std::vector<uint8_t> const v_C = {'[', '$', 'C', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 'a', 'b', 'c', 'd', 'e', 'f'};
// check if vector is parsed correctly
@@ -2569,9 +2452,12 @@
std::vector<uint8_t> const v_u = {'[', '$', 'u', '#', '[', 'i', 1, 'i', 2, ']', 0x0F, 0xA7, 0x0F, 0xA7};
std::vector<uint8_t> const v_l = {'[', '$', 'l', '#', '[', 'i', 1, 'i', 2, ']', 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F};
std::vector<uint8_t> const v_m = {'[', '$', 'm', '#', '[', 'i', 1, 'i', 2, ']', 0xFF, 0xC9, 0x9A, 0xBB, 0xFF, 0xC9, 0x9A, 0xBB};
- std::vector<uint8_t> const v_L = {'[', '$', 'L', '#', '[', 'i', 1, 'i', 2, ']', 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F};
- std::vector<uint8_t> const v_M = {'[', '$', 'M', '#', '[', 'i', 1, 'i', 2, ']', 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D, 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D};
- std::vector<uint8_t> const v_D = {'[', '$', 'D', '#', '[', 'i', 1, 'i', 2, ']', 0x4a, 0xd8, 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40, 0x4a, 0xd8, 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40};
+ std::vector<uint8_t> const v_L = {'[', '$', 'L', '#', '[', 'i', 1, 'i', 2, ']', 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F};
+ std::vector<uint8_t> const v_M = {'[', '$', 'M', '#', '[', 'i', 1, 'i', 2, ']', 0xFF, 0xFF, 0x63,
+ 0xA7, 0xB3, 0xB6, 0xE0, 0x8D, 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D};
+ std::vector<uint8_t> const v_D = {'[', '$', 'D', '#', '[', 'i', 1, 'i', 2, ']', 0x4a, 0xd8, 0x12,
+ 0x4d, 0xfb, 0x21, 0x09, 0x40, 0x4a, 0xd8, 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40};
std::vector<uint8_t> const v_S = {'[', '#', '[', 'i', 1, 'i', 2, ']', 'S', 'i', 1, 'a', 'S', 'i', 1, 'a'};
std::vector<uint8_t> const v_C = {'[', '$', 'C', '#', '[', 'i', 1, 'i', 2, ']', 'a', 'a'};
std::vector<uint8_t> const v_R = {'[', '#', '[', 'i', 2, ']', 'i', 6, 'U', 7};
@@ -2602,9 +2488,12 @@
std::vector<uint8_t> const v_u = {'[', '$', 'u', '#', '[', '#', 'i', 2, 'i', 1, 'i', 2, 0x0F, 0xA7, 0x0F, 0xA7};
std::vector<uint8_t> const v_l = {'[', '$', 'l', '#', '[', '#', 'i', 2, 'i', 1, 'i', 2, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F};
std::vector<uint8_t> const v_m = {'[', '$', 'm', '#', '[', '#', 'i', 2, 'i', 1, 'i', 2, 0xFF, 0xC9, 0x9A, 0xBB, 0xFF, 0xC9, 0x9A, 0xBB};
- std::vector<uint8_t> const v_L = {'[', '$', 'L', '#', '[', '#', 'i', 2, 'i', 1, 'i', 2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F};
- std::vector<uint8_t> const v_M = {'[', '$', 'M', '#', '[', '#', 'i', 2, 'i', 1, 'i', 2, 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D, 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D};
- std::vector<uint8_t> const v_D = {'[', '$', 'D', '#', '[', '#', 'i', 2, 'i', 1, 'i', 2, 0x4a, 0xd8, 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40, 0x4a, 0xd8, 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40};
+ std::vector<uint8_t> const v_L = {'[', '$', 'L', '#', '[', '#', 'i', 2, 'i', 1, 'i', 2, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F};
+ std::vector<uint8_t> const v_M = {'[', '$', 'M', '#', '[', '#', 'i', 2, 'i', 1, 'i', 2, 0xFF, 0xFF,
+ 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D, 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D};
+ std::vector<uint8_t> const v_D = {'[', '$', 'D', '#', '[', '#', 'i', 2, 'i', 1, 'i', 2, 0x4a, 0xd8,
+ 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40, 0x4a, 0xd8, 0x12, 0x4d, 0xfb, 0x21, 0x09, 0x40};
std::vector<uint8_t> const v_S = {'[', '#', '[', '#', 'i', 2, 'i', 1, 'i', 2, 'S', 'i', 1, 'a', 'S', 'i', 1, 'a'};
std::vector<uint8_t> const v_C = {'[', '$', 'C', '#', '[', '#', 'i', 2, 'i', 1, 'i', 2, 'a', 'a'};
@@ -2651,14 +2540,18 @@
{
std::vector<uint8_t> const v = {'C'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing BJData char: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing BJData char: unexpected end of input",
+ json::parse_error&);
}
SECTION("byte out of range")
{
std::vector<uint8_t> const v = {'C', 130};
json _;
- CHECK_THROWS_WITH(_ = json::from_bjdata(v), "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing BJData char: byte after 'C' must be in range 0x00..0x7F; last byte: 0x82");
+ CHECK_THROWS_WITH(
+ _ = json::from_bjdata(v),
+ "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing BJData char: byte after 'C' must be in range 0x00..0x7F; last byte: 0x82");
}
}
@@ -2668,14 +2561,19 @@
{
std::vector<uint8_t> const v = {'S'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing BJData value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing BJData value: unexpected end of input",
+ json::parse_error&);
}
SECTION("invalid byte")
{
std::vector<uint8_t> const v = {'S', '1', 'a'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v), "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing BJData string: expected length type specification (U, i, u, I, m, l, M, L); last byte: 0x31", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v),
+ "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing BJData string: expected length type specification (U, i, u, I, m, l, M, L); last byte: 0x31",
+ json::parse_error&);
}
SECTION("parse bjdata markers in ubjson")
@@ -2687,9 +2585,18 @@
json _;
// check if string is parsed correctly to "a"
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(s_u), "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON string: expected length type specification (U, i, I, l, L); last byte: 0x75", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(s_m), "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON string: expected length type specification (U, i, I, l, L); last byte: 0x6D", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(s_M), "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON string: expected length type specification (U, i, I, l, L); last byte: 0x4D", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_ubjson(s_u),
+ "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON string: expected length type specification (U, i, I, l, L); last byte: 0x75",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_ubjson(s_m),
+ "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON string: expected length type specification (U, i, I, l, L); last byte: 0x6D",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_ubjson(s_M),
+ "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON string: expected length type specification (U, i, I, l, L); last byte: 0x4D",
+ json::parse_error&);
}
}
@@ -2699,7 +2606,10 @@
{
std::vector<uint8_t> const v = {'[', '$', 'i', 2};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v), "[json.exception.parse_error.112] parse error at byte 4: syntax error while parsing BJData size: expected '#' after type information; last byte: 0x02", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v),
+ "[json.exception.parse_error.112] parse error at byte 4: syntax error while parsing BJData size: expected '#' after type information; last byte: 0x02",
+ json::parse_error&);
}
SECTION("optimized array: negative size")
@@ -2718,44 +2628,79 @@
std::vector<uint8_t> const vMX = {'[', '$', 'U', '#', '[', 'M', 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 'U', 0x01, ']'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v1), "[json.exception.parse_error.113] parse error at byte 4: syntax error while parsing BJData size: count in an optimized container must be positive", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v1),
+ "[json.exception.parse_error.113] parse error at byte 4: syntax error while parsing BJData size: count in an optimized container must be positive",
+ json::parse_error&);
CHECK(json::from_bjdata(v1, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v2), "[json.exception.parse_error.113] parse error at byte 6: syntax error while parsing BJData size: count in an optimized container must be positive", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v2),
+ "[json.exception.parse_error.113] parse error at byte 6: syntax error while parsing BJData size: count in an optimized container must be positive",
+ json::parse_error&);
CHECK(json::from_bjdata(v2, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v3), "[json.exception.parse_error.113] parse error at byte 7: syntax error while parsing BJData size: count in an optimized container must be positive", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v3),
+ "[json.exception.parse_error.113] parse error at byte 7: syntax error while parsing BJData size: count in an optimized container must be positive",
+ json::parse_error&);
CHECK(json::from_bjdata(v3, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v4), "[json.exception.parse_error.113] parse error at byte 6: syntax error while parsing BJData size: count in an optimized container must be positive", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v4),
+ "[json.exception.parse_error.113] parse error at byte 6: syntax error while parsing BJData size: count in an optimized container must be positive",
+ json::parse_error&);
CHECK(json::from_bjdata(v4, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v5), "[json.exception.parse_error.113] parse error at byte 7: syntax error while parsing BJData size: count in an optimized container must be positive", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v5),
+ "[json.exception.parse_error.113] parse error at byte 7: syntax error while parsing BJData size: count in an optimized container must be positive",
+ json::parse_error&);
CHECK(json::from_bjdata(v5, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v6), "[json.exception.parse_error.113] parse error at byte 5: syntax error while parsing BJData size: count in an optimized container must be positive", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v6),
+ "[json.exception.parse_error.113] parse error at byte 5: syntax error while parsing BJData size: count in an optimized container must be positive",
+ json::parse_error&);
CHECK(json::from_bjdata(v6, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vI), "[json.exception.parse_error.113] parse error at byte 5: syntax error while parsing BJData size: count in an optimized container must be positive", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vI),
+ "[json.exception.parse_error.113] parse error at byte 5: syntax error while parsing BJData size: count in an optimized container must be positive",
+ json::parse_error&);
CHECK(json::from_bjdata(vI, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vl), "[json.exception.parse_error.113] parse error at byte 7: syntax error while parsing BJData size: count in an optimized container must be positive", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vl),
+ "[json.exception.parse_error.113] parse error at byte 7: syntax error while parsing BJData size: count in an optimized container must be positive",
+ json::parse_error&);
CHECK(json::from_bjdata(vl, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vL), "[json.exception.parse_error.113] parse error at byte 11: syntax error while parsing BJData size: count in an optimized container must be positive", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vL),
+ "[json.exception.parse_error.113] parse error at byte 11: syntax error while parsing BJData size: count in an optimized container must be positive",
+ json::parse_error&);
CHECK(json::from_bjdata(vL, true, false).is_discarded());
#if SIZE_MAX != 0xffffffff
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vM), "[json.exception.out_of_range.408] syntax error while parsing BJData size: excessive ndarray size caused overflow", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vM),
+ "[json.exception.out_of_range.408] syntax error while parsing BJData size: excessive ndarray size caused overflow",
+ json::out_of_range&);
#else
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vM), "[json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vM),
+ "[json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow",
+ json::out_of_range&);
#endif
CHECK(json::from_bjdata(vM, true, false).is_discarded());
#if SIZE_MAX != 0xffffffff
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vMX), "[json.exception.out_of_range.408] syntax error while parsing BJData size: excessive ndarray size caused overflow", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vMX),
+ "[json.exception.out_of_range.408] syntax error while parsing BJData size: excessive ndarray size caused overflow",
+ json::out_of_range&);
#else
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vMX), "[json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vMX),
+ "[json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow",
+ json::out_of_range&);
#endif
CHECK(json::from_bjdata(vMX, true, false).is_discarded());
}
@@ -2767,9 +2712,13 @@
std::vector<uint8_t> const vM = {'[', '$', 'M', '#', '[', 'I', 0x00, 0x20, 'M', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, ']'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vL), "[json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vL),
+ "[json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow",
+ json::out_of_range&);
CHECK(json::from_bjdata(vL, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vM), "[json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vM),
+ "[json.exception.out_of_range.408] syntax error while parsing BJData size: integer value overflow",
+ json::out_of_range&);
CHECK(json::from_bjdata(vM, true, false).is_discarded());
#endif
}
@@ -2782,16 +2731,28 @@
std::vector<uint8_t> const v_F = {'[', '$', 'F', '#', '[', '#', 'i', 2, 'i', 1, 'i', 2};
std::vector<uint8_t> const v_Z = {'[', '$', 'Z', '#', '[', '#', 'i', 2, 'i', 1, 'i', 2};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v_N), "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x4E is not a permitted optimized array type", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v_N),
+ "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x4E is not a permitted optimized array type",
+ json::parse_error&);
CHECK(json::from_bjdata(v_N, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v_T), "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x54 is not a permitted optimized array type", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v_T),
+ "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x54 is not a permitted optimized array type",
+ json::parse_error&);
CHECK(json::from_bjdata(v_T, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v_F), "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x46 is not a permitted optimized array type", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v_F),
+ "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x46 is not a permitted optimized array type",
+ json::parse_error&);
CHECK(json::from_bjdata(v_F, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v_Z), "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x5A is not a permitted optimized array type", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v_Z),
+ "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x5A is not a permitted optimized array type",
+ json::parse_error&);
CHECK(json::from_bjdata(v_Z, true, false).is_discarded());
}
@@ -2803,16 +2764,28 @@
std::vector<uint8_t> const v_F = {'[', '$', 'F', '#', '[', 'i', 1, 'i', 2, ']'};
std::vector<uint8_t> const v_Z = {'[', '$', 'Z', '#', '[', 'i', 1, 'i', 2, ']'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v_N), "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x4E is not a permitted optimized array type", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v_N),
+ "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x4E is not a permitted optimized array type",
+ json::parse_error&);
CHECK(json::from_bjdata(v_N, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v_T), "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x54 is not a permitted optimized array type", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v_T),
+ "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x54 is not a permitted optimized array type",
+ json::parse_error&);
CHECK(json::from_bjdata(v_T, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v_F), "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x46 is not a permitted optimized array type", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v_F),
+ "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x46 is not a permitted optimized array type",
+ json::parse_error&);
CHECK(json::from_bjdata(v_F, true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v_Z), "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x5A is not a permitted optimized array type", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v_Z),
+ "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x5A is not a permitted optimized array type",
+ json::parse_error&);
CHECK(json::from_bjdata(v_Z, true, false).is_discarded());
}
}
@@ -2821,15 +2794,21 @@
{
std::vector<uint8_t> const vS = {'S'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vS), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing BJData value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vS),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing BJData value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vS, true, false).is_discarded());
std::vector<uint8_t> const v = {'S', 'i', '2', 'a'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v), "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing BJData string: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v),
+ "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing BJData string: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(v, true, false).is_discarded());
std::vector<uint8_t> const vC = {'C'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vC), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing BJData char: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vC),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing BJData char: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vC, true, false).is_discarded());
}
@@ -2837,39 +2816,57 @@
{
std::vector<uint8_t> const vU = {'[', '#', 'U'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vU), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vU),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vU, true, false).is_discarded());
std::vector<uint8_t> const vi = {'[', '#', 'i'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vi), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vi),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vi, true, false).is_discarded());
std::vector<uint8_t> const vI = {'[', '#', 'I'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vI), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vI),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vI, true, false).is_discarded());
std::vector<uint8_t> const vu = {'[', '#', 'u'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vu), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vu),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vu, true, false).is_discarded());
std::vector<uint8_t> const vl = {'[', '#', 'l'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vl), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vl),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vl, true, false).is_discarded());
std::vector<uint8_t> const vm = {'[', '#', 'm'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vm), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vm),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vm, true, false).is_discarded());
std::vector<uint8_t> const vL = {'[', '#', 'L'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vL), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vL),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vL, true, false).is_discarded());
std::vector<uint8_t> const vM = {'[', '#', 'M'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vM), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vM),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vM, true, false).is_discarded());
std::vector<uint8_t> const v0 = {'[', '#', 'T', ']'};
- CHECK_THROWS_WITH(_ = json::from_bjdata(v0), "[json.exception.parse_error.113] parse error at byte 3: syntax error while parsing BJData size: expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0x54");
+ CHECK_THROWS_WITH(
+ _ = json::from_bjdata(v0),
+ "[json.exception.parse_error.113] parse error at byte 3: syntax error while parsing BJData size: expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0x54");
CHECK(json::from_bjdata(v0, true, false).is_discarded());
}
@@ -2877,19 +2874,31 @@
{
json _;
std::vector<uint8_t> const vu = {'[', '#', 'u'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vu), "[json.exception.parse_error.113] parse error at byte 3: syntax error while parsing UBJSON size: expected length type specification (U, i, I, l, L) after '#'; last byte: 0x75", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_ubjson(vu),
+ "[json.exception.parse_error.113] parse error at byte 3: syntax error while parsing UBJSON size: expected length type specification (U, i, I, l, L) after '#'; last byte: 0x75",
+ json::parse_error&);
CHECK(json::from_ubjson(vu, true, false).is_discarded());
std::vector<uint8_t> const vm = {'[', '#', 'm'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vm), "[json.exception.parse_error.113] parse error at byte 3: syntax error while parsing UBJSON size: expected length type specification (U, i, I, l, L) after '#'; last byte: 0x6D", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_ubjson(vm),
+ "[json.exception.parse_error.113] parse error at byte 3: syntax error while parsing UBJSON size: expected length type specification (U, i, I, l, L) after '#'; last byte: 0x6D",
+ json::parse_error&);
CHECK(json::from_ubjson(vm, true, false).is_discarded());
std::vector<uint8_t> const vM = {'[', '#', 'M'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vM), "[json.exception.parse_error.113] parse error at byte 3: syntax error while parsing UBJSON size: expected length type specification (U, i, I, l, L) after '#'; last byte: 0x4D", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_ubjson(vM),
+ "[json.exception.parse_error.113] parse error at byte 3: syntax error while parsing UBJSON size: expected length type specification (U, i, I, l, L) after '#'; last byte: 0x4D",
+ json::parse_error&);
CHECK(json::from_ubjson(vM, true, false).is_discarded());
std::vector<uint8_t> const v0 = {'[', '#', '['};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v0), "[json.exception.parse_error.113] parse error at byte 3: syntax error while parsing UBJSON size: expected length type specification (U, i, I, l, L) after '#'; last byte: 0x5B", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_ubjson(v0),
+ "[json.exception.parse_error.113] parse error at byte 3: syntax error while parsing UBJSON size: expected length type specification (U, i, I, l, L) after '#'; last byte: 0x5B",
+ json::parse_error&);
CHECK(json::from_ubjson(v0, true, false).is_discarded());
}
@@ -2897,19 +2906,28 @@
{
std::vector<uint8_t> const v0 = {'[', '$'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v0), "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing BJData type: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v0),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing BJData type: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(v0, true, false).is_discarded());
std::vector<uint8_t> const vi = {'[', '$', '#'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vi), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vi),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vi, true, false).is_discarded());
std::vector<uint8_t> const vU = {'[', '$', 'U'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vU), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vU),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing BJData value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vU, true, false).is_discarded());
std::vector<uint8_t> const v1 = {'[', '$', '['};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v1), "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x5B is not a permitted optimized array type", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v1),
+ "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x5B is not a permitted optimized array type",
+ json::parse_error&);
CHECK(json::from_bjdata(v1, true, false).is_discarded());
}
@@ -2917,15 +2935,21 @@
{
std::vector<uint8_t> const vST = {'[', '$', 'i', '#', 'i', 2, 1};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vST), "[json.exception.parse_error.110] parse error at byte 8: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vST),
+ "[json.exception.parse_error.110] parse error at byte 8: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vST, true, false).is_discarded());
std::vector<uint8_t> const vS = {'[', '#', 'i', 2, 'i', 1};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vS), "[json.exception.parse_error.110] parse error at byte 7: syntax error while parsing BJData value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vS),
+ "[json.exception.parse_error.110] parse error at byte 7: syntax error while parsing BJData value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vS, true, false).is_discarded());
std::vector<uint8_t> const v = {'[', 'i', 2, 'i', 1};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v), "[json.exception.parse_error.110] parse error at byte 6: syntax error while parsing BJData value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v),
+ "[json.exception.parse_error.110] parse error at byte 6: syntax error while parsing BJData value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(v, true, false).is_discarded());
}
@@ -2933,43 +2957,65 @@
{
std::vector<uint8_t> const vST = {'[', '$', 'i', '#', '[', '$', 'i', '#'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vST), "[json.exception.parse_error.113] parse error at byte 9: syntax error while parsing BJData size: expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0xFF", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vST),
+ "[json.exception.parse_error.113] parse error at byte 9: syntax error while parsing BJData size: expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0xFF",
+ json::parse_error&);
CHECK(json::from_bjdata(vST, true, false).is_discarded());
std::vector<uint8_t> const v = {'[', '$', 'i', '#', '[', '$', 'i', '#', 'i', 2, 1, 2};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v), "[json.exception.parse_error.110] parse error at byte 13: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v),
+ "[json.exception.parse_error.110] parse error at byte 13: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(v, true, false).is_discarded());
std::vector<uint8_t> const vS0 = {'[', '$', 'i', '#', '[', '$', 'i', '#', 'i', 2, 1};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vS0), "[json.exception.parse_error.110] parse error at byte 12: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vS0),
+ "[json.exception.parse_error.110] parse error at byte 12: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vS0, true, false).is_discarded());
std::vector<uint8_t> const vS = {'[', '$', 'i', '#', '[', '#', 'i', 2, 1, 2, 1};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vS), "[json.exception.parse_error.113] parse error at byte 9: syntax error while parsing BJData size: expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0x01", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vS),
+ "[json.exception.parse_error.113] parse error at byte 9: syntax error while parsing BJData size: expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0x01",
+ json::parse_error&);
CHECK(json::from_bjdata(vS, true, false).is_discarded());
std::vector<uint8_t> const vT = {'[', '$', 'i', '#', '[', 'i', 2, 'i'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vT), "[json.exception.parse_error.110] parse error at byte 9: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vT),
+ "[json.exception.parse_error.110] parse error at byte 9: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vT, true, false).is_discarded());
std::vector<uint8_t> const vT0 = {'[', '$', 'i', '#', '[', 'i'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vT0), "[json.exception.parse_error.110] parse error at byte 7: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vT0),
+ "[json.exception.parse_error.110] parse error at byte 7: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vT0, true, false).is_discarded());
std::vector<uint8_t> const vu = {'[', '$', 'i', '#', '[', '$', 'i', '#', 'u', 1, 0};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vu), "[json.exception.parse_error.110] parse error at byte 12: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vu),
+ "[json.exception.parse_error.110] parse error at byte 12: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vu, true, false).is_discarded());
std::vector<uint8_t> const vm = {'[', '$', 'i', '#', '[', '$', 'i', '#', 'm', 1, 0, 0, 0};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vm), "[json.exception.parse_error.110] parse error at byte 14: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vm),
+ "[json.exception.parse_error.110] parse error at byte 14: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vm, true, false).is_discarded());
std::vector<uint8_t> const vM = {'[', '$', 'i', '#', '[', '$', 'i', '#', 'M', 1, 0, 0, 0, 0, 0, 0, 0};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vM), "[json.exception.parse_error.110] parse error at byte 18: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vM),
+ "[json.exception.parse_error.110] parse error at byte 18: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vM, true, false).is_discarded());
std::vector<uint8_t> const vU = {'[', '$', 'U', '#', '[', '$', 'i', '#', 'i', 2, 2, 3, 1, 2, 3, 4, 5};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vU), "[json.exception.parse_error.110] parse error at byte 18: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vU),
+ "[json.exception.parse_error.110] parse error at byte 18: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vU, true, false).is_discarded());
std::vector<uint8_t> const vT1 = {'[', '$', 'T', '#', '[', '$', 'i', '#', 'i', 2, 2, 3};
@@ -2979,39 +3025,65 @@
CHECK(json::from_bjdata(vh, true, false).is_discarded());
std::vector<uint8_t> const vR = {'[', '$', 'i', '#', '[', 'i', 1, '[', ']', ']', 1};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vR), "[json.exception.parse_error.113] parse error at byte 8: syntax error while parsing BJData size: ndarray dimensional vector is not allowed", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vR),
+ "[json.exception.parse_error.113] parse error at byte 8: syntax error while parsing BJData size: ndarray dimensional vector is not allowed",
+ json::parse_error&);
CHECK(json::from_bjdata(vR, true, false).is_discarded());
std::vector<uint8_t> const vRo = {'[', '$', 'i', '#', '[', 'i', 0, '{', '}', ']', 1};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vRo), "[json.exception.parse_error.113] parse error at byte 8: syntax error while parsing BJData size: expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0x7B", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vRo),
+ "[json.exception.parse_error.113] parse error at byte 8: syntax error while parsing BJData size: expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0x7B",
+ json::parse_error&);
CHECK(json::from_bjdata(vRo, true, false).is_discarded());
std::vector<uint8_t> const vR1 = {'[', '$', 'i', '#', '[', '[', 'i', 1, ']', ']', 1};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vR1), "[json.exception.parse_error.113] parse error at byte 6: syntax error while parsing BJData size: ndarray dimensional vector is not allowed", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vR1),
+ "[json.exception.parse_error.113] parse error at byte 6: syntax error while parsing BJData size: ndarray dimensional vector is not allowed",
+ json::parse_error&);
CHECK(json::from_bjdata(vR1, true, false).is_discarded());
std::vector<uint8_t> const vR2 = {'[', '$', 'i', '#', '[', '#', '[', 'i', 1, ']', ']', 1};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vR2), "[json.exception.parse_error.113] parse error at byte 11: syntax error while parsing BJData size: expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0x5D", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vR2),
+ "[json.exception.parse_error.113] parse error at byte 11: syntax error while parsing BJData size: expected length type specification (U, i, u, I, m, l, M, L) after '#'; last byte: 0x5D",
+ json::parse_error&);
CHECK(json::from_bjdata(vR2, true, false).is_discarded());
std::vector<uint8_t> const vR3 = {'[', '#', '[', 'i', '2', 'i', 2, ']'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vR3), "[json.exception.parse_error.112] parse error at byte 8: syntax error while parsing BJData size: ndarray requires both type and size", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vR3),
+ "[json.exception.parse_error.112] parse error at byte 8: syntax error while parsing BJData size: ndarray requires both type and size",
+ json::parse_error&);
CHECK(json::from_bjdata(vR3, true, false).is_discarded());
std::vector<uint8_t> const vR4 = {'[', '$', 'i', '#', '[', '$', 'i', '#', '[', 'i', 1, ']', 1};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vR4), "[json.exception.parse_error.110] parse error at byte 14: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vR4),
+ "[json.exception.parse_error.110] parse error at byte 14: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vR4, true, false).is_discarded());
std::vector<uint8_t> const vR5 = {'[', '$', 'i', '#', '[', '[', '[', ']', ']', ']'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vR5), "[json.exception.parse_error.113] parse error at byte 6: syntax error while parsing BJData size: ndarray dimensional vector is not allowed", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vR5),
+ "[json.exception.parse_error.113] parse error at byte 6: syntax error while parsing BJData size: ndarray dimensional vector is not allowed",
+ json::parse_error&);
CHECK(json::from_bjdata(vR5, true, false).is_discarded());
std::vector<uint8_t> const vR6 = {'[', '$', 'i', '#', '[', '$', 'i', '#', '[', 'i', '2', 'i', 2, ']'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vR6), "[json.exception.parse_error.112] parse error at byte 14: syntax error while parsing BJData size: ndarray can not be recursive", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vR6),
+ "[json.exception.parse_error.112] parse error at byte 14: syntax error while parsing BJData size: ndarray can not be recursive",
+ json::parse_error&);
CHECK(json::from_bjdata(vR6, true, false).is_discarded());
std::vector<uint8_t> const vH = {'[', 'H', '[', '#', '[', '$', 'i', '#', '[', 'i', '2', 'i', 2, ']'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vH), "[json.exception.parse_error.113] parse error at byte 3: syntax error while parsing BJData size: ndarray dimensional vector is not allowed", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vH),
+ "[json.exception.parse_error.113] parse error at byte 3: syntax error while parsing BJData size: ndarray dimensional vector is not allowed",
+ json::parse_error&);
CHECK(json::from_bjdata(vH, true, false).is_discarded());
}
@@ -3019,43 +3091,65 @@
{
std::vector<uint8_t> const vST = {'{', '$', 'i', '#', 'i', 2, 'i', 1, 'a', 1};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vST), "[json.exception.parse_error.110] parse error at byte 11: syntax error while parsing BJData value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vST),
+ "[json.exception.parse_error.110] parse error at byte 11: syntax error while parsing BJData value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vST, true, false).is_discarded());
std::vector<uint8_t> const vT = {'{', '$', 'i', 'i', 1, 'a', 1};
- CHECK_THROWS_WITH(_ = json::from_bjdata(vT), "[json.exception.parse_error.112] parse error at byte 4: syntax error while parsing BJData size: expected '#' after type information; last byte: 0x69");
+ CHECK_THROWS_WITH(
+ _ = json::from_bjdata(vT),
+ "[json.exception.parse_error.112] parse error at byte 4: syntax error while parsing BJData size: expected '#' after type information; last byte: 0x69");
CHECK(json::from_bjdata(vT, true, false).is_discarded());
std::vector<uint8_t> const vS = {'{', '#', 'i', 2, 'i', 1, 'a', 'i', 1};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vS), "[json.exception.parse_error.110] parse error at byte 10: syntax error while parsing BJData value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vS),
+ "[json.exception.parse_error.110] parse error at byte 10: syntax error while parsing BJData value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vS, true, false).is_discarded());
std::vector<uint8_t> const v = {'{', 'i', 1, 'a', 'i', 1};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v), "[json.exception.parse_error.110] parse error at byte 7: syntax error while parsing BJData value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v),
+ "[json.exception.parse_error.110] parse error at byte 7: syntax error while parsing BJData value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(v, true, false).is_discarded());
std::vector<uint8_t> const v2 = {'{', 'i', 1, 'a', 'i', 1, 'i'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v2), "[json.exception.parse_error.110] parse error at byte 8: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v2),
+ "[json.exception.parse_error.110] parse error at byte 8: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(v2, true, false).is_discarded());
std::vector<uint8_t> const v3 = {'{', 'i', 1, 'a'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v3), "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing BJData value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v3),
+ "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing BJData value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(v3, true, false).is_discarded());
std::vector<uint8_t> const vST1 = {'{', '$', 'd', '#', 'i', 2, 'i', 1, 'a'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vST1), "[json.exception.parse_error.110] parse error at byte 10: syntax error while parsing BJData number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vST1),
+ "[json.exception.parse_error.110] parse error at byte 10: syntax error while parsing BJData number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vST1, true, false).is_discarded());
std::vector<uint8_t> const vST2 = {'{', '#', 'i', 2, 'i', 1, 'a'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vST2), "[json.exception.parse_error.110] parse error at byte 8: syntax error while parsing BJData value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vST2),
+ "[json.exception.parse_error.110] parse error at byte 8: syntax error while parsing BJData value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bjdata(vST2, true, false).is_discarded());
std::vector<uint8_t> const vO = {'{', '#', '[', 'i', 2, 'i', 1, ']', 'i', 1, 'a', 'i', 1, 'i', 1, 'b', 'i', 2};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vO), "[json.exception.parse_error.112] parse error at byte 8: syntax error while parsing BJData size: ndarray requires both type and size", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vO),
+ "[json.exception.parse_error.112] parse error at byte 8: syntax error while parsing BJData size: ndarray requires both type and size",
+ json::parse_error&);
CHECK(json::from_bjdata(vO, true, false).is_discarded());
std::vector<uint8_t> const vO2 = {'{', '$', 'i', '#', '[', 'i', 2, 'i', 1, ']', 'i', 1, 'a', 1, 'i', 1, 'b', 2};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(vO2), "[json.exception.parse_error.112] parse error at byte 10: syntax error while parsing BJData object: BJData object does not support ND-array size in optimized format", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(vO2),
+ "[json.exception.parse_error.112] parse error at byte 10: syntax error while parsing BJData object: BJData object does not support ND-array size in optimized format",
+ json::parse_error&);
CHECK(json::from_bjdata(vO2, true, false).is_discarded());
}
}
@@ -3109,7 +3203,8 @@
SECTION("array of L")
{
json const j = {5000000000, -5000000000};
- std::vector<uint8_t> const expected = {'[', '$', 'L', '#', 'i', 2, 0x00, 0xF2, 0x05, 0x2A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0E, 0xFA, 0xD5, 0xFE, 0xFF, 0xFF, 0xFF};
+ std::vector<uint8_t> const expected = {'[', '$', 'L', '#', 'i', 2, 0x00, 0xF2, 0x05, 0x2A, 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x0E, 0xFA, 0xD5, 0xFE, 0xFF, 0xFF, 0xFF};
CHECK(json::to_bjdata(j, true, true) == expected);
}
}
@@ -3173,8 +3268,10 @@
SECTION("array of L")
{
json const j = {5000000000u, 5000000001u};
- std::vector<uint8_t> const expected = {'[', '$', 'L', '#', 'i', 2, 0x00, 0xF2, 0x05, 0x2A, 0x01, 0x00, 0x00, 0x00, 0x01, 0xF2, 0x05, 0x2A, 0x01, 0x00, 0x00, 0x00};
- std::vector<uint8_t> const expected_size = {'[', '#', 'i', 2, 'L', 0x00, 0xF2, 0x05, 0x2A, 0x01, 0x00, 0x00, 0x00, 'L', 0x01, 0xF2, 0x05, 0x2A, 0x01, 0x00, 0x00, 0x00};
+ std::vector<uint8_t> const expected = {'[', '$', 'L', '#', 'i', 2, 0x00, 0xF2, 0x05, 0x2A, 0x01,
+ 0x00, 0x00, 0x00, 0x01, 0xF2, 0x05, 0x2A, 0x01, 0x00, 0x00, 0x00};
+ std::vector<uint8_t> const expected_size = {'[', '#', 'i', 2, 'L', 0x00, 0xF2, 0x05, 0x2A, 0x01, 0x00,
+ 0x00, 0x00, 'L', 0x01, 0xF2, 0x05, 0x2A, 0x01, 0x00, 0x00, 0x00};
CHECK(json::to_bjdata(j, true, true) == expected);
CHECK(json::to_bjdata(j, true) == expected_size);
}
@@ -3182,8 +3279,10 @@
SECTION("array of M")
{
json const j = {10223372036854775807ull, 10223372036854775808ull};
- std::vector<uint8_t> const expected = {'[', '$', 'M', '#', 'i', 2, 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D, 0x00, 0x00, 0x64, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D};
- std::vector<uint8_t> const expected_size = {'[', '#', 'i', 2, 'M', 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D, 'M', 0x00, 0x00, 0x64, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D};
+ std::vector<uint8_t> const expected = {'[', '$', 'M', '#', 'i', 2, 0xFF, 0xFF, 0x63, 0xA7, 0xB3,
+ 0xB6, 0xE0, 0x8D, 0x00, 0x00, 0x64, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D};
+ std::vector<uint8_t> const expected_size = {'[', '#', 'i', 2, 'M', 0xFF, 0xFF, 0x63, 0xA7, 0xB3, 0xB6,
+ 0xE0, 0x8D, 'M', 0x00, 0x00, 0x64, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D};
CHECK(json::to_bjdata(j, true, true) == expected);
CHECK(json::to_bjdata(j, true) == expected_size);
}
@@ -3205,7 +3304,8 @@
{
json const j = {"foo", "bar", "baz"};
std::vector<uint8_t> v = {'[', 'S', 'i', 3, 'f', 'o', 'o', 'S', 'i', 3, 'b', 'a', 'r', 'S', 'i', 3, 'b', 'a', 'z', ']'};
- std::vector<uint8_t> const v2 = {'[', 'S', 'i', 3, 'f', 'o', 'o', 'N', 'S', 'i', 3, 'b', 'a', 'r', 'N', 'N', 'N', 'S', 'i', 3, 'b', 'a', 'z', 'N', 'N', ']'};
+ std::vector<uint8_t> const v2 = {'[', 'S', 'i', 3, 'f', 'o', 'o', 'N', 'S', 'i', 3, 'b', 'a',
+ 'r', 'N', 'N', 'N', 'S', 'i', 3, 'b', 'a', 'z', 'N', 'N', ']'};
CHECK(json::to_bjdata(j) == v);
CHECK(json::from_bjdata(v) == j);
CHECK(json::from_bjdata(v2) == j);
@@ -3214,140 +3314,29 @@
SECTION("Boolean Types")
{
json const j = {{"authorized", true}, {"verified", false}};
- std::vector<uint8_t> v = {'{', 'i', 10, 'a', 'u', 't', 'h', 'o', 'r', 'i', 'z', 'e', 'd', 'T', 'i', 8, 'v', 'e', 'r', 'i', 'f', 'i', 'e', 'd', 'F', '}'};
+ std::vector<uint8_t> v = {'{', 'i', 10, 'a', 'u', 't', 'h', 'o', 'r', 'i', 'z', 'e', 'd',
+ 'T', 'i', 8, 'v', 'e', 'r', 'i', 'f', 'i', 'e', 'd', 'F', '}'};
CHECK(json::to_bjdata(j) == v);
CHECK(json::from_bjdata(v) == j);
}
SECTION("Numeric Types")
{
- json j =
- {
- {"int8", 16},
- {"uint8", 255},
- {"int16", 32767},
- {"uint16", 42767},
- {"int32", 2147483647},
- {"uint32", 3147483647},
- {"int64", 9223372036854775807},
- {"uint64", 10223372036854775807ull},
- {"float64", 113243.7863123}};
- std::vector<uint8_t> v = {'{',
- 'i',
- 7,
- 'f',
- 'l',
- 'o',
- 'a',
- 't',
- '6',
- '4',
- 'D',
- 0xcf,
- 0x34,
- 0xbc,
- 0x94,
- 0xbc,
- 0xa5,
- 0xfb,
- 0x40,
- 'i',
- 5,
- 'i',
- 'n',
- 't',
- '1',
- '6',
- 'I',
- 0xff,
- 0x7f,
- 'i',
- 5,
- 'i',
- 'n',
- 't',
- '3',
- '2',
- 'l',
- 0xff,
- 0xff,
- 0xff,
- 0x7f,
- 'i',
- 5,
- 'i',
- 'n',
- 't',
- '6',
- '4',
- 'L',
- 0xff,
- 0xff,
- 0xff,
- 0xff,
- 0xff,
- 0xff,
- 0xff,
- 0x7f,
- 'i',
- 4,
- 'i',
- 'n',
- 't',
- '8',
- 'i',
- 16,
- 'i',
- 6,
- 'u',
- 'i',
- 'n',
- 't',
- '1',
- '6',
- 'u',
- 0x0F,
- 0xA7,
- 'i',
- 6,
- 'u',
- 'i',
- 'n',
- 't',
- '3',
- '2',
- 'm',
- 0xFF,
- 0xC9,
- 0x9A,
- 0xBB,
- 'i',
- 6,
- 'u',
- 'i',
- 'n',
- 't',
- '6',
- '4',
- 'M',
- 0xFF,
- 0xFF,
- 0x63,
- 0xA7,
- 0xB3,
- 0xB6,
- 0xE0,
- 0x8D,
- 'i',
- 5,
- 'u',
- 'i',
- 'n',
- 't',
- '8',
- 'U',
- 0xff,
- '}'};
+ json j = {{"int8", 16},
+ {"uint8", 255},
+ {"int16", 32767},
+ {"uint16", 42767},
+ {"int32", 2147483647},
+ {"uint32", 3147483647},
+ {"int64", 9223372036854775807},
+ {"uint64", 10223372036854775807ull},
+ {"float64", 113243.7863123}};
+ std::vector<uint8_t> v = {'{', 'i', 7, 'f', 'l', 'o', 'a', 't', '6', '4', 'D', 0xcf, 0x34, 0xbc, 0x94, 0xbc, 0xa5, 0xfb, 0x40, 'i',
+ 5, 'i', 'n', 't', '1', '6', 'I', 0xff, 0x7f, 'i', 5, 'i', 'n', 't', '3', '2', 'l', 0xff, 0xff, 0xff,
+ 0x7f, 'i', 5, 'i', 'n', 't', '6', '4', 'L', 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 'i', 4, 'i',
+ 'n', 't', '8', 'i', 16, 'i', 6, 'u', 'i', 'n', 't', '1', '6', 'u', 0x0F, 0xA7, 'i', 6, 'u', 'i',
+ 'n', 't', '3', '2', 'm', 0xFF, 0xC9, 0x9A, 0xBB, 'i', 6, 'u', 'i', 'n', 't', '6', '4', 'M', 0xFF, 0xFF,
+ 0x63, 0xA7, 0xB3, 0xB6, 0xE0, 0x8D, 'i', 5, 'u', 'i', 'n', 't', '8', 'U', 0xff, '}'};
CHECK(json::to_bjdata(j) == v);
CHECK(json::from_bjdata(v) == j);
}
@@ -3393,7 +3382,8 @@
{
// note the float has been replaced by a double
json const j = {nullptr, true, false, 4782345193, 153.132, "ham"};
- std::vector<uint8_t> v = {'[', 'Z', 'T', 'F', 'L', 0xE9, 0xCB, 0x0C, 0x1D, 0x01, 0x00, 0x00, 0x00, 'D', 0x4e, 0x62, 0x10, 0x58, 0x39, 0x24, 0x63, 0x40, 'S', 'i', 3, 'h', 'a', 'm', ']'};
+ std::vector<uint8_t> v = {'[', 'Z', 'T', 'F', 'L', 0xE9, 0xCB, 0x0C, 0x1D, 0x01, 0x00, 0x00, 0x00, 'D', 0x4e,
+ 0x62, 0x10, 0x58, 0x39, 0x24, 0x63, 0x40, 'S', 'i', 3, 'h', 'a', 'm', ']'};
CHECK(json::to_bjdata(j) == v);
CHECK(json::from_bjdata(v) == j);
}
@@ -3402,7 +3392,8 @@
{
// note the float has been replaced by a double
json const j = {nullptr, true, false, 4782345193, 153.132, "ham"};
- std::vector<uint8_t> v = {'[', '#', 'i', 6, 'Z', 'T', 'F', 'L', 0xE9, 0xCB, 0x0C, 0x1D, 0x01, 0x00, 0x00, 0x00, 'D', 0x4e, 0x62, 0x10, 0x58, 0x39, 0x24, 0x63, 0x40, 'S', 'i', 3, 'h', 'a', 'm'};
+ std::vector<uint8_t> v = {'[', '#', 'i', 6, 'Z', 'T', 'F', 'L', 0xE9, 0xCB, 0x0C, 0x1D, 0x01, 0x00, 0x00, 0x00,
+ 'D', 0x4e, 0x62, 0x10, 0x58, 0x39, 0x24, 0x63, 0x40, 'S', 'i', 3, 'h', 'a', 'm'};
CHECK(json::to_bjdata(j, true) == v);
CHECK(json::from_bjdata(v) == j);
}
@@ -3411,7 +3402,8 @@
{
// note the float has been replaced by a double
json const j = {nullptr, true, false, 4782345193, 153.132, "ham"};
- std::vector<uint8_t> v = {'[', '#', 'i', 6, 'Z', 'T', 'F', 'L', 0xE9, 0xCB, 0x0C, 0x1D, 0x01, 0x00, 0x00, 0x00, 'D', 0x4e, 0x62, 0x10, 0x58, 0x39, 0x24, 0x63, 0x40, 'S', 'i', 3, 'h', 'a', 'm'};
+ std::vector<uint8_t> v = {'[', '#', 'i', 6, 'Z', 'T', 'F', 'L', 0xE9, 0xCB, 0x0C, 0x1D, 0x01, 0x00, 0x00, 0x00,
+ 'D', 0x4e, 0x62, 0x10, 0x58, 0x39, 0x24, 0x63, 0x40, 'S', 'i', 3, 'h', 'a', 'm'};
CHECK(json::to_bjdata(j, true, true) == v);
CHECK(json::from_bjdata(v) == j);
}
@@ -3421,103 +3413,23 @@
{
SECTION("size=false type=false")
{
- json j =
- {
- {"post", {{"id", 1137}, {"author", "rkalla"}, {"timestamp", 1364482090592}, {"body", "I totally agree!"}}}};
- std::vector<uint8_t> v = {'{', 'i', 4, 'p', 'o', 's', 't', '{', 'i', 6, 'a', 'u', 't', 'h', 'o', 'r', 'S', 'i', 6, 'r', 'k', 'a', 'l', 'l', 'a', 'i', 4, 'b', 'o', 'd', 'y', 'S', 'i', 16, 'I', ' ', 't', 'o', 't', 'a', 'l', 'l', 'y', ' ', 'a', 'g', 'r', 'e', 'e', '!', 'i', 2, 'i', 'd', 'I', 0x71, 0x04, 'i', 9, 't', 'i', 'm', 'e', 's', 't', 'a', 'm', 'p', 'L', 0x60, 0x66, 0x78, 0xB1, 0x3D, 0x01, 0x00, 0x00, '}', '}'};
+ json j = {{"post", {{"id", 1137}, {"author", "rkalla"}, {"timestamp", 1364482090592}, {"body", "I totally agree!"}}}};
+ std::vector<uint8_t> v = {'{', 'i', 4, 'p', 'o', 's', 't', '{', 'i', 6, 'a', 'u', 't', 'h', 'o', 'r', 'S', 'i', 6, 'r',
+ 'k', 'a', 'l', 'l', 'a', 'i', 4, 'b', 'o', 'd', 'y', 'S', 'i', 16, 'I', ' ', 't', 'o', 't', 'a',
+ 'l', 'l', 'y', ' ', 'a', 'g', 'r', 'e', 'e', '!', 'i', 2, 'i', 'd', 'I', 0x71, 0x04, 'i', 9, 't',
+ 'i', 'm', 'e', 's', 't', 'a', 'm', 'p', 'L', 0x60, 0x66, 0x78, 0xB1, 0x3D, 0x01, 0x00, 0x00, '}', '}'};
CHECK(json::to_bjdata(j) == v);
CHECK(json::from_bjdata(v) == j);
}
SECTION("size=true type=false")
{
- json j =
- {
- {"post", {{"id", 1137}, {"author", "rkalla"}, {"timestamp", 1364482090592}, {"body", "I totally agree!"}}}};
+ json j = {{"post", {{"id", 1137}, {"author", "rkalla"}, {"timestamp", 1364482090592}, {"body", "I totally agree!"}}}};
std::vector<uint8_t> v = {
- '{',
- '#',
- 'i',
- 1,
- 'i',
- 4,
- 'p',
- 'o',
- 's',
- 't',
- '{',
- '#',
- 'i',
- 4,
- 'i',
- 6,
- 'a',
- 'u',
- 't',
- 'h',
- 'o',
- 'r',
- 'S',
- 'i',
- 6,
- 'r',
- 'k',
- 'a',
- 'l',
- 'l',
- 'a',
- 'i',
- 4,
- 'b',
- 'o',
- 'd',
- 'y',
- 'S',
- 'i',
- 16,
- 'I',
- ' ',
- 't',
- 'o',
- 't',
- 'a',
- 'l',
- 'l',
- 'y',
- ' ',
- 'a',
- 'g',
- 'r',
- 'e',
- 'e',
- '!',
- 'i',
- 2,
- 'i',
- 'd',
- 'I',
- 0x71,
- 0x04,
- 'i',
- 9,
- 't',
- 'i',
- 'm',
- 'e',
- 's',
- 't',
- 'a',
- 'm',
- 'p',
- 'L',
- 0x60,
- 0x66,
- 0x78,
- 0xB1,
- 0x3D,
- 0x01,
- 0x00,
- 0x00,
+ '{', '#', 'i', 1, 'i', 4, 'p', 'o', 's', 't', '{', '#', 'i', 4, 'i', 6, 'a', 'u', 't', 'h', 'o',
+ 'r', 'S', 'i', 6, 'r', 'k', 'a', 'l', 'l', 'a', 'i', 4, 'b', 'o', 'd', 'y', 'S', 'i', 16, 'I', ' ',
+ 't', 'o', 't', 'a', 'l', 'l', 'y', ' ', 'a', 'g', 'r', 'e', 'e', '!', 'i', 2, 'i', 'd', 'I', 0x71, 0x04,
+ 'i', 9, 't', 'i', 'm', 'e', 's', 't', 'a', 'm', 'p', 'L', 0x60, 0x66, 0x78, 0xB1, 0x3D, 0x01, 0x00, 0x00,
};
CHECK(json::to_bjdata(j, true) == v);
CHECK(json::from_bjdata(v) == j);
@@ -3525,93 +3437,12 @@
SECTION("size=true type=true")
{
- json j =
- {
- {"post", {{"id", 1137}, {"author", "rkalla"}, {"timestamp", 1364482090592}, {"body", "I totally agree!"}}}};
+ json j = {{"post", {{"id", 1137}, {"author", "rkalla"}, {"timestamp", 1364482090592}, {"body", "I totally agree!"}}}};
std::vector<uint8_t> v = {
- '{',
- '#',
- 'i',
- 1,
- 'i',
- 4,
- 'p',
- 'o',
- 's',
- 't',
- '{',
- '#',
- 'i',
- 4,
- 'i',
- 6,
- 'a',
- 'u',
- 't',
- 'h',
- 'o',
- 'r',
- 'S',
- 'i',
- 6,
- 'r',
- 'k',
- 'a',
- 'l',
- 'l',
- 'a',
- 'i',
- 4,
- 'b',
- 'o',
- 'd',
- 'y',
- 'S',
- 'i',
- 16,
- 'I',
- ' ',
- 't',
- 'o',
- 't',
- 'a',
- 'l',
- 'l',
- 'y',
- ' ',
- 'a',
- 'g',
- 'r',
- 'e',
- 'e',
- '!',
- 'i',
- 2,
- 'i',
- 'd',
- 'I',
- 0x71,
- 0x04,
- 'i',
- 9,
- 't',
- 'i',
- 'm',
- 'e',
- 's',
- 't',
- 'a',
- 'm',
- 'p',
- 'L',
- 0x60,
- 0x66,
- 0x78,
- 0xB1,
- 0x3D,
- 0x01,
- 0x00,
- 0x00,
+ '{', '#', 'i', 1, 'i', 4, 'p', 'o', 's', 't', '{', '#', 'i', 4, 'i', 6, 'a', 'u', 't', 'h', 'o',
+ 'r', 'S', 'i', 6, 'r', 'k', 'a', 'l', 'l', 'a', 'i', 4, 'b', 'o', 'd', 'y', 'S', 'i', 16, 'I', ' ',
+ 't', 'o', 't', 'a', 'l', 'l', 'y', ' ', 'a', 'g', 'r', 'e', 'e', '!', 'i', 2, 'i', 'd', 'I', 0x71, 0x04,
+ 'i', 9, 't', 'i', 'm', 'e', 's', 't', 'a', 'm', 'p', 'L', 0x60, 0x66, 0x78, 0xB1, 0x3D, 0x01, 0x00, 0x00,
};
CHECK(json::to_bjdata(j, true, true) == v);
CHECK(json::from_bjdata(v) == j);
@@ -3626,53 +3457,9 @@
{
// note the floats have been replaced by doubles
json const j = {29.97, 31.13, 67.0, 2.113, 23.888};
- std::vector<uint8_t> v = {'[',
- 'D',
- 0xb8,
- 0x1e,
- 0x85,
- 0xeb,
- 0x51,
- 0xf8,
- 0x3d,
- 0x40,
- 'D',
- 0xe1,
- 0x7a,
- 0x14,
- 0xae,
- 0x47,
- 0x21,
- 0x3f,
- 0x40,
- 'D',
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0xc0,
- 0x50,
- 0x40,
- 'D',
- 0x81,
- 0x95,
- 0x43,
- 0x8b,
- 0x6c,
- 0xe7,
- 0x00,
- 0x40,
- 'D',
- 0x17,
- 0xd9,
- 0xce,
- 0xf7,
- 0x53,
- 0xe3,
- 0x37,
- 0x40,
- ']'};
+ std::vector<uint8_t> v = {'[', 'D', 0xb8, 0x1e, 0x85, 0xeb, 0x51, 0xf8, 0x3d, 0x40, 'D', 0xe1, 0x7a, 0x14, 0xae, 0x47,
+ 0x21, 0x3f, 0x40, 'D', 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x50, 0x40, 'D', 0x81, 0x95, 0x43,
+ 0x8b, 0x6c, 0xe7, 0x00, 0x40, 'D', 0x17, 0xd9, 0xce, 0xf7, 0x53, 0xe3, 0x37, 0x40, ']'};
CHECK(json::to_bjdata(j) == v);
CHECK(json::from_bjdata(v) == j);
}
@@ -3682,55 +3469,9 @@
// note the floats have been replaced by doubles
json const j = {29.97, 31.13, 67.0, 2.113, 23.888};
std::vector<uint8_t> v = {
- '[',
- '#',
- 'i',
- 5,
- 'D',
- 0xb8,
- 0x1e,
- 0x85,
- 0xeb,
- 0x51,
- 0xf8,
- 0x3d,
- 0x40,
- 'D',
- 0xe1,
- 0x7a,
- 0x14,
- 0xae,
- 0x47,
- 0x21,
- 0x3f,
- 0x40,
- 'D',
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0xc0,
- 0x50,
- 0x40,
- 'D',
- 0x81,
- 0x95,
- 0x43,
- 0x8b,
- 0x6c,
- 0xe7,
- 0x00,
- 0x40,
- 'D',
- 0x17,
- 0xd9,
- 0xce,
- 0xf7,
- 0x53,
- 0xe3,
- 0x37,
- 0x40,
+ '[', '#', 'i', 5, 'D', 0xb8, 0x1e, 0x85, 0xeb, 0x51, 0xf8, 0x3d, 0x40, 'D', 0xe1, 0x7a, 0x14,
+ 0xae, 0x47, 0x21, 0x3f, 0x40, 'D', 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x50, 0x40, 'D', 0x81, 0x95,
+ 0x43, 0x8b, 0x6c, 0xe7, 0x00, 0x40, 'D', 0x17, 0xd9, 0xce, 0xf7, 0x53, 0xe3, 0x37, 0x40,
};
CHECK(json::to_bjdata(j, true) == v);
CHECK(json::from_bjdata(v) == j);
@@ -3741,52 +3482,8 @@
// note the floats have been replaced by doubles
json const j = {29.97, 31.13, 67.0, 2.113, 23.888};
std::vector<uint8_t> v = {
- '[',
- '$',
- 'D',
- '#',
- 'i',
- 5,
- 0xb8,
- 0x1e,
- 0x85,
- 0xeb,
- 0x51,
- 0xf8,
- 0x3d,
- 0x40,
- 0xe1,
- 0x7a,
- 0x14,
- 0xae,
- 0x47,
- 0x21,
- 0x3f,
- 0x40,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0xc0,
- 0x50,
- 0x40,
- 0x81,
- 0x95,
- 0x43,
- 0x8b,
- 0x6c,
- 0xe7,
- 0x00,
- 0x40,
- 0x17,
- 0xd9,
- 0xce,
- 0xf7,
- 0x53,
- 0xe3,
- 0x37,
- 0x40,
+ '[', '$', 'D', '#', 'i', 5, 0xb8, 0x1e, 0x85, 0xeb, 0x51, 0xf8, 0x3d, 0x40, 0xe1, 0x7a, 0x14, 0xae, 0x47, 0x21, 0x3f, 0x40, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x50, 0x40, 0x81, 0x95, 0x43, 0x8b, 0x6c, 0xe7, 0x00, 0x40, 0x17, 0xd9, 0xce, 0xf7, 0x53, 0xe3, 0x37, 0x40,
};
CHECK(json::to_bjdata(j, true, true) == v);
CHECK(json::from_bjdata(v) == j);
@@ -3799,51 +3496,9 @@
{
// note the floats have been replaced by doubles
json const j = {{"lat", 29.976}, {"long", 31.131}, {"alt", 67.0}};
- std::vector<uint8_t> v = {'{',
- 'i',
- 3,
- 'a',
- 'l',
- 't',
- 'D',
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0xc0,
- 0x50,
- 0x40,
- 'i',
- 3,
- 'l',
- 'a',
- 't',
- 'D',
- 0x60,
- 0xe5,
- 0xd0,
- 0x22,
- 0xdb,
- 0xf9,
- 0x3d,
- 0x40,
- 'i',
- 4,
- 'l',
- 'o',
- 'n',
- 'g',
- 'D',
- 0xa8,
- 0xc6,
- 0x4b,
- 0x37,
- 0x89,
- 0x21,
- 0x3f,
- 0x40,
- '}'};
+ std::vector<uint8_t> v = {'{', 'i', 3, 'a', 'l', 't', 'D', 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x50, 0x40,
+ 'i', 3, 'l', 'a', 't', 'D', 0x60, 0xe5, 0xd0, 0x22, 0xdb, 0xf9, 0x3d, 0x40, 'i',
+ 4, 'l', 'o', 'n', 'g', 'D', 0xa8, 0xc6, 0x4b, 0x37, 0x89, 0x21, 0x3f, 0x40, '}'};
CHECK(json::to_bjdata(j) == v);
CHECK(json::from_bjdata(v) == j);
}
@@ -3853,53 +3508,8 @@
// note the floats have been replaced by doubles
json const j = {{"lat", 29.976}, {"long", 31.131}, {"alt", 67.0}};
std::vector<uint8_t> v = {
- '{',
- '#',
- 'i',
- 3,
- 'i',
- 3,
- 'a',
- 'l',
- 't',
- 'D',
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0xc0,
- 0x50,
- 0x40,
- 'i',
- 3,
- 'l',
- 'a',
- 't',
- 'D',
- 0x60,
- 0xe5,
- 0xd0,
- 0x22,
- 0xdb,
- 0xf9,
- 0x3d,
- 0x40,
- 'i',
- 4,
- 'l',
- 'o',
- 'n',
- 'g',
- 'D',
- 0xa8,
- 0xc6,
- 0x4b,
- 0x37,
- 0x89,
- 0x21,
- 0x3f,
- 0x40,
+ '{', '#', 'i', 3, 'i', 3, 'a', 'l', 't', 'D', 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x50, 0x40, 'i', 3, 'l', 'a', 't', 'D',
+ 0x60, 0xe5, 0xd0, 0x22, 0xdb, 0xf9, 0x3d, 0x40, 'i', 4, 'l', 'o', 'n', 'g', 'D', 0xa8, 0xc6, 0x4b, 0x37, 0x89, 0x21, 0x3f, 0x40,
};
CHECK(json::to_bjdata(j, true) == v);
CHECK(json::from_bjdata(v) == j);
@@ -3910,52 +3520,8 @@
// note the floats have been replaced by doubles
json const j = {{"lat", 29.976}, {"long", 31.131}, {"alt", 67.0}};
std::vector<uint8_t> v = {
- '{',
- '$',
- 'D',
- '#',
- 'i',
- 3,
- 'i',
- 3,
- 'a',
- 'l',
- 't',
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0xc0,
- 0x50,
- 0x40,
- 'i',
- 3,
- 'l',
- 'a',
- 't',
- 0x60,
- 0xe5,
- 0xd0,
- 0x22,
- 0xdb,
- 0xf9,
- 0x3d,
- 0x40,
- 'i',
- 4,
- 'l',
- 'o',
- 'n',
- 'g',
- 0xa8,
- 0xc6,
- 0x4b,
- 0x37,
- 0x89,
- 0x21,
- 0x3f,
- 0x40,
+ '{', '$', 'D', '#', 'i', 3, 'i', 3, 'a', 'l', 't', 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x50, 0x40, 'i', 3, 'l', 'a',
+ 't', 0x60, 0xe5, 0xd0, 0x22, 0xdb, 0xf9, 0x3d, 0x40, 'i', 4, 'l', 'o', 'n', 'g', 0xa8, 0xc6, 0x4b, 0x37, 0x89, 0x21, 0x3f, 0x40,
};
CHECK(json::to_bjdata(j, true, true) == v);
CHECK(json::from_bjdata(v) == j);
@@ -3968,15 +3534,22 @@
{
json _;
std::vector<uint8_t> const v = {'[', '$', 'N', '#', 'I', 0x00, 0x02};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v), "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x4E is not a permitted optimized array type", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v),
+ "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x4E is not a permitted optimized array type",
+ json::parse_error&);
CHECK(json::from_bjdata(v, true, false).is_discarded());
}
SECTION("Object")
{
json _;
- std::vector<uint8_t> const v = {'{', '$', 'Z', '#', 'i', 3, 'i', 4, 'n', 'a', 'm', 'e', 'i', 8, 'p', 'a', 's', 's', 'w', 'o', 'r', 'd', 'i', 5, 'e', 'm', 'a', 'i', 'l'};
- CHECK_THROWS_WITH_AS(_ = json::from_bjdata(v), "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x5A is not a permitted optimized array type", json::parse_error&);
+ std::vector<uint8_t> const v = {'{', '$', 'Z', '#', 'i', 3, 'i', 4, 'n', 'a', 'm', 'e', 'i', 8, 'p',
+ 'a', 's', 's', 'w', 'o', 'r', 'd', 'i', 5, 'e', 'm', 'a', 'i', 'l'};
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bjdata(v),
+ "[json.exception.parse_error.112] parse error at byte 3: syntax error while parsing BJData type: marker 0x5A is not a permitted optimized array type",
+ json::parse_error&);
CHECK(json::from_bjdata(v, true, false).is_discarded());
}
}
@@ -3987,28 +3560,7 @@
TEST_CASE("all BJData first bytes")
{
// these bytes will fail immediately with exception parse_error.112
- std::set<uint8_t> supported =
- {
- 'T',
- 'F',
- 'Z',
- 'U',
- 'i',
- 'I',
- 'l',
- 'L',
- 'd',
- 'D',
- 'C',
- 'S',
- '[',
- '{',
- 'N',
- 'H',
- 'u',
- 'm',
- 'M',
- 'h'};
+ std::set<uint8_t> supported = {'T', 'F', 'Z', 'U', 'i', 'I', 'l', 'L', 'd', 'D', 'C', 'S', '[', '{', 'N', 'H', 'u', 'm', 'M', 'h'};
for (auto i = 0; i < 256; ++i)
{
@@ -4041,50 +3593,48 @@
{
SECTION("input from self-generated BJData files")
{
- for (const std::string filename :
- {
- TEST_DATA_DIRECTORY "/json_nlohmann_tests/all_unicode.json",
- TEST_DATA_DIRECTORY "/json.org/1.json",
- TEST_DATA_DIRECTORY "/json.org/2.json",
- TEST_DATA_DIRECTORY "/json.org/3.json",
- TEST_DATA_DIRECTORY "/json.org/4.json",
- TEST_DATA_DIRECTORY "/json.org/5.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip01.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip02.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip03.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip04.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip05.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip06.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip07.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip08.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip09.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip10.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip11.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip12.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip13.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip14.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip15.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip16.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip17.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip18.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip19.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip20.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip21.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip22.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip23.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip24.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip25.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip26.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip27.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip28.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip29.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip30.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip31.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip32.json",
- TEST_DATA_DIRECTORY "/json_testsuite/sample.json",
- TEST_DATA_DIRECTORY "/json_tests/pass1.json",
- TEST_DATA_DIRECTORY "/json_tests/pass2.json",
- TEST_DATA_DIRECTORY "/json_tests/pass3.json"})
+ for (const std::string filename : {TEST_DATA_DIRECTORY "/json_nlohmann_tests/all_unicode.json",
+ TEST_DATA_DIRECTORY "/json.org/1.json",
+ TEST_DATA_DIRECTORY "/json.org/2.json",
+ TEST_DATA_DIRECTORY "/json.org/3.json",
+ TEST_DATA_DIRECTORY "/json.org/4.json",
+ TEST_DATA_DIRECTORY "/json.org/5.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip01.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip02.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip03.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip04.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip05.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip06.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip07.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip08.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip09.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip10.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip11.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip12.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip13.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip14.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip15.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip16.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip17.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip18.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip19.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip20.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip21.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip22.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip23.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip24.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip25.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip26.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip27.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip28.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip29.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip30.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip31.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip32.json",
+ TEST_DATA_DIRECTORY "/json_testsuite/sample.json",
+ TEST_DATA_DIRECTORY "/json_tests/pass1.json",
+ TEST_DATA_DIRECTORY "/json_tests/pass2.json",
+ TEST_DATA_DIRECTORY "/json_tests/pass3.json"})
{
CAPTURE(filename)
diff --git a/tests/src/unit-bson.cpp b/tests/src/unit-bson.cpp
index fd6c166..5759b6e 100644
--- a/tests/src/unit-bson.cpp
+++ b/tests/src/unit-bson.cpp
@@ -24,7 +24,9 @@
SECTION("null")
{
json const j = nullptr;
- CHECK_THROWS_WITH_AS(json::to_bson(j), "[json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is null", json::type_error&);
+ CHECK_THROWS_WITH_AS(json::to_bson(j),
+ "[json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is null",
+ json::type_error&);
}
SECTION("boolean")
@@ -32,48 +34,60 @@
SECTION("true")
{
json const j = true;
- CHECK_THROWS_WITH_AS(json::to_bson(j), "[json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is boolean", json::type_error&);
+ CHECK_THROWS_WITH_AS(json::to_bson(j),
+ "[json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is boolean",
+ json::type_error&);
}
SECTION("false")
{
json const j = false;
- CHECK_THROWS_WITH_AS(json::to_bson(j), "[json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is boolean", json::type_error&);
+ CHECK_THROWS_WITH_AS(json::to_bson(j),
+ "[json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is boolean",
+ json::type_error&);
}
}
SECTION("number")
{
json const j = 42;
- CHECK_THROWS_WITH_AS(json::to_bson(j), "[json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is number", json::type_error&);
+ CHECK_THROWS_WITH_AS(json::to_bson(j),
+ "[json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is number",
+ json::type_error&);
}
SECTION("float")
{
json const j = 4.2;
- CHECK_THROWS_WITH_AS(json::to_bson(j), "[json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is number", json::type_error&);
+ CHECK_THROWS_WITH_AS(json::to_bson(j),
+ "[json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is number",
+ json::type_error&);
}
SECTION("string")
{
json const j = "not supported";
- CHECK_THROWS_WITH_AS(json::to_bson(j), "[json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is string", json::type_error&);
+ CHECK_THROWS_WITH_AS(json::to_bson(j),
+ "[json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is string",
+ json::type_error&);
}
SECTION("array")
{
json const j = std::vector<int>{1, 2, 3, 4, 5, 6, 7};
- CHECK_THROWS_WITH_AS(json::to_bson(j), "[json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is array", json::type_error&);
+ CHECK_THROWS_WITH_AS(json::to_bson(j),
+ "[json.exception.type_error.317] to serialize to BSON, top-level type must be object, but is array",
+ json::type_error&);
}
}
SECTION("keys containing code-point U+0000 cannot be serialized to BSON")
{
- json const j =
- {
- {std::string("en\0try", 6), true}};
+ json const j = {{std::string("en\0try", 6), true}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(json::to_bson(j), "[json.exception.out_of_range.409] (/en) BSON key cannot contain code point U+0000 (at byte 2)", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(json::to_bson(j),
+ "[json.exception.out_of_range.409] (/en) BSON key cannot contain code point U+0000 (at byte 2)",
+ json::out_of_range&);
#else
CHECK_THROWS_WITH_AS(json::to_bson(j), "[json.exception.out_of_range.409] BSON key cannot contain code point U+0000 (at byte 2)", json::out_of_range&);
#endif
@@ -82,20 +96,12 @@
SECTION("string length must be at least 1")
{
// from https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11175
- std::vector<std::uint8_t> const v =
- {
- 0x20,
- 0x20,
- 0x20,
- 0x20,
- 0x02,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x80};
+ std::vector<std::uint8_t> const v = {0x20, 0x20, 0x20, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x80};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bson(v), "[json.exception.parse_error.112] parse error at byte 10: syntax error while parsing BSON string: string length must be at least 1, is -2147483648", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bson(v),
+ "[json.exception.parse_error.112] parse error at byte 10: syntax error while parsing BSON string: string length must be at least 1, is -2147483648",
+ json::parse_error&);
}
SECTION("objects")
@@ -103,15 +109,14 @@
SECTION("empty object")
{
json const j = json::object();
- std::vector<std::uint8_t> const expected =
- {
- 0x05,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- // no entries
- 0x00 // end marker
- };
+ std::vector<std::uint8_t> const expected = {
+ 0x05,
+ 0x00,
+ 0x00,
+ 0x00, // size (little endian)
+ // no entries
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -123,26 +128,23 @@
SECTION("non-empty object with bool")
{
- json const j =
- {
- {"entry", true}};
+ json const j = {{"entry", true}};
- std::vector<std::uint8_t> const expected =
- {
- 0x0D,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x08, // entry: boolean
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- 0x01, // value = true
- 0x00 // end marker
- };
+ std::vector<std::uint8_t> const expected = {
+ 0x0D,
+ 0x00,
+ 0x00,
+ 0x00, // size (little endian)
+ 0x08, // entry: boolean
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ '\x00',
+ 0x01, // value = true
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -154,26 +156,23 @@
SECTION("non-empty object with bool")
{
- json const j =
- {
- {"entry", false}};
+ json const j = {{"entry", false}};
- std::vector<std::uint8_t> const expected =
- {
- 0x0D,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x08, // entry: boolean
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- 0x00, // value = false
- 0x00 // end marker
- };
+ std::vector<std::uint8_t> const expected = {
+ 0x0D,
+ 0x00,
+ 0x00,
+ 0x00, // size (little endian)
+ 0x08, // entry: boolean
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ '\x00',
+ 0x00, // value = false
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -185,33 +184,15 @@
SECTION("non-empty object with double")
{
- json const j =
- {
- {"entry", 4.2}};
+ json const j = {{"entry", 4.2}};
- std::vector<std::uint8_t> const expected =
- {
- 0x14,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x01, /// entry: double
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- 0xcd,
- 0xcc,
- 0xcc,
- 0xcc,
- 0xcc,
- 0xcc,
- 0x10,
- 0x40,
- 0x00 // end marker
- };
+ std::vector<std::uint8_t> const expected = {
+ 0x14, 0x00, 0x00,
+ 0x00, // size (little endian)
+ 0x01, /// entry: double
+ 'e', 'n', 't', 'r', 'y', '\x00', 0xcd, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x10, 0x40,
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -223,37 +204,15 @@
SECTION("non-empty object with string")
{
- json const j =
- {
- {"entry", "bsonstr"}};
+ json const j = {{"entry", "bsonstr"}};
- std::vector<std::uint8_t> const expected =
- {
- 0x18,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x02, /// entry: string (UTF-8)
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- 0x08,
- 0x00,
- 0x00,
- 0x00,
- 'b',
- 's',
- 'o',
- 'n',
- 's',
- 't',
- 'r',
- '\x00',
- 0x00 // end marker
- };
+ std::vector<std::uint8_t> const expected = {
+ 0x18, 0x00, 0x00,
+ 0x00, // size (little endian)
+ 0x02, /// entry: string (UTF-8)
+ 'e', 'n', 't', 'r', 'y', '\x00', 0x08, 0x00, 0x00, 0x00, 'b', 's', 'o', 'n', 's', 't', 'r', '\x00',
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -265,25 +224,22 @@
SECTION("non-empty object with null member")
{
- json const j =
- {
- {"entry", nullptr}};
+ json const j = {{"entry", nullptr}};
- std::vector<std::uint8_t> const expected =
- {
- 0x0C,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x0A, /// entry: null
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- 0x00 // end marker
- };
+ std::vector<std::uint8_t> const expected = {
+ 0x0C,
+ 0x00,
+ 0x00,
+ 0x00, // size (little endian)
+ 0x0A, /// entry: null
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ '\x00',
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -295,29 +251,26 @@
SECTION("non-empty object with integer (32-bit) member")
{
- json const j =
- {
- {"entry", std::int32_t{0x12345678}}};
+ json const j = {{"entry", std::int32_t{0x12345678}}};
- std::vector<std::uint8_t> const expected =
- {
- 0x10,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x10, /// entry: int32
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- 0x78,
- 0x56,
- 0x34,
- 0x12,
- 0x00 // end marker
- };
+ std::vector<std::uint8_t> const expected = {
+ 0x10,
+ 0x00,
+ 0x00,
+ 0x00, // size (little endian)
+ 0x10, /// entry: int32
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ '\x00',
+ 0x78,
+ 0x56,
+ 0x34,
+ 0x12,
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -329,33 +282,15 @@
SECTION("non-empty object with integer (64-bit) member")
{
- json const j =
- {
- {"entry", std::int64_t{0x1234567804030201}}};
+ json const j = {{"entry", std::int64_t{0x1234567804030201}}};
- std::vector<std::uint8_t> const expected =
- {
- 0x14,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x12, /// entry: int64
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- 0x01,
- 0x02,
- 0x03,
- 0x04,
- 0x78,
- 0x56,
- 0x34,
- 0x12,
- 0x00 // end marker
- };
+ std::vector<std::uint8_t> const expected = {
+ 0x14, 0x00, 0x00,
+ 0x00, // size (little endian)
+ 0x12, /// entry: int64
+ 'e', 'n', 't', 'r', 'y', '\x00', 0x01, 0x02, 0x03, 0x04, 0x78, 0x56, 0x34, 0x12,
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -367,29 +302,26 @@
SECTION("non-empty object with negative integer (32-bit) member")
{
- json const j =
- {
- {"entry", std::int32_t{-1}}};
+ json const j = {{"entry", std::int32_t{-1}}};
- std::vector<std::uint8_t> const expected =
- {
- 0x10,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x10, /// entry: int32
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0x00 // end marker
- };
+ std::vector<std::uint8_t> const expected = {
+ 0x10,
+ 0x00,
+ 0x00,
+ 0x00, // size (little endian)
+ 0x10, /// entry: int32
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ '\x00',
+ 0xFF,
+ 0xFF,
+ 0xFF,
+ 0xFF,
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -401,29 +333,26 @@
SECTION("non-empty object with negative integer (64-bit) member")
{
- json const j =
- {
- {"entry", std::int64_t{-1}}};
+ json const j = {{"entry", std::int64_t{-1}}};
- std::vector<std::uint8_t> const expected =
- {
- 0x10,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x10, /// entry: int32
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF,
- 0x00 // end marker
- };
+ std::vector<std::uint8_t> const expected = {
+ 0x10,
+ 0x00,
+ 0x00,
+ 0x00, // size (little endian)
+ 0x10, /// entry: int32
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ '\x00',
+ 0xFF,
+ 0xFF,
+ 0xFF,
+ 0xFF,
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -436,33 +365,15 @@
SECTION("non-empty object with unsigned integer (64-bit) member")
{
// directly encoding uint64 is not supported in bson (only for timestamp values)
- json const j =
- {
- {"entry", std::uint64_t{0x1234567804030201}}};
+ json const j = {{"entry", std::uint64_t{0x1234567804030201}}};
- std::vector<std::uint8_t> const expected =
- {
- 0x14,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x12, /// entry: int64
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- 0x01,
- 0x02,
- 0x03,
- 0x04,
- 0x78,
- 0x56,
- 0x34,
- 0x12,
- 0x00 // end marker
- };
+ std::vector<std::uint8_t> const expected = {
+ 0x14, 0x00, 0x00,
+ 0x00, // size (little endian)
+ 0x12, /// entry: int64
+ 'e', 'n', 't', 'r', 'y', '\x00', 0x01, 0x02, 0x03, 0x04, 0x78, 0x56, 0x34, 0x12,
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -474,29 +385,26 @@
SECTION("non-empty object with small unsigned integer member")
{
- json const j =
- {
- {"entry", std::uint64_t{0x42}}};
+ json const j = {{"entry", std::uint64_t{0x42}}};
- std::vector<std::uint8_t> const expected =
- {
- 0x10,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x10, /// entry: int32
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- 0x42,
- 0x00,
- 0x00,
- 0x00,
- 0x00 // end marker
- };
+ std::vector<std::uint8_t> const expected = {
+ 0x10,
+ 0x00,
+ 0x00,
+ 0x00, // size (little endian)
+ 0x10, /// entry: int32
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ '\x00',
+ 0x42,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -508,33 +416,30 @@
SECTION("non-empty object with object member")
{
- json const j =
- {
- {"entry", json::object()}};
+ json const j = {{"entry", json::object()}};
- std::vector<std::uint8_t> const expected =
- {
- 0x11,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x03, /// entry: embedded document
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
+ std::vector<std::uint8_t> const expected = {
+ 0x11,
+ 0x00,
+ 0x00,
+ 0x00, // size (little endian)
+ 0x03, /// entry: embedded document
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ '\x00',
- 0x05,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- // no entries
- 0x00, // end marker (embedded document)
+ 0x05,
+ 0x00,
+ 0x00,
+ 0x00, // size (little endian)
+ // no entries
+ 0x00, // end marker (embedded document)
- 0x00 // end marker
- };
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -546,33 +451,30 @@
SECTION("non-empty object with array member")
{
- json const j =
- {
- {"entry", json::array()}};
+ json const j = {{"entry", json::array()}};
- std::vector<std::uint8_t> const expected =
- {
- 0x11,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x04, /// entry: embedded document
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
+ std::vector<std::uint8_t> const expected = {
+ 0x11,
+ 0x00,
+ 0x00,
+ 0x00, // size (little endian)
+ 0x04, /// entry: embedded document
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ '\x00',
- 0x05,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- // no entries
- 0x00, // end marker (embedded document)
+ 0x05,
+ 0x00,
+ 0x00,
+ 0x00, // size (little endian)
+ // no entries
+ 0x00, // end marker (embedded document)
- 0x00 // end marker
- };
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -584,88 +486,23 @@
SECTION("non-empty object with non-empty array member")
{
- json const j =
- {
- {"entry", json::array({1, 2, 3, 4, 5, 6, 7, 8})}};
+ json const j = {{"entry", json::array({1, 2, 3, 4, 5, 6, 7, 8})}};
- std::vector<std::uint8_t> const expected =
- {
- 0x49,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x04, /// entry: embedded document
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
+ std::vector<std::uint8_t> const expected = {
+ 0x49, 0x00, 0x00,
+ 0x00, // size (little endian)
+ 0x04, /// entry: embedded document
+ 'e', 'n', 't', 'r', 'y', '\x00',
- 0x3D,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x10,
- '0',
- 0x00,
- 0x01,
- 0x00,
- 0x00,
- 0x00,
- 0x10,
- '1',
- 0x00,
- 0x02,
- 0x00,
- 0x00,
- 0x00,
- 0x10,
- '2',
- 0x00,
- 0x03,
- 0x00,
- 0x00,
- 0x00,
- 0x10,
- '3',
- 0x00,
- 0x04,
- 0x00,
- 0x00,
- 0x00,
- 0x10,
- '4',
- 0x00,
- 0x05,
- 0x00,
- 0x00,
- 0x00,
- 0x10,
- '5',
- 0x00,
- 0x06,
- 0x00,
- 0x00,
- 0x00,
- 0x10,
- '6',
- 0x00,
- 0x07,
- 0x00,
- 0x00,
- 0x00,
- 0x10,
- '7',
- 0x00,
- 0x08,
- 0x00,
- 0x00,
- 0x00,
- 0x00, // end marker (embedded document)
+ 0x3D, 0x00, 0x00,
+ 0x00, // size (little endian)
+ 0x10, '0', 0x00, 0x01, 0x00, 0x00, 0x00, 0x10, '1', 0x00, 0x02, 0x00, 0x00, 0x00, 0x10, '2', 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x10, '3', 0x00, 0x04, 0x00, 0x00, 0x00, 0x10, '4', 0x00, 0x05, 0x00, 0x00, 0x00, 0x10, '5', 0x00,
+ 0x06, 0x00, 0x00, 0x00, 0x10, '6', 0x00, 0x07, 0x00, 0x00, 0x00, 0x10, '7', 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x00, // end marker (embedded document)
- 0x00 // end marker
- };
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -679,42 +516,21 @@
{
const size_t N = 10;
const auto s = std::vector<std::uint8_t>(N, 'x');
- json const j =
- {
- {"entry", json::binary(s, 0)}};
+ json const j = {{"entry", json::binary(s, 0)}};
- std::vector<std::uint8_t> const expected =
- {
- 0x1B,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x05, // entry: binary
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
+ std::vector<std::uint8_t> const expected = {
+ 0x1B, 0x00, 0x00,
+ 0x00, // size (little endian)
+ 0x05, // entry: binary
+ 'e', 'n', 't', 'r', 'y', '\x00',
- 0x0A,
- 0x00,
- 0x00,
- 0x00, // size of binary (little endian)
- 0x00, // Generic binary subtype
- 0x78,
- 0x78,
- 0x78,
- 0x78,
- 0x78,
- 0x78,
- 0x78,
- 0x78,
- 0x78,
- 0x78,
+ 0x0A, 0x00, 0x00,
+ 0x00, // size of binary (little endian)
+ 0x00, // Generic binary subtype
+ 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,
- 0x00 // end marker
- };
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -728,48 +544,21 @@
{
// an MD5 hash
const std::vector<std::uint8_t> md5hash = {0xd7, 0x7e, 0x27, 0x54, 0xbe, 0x12, 0x37, 0xfe, 0xd6, 0x0c, 0x33, 0x98, 0x30, 0x3b, 0x8d, 0xc4};
- json const j =
- {
- {"entry", json::binary(md5hash, 5)}};
+ json const j = {{"entry", json::binary(md5hash, 5)}};
- std::vector<std::uint8_t> const expected =
- {
- 0x21,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x05, // entry: binary
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
+ std::vector<std::uint8_t> const expected = {
+ 0x21, 0x00, 0x00,
+ 0x00, // size (little endian)
+ 0x05, // entry: binary
+ 'e', 'n', 't', 'r', 'y', '\x00',
- 0x10,
- 0x00,
- 0x00,
- 0x00, // size of binary (little endian)
- 0x05, // MD5 binary subtype
- 0xd7,
- 0x7e,
- 0x27,
- 0x54,
- 0xbe,
- 0x12,
- 0x37,
- 0xfe,
- 0xd6,
- 0x0c,
- 0x33,
- 0x98,
- 0x30,
- 0x3b,
- 0x8d,
- 0xc4,
+ 0x10, 0x00, 0x00,
+ 0x00, // size of binary (little endian)
+ 0x05, // MD5 binary subtype
+ 0xd7, 0x7e, 0x27, 0x54, 0xbe, 0x12, 0x37, 0xfe, 0xd6, 0x0c, 0x33, 0x98, 0x30, 0x3b, 0x8d, 0xc4,
- 0x00 // end marker
- };
+ 0x00 // end marker
+ };
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -782,94 +571,87 @@
SECTION("Some more complex document")
{
// directly encoding uint64 is not supported in bson (only for timestamp values)
- json const j =
- {
- {"double", 42.5},
- {"entry", 4.2},
- {"number", 12345},
- {"object", {{"string", "value"}}}};
+ json const j = {{"double", 42.5}, {"entry", 4.2}, {"number", 12345}, {"object", {{"string", "value"}}}};
- std::vector<std::uint8_t> const expected =
- {
- /*size */ 0x4f,
- 0x00,
- 0x00,
- 0x00,
- /*entry*/ 0x01,
- 'd',
- 'o',
- 'u',
- 'b',
- 'l',
- 'e',
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x40,
- 0x45,
- 0x40,
- /*entry*/ 0x01,
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- 0x00,
- 0xcd,
- 0xcc,
- 0xcc,
- 0xcc,
- 0xcc,
- 0xcc,
- 0x10,
- 0x40,
- /*entry*/ 0x10,
- 'n',
- 'u',
- 'm',
- 'b',
- 'e',
- 'r',
- 0x00,
- 0x39,
- 0x30,
- 0x00,
- 0x00,
- /*entry*/ 0x03,
- 'o',
- 'b',
- 'j',
- 'e',
- 'c',
- 't',
- 0x00,
- /*entry: obj-size */ 0x17,
- 0x00,
- 0x00,
- 0x00,
- /*entry: obj-entry*/ 0x02,
- 's',
- 't',
- 'r',
- 'i',
- 'n',
- 'g',
- 0x00,
- 0x06,
- 0x00,
- 0x00,
- 0x00,
- 'v',
- 'a',
- 'l',
- 'u',
- 'e',
- 0,
- /*entry: obj-term.*/ 0x00,
- /*obj-term*/ 0x00};
+ std::vector<std::uint8_t> const expected = {/*size */ 0x4f,
+ 0x00,
+ 0x00,
+ 0x00,
+ /*entry*/ 0x01,
+ 'd',
+ 'o',
+ 'u',
+ 'b',
+ 'l',
+ 'e',
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x40,
+ 0x45,
+ 0x40,
+ /*entry*/ 0x01,
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ 0x00,
+ 0xcd,
+ 0xcc,
+ 0xcc,
+ 0xcc,
+ 0xcc,
+ 0xcc,
+ 0x10,
+ 0x40,
+ /*entry*/ 0x10,
+ 'n',
+ 'u',
+ 'm',
+ 'b',
+ 'e',
+ 'r',
+ 0x00,
+ 0x39,
+ 0x30,
+ 0x00,
+ 0x00,
+ /*entry*/ 0x03,
+ 'o',
+ 'b',
+ 'j',
+ 'e',
+ 'c',
+ 't',
+ 0x00,
+ /*entry: obj-size */ 0x17,
+ 0x00,
+ 0x00,
+ 0x00,
+ /*entry: obj-entry*/ 0x02,
+ 's',
+ 't',
+ 'r',
+ 'i',
+ 'n',
+ 'g',
+ 0x00,
+ 0x06,
+ 0x00,
+ 0x00,
+ 0x00,
+ 'v',
+ 'a',
+ 'l',
+ 'u',
+ 'e',
+ 0,
+ /*entry: obj-term.*/ 0x00,
+ /*obj-term*/ 0x00};
const auto result = json::to_bson(j);
CHECK(result == expected);
@@ -884,7 +666,8 @@
{
SECTION("Example 1")
{
- std::vector<std::uint8_t> input = {0x16, 0x00, 0x00, 0x00, 0x02, 'h', 'e', 'l', 'l', 'o', 0x00, 0x06, 0x00, 0x00, 0x00, 'w', 'o', 'r', 'l', 'd', 0x00, 0x00};
+ std::vector<std::uint8_t> input = {0x16, 0x00, 0x00, 0x00, 0x02, 'h', 'e', 'l', 'l', 'o', 0x00,
+ 0x06, 0x00, 0x00, 0x00, 'w', 'o', 'r', 'l', 'd', 0x00, 0x00};
json parsed = json::from_bson(input);
json expected = {{"hello", "world"}};
CHECK(parsed == expected);
@@ -895,7 +678,9 @@
SECTION("Example 2")
{
- std::vector<std::uint8_t> input = {0x31, 0x00, 0x00, 0x00, 0x04, 'B', 'S', 'O', 'N', 0x00, 0x26, 0x00, 0x00, 0x00, 0x02, 0x30, 0x00, 0x08, 0x00, 0x00, 0x00, 'a', 'w', 'e', 's', 'o', 'm', 'e', 0x00, 0x01, 0x31, 0x00, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x14, 0x40, 0x10, 0x32, 0x00, 0xc2, 0x07, 0x00, 0x00, 0x00, 0x00};
+ std::vector<std::uint8_t> input = {0x31, 0x00, 0x00, 0x00, 0x04, 'B', 'S', 'O', 'N', 0x00, 0x26, 0x00, 0x00, 0x00, 0x02, 0x30, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 'a', 'w', 'e', 's', 'o', 'm', 'e', 0x00, 0x01, 0x31, 0x00, 0x33, 0x33,
+ 0x33, 0x33, 0x33, 0x33, 0x14, 0x40, 0x10, 0x32, 0x00, 0xc2, 0x07, 0x00, 0x00, 0x00, 0x00};
json parsed = json::from_bson(input);
json expected = {{"BSON", {"awesome", 5.05, 1986}}};
CHECK(parsed == expected);
@@ -908,94 +693,87 @@
TEST_CASE("BSON input/output_adapters")
{
- json json_representation =
- {
- {"double", 42.5},
- {"entry", 4.2},
- {"number", 12345},
- {"object", {{"string", "value"}}}};
+ json json_representation = {{"double", 42.5}, {"entry", 4.2}, {"number", 12345}, {"object", {{"string", "value"}}}};
- std::vector<std::uint8_t> const bson_representation =
- {
- /*size */ 0x4f,
- 0x00,
- 0x00,
- 0x00,
- /*entry*/ 0x01,
- 'd',
- 'o',
- 'u',
- 'b',
- 'l',
- 'e',
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x40,
- 0x45,
- 0x40,
- /*entry*/ 0x01,
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- 0x00,
- 0xcd,
- 0xcc,
- 0xcc,
- 0xcc,
- 0xcc,
- 0xcc,
- 0x10,
- 0x40,
- /*entry*/ 0x10,
- 'n',
- 'u',
- 'm',
- 'b',
- 'e',
- 'r',
- 0x00,
- 0x39,
- 0x30,
- 0x00,
- 0x00,
- /*entry*/ 0x03,
- 'o',
- 'b',
- 'j',
- 'e',
- 'c',
- 't',
- 0x00,
- /*entry: obj-size */ 0x17,
- 0x00,
- 0x00,
- 0x00,
- /*entry: obj-entry*/ 0x02,
- 's',
- 't',
- 'r',
- 'i',
- 'n',
- 'g',
- 0x00,
- 0x06,
- 0x00,
- 0x00,
- 0x00,
- 'v',
- 'a',
- 'l',
- 'u',
- 'e',
- 0,
- /*entry: obj-term.*/ 0x00,
- /*obj-term*/ 0x00};
+ std::vector<std::uint8_t> const bson_representation = {/*size */ 0x4f,
+ 0x00,
+ 0x00,
+ 0x00,
+ /*entry*/ 0x01,
+ 'd',
+ 'o',
+ 'u',
+ 'b',
+ 'l',
+ 'e',
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x40,
+ 0x45,
+ 0x40,
+ /*entry*/ 0x01,
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ 0x00,
+ 0xcd,
+ 0xcc,
+ 0xcc,
+ 0xcc,
+ 0xcc,
+ 0xcc,
+ 0x10,
+ 0x40,
+ /*entry*/ 0x10,
+ 'n',
+ 'u',
+ 'm',
+ 'b',
+ 'e',
+ 'r',
+ 0x00,
+ 0x39,
+ 0x30,
+ 0x00,
+ 0x00,
+ /*entry*/ 0x03,
+ 'o',
+ 'b',
+ 'j',
+ 'e',
+ 'c',
+ 't',
+ 0x00,
+ /*entry: obj-size */ 0x17,
+ 0x00,
+ 0x00,
+ 0x00,
+ /*entry: obj-entry*/ 0x02,
+ 's',
+ 't',
+ 'r',
+ 'i',
+ 'n',
+ 'g',
+ 0x00,
+ 0x06,
+ 0x00,
+ 0x00,
+ 0x00,
+ 'v',
+ 'a',
+ 'l',
+ 'u',
+ 'e',
+ 0,
+ /*entry: obj-term.*/ 0x00,
+ /*obj-term*/ 0x00};
json j2;
CHECK_NOTHROW(j2 = json::from_bson(bson_representation));
@@ -1031,7 +809,8 @@
}
}
-namespace {
+namespace
+{
class SaxCountdown
{
public:
@@ -1099,7 +878,9 @@
return events_left-- > 0;
}
- bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const json::exception& /*unused*/) // NOLINT(readability-convert-member-functions-to-static)
+ bool parse_error(std::size_t /*unused*/,
+ const std::string& /*unused*/,
+ const json::exception& /*unused*/) // NOLINT(readability-convert-member-functions-to-static)
{
return false;
}
@@ -1113,20 +894,21 @@
{
SECTION("Incomplete BSON Input 1")
{
- std::vector<std::uint8_t> const incomplete_bson =
- {
- 0x0D,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x08, // entry: boolean
- 'e',
- 'n',
- 't' // unexpected EOF
- };
+ std::vector<std::uint8_t> const incomplete_bson = {
+ 0x0D,
+ 0x00,
+ 0x00,
+ 0x00, // size (little endian)
+ 0x08, // entry: boolean
+ 'e',
+ 'n',
+ 't' // unexpected EOF
+ };
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bson(incomplete_bson), "[json.exception.parse_error.110] parse error at byte 9: syntax error while parsing BSON cstring: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bson(incomplete_bson),
+ "[json.exception.parse_error.110] parse error at byte 9: syntax error while parsing BSON cstring: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bson(incomplete_bson, true, false).is_discarded());
@@ -1136,17 +918,18 @@
SECTION("Incomplete BSON Input 2")
{
- std::vector<std::uint8_t> const incomplete_bson =
- {
- 0x0D,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x08, // entry: boolean, unexpected EOF
- };
+ std::vector<std::uint8_t> const incomplete_bson = {
+ 0x0D,
+ 0x00,
+ 0x00,
+ 0x00, // size (little endian)
+ 0x08, // entry: boolean, unexpected EOF
+ };
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bson(incomplete_bson), "[json.exception.parse_error.110] parse error at byte 6: syntax error while parsing BSON cstring: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bson(incomplete_bson),
+ "[json.exception.parse_error.110] parse error at byte 6: syntax error while parsing BSON cstring: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bson(incomplete_bson, true, false).is_discarded());
SaxCountdown scp(0);
@@ -1155,41 +938,23 @@
SECTION("Incomplete BSON Input 3")
{
- std::vector<std::uint8_t> const incomplete_bson =
- {
- 0x41,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x04, /// entry: embedded document
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
+ std::vector<std::uint8_t> const incomplete_bson = {
+ 0x41, 0x00, 0x00,
+ 0x00, // size (little endian)
+ 0x04, /// entry: embedded document
+ 'e', 'n', 't', 'r', 'y', '\x00',
- 0x35,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x10,
- 0x00,
- 0x01,
- 0x00,
- 0x00,
- 0x00,
- 0x10,
- 0x00,
- 0x02,
- 0x00,
- 0x00,
- 0x00
- // missing input data...
- };
+ 0x35, 0x00, 0x00,
+ 0x00, // size (little endian)
+ 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x10,
+ 0x00, 0x02, 0x00, 0x00, 0x00
+ // missing input data...
+ };
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bson(incomplete_bson), "[json.exception.parse_error.110] parse error at byte 28: syntax error while parsing BSON element list: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bson(incomplete_bson),
+ "[json.exception.parse_error.110] parse error at byte 28: syntax error while parsing BSON element list: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bson(incomplete_bson, true, false).is_discarded());
SaxCountdown scp(1);
@@ -1198,14 +963,15 @@
SECTION("Incomplete BSON Input 4")
{
- std::vector<std::uint8_t> const incomplete_bson =
- {
- 0x0D,
- 0x00, // size (incomplete), unexpected EOF
- };
+ std::vector<std::uint8_t> const incomplete_bson = {
+ 0x0D,
+ 0x00, // size (incomplete), unexpected EOF
+ };
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bson(incomplete_bson), "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing BSON number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bson(incomplete_bson),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing BSON number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_bson(incomplete_bson, true, false).is_discarded());
SaxCountdown scp(0);
@@ -1224,9 +990,7 @@
SECTION("array")
{
- json const j =
- {
- {"entry", json::array()}};
+ json const j = {{"entry", json::array()}};
auto bson_vec = json::to_bson(j);
SaxCountdown scp(2);
CHECK(!json::sax_parse(bson_vec, &scp, json::input_format_t::bson));
@@ -1237,68 +1001,47 @@
TEST_CASE("Negative size of binary value")
{
// invalid BSON: the size of the binary value is -1
- std::vector<std::uint8_t> const input =
- {
- 0x21,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0x05, // entry: binary
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
+ std::vector<std::uint8_t> const input = {
+ 0x21, 0x00, 0x00,
+ 0x00, // size (little endian)
+ 0x05, // entry: binary
+ 'e', 'n', 't', 'r', 'y', '\x00',
- 0xFF,
- 0xFF,
- 0xFF,
- 0xFF, // size of binary (little endian)
- 0x05, // MD5 binary subtype
- 0xd7,
- 0x7e,
- 0x27,
- 0x54,
- 0xbe,
- 0x12,
- 0x37,
- 0xfe,
- 0xd6,
- 0x0c,
- 0x33,
- 0x98,
- 0x30,
- 0x3b,
- 0x8d,
- 0xc4,
+ 0xFF, 0xFF, 0xFF,
+ 0xFF, // size of binary (little endian)
+ 0x05, // MD5 binary subtype
+ 0xd7, 0x7e, 0x27, 0x54, 0xbe, 0x12, 0x37, 0xfe, 0xd6, 0x0c, 0x33, 0x98, 0x30, 0x3b, 0x8d, 0xc4,
- 0x00 // end marker
- };
+ 0x00 // end marker
+ };
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bson(input), "[json.exception.parse_error.112] parse error at byte 15: syntax error while parsing BSON binary: byte array length cannot be negative, is -1", json::parse_error);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_bson(input),
+ "[json.exception.parse_error.112] parse error at byte 15: syntax error while parsing BSON binary: byte array length cannot be negative, is -1",
+ json::parse_error);
}
TEST_CASE("Unsupported BSON input")
{
- std::vector<std::uint8_t> const bson =
- {
- 0x0C,
- 0x00,
- 0x00,
- 0x00, // size (little endian)
- 0xFF, // entry type: Min key (not supported yet)
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- 0x00 // end marker
- };
+ std::vector<std::uint8_t> const bson = {
+ 0x0C,
+ 0x00,
+ 0x00,
+ 0x00, // size (little endian)
+ 0xFF, // entry type: Min key (not supported yet)
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ '\x00',
+ 0x00 // end marker
+ };
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_bson(bson), "[json.exception.parse_error.114] parse error at byte 5: Unsupported BSON record type 0xFF", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_bson(bson),
+ "[json.exception.parse_error.114] parse error at byte 5: Unsupported BSON record type 0xFF",
+ json::parse_error&);
CHECK(json::from_bson(bson, true, false).is_discarded());
SaxCountdown scp(0);
@@ -1331,35 +1074,32 @@
{
CAPTURE(i)
- json const j =
- {
- {"entry", i}};
+ json const j = {{"entry", i}};
CHECK(j.at("entry").is_number_integer());
std::uint64_t const iu = *reinterpret_cast<const std::uint64_t*>(&i);
- std::vector<std::uint8_t> const expected_bson =
- {
- 0x14u,
- 0x00u,
- 0x00u,
- 0x00u, // size (little endian)
- 0x12u, /// entry: int64
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- static_cast<std::uint8_t>((iu >> (8u * 0u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 1u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 2u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 3u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 4u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 5u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 6u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 7u)) & 0xffu),
- 0x00u // end marker
- };
+ std::vector<std::uint8_t> const expected_bson = {
+ 0x14u,
+ 0x00u,
+ 0x00u,
+ 0x00u, // size (little endian)
+ 0x12u, /// entry: int64
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ '\x00',
+ static_cast<std::uint8_t>((iu >> (8u * 0u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 1u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 2u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 3u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 4u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 5u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 6u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 7u)) & 0xffu),
+ 0x00u // end marker
+ };
const auto bson = json::to_bson(j);
CHECK(bson == expected_bson);
@@ -1374,62 +1114,58 @@
SECTION("signed std::int32_t: INT32_MIN .. INT32_MAX")
{
- std::vector<int32_t> const numbers{
- (std::numeric_limits<int32_t>::min)(),
- -2147483647L,
- -1000000000L,
- -100000000L,
- -10000000L,
- -1000000L,
- -100000L,
- -10000L,
- -1000L,
- -100L,
- -10L,
- -1L,
- 0L,
- 1L,
- 10L,
- 100L,
- 1000L,
- 10000L,
- 100000L,
- 1000000L,
- 10000000L,
- 100000000L,
- 1000000000L,
- 2147483646L,
- (std::numeric_limits<int32_t>::max)()};
+ std::vector<int32_t> const numbers{(std::numeric_limits<int32_t>::min)(),
+ -2147483647L,
+ -1000000000L,
+ -100000000L,
+ -10000000L,
+ -1000000L,
+ -100000L,
+ -10000L,
+ -1000L,
+ -100L,
+ -10L,
+ -1L,
+ 0L,
+ 1L,
+ 10L,
+ 100L,
+ 1000L,
+ 10000L,
+ 100000L,
+ 1000000L,
+ 10000000L,
+ 100000000L,
+ 1000000000L,
+ 2147483646L,
+ (std::numeric_limits<int32_t>::max)()};
for (const auto i : numbers)
{
CAPTURE(i)
- json const j =
- {
- {"entry", i}};
+ json const j = {{"entry", i}};
CHECK(j.at("entry").is_number_integer());
std::uint32_t const iu = *reinterpret_cast<const std::uint32_t*>(&i);
- std::vector<std::uint8_t> const expected_bson =
- {
- 0x10u,
- 0x00u,
- 0x00u,
- 0x00u, // size (little endian)
- 0x10u, /// entry: int32
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- static_cast<std::uint8_t>((iu >> (8u * 0u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 1u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 2u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 3u)) & 0xffu),
- 0x00u // end marker
- };
+ std::vector<std::uint8_t> const expected_bson = {
+ 0x10u,
+ 0x00u,
+ 0x00u,
+ 0x00u, // size (little endian)
+ 0x10u, /// entry: int32
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ '\x00',
+ static_cast<std::uint8_t>((iu >> (8u * 0u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 1u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 2u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 3u)) & 0xffu),
+ 0x00u // end marker
+ };
const auto bson = json::to_bson(j);
CHECK(bson == expected_bson);
@@ -1462,35 +1198,32 @@
{
CAPTURE(i)
- json const j =
- {
- {"entry", i}};
+ json const j = {{"entry", i}};
CHECK(j.at("entry").is_number_integer());
std::uint64_t const iu = *reinterpret_cast<const std::uint64_t*>(&i);
- std::vector<std::uint8_t> const expected_bson =
- {
- 0x14u,
- 0x00u,
- 0x00u,
- 0x00u, // size (little endian)
- 0x12u, /// entry: int64
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- static_cast<std::uint8_t>((iu >> (8u * 0u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 1u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 2u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 3u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 4u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 5u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 6u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 7u)) & 0xffu),
- 0x00u // end marker
- };
+ std::vector<std::uint8_t> const expected_bson = {
+ 0x14u,
+ 0x00u,
+ 0x00u,
+ 0x00u, // size (little endian)
+ 0x12u, /// entry: int64
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ '\x00',
+ static_cast<std::uint8_t>((iu >> (8u * 0u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 1u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 2u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 3u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 4u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 5u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 6u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 7u)) & 0xffu),
+ 0x00u // end marker
+ };
const auto bson = json::to_bson(j);
CHECK(bson == expected_bson);
@@ -1508,49 +1241,45 @@
{
SECTION("unsigned std::uint64_t: 0 .. INT32_MAX")
{
- std::vector<std::uint64_t> const numbers{
- 0ULL,
- 1ULL,
- 10ULL,
- 100ULL,
- 1000ULL,
- 10000ULL,
- 100000ULL,
- 1000000ULL,
- 10000000ULL,
- 100000000ULL,
- 1000000000ULL,
- 2147483646ULL,
- static_cast<std::uint64_t>((std::numeric_limits<int32_t>::max)())};
+ std::vector<std::uint64_t> const numbers{0ULL,
+ 1ULL,
+ 10ULL,
+ 100ULL,
+ 1000ULL,
+ 10000ULL,
+ 100000ULL,
+ 1000000ULL,
+ 10000000ULL,
+ 100000000ULL,
+ 1000000000ULL,
+ 2147483646ULL,
+ static_cast<std::uint64_t>((std::numeric_limits<int32_t>::max)())};
for (const auto i : numbers)
{
CAPTURE(i)
- json const j =
- {
- {"entry", i}};
+ json const j = {{"entry", i}};
auto iu = i;
- std::vector<std::uint8_t> const expected_bson =
- {
- 0x10u,
- 0x00u,
- 0x00u,
- 0x00u, // size (little endian)
- 0x10u, /// entry: int32
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- static_cast<std::uint8_t>((iu >> (8u * 0u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 1u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 2u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 3u)) & 0xffu),
- 0x00u // end marker
- };
+ std::vector<std::uint8_t> const expected_bson = {
+ 0x10u,
+ 0x00u,
+ 0x00u,
+ 0x00u, // size (little endian)
+ 0x10u, /// entry: int32
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ '\x00',
+ static_cast<std::uint8_t>((iu >> (8u * 0u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 1u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 2u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 3u)) & 0xffu),
+ 0x00u // end marker
+ };
const auto bson = json::to_bson(j);
CHECK(bson == expected_bson);
@@ -1586,34 +1315,31 @@
{
CAPTURE(i)
- json const j =
- {
- {"entry", i}};
+ json const j = {{"entry", i}};
auto iu = i;
- std::vector<std::uint8_t> const expected_bson =
- {
- 0x14u,
- 0x00u,
- 0x00u,
- 0x00u, // size (little endian)
- 0x12u, /// entry: int64
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- static_cast<std::uint8_t>((iu >> (8u * 0u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 1u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 2u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 3u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 4u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 5u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 6u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 7u)) & 0xffu),
- 0x00u // end marker
- };
+ std::vector<std::uint8_t> const expected_bson = {
+ 0x14u,
+ 0x00u,
+ 0x00u,
+ 0x00u, // size (little endian)
+ 0x12u, /// entry: int64
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ '\x00',
+ static_cast<std::uint8_t>((iu >> (8u * 0u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 1u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 2u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 3u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 4u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 5u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 6u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 7u)) & 0xffu),
+ 0x00u // end marker
+ };
const auto bson = json::to_bson(j);
CHECK(bson == expected_bson);
@@ -1641,40 +1367,41 @@
{
CAPTURE(i)
- json const j =
- {
- {"entry", i}};
+ json const j = {{"entry", i}};
auto iu = i;
- std::vector<std::uint8_t> const expected_bson =
- {
- 0x14u,
- 0x00u,
- 0x00u,
- 0x00u, // size (little endian)
- 0x12u, /// entry: int64
- 'e',
- 'n',
- 't',
- 'r',
- 'y',
- '\x00',
- static_cast<std::uint8_t>((iu >> (8u * 0u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 1u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 2u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 3u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 4u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 5u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 6u)) & 0xffu),
- static_cast<std::uint8_t>((iu >> (8u * 7u)) & 0xffu),
- 0x00u // end marker
- };
+ std::vector<std::uint8_t> const expected_bson = {
+ 0x14u,
+ 0x00u,
+ 0x00u,
+ 0x00u, // size (little endian)
+ 0x12u, /// entry: int64
+ 'e',
+ 'n',
+ 't',
+ 'r',
+ 'y',
+ '\x00',
+ static_cast<std::uint8_t>((iu >> (8u * 0u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 1u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 2u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 3u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 4u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 5u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 6u)) & 0xffu),
+ static_cast<std::uint8_t>((iu >> (8u * 7u)) & 0xffu),
+ 0x00u // end marker
+ };
CHECK_THROWS_AS(json::to_bson(j), json::out_of_range&);
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_STD_STR(json::to_bson(j), "[json.exception.out_of_range.407] (/entry) integer number " + std::to_string(i) + " cannot be represented by BSON as it does not fit int64");
+ CHECK_THROWS_WITH_STD_STR(json::to_bson(j),
+ "[json.exception.out_of_range.407] (/entry) integer number " + std::to_string(i) +
+ " cannot be represented by BSON as it does not fit int64");
#else
- CHECK_THROWS_WITH_STD_STR(json::to_bson(j), "[json.exception.out_of_range.407] integer number " + std::to_string(i) + " cannot be represented by BSON as it does not fit int64");
+ CHECK_THROWS_WITH_STD_STR(json::to_bson(j),
+ "[json.exception.out_of_range.407] integer number " + std::to_string(i) +
+ " cannot be represented by BSON as it does not fit int64");
#endif
}
}
@@ -1686,13 +1413,11 @@
{
SECTION("reference files")
{
- for (const std::string filename :
- {
- TEST_DATA_DIRECTORY "/json.org/1.json",
- TEST_DATA_DIRECTORY "/json.org/2.json",
- TEST_DATA_DIRECTORY "/json.org/3.json",
- TEST_DATA_DIRECTORY "/json.org/4.json",
- TEST_DATA_DIRECTORY "/json.org/5.json"})
+ for (const std::string filename : {TEST_DATA_DIRECTORY "/json.org/1.json",
+ TEST_DATA_DIRECTORY "/json.org/2.json",
+ TEST_DATA_DIRECTORY "/json.org/3.json",
+ TEST_DATA_DIRECTORY "/json.org/4.json",
+ TEST_DATA_DIRECTORY "/json.org/5.json"})
{
CAPTURE(filename)
diff --git a/tests/src/unit-cbor.cpp b/tests/src/unit-cbor.cpp
index d094dd3..b6b01d3 100644
--- a/tests/src/unit-cbor.cpp
+++ b/tests/src/unit-cbor.cpp
@@ -20,7 +20,8 @@
#include <set>
#include <sstream>
-namespace {
+namespace
+{
class SaxCountdown
{
public:
@@ -88,7 +89,9 @@
return events_left-- > 0;
}
- bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const json::exception& /*unused*/) // NOLINT(readability-convert-member-functions-to-static)
+ bool parse_error(std::size_t /*unused*/,
+ const std::string& /*unused*/,
+ const json::exception& /*unused*/) // NOLINT(readability-convert-member-functions-to-static)
{
return false;
}
@@ -217,14 +220,10 @@
// check individual bytes
CHECK(result[0] == 0x3b);
- const uint64_t restored = (static_cast<uint64_t>(result[1]) << 070) +
- (static_cast<uint64_t>(result[2]) << 060) +
- (static_cast<uint64_t>(result[3]) << 050) +
- (static_cast<uint64_t>(result[4]) << 040) +
- (static_cast<uint64_t>(result[5]) << 030) +
- (static_cast<uint64_t>(result[6]) << 020) +
- (static_cast<uint64_t>(result[7]) << 010) +
- static_cast<uint64_t>(result[8]);
+ const uint64_t restored = (static_cast<uint64_t>(result[1]) << 070) + (static_cast<uint64_t>(result[2]) << 060) +
+ (static_cast<uint64_t>(result[3]) << 050) + (static_cast<uint64_t>(result[4]) << 040) +
+ (static_cast<uint64_t>(result[5]) << 030) + (static_cast<uint64_t>(result[6]) << 020) +
+ (static_cast<uint64_t>(result[7]) << 010) + static_cast<uint64_t>(result[8]);
CHECK(restored == positive);
CHECK(-1 - static_cast<int64_t>(restored) == i);
@@ -272,10 +271,8 @@
// check individual bytes
CHECK(result[0] == 0x3a);
- const uint32_t restored = (static_cast<uint32_t>(result[1]) << 030) +
- (static_cast<uint32_t>(result[2]) << 020) +
- (static_cast<uint32_t>(result[3]) << 010) +
- static_cast<uint32_t>(result[4]);
+ const uint32_t restored = (static_cast<uint32_t>(result[1]) << 030) + (static_cast<uint32_t>(result[2]) << 020) +
+ (static_cast<uint32_t>(result[3]) << 010) + static_cast<uint32_t>(result[4]);
CHECK(restored == positive);
CHECK(-1LL - restored == i);
@@ -506,11 +503,7 @@
SECTION("65536..4294967295")
{
- for (const uint32_t i :
- {
- 65536u,
- 77777u,
- 1048576u})
+ for (const uint32_t i : {65536u, 77777u, 1048576u})
{
CAPTURE(i)
@@ -537,10 +530,8 @@
// check individual bytes
CHECK(result[0] == 0x1a);
- const uint32_t restored = (static_cast<uint32_t>(result[1]) << 030) +
- (static_cast<uint32_t>(result[2]) << 020) +
- (static_cast<uint32_t>(result[3]) << 010) +
- static_cast<uint32_t>(result[4]);
+ const uint32_t restored = (static_cast<uint32_t>(result[1]) << 030) + (static_cast<uint32_t>(result[2]) << 020) +
+ (static_cast<uint32_t>(result[3]) << 010) + static_cast<uint32_t>(result[4]);
CHECK(restored == i);
// roundtrip
@@ -551,10 +542,7 @@
SECTION("4294967296..4611686018427387903")
{
- for (const uint64_t i :
- {
- 4294967296ul,
- 4611686018427387903ul})
+ for (const uint64_t i : {4294967296ul, 4611686018427387903ul})
{
CAPTURE(i)
@@ -585,14 +573,10 @@
// check individual bytes
CHECK(result[0] == 0x1b);
- const uint64_t restored = (static_cast<uint64_t>(result[1]) << 070) +
- (static_cast<uint64_t>(result[2]) << 060) +
- (static_cast<uint64_t>(result[3]) << 050) +
- (static_cast<uint64_t>(result[4]) << 040) +
- (static_cast<uint64_t>(result[5]) << 030) +
- (static_cast<uint64_t>(result[6]) << 020) +
- (static_cast<uint64_t>(result[7]) << 010) +
- static_cast<uint64_t>(result[8]);
+ const uint64_t restored = (static_cast<uint64_t>(result[1]) << 070) + (static_cast<uint64_t>(result[2]) << 060) +
+ (static_cast<uint64_t>(result[3]) << 050) + (static_cast<uint64_t>(result[4]) << 040) +
+ (static_cast<uint64_t>(result[5]) << 030) + (static_cast<uint64_t>(result[6]) << 020) +
+ (static_cast<uint64_t>(result[7]) << 010) + static_cast<uint64_t>(result[8]);
CHECK(restored == i);
// roundtrip
@@ -740,11 +724,7 @@
SECTION("65536..4294967295 (four-byte uint32_t)")
{
- for (const uint32_t i :
- {
- 65536u,
- 77777u,
- 1048576u})
+ for (const uint32_t i : {65536u, 77777u, 1048576u})
{
CAPTURE(i)
@@ -770,10 +750,8 @@
// check individual bytes
CHECK(result[0] == 0x1a);
- const uint32_t restored = (static_cast<uint32_t>(result[1]) << 030) +
- (static_cast<uint32_t>(result[2]) << 020) +
- (static_cast<uint32_t>(result[3]) << 010) +
- static_cast<uint32_t>(result[4]);
+ const uint32_t restored = (static_cast<uint32_t>(result[1]) << 030) + (static_cast<uint32_t>(result[2]) << 020) +
+ (static_cast<uint32_t>(result[3]) << 010) + static_cast<uint32_t>(result[4]);
CHECK(restored == i);
// roundtrip
@@ -784,10 +762,7 @@
SECTION("4294967296..4611686018427387903 (eight-byte uint64_t)")
{
- for (const uint64_t i :
- {
- 4294967296ul,
- 4611686018427387903ul})
+ for (const uint64_t i : {4294967296ul, 4611686018427387903ul})
{
CAPTURE(i)
@@ -817,14 +792,10 @@
// check individual bytes
CHECK(result[0] == 0x1b);
- const uint64_t restored = (static_cast<uint64_t>(result[1]) << 070) +
- (static_cast<uint64_t>(result[2]) << 060) +
- (static_cast<uint64_t>(result[3]) << 050) +
- (static_cast<uint64_t>(result[4]) << 040) +
- (static_cast<uint64_t>(result[5]) << 030) +
- (static_cast<uint64_t>(result[6]) << 020) +
- (static_cast<uint64_t>(result[7]) << 010) +
- static_cast<uint64_t>(result[8]);
+ const uint64_t restored = (static_cast<uint64_t>(result[1]) << 070) + (static_cast<uint64_t>(result[2]) << 060) +
+ (static_cast<uint64_t>(result[3]) << 050) + (static_cast<uint64_t>(result[4]) << 040) +
+ (static_cast<uint64_t>(result[5]) << 030) + (static_cast<uint64_t>(result[6]) << 020) +
+ (static_cast<uint64_t>(result[7]) << 010) + static_cast<uint64_t>(result[8]);
CHECK(restored == i);
// roundtrip
@@ -840,17 +811,7 @@
{
double v = 3.1415925;
const json j = v;
- std::vector<uint8_t> expected =
- {
- 0xfb,
- 0x40,
- 0x09,
- 0x21,
- 0xfb,
- 0x3f,
- 0xa6,
- 0xde,
- 0xfc};
+ std::vector<uint8_t> expected = {0xfb, 0x40, 0x09, 0x21, 0xfb, 0x3f, 0xa6, 0xde, 0xfc};
const auto result = json::to_cbor(j);
CHECK(result == expected);
@@ -934,13 +895,7 @@
{
float v = (std::numeric_limits<float>::max)();
const json j = v;
- const std::vector<uint8_t> expected =
- {
- 0xfa,
- 0x7f,
- 0x7f,
- 0xff,
- 0xff};
+ const std::vector<uint8_t> expected = {0xfa, 0x7f, 0x7f, 0xff, 0xff};
const auto result = json::to_cbor(j);
CHECK(result == expected);
// roundtrip
@@ -951,13 +906,7 @@
{
auto v = static_cast<double>(std::numeric_limits<float>::lowest());
const json j = v;
- const std::vector<uint8_t> expected =
- {
- 0xfa,
- 0xff,
- 0x7f,
- 0xff,
- 0xff};
+ const std::vector<uint8_t> expected = {0xfa, 0xff, 0x7f, 0xff, 0xff};
const auto result = json::to_cbor(j);
CHECK(result == expected);
// roundtrip
@@ -968,17 +917,7 @@
{
double v = static_cast<double>((std::numeric_limits<float>::max)()) + 0.1e+34;
const json j = v;
- const std::vector<uint8_t> expected =
- {
- 0xfb,
- 0x47,
- 0xf0,
- 0x00,
- 0x03,
- 0x04,
- 0xdc,
- 0x64,
- 0x49};
+ const std::vector<uint8_t> expected = {0xfb, 0x47, 0xf0, 0x00, 0x03, 0x04, 0xdc, 0x64, 0x49};
// double
const auto result = json::to_cbor(j);
CHECK(result == expected);
@@ -990,13 +929,7 @@
{
double v = static_cast<double>(std::numeric_limits<float>::lowest()) - 1.0;
const json j = v;
- const std::vector<uint8_t> expected =
- {
- 0xfa,
- 0xff,
- 0x7f,
- 0xff,
- 0xff};
+ const std::vector<uint8_t> expected = {0xfa, 0xff, 0x7f, 0xff, 0xff};
// the same with lowest float
const auto result = json::to_cbor(j);
CHECK(result == expected);
@@ -1013,13 +946,19 @@
SECTION("no byte follows")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0xf9})), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_cbor(std::vector<uint8_t>({0xf9})),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_cbor(std::vector<uint8_t>({0xf9}), true, false).is_discarded());
}
SECTION("only one byte follows")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0xf9, 0x7c})), "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_cbor(std::vector<uint8_t>({0xf9, 0x7c})),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_cbor(std::vector<uint8_t>({0xf9, 0x7c}), true, false).is_discarded());
}
}
@@ -1180,14 +1119,7 @@
SECTION("N = 256..65535")
{
- for (const size_t N :
- {
- 256u,
- 999u,
- 1025u,
- 3333u,
- 2048u,
- 65535u})
+ for (const size_t N : {256u, 999u, 1025u, 3333u, 2048u, 65535u})
{
CAPTURE(N)
@@ -1217,11 +1149,7 @@
SECTION("N = 65536..4294967295")
{
- for (const size_t N :
- {
- 65536u,
- 77777u,
- 1048576u})
+ for (const size_t N : {65536u, 77777u, 1048576u})
{
CAPTURE(N)
@@ -1364,18 +1292,7 @@
SECTION("{\"a\": {\"b\": {\"c\": {}}}}")
{
const json j = json::parse(R"({"a": {"b": {"c": {}}}})");
- const std::vector<uint8_t> expected =
- {
- 0xa1,
- 0x61,
- 0x61,
- 0xa1,
- 0x61,
- 0x62,
- 0xa1,
- 0x61,
- 0x63,
- 0xa0};
+ const std::vector<uint8_t> expected = {0xa1, 0x61, 0x61, 0xa1, 0x61, 0x62, 0xa1, 0x61, 0x63, 0xa0};
const auto result = json::to_cbor(j);
CHECK(result == expected);
@@ -1542,14 +1459,7 @@
SECTION("N = 256..65535")
{
- for (const size_t N :
- {
- 256u,
- 999u,
- 1025u,
- 3333u,
- 2048u,
- 65535u})
+ for (const size_t N : {256u, 999u, 1025u, 3333u, 2048u, 65535u})
{
CAPTURE(N)
@@ -1579,11 +1489,7 @@
SECTION("N = 65536..4294967295")
{
- for (const size_t N :
- {
- 65536u,
- 77777u,
- 1048576u})
+ for (const size_t N : {65536u, 77777u, 1048576u})
{
CAPTURE(N)
@@ -1699,40 +1605,97 @@
SECTION("empty byte vector")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>()), "[json.exception.parse_error.110] parse error at byte 1: syntax error while parsing CBOR value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>()),
+ "[json.exception.parse_error.110] parse error at byte 1: syntax error while parsing CBOR value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_cbor(std::vector<uint8_t>(), true, false).is_discarded());
}
SECTION("too short byte vector")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x18})), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x19})), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x19, 0x00})), "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1a})), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1a, 0x00})), "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1a, 0x00, 0x00})), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1a, 0x00, 0x00, 0x00})), "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1b})), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1b, 0x00})), "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1b, 0x00, 0x00})), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1b, 0x00, 0x00, 0x00})), "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1b, 0x00, 0x00, 0x00, 0x00})), "[json.exception.parse_error.110] parse error at byte 6: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1b, 0x00, 0x00, 0x00, 0x00, 0x00})), "[json.exception.parse_error.110] parse error at byte 7: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})), "[json.exception.parse_error.110] parse error at byte 8: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})), "[json.exception.parse_error.110] parse error at byte 9: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x62})), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR string: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x62, 0x60})), "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR string: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x7F})), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR string: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x7F, 0x60})), "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR string: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x82, 0x01})), "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR value: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x9F, 0x01})), "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR value: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0xBF, 0x61, 0x61, 0xF5})), "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR string: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0xA1, 0x61, 0X61})), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing CBOR value: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0xBF, 0x61, 0X61})), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing CBOR value: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x5F})), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR binary: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x5F, 0x00})), "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing CBOR binary: expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x00", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x41})), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR binary: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x18})),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x19})),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x19, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1a})),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1a, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1a, 0x00, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1a, 0x00, 0x00, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1b})),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1b, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1b, 0x00, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1b, 0x00, 0x00, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1b, 0x00, 0x00, 0x00, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 6: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1b, 0x00, 0x00, 0x00, 0x00, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 7: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 8: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 9: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x62})),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR string: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x62, 0x60})),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR string: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x7F})),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR string: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x7F, 0x60})),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR string: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x82, 0x01})),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR value: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x9F, 0x01})),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR value: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0xBF, 0x61, 0x61, 0xF5})),
+ "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR string: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0xA1, 0x61, 0X61})),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing CBOR value: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0xBF, 0x61, 0X61})),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing CBOR value: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x5F})),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR binary: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_cbor(std::vector<uint8_t>({0x5F, 0x00})),
+ "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing CBOR binary: expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x00",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x41})),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR binary: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_cbor(std::vector<uint8_t>({0x18}), true, false).is_discarded());
CHECK(json::from_cbor(std::vector<uint8_t>({0x19}), true, false).is_discarded());
@@ -1768,108 +1731,110 @@
SECTION("concrete examples")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1c})), "[json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0x1C", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0x1c})),
+ "[json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0x1C",
+ json::parse_error&);
CHECK(json::from_cbor(std::vector<uint8_t>({0x1c}), true, false).is_discarded());
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0xf8})), "[json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0xF8", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0xf8})),
+ "[json.exception.parse_error.112] parse error at byte 1: syntax error while parsing CBOR value: invalid byte: 0xF8",
+ json::parse_error&);
CHECK(json::from_cbor(std::vector<uint8_t>({0xf8}), true, false).is_discarded());
}
SECTION("all unsupported bytes")
{
- for (const auto byte :
- {
- // ?
- 0x1c,
- 0x1d,
- 0x1e,
- 0x1f,
- // ?
- 0x3c,
- 0x3d,
- 0x3e,
- 0x3f,
- // ?
- 0x5c,
- 0x5d,
- 0x5e,
- // ?
- 0x7c,
- 0x7d,
- 0x7e,
- // ?
- 0x9c,
- 0x9d,
- 0x9e,
- // ?
- 0xbc,
- 0xbd,
- 0xbe,
- // date/time
- 0xc0,
- 0xc1,
- // bignum
- 0xc2,
- 0xc3,
- // fraction
- 0xc4,
- // bigfloat
- 0xc5,
- // tagged item
- 0xc6,
- 0xc7,
- 0xc8,
- 0xc9,
- 0xca,
- 0xcb,
- 0xcc,
- 0xcd,
- 0xce,
- 0xcf,
- 0xd0,
- 0xd1,
- 0xd2,
- 0xd3,
- 0xd4,
- // expected conversion
- 0xd5,
- 0xd6,
- 0xd7,
- // more tagged items
- 0xd8,
- 0xd9,
- 0xda,
- 0xdb,
- // ?
- 0xdc,
- 0xdd,
- 0xde,
- 0xdf,
- // (simple value)
- 0xe0,
- 0xe1,
- 0xe2,
- 0xe3,
- 0xe4,
- 0xe5,
- 0xe6,
- 0xe7,
- 0xe8,
- 0xe9,
- 0xea,
- 0xeb,
- 0xec,
- 0xed,
- 0xee,
- 0xef,
- 0xf0,
- 0xf1,
- 0xf2,
- 0xf3,
- // undefined
- 0xf7,
- // simple value
- 0xf8})
+ for (const auto byte : {// ?
+ 0x1c,
+ 0x1d,
+ 0x1e,
+ 0x1f,
+ // ?
+ 0x3c,
+ 0x3d,
+ 0x3e,
+ 0x3f,
+ // ?
+ 0x5c,
+ 0x5d,
+ 0x5e,
+ // ?
+ 0x7c,
+ 0x7d,
+ 0x7e,
+ // ?
+ 0x9c,
+ 0x9d,
+ 0x9e,
+ // ?
+ 0xbc,
+ 0xbd,
+ 0xbe,
+ // date/time
+ 0xc0,
+ 0xc1,
+ // bignum
+ 0xc2,
+ 0xc3,
+ // fraction
+ 0xc4,
+ // bigfloat
+ 0xc5,
+ // tagged item
+ 0xc6,
+ 0xc7,
+ 0xc8,
+ 0xc9,
+ 0xca,
+ 0xcb,
+ 0xcc,
+ 0xcd,
+ 0xce,
+ 0xcf,
+ 0xd0,
+ 0xd1,
+ 0xd2,
+ 0xd3,
+ 0xd4,
+ // expected conversion
+ 0xd5,
+ 0xd6,
+ 0xd7,
+ // more tagged items
+ 0xd8,
+ 0xd9,
+ 0xda,
+ 0xdb,
+ // ?
+ 0xdc,
+ 0xdd,
+ 0xde,
+ 0xdf,
+ // (simple value)
+ 0xe0,
+ 0xe1,
+ 0xe2,
+ 0xe3,
+ 0xe4,
+ 0xe5,
+ 0xe6,
+ 0xe7,
+ 0xe8,
+ 0xe9,
+ 0xea,
+ 0xeb,
+ 0xec,
+ 0xed,
+ 0xee,
+ 0xef,
+ 0xf0,
+ 0xf1,
+ 0xf2,
+ 0xf3,
+ // undefined
+ 0xf7,
+ // simple value
+ 0xf8})
{
json _;
CHECK_THROWS_AS(_ = json::from_cbor(std::vector<uint8_t>({static_cast<uint8_t>(byte)})), json::parse_error&);
@@ -1881,7 +1846,10 @@
SECTION("invalid string in map")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(std::vector<uint8_t>({0xa1, 0xff, 0x01})), "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing CBOR string: expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0xFF", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_cbor(std::vector<uint8_t>({0xa1, 0xff, 0x01})),
+ "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing CBOR string: expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0xFF",
+ json::parse_error&);
CHECK(json::from_cbor(std::vector<uint8_t>({0xa1, 0xff, 0x01}), true, false).is_discarded());
}
@@ -1898,7 +1866,10 @@
SECTION("strict mode")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR value: expected end of input; last byte: 0xF6", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_cbor(vec),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR value: expected end of input; last byte: 0xF6",
+ json::parse_error&);
CHECK(json::from_cbor(vec, true, false).is_discarded());
}
}
@@ -1984,28 +1955,13 @@
detected.
*/
for (const std::string filename :
- {
- TEST_DATA_DIRECTORY "/cbor_regression/test01",
- TEST_DATA_DIRECTORY "/cbor_regression/test02",
- TEST_DATA_DIRECTORY "/cbor_regression/test03",
- TEST_DATA_DIRECTORY "/cbor_regression/test04",
- TEST_DATA_DIRECTORY "/cbor_regression/test05",
- TEST_DATA_DIRECTORY "/cbor_regression/test06",
- TEST_DATA_DIRECTORY "/cbor_regression/test07",
- TEST_DATA_DIRECTORY "/cbor_regression/test08",
- TEST_DATA_DIRECTORY "/cbor_regression/test09",
- TEST_DATA_DIRECTORY "/cbor_regression/test10",
- TEST_DATA_DIRECTORY "/cbor_regression/test11",
- TEST_DATA_DIRECTORY "/cbor_regression/test12",
- TEST_DATA_DIRECTORY "/cbor_regression/test13",
- TEST_DATA_DIRECTORY "/cbor_regression/test14",
- TEST_DATA_DIRECTORY "/cbor_regression/test15",
- TEST_DATA_DIRECTORY "/cbor_regression/test16",
- TEST_DATA_DIRECTORY "/cbor_regression/test17",
- TEST_DATA_DIRECTORY "/cbor_regression/test18",
- TEST_DATA_DIRECTORY "/cbor_regression/test19",
- TEST_DATA_DIRECTORY "/cbor_regression/test20",
- TEST_DATA_DIRECTORY "/cbor_regression/test21"})
+ {TEST_DATA_DIRECTORY "/cbor_regression/test01", TEST_DATA_DIRECTORY "/cbor_regression/test02", TEST_DATA_DIRECTORY "/cbor_regression/test03",
+ TEST_DATA_DIRECTORY "/cbor_regression/test04", TEST_DATA_DIRECTORY "/cbor_regression/test05", TEST_DATA_DIRECTORY "/cbor_regression/test06",
+ TEST_DATA_DIRECTORY "/cbor_regression/test07", TEST_DATA_DIRECTORY "/cbor_regression/test08", TEST_DATA_DIRECTORY "/cbor_regression/test09",
+ TEST_DATA_DIRECTORY "/cbor_regression/test10", TEST_DATA_DIRECTORY "/cbor_regression/test11", TEST_DATA_DIRECTORY "/cbor_regression/test12",
+ TEST_DATA_DIRECTORY "/cbor_regression/test13", TEST_DATA_DIRECTORY "/cbor_regression/test14", TEST_DATA_DIRECTORY "/cbor_regression/test15",
+ TEST_DATA_DIRECTORY "/cbor_regression/test16", TEST_DATA_DIRECTORY "/cbor_regression/test17", TEST_DATA_DIRECTORY "/cbor_regression/test18",
+ TEST_DATA_DIRECTORY "/cbor_regression/test19", TEST_DATA_DIRECTORY "/cbor_regression/test20", TEST_DATA_DIRECTORY "/cbor_regression/test21"})
{
CAPTURE(filename)
@@ -2059,153 +2015,151 @@
exclude_packed.insert(TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_duplicated_key.json");
exclude_packed.insert(TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_long_strings.json");
- for (const std::string filename :
- {
- TEST_DATA_DIRECTORY "/json_nlohmann_tests/all_unicode.json",
- TEST_DATA_DIRECTORY "/json.org/1.json",
- TEST_DATA_DIRECTORY "/json.org/2.json",
- TEST_DATA_DIRECTORY "/json.org/3.json",
- TEST_DATA_DIRECTORY "/json.org/4.json",
- TEST_DATA_DIRECTORY "/json.org/5.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip01.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip02.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip03.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip04.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip05.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip06.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip07.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip08.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip09.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip10.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip11.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip12.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip13.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip14.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip15.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip16.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip17.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip18.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip19.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip20.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip21.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip22.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip23.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip24.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip25.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip26.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip27.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip28.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip29.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip30.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip31.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip32.json",
- TEST_DATA_DIRECTORY "/json_testsuite/sample.json", // kills AppVeyor
- TEST_DATA_DIRECTORY "/json_tests/pass1.json",
- TEST_DATA_DIRECTORY "/json_tests/pass2.json",
- TEST_DATA_DIRECTORY "/json_tests/pass3.json",
- TEST_DATA_DIRECTORY "/regression/floats.json",
- TEST_DATA_DIRECTORY "/regression/signed_ints.json",
- TEST_DATA_DIRECTORY "/regression/unsigned_ints.json",
- TEST_DATA_DIRECTORY "/regression/working_file.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_arraysWithSpaces.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_empty-string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_empty.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_ending_with_newline.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_false.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_heterogeneous.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_1_and_newline.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_leading_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_several_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_trailing_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_0e+1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_0e1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_after_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_double_close_to_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_double_huge_neg_exp.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_huge_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_int_with_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_minus_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_one.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e_neg_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e_pos_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_exponent.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_fraction_exponent.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_neg_exp.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_neg_overflow.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_pos_exponent.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_pos_overflow.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_underflow.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_simple_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_simple_real.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_too_big_neg_int.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_too_big_pos_int.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_very_big_negative_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_basic.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_duplicated_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_duplicated_key_and_value.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_empty.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_empty_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_escaped_null_in_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_extreme_numbers.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_long_strings.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_simple.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_string_unicode.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_with_newlines.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_UTF-16_Surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_accepted_surrogate_pair.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_accepted_surrogate_pairs.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_allowed_escapes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_backslash_and_u_escaped_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_backslash_doublequotes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_comments.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_double_escape_a.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_double_escape_n.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_escaped_control_character.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_escaped_noncharacter.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_in_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_in_array_with_leading_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_last_surrogates_1_and_2.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_newline_uescaped.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+1FFFF.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_null_escape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_one-byte-utf-8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_pi.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_simple_ascii.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_three-byte-utf-8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_two-byte-utf-8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_u+2028_line_sep.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_u+2029_par_sep.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_uEscape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unescaped_char_delete.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicodeEscapedBackslash.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_2.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_U+2064_invisible_plus.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_escaped_double_quote.json",
- // TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_utf16.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_utf8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_with_del_character.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_false.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_negative_real.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_true.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_string_empty.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_trailing_newline.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_true_in_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_whitespace_array.json"})
+ for (const std::string filename : {TEST_DATA_DIRECTORY "/json_nlohmann_tests/all_unicode.json",
+ TEST_DATA_DIRECTORY "/json.org/1.json",
+ TEST_DATA_DIRECTORY "/json.org/2.json",
+ TEST_DATA_DIRECTORY "/json.org/3.json",
+ TEST_DATA_DIRECTORY "/json.org/4.json",
+ TEST_DATA_DIRECTORY "/json.org/5.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip01.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip02.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip03.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip04.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip05.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip06.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip07.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip08.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip09.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip10.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip11.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip12.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip13.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip14.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip15.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip16.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip17.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip18.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip19.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip20.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip21.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip22.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip23.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip24.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip25.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip26.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip27.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip28.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip29.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip30.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip31.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip32.json",
+ TEST_DATA_DIRECTORY "/json_testsuite/sample.json", // kills AppVeyor
+ TEST_DATA_DIRECTORY "/json_tests/pass1.json",
+ TEST_DATA_DIRECTORY "/json_tests/pass2.json",
+ TEST_DATA_DIRECTORY "/json_tests/pass3.json",
+ TEST_DATA_DIRECTORY "/regression/floats.json",
+ TEST_DATA_DIRECTORY "/regression/signed_ints.json",
+ TEST_DATA_DIRECTORY "/regression/unsigned_ints.json",
+ TEST_DATA_DIRECTORY "/regression/working_file.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_arraysWithSpaces.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_empty-string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_empty.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_ending_with_newline.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_false.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_heterogeneous.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_1_and_newline.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_leading_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_several_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_trailing_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_0e+1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_0e1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_after_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_double_close_to_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_double_huge_neg_exp.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_huge_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_int_with_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_minus_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_one.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e_neg_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e_pos_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_exponent.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_fraction_exponent.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_neg_exp.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_neg_overflow.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_pos_exponent.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_pos_overflow.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_underflow.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_simple_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_simple_real.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_too_big_neg_int.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_too_big_pos_int.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_very_big_negative_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_basic.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_duplicated_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_duplicated_key_and_value.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_empty.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_empty_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_escaped_null_in_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_extreme_numbers.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_long_strings.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_simple.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_string_unicode.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_with_newlines.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_UTF-16_Surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_accepted_surrogate_pair.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_accepted_surrogate_pairs.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_allowed_escapes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_backslash_and_u_escaped_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_backslash_doublequotes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_comments.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_double_escape_a.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_double_escape_n.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_escaped_control_character.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_escaped_noncharacter.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_in_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_in_array_with_leading_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_last_surrogates_1_and_2.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_newline_uescaped.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+1FFFF.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_null_escape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_one-byte-utf-8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_pi.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_simple_ascii.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_three-byte-utf-8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_two-byte-utf-8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_u+2028_line_sep.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_u+2029_par_sep.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_uEscape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unescaped_char_delete.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicodeEscapedBackslash.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_2.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_U+2064_invisible_plus.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_escaped_double_quote.json",
+ // TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_utf16.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_utf8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_with_del_character.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_false.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_negative_real.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_true.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_string_empty.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_trailing_newline.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_true_in_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_whitespace_array.json"})
{
CAPTURE(filename)
@@ -2281,102 +2235,100 @@
TEST_CASE("all CBOR first bytes")
{
// these bytes will fail immediately with exception parse_error.112
- std::set<uint8_t> unsupported =
- {
- //// types not supported by this library
+ std::set<uint8_t> unsupported = {//// types not supported by this library
- // date/time
- 0xc0,
- 0xc1,
- // bignum
- 0xc2,
- 0xc3,
- // decimal fracion
- 0xc4,
- // bigfloat
- 0xc5,
- // tagged item
- 0xc6,
- 0xc7,
- 0xc8,
- 0xc9,
- 0xca,
- 0xcb,
- 0xcc,
- 0xcd,
- 0xce,
- 0xcf,
- 0xd0,
- 0xd1,
- 0xd2,
- 0xd3,
- 0xd4,
- 0xd8,
- 0xd9,
- 0xda,
- 0xdb,
- // expected conversion
- 0xd5,
- 0xd6,
- 0xd7,
- // simple value
- 0xe0,
- 0xe1,
- 0xe2,
- 0xe3,
- 0xe4,
- 0xe5,
- 0xe6,
- 0xe7,
- 0xe8,
- 0xe9,
- 0xea,
- 0xeb,
- 0xec,
- 0xed,
- 0xef,
- 0xf0,
- 0xf1,
- 0xf2,
- 0xf3,
- 0xf8,
- // undefined
- 0xf7,
+ // date/time
+ 0xc0,
+ 0xc1,
+ // bignum
+ 0xc2,
+ 0xc3,
+ // decimal fracion
+ 0xc4,
+ // bigfloat
+ 0xc5,
+ // tagged item
+ 0xc6,
+ 0xc7,
+ 0xc8,
+ 0xc9,
+ 0xca,
+ 0xcb,
+ 0xcc,
+ 0xcd,
+ 0xce,
+ 0xcf,
+ 0xd0,
+ 0xd1,
+ 0xd2,
+ 0xd3,
+ 0xd4,
+ 0xd8,
+ 0xd9,
+ 0xda,
+ 0xdb,
+ // expected conversion
+ 0xd5,
+ 0xd6,
+ 0xd7,
+ // simple value
+ 0xe0,
+ 0xe1,
+ 0xe2,
+ 0xe3,
+ 0xe4,
+ 0xe5,
+ 0xe6,
+ 0xe7,
+ 0xe8,
+ 0xe9,
+ 0xea,
+ 0xeb,
+ 0xec,
+ 0xed,
+ 0xef,
+ 0xf0,
+ 0xf1,
+ 0xf2,
+ 0xf3,
+ 0xf8,
+ // undefined
+ 0xf7,
- //// bytes not specified by CBOR
+ //// bytes not specified by CBOR
- 0x1c,
- 0x1d,
- 0x1e,
- 0x1f,
- 0x3c,
- 0x3d,
- 0x3e,
- 0x3f,
- 0x5c,
- 0x5d,
- 0x5e,
- 0x7c,
- 0x7d,
- 0x7e,
- 0x9c,
- 0x9d,
- 0x9e,
- 0xbc,
- 0xbd,
- 0xbe,
- 0xdc,
- 0xdd,
- 0xde,
- 0xdf,
- 0xee,
- 0xfc,
- 0xfe,
- 0xfd,
+ 0x1c,
+ 0x1d,
+ 0x1e,
+ 0x1f,
+ 0x3c,
+ 0x3d,
+ 0x3e,
+ 0x3f,
+ 0x5c,
+ 0x5d,
+ 0x5e,
+ 0x7c,
+ 0x7d,
+ 0x7e,
+ 0x9c,
+ 0x9d,
+ 0x9e,
+ 0xbc,
+ 0xbd,
+ 0xbe,
+ 0xdc,
+ 0xdd,
+ 0xde,
+ 0xdf,
+ 0xee,
+ 0xfc,
+ 0xfe,
+ 0xfd,
- /// break cannot be the first byte
+ /// break cannot be the first byte
- 0xff};
+ 0xff};
for (auto i = 0; i < 256; ++i)
{
@@ -2545,7 +2497,8 @@
CHECK(json::parse("\"\\ud800\\udd51\"") == json::from_cbor(std::vector<uint8_t>({0x64, 0xf0, 0x90, 0x85, 0x91})));
// indefinite length strings
- CHECK(json::parse("\"streaming\"") == json::from_cbor(std::vector<uint8_t>({0x7f, 0x65, 0x73, 0x74, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x67, 0xff})));
+ CHECK(json::parse("\"streaming\"") ==
+ json::from_cbor(std::vector<uint8_t>({0x7f, 0x65, 0x73, 0x74, 0x72, 0x65, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x67, 0xff})));
}
SECTION("byte arrays")
@@ -2559,20 +2512,35 @@
// 0xd8
CHECK(json::to_cbor(json::binary(std::vector<uint8_t>{}, 0x42)) == std::vector<uint8_t>{0xd8, 0x42, 0x40});
- CHECK(!json::from_cbor(json::to_cbor(json::binary(std::vector<uint8_t>{}, 0x42)), true, true, json::cbor_tag_handler_t::ignore).get_binary().has_subtype());
- CHECK(json::from_cbor(json::to_cbor(json::binary(std::vector<uint8_t>{}, 0x42)), true, true, json::cbor_tag_handler_t::store).get_binary().subtype() == 0x42);
+ CHECK(!json::from_cbor(json::to_cbor(json::binary(std::vector<uint8_t>{}, 0x42)), true, true, json::cbor_tag_handler_t::ignore)
+ .get_binary()
+ .has_subtype());
+ CHECK(json::from_cbor(json::to_cbor(json::binary(std::vector<uint8_t>{}, 0x42)), true, true, json::cbor_tag_handler_t::store).get_binary().subtype() ==
+ 0x42);
// 0xd9
CHECK(json::to_cbor(json::binary(std::vector<uint8_t>{}, 1000)) == std::vector<uint8_t>{0xd9, 0x03, 0xe8, 0x40});
- CHECK(!json::from_cbor(json::to_cbor(json::binary(std::vector<uint8_t>{}, 1000)), true, true, json::cbor_tag_handler_t::ignore).get_binary().has_subtype());
- CHECK(json::from_cbor(json::to_cbor(json::binary(std::vector<uint8_t>{}, 1000)), true, true, json::cbor_tag_handler_t::store).get_binary().subtype() == 1000);
+ CHECK(!json::from_cbor(json::to_cbor(json::binary(std::vector<uint8_t>{}, 1000)), true, true, json::cbor_tag_handler_t::ignore)
+ .get_binary()
+ .has_subtype());
+ CHECK(json::from_cbor(json::to_cbor(json::binary(std::vector<uint8_t>{}, 1000)), true, true, json::cbor_tag_handler_t::store).get_binary().subtype() ==
+ 1000);
// 0xda
CHECK(json::to_cbor(json::binary(std::vector<uint8_t>{}, 394216)) == std::vector<uint8_t>{0xda, 0x00, 0x06, 0x03, 0xe8, 0x40});
- CHECK(!json::from_cbor(json::to_cbor(json::binary(std::vector<uint8_t>{}, 394216)), true, true, json::cbor_tag_handler_t::ignore).get_binary().has_subtype());
- CHECK(json::from_cbor(json::to_cbor(json::binary(std::vector<uint8_t>{}, 394216)), true, true, json::cbor_tag_handler_t::store).get_binary().subtype() == 394216);
+ CHECK(!json::from_cbor(json::to_cbor(json::binary(std::vector<uint8_t>{}, 394216)), true, true, json::cbor_tag_handler_t::ignore)
+ .get_binary()
+ .has_subtype());
+ CHECK(
+ json::from_cbor(json::to_cbor(json::binary(std::vector<uint8_t>{}, 394216)), true, true, json::cbor_tag_handler_t::store).get_binary().subtype() ==
+ 394216);
// 0xdb
- CHECK(json::to_cbor(json::binary(std::vector<uint8_t>{}, 8589934590)) == std::vector<uint8_t>{0xdb, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xfe, 0x40});
- CHECK(!json::from_cbor(json::to_cbor(json::binary(std::vector<uint8_t>{}, 8589934590)), true, true, json::cbor_tag_handler_t::ignore).get_binary().has_subtype());
- CHECK(json::from_cbor(json::to_cbor(json::binary(std::vector<uint8_t>{}, 8589934590)), true, true, json::cbor_tag_handler_t::store).get_binary().subtype() == 8589934590);
+ CHECK(json::to_cbor(json::binary(std::vector<uint8_t>{}, 8589934590)) ==
+ std::vector<uint8_t>{0xdb, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xfe, 0x40});
+ CHECK(!json::from_cbor(json::to_cbor(json::binary(std::vector<uint8_t>{}, 8589934590)), true, true, json::cbor_tag_handler_t::ignore)
+ .get_binary()
+ .has_subtype());
+ CHECK(json::from_cbor(json::to_cbor(json::binary(std::vector<uint8_t>{}, 8589934590)), true, true, json::cbor_tag_handler_t::store)
+ .get_binary()
+ .subtype() == 8589934590);
}
SECTION("arrays")
@@ -2586,8 +2554,12 @@
CHECK(json::to_cbor(json::parse("[1, [2, 3], [4, 5]]")) == std::vector<uint8_t>({0x83, 0x01, 0x82, 0x02, 0x03, 0x82, 0x04, 0x05}));
CHECK(json::parse("[1, [2, 3], [4, 5]]") == json::from_cbor(std::vector<uint8_t>({0x83, 0x01, 0x82, 0x02, 0x03, 0x82, 0x04, 0x05})));
- CHECK(json::to_cbor(json::parse("[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]")) == std::vector<uint8_t>({0x98, 0x19, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x18, 0x18, 0x19}));
- CHECK(json::parse("[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]") == json::from_cbor(std::vector<uint8_t>({0x98, 0x19, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x18, 0x18, 0x19})));
+ CHECK(json::to_cbor(json::parse("[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]")) ==
+ std::vector<uint8_t>({0x98, 0x19, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d,
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x18, 0x18, 0x19}));
+ CHECK(json::parse("[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]") ==
+ json::from_cbor(std::vector<uint8_t>({0x98, 0x19, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d,
+ 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x18, 0x18, 0x19})));
// indefinite length arrays
CHECK(json::parse("[]") == json::from_cbor(std::vector<uint8_t>({0x9f, 0xff})));
@@ -2595,7 +2567,9 @@
CHECK(json::parse("[1, [2, 3], [4, 5]]") == json::from_cbor(std::vector<uint8_t>({0x9f, 0x01, 0x82, 0x02, 0x03, 0x82, 0x04, 0x05, 0xff})));
CHECK(json::parse("[1, [2, 3], [4, 5]]") == json::from_cbor(std::vector<uint8_t>({0x83, 0x01, 0x82, 0x02, 0x03, 0x9f, 0x04, 0x05, 0xff})));
CHECK(json::parse("[1, [2, 3], [4, 5]]") == json::from_cbor(std::vector<uint8_t>({0x83, 0x01, 0x9f, 0x02, 0x03, 0xff, 0x82, 0x04, 0x05})));
- CHECK(json::parse("[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]") == json::from_cbor(std::vector<uint8_t>({0x9f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x18, 0x18, 0x19, 0xff})));
+ CHECK(json::parse("[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]") ==
+ json::from_cbor(std::vector<uint8_t>({0x9f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
+ 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x18, 0x18, 0x19, 0xff})));
}
SECTION("objects")
@@ -2609,13 +2583,19 @@
CHECK(json::to_cbor(json::parse("[\"a\", {\"b\": \"c\"}]")) == std::vector<uint8_t>({0x82, 0x61, 0x61, 0xa1, 0x61, 0x62, 0x61, 0x63}));
CHECK(json::parse("[\"a\", {\"b\": \"c\"}]") == json::from_cbor(std::vector<uint8_t>({0x82, 0x61, 0x61, 0xa1, 0x61, 0x62, 0x61, 0x63})));
- CHECK(json::to_cbor(json::parse("{\"a\": \"A\", \"b\": \"B\", \"c\": \"C\", \"d\": \"D\", \"e\": \"E\"}")) == std::vector<uint8_t>({0xa5, 0x61, 0x61, 0x61, 0x41, 0x61, 0x62, 0x61, 0x42, 0x61, 0x63, 0x61, 0x43, 0x61, 0x64, 0x61, 0x44, 0x61, 0x65, 0x61, 0x45}));
- CHECK(json::parse("{\"a\": \"A\", \"b\": \"B\", \"c\": \"C\", \"d\": \"D\", \"e\": \"E\"}") == json::from_cbor(std::vector<uint8_t>({0xa5, 0x61, 0x61, 0x61, 0x41, 0x61, 0x62, 0x61, 0x42, 0x61, 0x63, 0x61, 0x43, 0x61, 0x64, 0x61, 0x44, 0x61, 0x65, 0x61, 0x45})));
+ CHECK(json::to_cbor(json::parse("{\"a\": \"A\", \"b\": \"B\", \"c\": \"C\", \"d\": \"D\", \"e\": \"E\"}")) ==
+ std::vector<uint8_t>(
+ {0xa5, 0x61, 0x61, 0x61, 0x41, 0x61, 0x62, 0x61, 0x42, 0x61, 0x63, 0x61, 0x43, 0x61, 0x64, 0x61, 0x44, 0x61, 0x65, 0x61, 0x45}));
+ CHECK(json::parse("{\"a\": \"A\", \"b\": \"B\", \"c\": \"C\", \"d\": \"D\", \"e\": \"E\"}") ==
+ json::from_cbor(std::vector<uint8_t>(
+ {0xa5, 0x61, 0x61, 0x61, 0x41, 0x61, 0x62, 0x61, 0x42, 0x61, 0x63, 0x61, 0x43, 0x61, 0x64, 0x61, 0x44, 0x61, 0x65, 0x61, 0x45})));
// indefinite length objects
- CHECK(json::parse("{\"a\": 1, \"b\": [2, 3]}") == json::from_cbor(std::vector<uint8_t>({0xbf, 0x61, 0x61, 0x01, 0x61, 0x62, 0x9f, 0x02, 0x03, 0xff, 0xff})));
+ CHECK(json::parse("{\"a\": 1, \"b\": [2, 3]}") ==
+ json::from_cbor(std::vector<uint8_t>({0xbf, 0x61, 0x61, 0x01, 0x61, 0x62, 0x9f, 0x02, 0x03, 0xff, 0xff})));
CHECK(json::parse("[\"a\", {\"b\": \"c\"}]") == json::from_cbor(std::vector<uint8_t>({0x82, 0x61, 0x61, 0xbf, 0x61, 0x62, 0x61, 0x63, 0xff})));
- CHECK(json::parse("{\"Fun\": true, \"Amt\": -2}") == json::from_cbor(std::vector<uint8_t>({0xbf, 0x63, 0x46, 0x75, 0x6e, 0xf5, 0x63, 0x41, 0x6d, 0x74, 0x21, 0xff})));
+ CHECK(json::parse("{\"Fun\": true, \"Amt\": -2}") ==
+ json::from_cbor(std::vector<uint8_t>({0xbf, 0x63, 0x46, 0x75, 0x6e, 0xf5, 0x63, 0x41, 0x6d, 0x74, 0x21, 0xff})));
}
}
@@ -2626,22 +2606,7 @@
SECTION("0xC6..0xD4")
{
- for (const auto b : std::vector<std::uint8_t>{
- 0xC6,
- 0xC7,
- 0xC8,
- 0xC9,
- 0xCA,
- 0xCB,
- 0xCC,
- 0xCD,
- 0xCE,
- 0xCF,
- 0xD0,
- 0xD1,
- 0xD2,
- 0xD3,
- 0xD4})
+ for (const auto b : std::vector<std::uint8_t>{0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4})
{
CAPTURE(b);
@@ -2829,7 +2794,9 @@
// parse error when parsing tagged value
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec), "[json.exception.parse_error.112] parse error at byte 9: syntax error while parsing CBOR value: invalid byte: 0xD8", json::parse_error);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec),
+ "[json.exception.parse_error.112] parse error at byte 9: syntax error while parsing CBOR value: invalid byte: 0xD8",
+ json::parse_error);
// binary without subtype when tags are ignored
json jb = json::from_cbor(vec, true, true, json::cbor_tag_handler_t::ignore);
diff --git a/tests/src/unit-class_lexer.cpp b/tests/src/unit-class_lexer.cpp
index 5fb4357..898fd53 100644
--- a/tests/src/unit-class_lexer.cpp
+++ b/tests/src/unit-class_lexer.cpp
@@ -12,7 +12,8 @@
#include <nlohmann/json.hpp>
using nlohmann::json;
-namespace {
+namespace
+{
// shortcut to scan a string literal
json::lexer::token_type scan_string(const char* s, bool ignore_comments = false);
json::lexer::token_type scan_string(const char* s, const bool ignore_comments)
diff --git a/tests/src/unit-class_parser.cpp b/tests/src/unit-class_parser.cpp
index d47f9d1..1a4888d 100644
--- a/tests/src/unit-class_parser.cpp
+++ b/tests/src/unit-class_parser.cpp
@@ -17,7 +17,8 @@
#include <valarray>
-namespace {
+namespace
+{
class SaxEventLogger
{
public:
@@ -358,48 +359,156 @@
SECTION("errors")
{
// error: tab in string
- CHECK_THROWS_WITH_AS(parser_helper("\"\t\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t; last read: '\"<U+0009>'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\t\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t; last read: '\"<U+0009>'",
+ json::parse_error&);
// error: newline in string
- CHECK_THROWS_WITH_AS(parser_helper("\"\n\""), "[json.exception.parse_error.101] parse error at line 2, column 0: syntax error while parsing value - invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n; last read: '\"<U+000A>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\r\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+000D (CR) must be escaped to \\u000D or \\r; last read: '\"<U+000D>'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\n\""),
+ "[json.exception.parse_error.101] parse error at line 2, column 0: syntax error while parsing value - invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n; last read: '\"<U+000A>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\r\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+000D (CR) must be escaped to \\u000D or \\r; last read: '\"<U+000D>'",
+ json::parse_error&);
// error: backspace in string
- CHECK_THROWS_WITH_AS(parser_helper("\"\b\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0008 (BS) must be escaped to \\u0008 or \\b; last read: '\"<U+0008>'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\b\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0008 (BS) must be escaped to \\u0008 or \\b; last read: '\"<U+0008>'",
+ json::parse_error&);
// improve code coverage
CHECK_THROWS_AS(parser_helper("\uFF01"), json::parse_error&);
CHECK_THROWS_AS(parser_helper("[-4:1,]"), json::parse_error&);
// unescaped control characters
- CHECK_THROWS_WITH_AS(parser_helper("\"\x00\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: missing closing quote; last read: '\"'", json::parse_error&); // NOLINT(bugprone-string-literal-with-embedded-nul)
- CHECK_THROWS_WITH_AS(parser_helper("\"\x01\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0001 (SOH) must be escaped to \\u0001; last read: '\"<U+0001>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x02\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0002 (STX) must be escaped to \\u0002; last read: '\"<U+0002>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x03\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0003 (ETX) must be escaped to \\u0003; last read: '\"<U+0003>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x04\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0004 (EOT) must be escaped to \\u0004; last read: '\"<U+0004>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x05\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0005 (ENQ) must be escaped to \\u0005; last read: '\"<U+0005>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x06\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0006 (ACK) must be escaped to \\u0006; last read: '\"<U+0006>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x07\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0007 (BEL) must be escaped to \\u0007; last read: '\"<U+0007>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x08\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0008 (BS) must be escaped to \\u0008 or \\b; last read: '\"<U+0008>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x09\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t; last read: '\"<U+0009>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x0a\""), "[json.exception.parse_error.101] parse error at line 2, column 0: syntax error while parsing value - invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n; last read: '\"<U+000A>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x0b\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+000B (VT) must be escaped to \\u000B; last read: '\"<U+000B>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x0c\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+000C (FF) must be escaped to \\u000C or \\f; last read: '\"<U+000C>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x0d\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+000D (CR) must be escaped to \\u000D or \\r; last read: '\"<U+000D>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x0e\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+000E (SO) must be escaped to \\u000E; last read: '\"<U+000E>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x0f\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+000F (SI) must be escaped to \\u000F; last read: '\"<U+000F>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x10\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0010 (DLE) must be escaped to \\u0010; last read: '\"<U+0010>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x11\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0011 (DC1) must be escaped to \\u0011; last read: '\"<U+0011>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x12\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0012 (DC2) must be escaped to \\u0012; last read: '\"<U+0012>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x13\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0013 (DC3) must be escaped to \\u0013; last read: '\"<U+0013>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x14\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0014 (DC4) must be escaped to \\u0014; last read: '\"<U+0014>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x15\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0015 (NAK) must be escaped to \\u0015; last read: '\"<U+0015>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x16\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0016 (SYN) must be escaped to \\u0016; last read: '\"<U+0016>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x17\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0017 (ETB) must be escaped to \\u0017; last read: '\"<U+0017>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x18\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0018 (CAN) must be escaped to \\u0018; last read: '\"<U+0018>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x19\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0019 (EM) must be escaped to \\u0019; last read: '\"<U+0019>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x1a\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+001A (SUB) must be escaped to \\u001A; last read: '\"<U+001A>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x1b\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+001B (ESC) must be escaped to \\u001B; last read: '\"<U+001B>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x1c\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+001C (FS) must be escaped to \\u001C; last read: '\"<U+001C>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x1d\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+001D (GS) must be escaped to \\u001D; last read: '\"<U+001D>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x1e\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+001E (RS) must be escaped to \\u001E; last read: '\"<U+001E>'", json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\x1f\""), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+001F (US) must be escaped to \\u001F; last read: '\"<U+001F>'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x00\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: missing closing quote; last read: '\"'",
+ json::parse_error&); // NOLINT(bugprone-string-literal-with-embedded-nul)
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x01\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0001 (SOH) must be escaped to \\u0001; last read: '\"<U+0001>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x02\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0002 (STX) must be escaped to \\u0002; last read: '\"<U+0002>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x03\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0003 (ETX) must be escaped to \\u0003; last read: '\"<U+0003>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x04\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0004 (EOT) must be escaped to \\u0004; last read: '\"<U+0004>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x05\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0005 (ENQ) must be escaped to \\u0005; last read: '\"<U+0005>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x06\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0006 (ACK) must be escaped to \\u0006; last read: '\"<U+0006>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x07\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0007 (BEL) must be escaped to \\u0007; last read: '\"<U+0007>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x08\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0008 (BS) must be escaped to \\u0008 or \\b; last read: '\"<U+0008>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x09\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t; last read: '\"<U+0009>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x0a\""),
+ "[json.exception.parse_error.101] parse error at line 2, column 0: syntax error while parsing value - invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n; last read: '\"<U+000A>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x0b\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+000B (VT) must be escaped to \\u000B; last read: '\"<U+000B>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x0c\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+000C (FF) must be escaped to \\u000C or \\f; last read: '\"<U+000C>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x0d\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+000D (CR) must be escaped to \\u000D or \\r; last read: '\"<U+000D>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x0e\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+000E (SO) must be escaped to \\u000E; last read: '\"<U+000E>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x0f\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+000F (SI) must be escaped to \\u000F; last read: '\"<U+000F>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x10\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0010 (DLE) must be escaped to \\u0010; last read: '\"<U+0010>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x11\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0011 (DC1) must be escaped to \\u0011; last read: '\"<U+0011>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x12\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0012 (DC2) must be escaped to \\u0012; last read: '\"<U+0012>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x13\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0013 (DC3) must be escaped to \\u0013; last read: '\"<U+0013>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x14\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0014 (DC4) must be escaped to \\u0014; last read: '\"<U+0014>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x15\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0015 (NAK) must be escaped to \\u0015; last read: '\"<U+0015>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x16\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0016 (SYN) must be escaped to \\u0016; last read: '\"<U+0016>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x17\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0017 (ETB) must be escaped to \\u0017; last read: '\"<U+0017>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x18\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0018 (CAN) must be escaped to \\u0018; last read: '\"<U+0018>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x19\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0019 (EM) must be escaped to \\u0019; last read: '\"<U+0019>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x1a\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+001A (SUB) must be escaped to \\u001A; last read: '\"<U+001A>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x1b\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+001B (ESC) must be escaped to \\u001B; last read: '\"<U+001B>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x1c\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+001C (FS) must be escaped to \\u001C; last read: '\"<U+001C>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x1d\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+001D (GS) must be escaped to \\u001D; last read: '\"<U+001D>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x1e\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+001E (RS) must be escaped to \\u001E; last read: '\"<U+001E>'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\x1f\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+001F (US) must be escaped to \\u001F; last read: '\"<U+001F>'",
+ json::parse_error&);
SECTION("additional test for null byte")
{
@@ -410,7 +519,10 @@
std::string s = "\"1\"";
s[1] = '\0';
json _;
- CHECK_THROWS_WITH_AS(_ = json::parse(s.begin(), s.end()), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0000 (NUL) must be escaped to \\u0000; last read: '\"<U+0000>'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse(s.begin(), s.end()),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: control character U+0000 (NUL) must be escaped to \\u0000; last read: '\"<U+0000>'",
+ json::parse_error&);
}
}
@@ -581,7 +693,9 @@
SECTION("overflow")
{
// overflows during parsing yield an exception
- CHECK_THROWS_WITH_AS(parser_helper("1.18973e+4932").empty(), "[json.exception.out_of_range.406] number overflow parsing '1.18973e+4932'", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(parser_helper("1.18973e+4932").empty(),
+ "[json.exception.out_of_range.406] number overflow parsing '1.18973e+4932'",
+ json::out_of_range&);
}
SECTION("invalid numbers")
@@ -590,57 +704,74 @@
CHECK_THROWS_AS(parser_helper("+1"), json::parse_error&);
CHECK_THROWS_AS(parser_helper("+0"), json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("01"),
- "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - unexpected number literal; expected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("-01"),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - unexpected number literal; expected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("--1"),
- "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid number; expected digit after '-'; last read: '--'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("1."),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected digit after '.'; last read: '1.'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("1E"),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1E'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("1E-"),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid number; expected digit after exponent sign; last read: '1E-'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("1.E1"),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected digit after '.'; last read: '1.E'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("-1E"),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '-1E'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("-0E#"),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '-0E#'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("-0E-#"),
- "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid number; expected digit after exponent sign; last read: '-0E-#'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("-0#"),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid literal; last read: '-0#'; expected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("-0.0:"),
- "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - unexpected ':'; expected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("-0.0Z"),
- "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid literal; last read: '-0.0Z'; expected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("-0E123:"),
- "[json.exception.parse_error.101] parse error at line 1, column 7: syntax error while parsing value - unexpected ':'; expected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("-0e0-:"),
- "[json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid number; expected digit after '-'; last read: '-:'; expected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("-0e-:"),
- "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid number; expected digit after exponent sign; last read: '-0e-:'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("-0f"),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid literal; last read: '-0f'; expected end of input",
- json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("01"),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - unexpected number literal; expected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("-01"),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - unexpected number literal; expected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("--1"),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid number; expected digit after '-'; last read: '--'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("1."),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected digit after '.'; last read: '1.'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("1E"),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1E'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("1E-"),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid number; expected digit after exponent sign; last read: '1E-'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("1.E1"),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected digit after '.'; last read: '1.E'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("-1E"),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '-1E'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("-0E#"),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '-0E#'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("-0E-#"),
+ "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid number; expected digit after exponent sign; last read: '-0E-#'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("-0#"),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid literal; last read: '-0#'; expected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("-0.0:"),
+ "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - unexpected ':'; expected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("-0.0Z"),
+ "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid literal; last read: '-0.0Z'; expected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("-0E123:"),
+ "[json.exception.parse_error.101] parse error at line 1, column 7: syntax error while parsing value - unexpected ':'; expected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("-0e0-:"),
+ "[json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid number; expected digit after '-'; last read: '-:'; expected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("-0e-:"),
+ "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid number; expected digit after exponent sign; last read: '-0e-:'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("-0f"),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid literal; last read: '-0f'; expected end of input",
+ json::parse_error&);
}
}
}
@@ -910,171 +1041,222 @@
SECTION("parse errors")
{
// unexpected end of number
- CHECK_THROWS_WITH_AS(parser_helper("0."),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected digit after '.'; last read: '0.'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("-"),
- "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid number; expected digit after '-'; last read: '-'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("--"),
- "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid number; expected digit after '-'; last read: '--'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("-0."),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid number; expected digit after '.'; last read: '-0.'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("-."),
- "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid number; expected digit after '-'; last read: '-.'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("-:"),
- "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid number; expected digit after '-'; last read: '-:'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("0.:"),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected digit after '.'; last read: '0.:'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("e."),
- "[json.exception.parse_error.101] parse error at line 1, column 1: syntax error while parsing value - invalid literal; last read: 'e'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("1e."),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1e.'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("1e/"),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1e/'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("1e:"),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1e:'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("1E."),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1E.'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("1E/"),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1E/'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("1E:"),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1E:'",
- json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("0."),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected digit after '.'; last read: '0.'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("-"),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid number; expected digit after '-'; last read: '-'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("--"),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid number; expected digit after '-'; last read: '--'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("-0."),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid number; expected digit after '.'; last read: '-0.'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("-."),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid number; expected digit after '-'; last read: '-.'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("-:"),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid number; expected digit after '-'; last read: '-:'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("0.:"),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected digit after '.'; last read: '0.:'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("e."),
+ "[json.exception.parse_error.101] parse error at line 1, column 1: syntax error while parsing value - invalid literal; last read: 'e'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("1e."),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1e.'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("1e/"),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1e/'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("1e:"),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1e:'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("1E."),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1E.'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("1E/"),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1E/'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("1E:"),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid number; expected '+', '-', or digit after exponent; last read: '1E:'",
+ json::parse_error&);
// unexpected end of null
- CHECK_THROWS_WITH_AS(parser_helper("n"),
- "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid literal; last read: 'n'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("nu"),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid literal; last read: 'nu'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("nul"),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid literal; last read: 'nul'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("nulk"),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid literal; last read: 'nulk'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("nulm"),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid literal; last read: 'nulm'",
- json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("n"),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid literal; last read: 'n'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("nu"),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid literal; last read: 'nu'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("nul"),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid literal; last read: 'nul'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("nulk"),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid literal; last read: 'nulk'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("nulm"),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid literal; last read: 'nulm'",
+ json::parse_error&);
// unexpected end of true
- CHECK_THROWS_WITH_AS(parser_helper("t"),
- "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid literal; last read: 't'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("tr"),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid literal; last read: 'tr'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("tru"),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid literal; last read: 'tru'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("trud"),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid literal; last read: 'trud'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("truf"),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid literal; last read: 'truf'",
- json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("t"),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid literal; last read: 't'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("tr"),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid literal; last read: 'tr'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("tru"),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid literal; last read: 'tru'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("trud"),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid literal; last read: 'trud'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("truf"),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid literal; last read: 'truf'",
+ json::parse_error&);
// unexpected end of false
- CHECK_THROWS_WITH_AS(parser_helper("f"),
- "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid literal; last read: 'f'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("fa"),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid literal; last read: 'fa'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("fal"),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid literal; last read: 'fal'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("fals"),
- "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid literal; last read: 'fals'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("falsd"),
- "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid literal; last read: 'falsd'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("falsf"),
- "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid literal; last read: 'falsf'",
- json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("f"),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid literal; last read: 'f'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("fa"),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid literal; last read: 'fa'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("fal"),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid literal; last read: 'fal'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("fals"),
+ "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid literal; last read: 'fals'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("falsd"),
+ "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid literal; last read: 'falsd'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("falsf"),
+ "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid literal; last read: 'falsf'",
+ json::parse_error&);
// missing/unexpected end of array
- CHECK_THROWS_WITH_AS(parser_helper("["),
- "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - unexpected end of input; expected '[', '{', or a literal",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("[1"),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing array - unexpected end of input; expected ']'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("[1,"),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - unexpected end of input; expected '[', '{', or a literal",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("[1,]"),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("]"),
- "[json.exception.parse_error.101] parse error at line 1, column 1: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal",
- json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("["),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - unexpected end of input; expected '[', '{', or a literal",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("[1"),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing array - unexpected end of input; expected ']'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("[1,"),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - unexpected end of input; expected '[', '{', or a literal",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("[1,]"),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("]"),
+ "[json.exception.parse_error.101] parse error at line 1, column 1: syntax error while parsing value - unexpected ']'; expected '[', '{', or a literal",
+ json::parse_error&);
// missing/unexpected end of object
- CHECK_THROWS_WITH_AS(parser_helper("{"),
- "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing object key - unexpected end of input; expected string literal",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("{\"foo\""),
- "[json.exception.parse_error.101] parse error at line 1, column 7: syntax error while parsing object separator - unexpected end of input; expected ':'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("{\"foo\":"),
- "[json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected end of input; expected '[', '{', or a literal",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("{\"foo\":}"),
- "[json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected '}'; expected '[', '{', or a literal",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("{\"foo\":1,}"),
- "[json.exception.parse_error.101] parse error at line 1, column 10: syntax error while parsing object key - unexpected '}'; expected string literal",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("}"),
- "[json.exception.parse_error.101] parse error at line 1, column 1: syntax error while parsing value - unexpected '}'; expected '[', '{', or a literal",
- json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("{"),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing object key - unexpected end of input; expected string literal",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("{\"foo\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 7: syntax error while parsing object separator - unexpected end of input; expected ':'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("{\"foo\":"),
+ "[json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected end of input; expected '[', '{', or a literal",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("{\"foo\":}"),
+ "[json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - unexpected '}'; expected '[', '{', or a literal",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("{\"foo\":1,}"),
+ "[json.exception.parse_error.101] parse error at line 1, column 10: syntax error while parsing object key - unexpected '}'; expected string literal",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("}"),
+ "[json.exception.parse_error.101] parse error at line 1, column 1: syntax error while parsing value - unexpected '}'; expected '[', '{', or a literal",
+ json::parse_error&);
// missing/unexpected end of string
- CHECK_THROWS_WITH_AS(parser_helper("\""),
- "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: missing closing quote; last read: '\"'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\\\""),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid string: missing closing quote; last read: '\"\\\"'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\\u\""),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u\"'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\\u0\""),
- "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u0\"'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\\u01\""),
- "[json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u01\"'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\\u012\""),
- "[json.exception.parse_error.101] parse error at line 1, column 7: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u012\"'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\\u"),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\\u0"),
- "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u0'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\\u01"),
- "[json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u01'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(parser_helper("\"\\u012"),
- "[json.exception.parse_error.101] parse error at line 1, column 7: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u012'",
- json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid string: missing closing quote; last read: '\"'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\\\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid string: missing closing quote; last read: '\"\\\"'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\\u\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u\"'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\\u0\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u0\"'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\\u01\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u01\"'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\\u012\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 7: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u012\"'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\\u"),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\\u0"),
+ "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u0'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\\u01"),
+ "[json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u01'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("\"\\u012"),
+ "[json.exception.parse_error.101] parse error at line 1, column 7: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\u012'",
+ json::parse_error&);
// invalid escapes
for (int c = 1; c < 128; ++c)
@@ -1110,8 +1292,10 @@
// only check error message if c is not a control character
if (c > 0x1f)
{
- CHECK_THROWS_WITH_STD_STR(parser_helper(s),
- "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid string: forbidden character after backslash; last read: '\"\\" + std::string(1, static_cast<char>(c)) + "'");
+ CHECK_THROWS_WITH_STD_STR(
+ parser_helper(s),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid string: forbidden character after backslash; last read: '\"\\" +
+ std::string(1, static_cast<char>(c)) + "'");
}
break;
}
@@ -1185,8 +1369,10 @@
// only check error message if c is not a control character
if (c > 0x1f)
{
- CHECK_THROWS_WITH_STD_STR(parser_helper(s1),
- "[json.exception.parse_error.101] parse error at line 1, column 7: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '" + s1.substr(0, 7) + "'");
+ CHECK_THROWS_WITH_STD_STR(
+ parser_helper(s1),
+ "[json.exception.parse_error.101] parse error at line 1, column 7: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '" +
+ s1.substr(0, 7) + "'");
}
CAPTURE(s2)
@@ -1194,8 +1380,10 @@
// only check error message if c is not a control character
if (c > 0x1f)
{
- CHECK_THROWS_WITH_STD_STR(parser_helper(s2),
- "[json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '" + s2.substr(0, 6) + "'");
+ CHECK_THROWS_WITH_STD_STR(
+ parser_helper(s2),
+ "[json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '" +
+ s2.substr(0, 6) + "'");
}
CAPTURE(s3)
@@ -1203,8 +1391,10 @@
// only check error message if c is not a control character
if (c > 0x1f)
{
- CHECK_THROWS_WITH_STD_STR(parser_helper(s3),
- "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '" + s3.substr(0, 5) + "'");
+ CHECK_THROWS_WITH_STD_STR(
+ parser_helper(s3),
+ "[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '" +
+ s3.substr(0, 5) + "'");
}
CAPTURE(s4)
@@ -1212,8 +1402,10 @@
// only check error message if c is not a control character
if (c > 0x1f)
{
- CHECK_THROWS_WITH_STD_STR(parser_helper(s4),
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '" + s4.substr(0, 4) + "'");
+ CHECK_THROWS_WITH_STD_STR(
+ parser_helper(s4),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '" +
+ s4.substr(0, 4) + "'");
}
}
}
@@ -1222,17 +1414,23 @@
json _;
// missing part of a surrogate pair
- CHECK_THROWS_WITH_AS(_ = json::parse("\"\\uD80C\""), "[json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF; last read: '\"\\uD80C\"'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse("\"\\uD80C\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF; last read: '\"\\uD80C\"'",
+ json::parse_error&);
// invalid surrogate pair
- CHECK_THROWS_WITH_AS(_ = json::parse("\"\\uD80C\\uD80C\""),
- "[json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF; last read: '\"\\uD80C\\uD80C'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::parse("\"\\uD80C\\u0000\""),
- "[json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF; last read: '\"\\uD80C\\u0000'",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::parse("\"\\uD80C\\uFFFF\""),
- "[json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF; last read: '\"\\uD80C\\uFFFF'",
- json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse("\"\\uD80C\\uD80C\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF; last read: '\"\\uD80C\\uD80C'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse("\"\\uD80C\\u0000\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF; last read: '\"\\uD80C\\u0000'",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse("\"\\uD80C\\uFFFF\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF; last read: '\"\\uD80C\\uFFFF'",
+ json::parse_error&);
}
SECTION("parse errors (accept)")
@@ -1423,9 +1621,15 @@
SECTION("tests found by mutate++")
{
// test case to make sure no comma precedes the first key
- CHECK_THROWS_WITH_AS(parser_helper("{,\"key\": false}"), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing object key - unexpected ','; expected string literal", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("{,\"key\": false}"),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing object key - unexpected ','; expected string literal",
+ json::parse_error&);
// test case to make sure an object is properly closed
- CHECK_THROWS_WITH_AS(parser_helper("[{\"key\": false true]"), "[json.exception.parse_error.101] parse error at line 1, column 19: syntax error while parsing object - unexpected true literal; expected '}'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ parser_helper("[{\"key\": false true]"),
+ "[json.exception.parse_error.101] parse error at line 1, column 19: syntax error while parsing object - unexpected true literal; expected '}'",
+ json::parse_error&);
// test case to make sure the callback is properly evaluated after reading a key
{
@@ -1655,9 +1859,14 @@
CHECK(json::parse("{\"foo\": true:", cb, false).is_discarded());
json _;
- CHECK_THROWS_WITH_AS(_ = json::parse("{\"foo\": true:", cb), "[json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing object - unexpected ':'; expected '}'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse("{\"foo\": true:", cb),
+ "[json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing object - unexpected ':'; expected '}'",
+ json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::parse("1.18973e+4932", cb), "[json.exception.out_of_range.406] number overflow parsing '1.18973e+4932'", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(_ = json::parse("1.18973e+4932", cb),
+ "[json.exception.out_of_range.406] number overflow parsing '1.18973e+4932'",
+ json::out_of_range&);
}
SECTION("SAX parser")
@@ -1739,7 +1948,13 @@
SECTION("error messages for comments")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::parse("/a", nullptr, true, true), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid comment; expecting '/' or '*' after '/'; last read: '/a'", json::parse_error);
- CHECK_THROWS_WITH_AS(_ = json::parse("/*", nullptr, true, true), "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid comment; missing closing '*/'; last read: '/*<U+0000>'", json::parse_error);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse("/a", nullptr, true, true),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid comment; expecting '/' or '*' after '/'; last read: '/a'",
+ json::parse_error);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse("/*", nullptr, true, true),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid comment; missing closing '*/'; last read: '/*<U+0000>'",
+ json::parse_error);
}
}
diff --git a/tests/src/unit-comparison.cpp b/tests/src/unit-comparison.cpp
index 1b0042d..ca8e10a 100644
--- a/tests/src/unit-comparison.cpp
+++ b/tests/src/unit-comparison.cpp
@@ -21,7 +21,8 @@
#if JSON_HAS_THREE_WAY_COMPARISON
// this can be replaced with the doctest stl extension header in version 2.5
-namespace doctest {
+namespace doctest
+{
template<>
struct StringMaker<std::partial_ordering>
{
@@ -50,7 +51,8 @@
#endif
-namespace {
+namespace
+{
// helper function to check std::less<json::value_t>
// see https://en.cppreference.com/w/cpp/utility/functional/less
template<typename A, typename B, typename U = std::less<json::value_t>>
@@ -85,33 +87,30 @@
SECTION("types")
{
- std::vector<json::value_t> j_types =
- {
- json::value_t::null,
- json::value_t::boolean,
- json::value_t::number_integer,
- json::value_t::number_unsigned,
- json::value_t::number_float,
- json::value_t::object,
- json::value_t::array,
- json::value_t::string,
- json::value_t::binary,
- json::value_t::discarded};
+ std::vector<json::value_t> j_types = {json::value_t::null,
+ json::value_t::boolean,
+ json::value_t::number_integer,
+ json::value_t::number_unsigned,
+ json::value_t::number_float,
+ json::value_t::object,
+ json::value_t::array,
+ json::value_t::string,
+ json::value_t::binary,
+ json::value_t::discarded};
- std::vector<std::vector<bool>> expected_lt =
- {
- //0 1 2 3 4 5 6 7 8 9
- {f_, _t, _t, _t, _t, _t, _t, _t, _t, f_}, // 0
- {f_, f_, _t, _t, _t, _t, _t, _t, _t, f_}, // 1
- {f_, f_, f_, f_, f_, _t, _t, _t, _t, f_}, // 2
- {f_, f_, f_, f_, f_, _t, _t, _t, _t, f_}, // 3
- {f_, f_, f_, f_, f_, _t, _t, _t, _t, f_}, // 4
- {f_, f_, f_, f_, f_, f_, _t, _t, _t, f_}, // 5
- {f_, f_, f_, f_, f_, f_, f_, _t, _t, f_}, // 6
- {f_, f_, f_, f_, f_, f_, f_, f_, _t, f_}, // 7
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 8
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 9
- };
+ std::vector<std::vector<bool>> expected_lt = {
+ //0 1 2 3 4 5 6 7 8 9
+ {f_, _t, _t, _t, _t, _t, _t, _t, _t, f_}, // 0
+ {f_, f_, _t, _t, _t, _t, _t, _t, _t, f_}, // 1
+ {f_, f_, f_, f_, f_, _t, _t, _t, _t, f_}, // 2
+ {f_, f_, f_, f_, f_, _t, _t, _t, _t, f_}, // 3
+ {f_, f_, f_, f_, f_, _t, _t, _t, _t, f_}, // 4
+ {f_, f_, f_, f_, f_, f_, _t, _t, _t, f_}, // 5
+ {f_, f_, f_, f_, f_, f_, f_, _t, _t, f_}, // 6
+ {f_, f_, f_, f_, f_, f_, f_, f_, _t, f_}, // 7
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 8
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 9
+ };
SECTION("comparison: less")
{
@@ -138,20 +137,19 @@
// JSON_HAS_CPP_20 (do not remove; see note at top of file)
SECTION("comparison: 3-way")
{
- std::vector<std::vector<std::partial_ordering>> expected =
- {
- //0 1 2 3 4 5 6 7 8 9
- {eq, lt, lt, lt, lt, lt, lt, lt, lt, un}, // 0
- {gt, eq, lt, lt, lt, lt, lt, lt, lt, un}, // 1
- {gt, gt, eq, eq, eq, lt, lt, lt, lt, un}, // 2
- {gt, gt, eq, eq, eq, lt, lt, lt, lt, un}, // 3
- {gt, gt, eq, eq, eq, lt, lt, lt, lt, un}, // 4
- {gt, gt, gt, gt, gt, eq, lt, lt, lt, un}, // 5
- {gt, gt, gt, gt, gt, gt, eq, lt, lt, un}, // 6
- {gt, gt, gt, gt, gt, gt, gt, eq, lt, un}, // 7
- {gt, gt, gt, gt, gt, gt, gt, gt, eq, un}, // 8
- {un, un, un, un, un, un, un, un, un, un}, // 9
- };
+ std::vector<std::vector<std::partial_ordering>> expected = {
+ //0 1 2 3 4 5 6 7 8 9
+ {eq, lt, lt, lt, lt, lt, lt, lt, lt, un}, // 0
+ {gt, eq, lt, lt, lt, lt, lt, lt, lt, un}, // 1
+ {gt, gt, eq, eq, eq, lt, lt, lt, lt, un}, // 2
+ {gt, gt, eq, eq, eq, lt, lt, lt, lt, un}, // 3
+ {gt, gt, eq, eq, eq, lt, lt, lt, lt, un}, // 4
+ {gt, gt, gt, gt, gt, eq, lt, lt, lt, un}, // 5
+ {gt, gt, gt, gt, gt, gt, eq, lt, lt, un}, // 6
+ {gt, gt, gt, gt, gt, gt, gt, eq, lt, un}, // 7
+ {gt, gt, gt, gt, gt, gt, gt, gt, eq, un}, // 8
+ {un, un, un, un, un, un, un, un, un, un}, // 9
+ };
// check expected partial_ordering against expected boolean
REQUIRE(expected.size() == expected_lt.size());
@@ -184,114 +182,110 @@
SECTION("values")
{
- json j_values =
- {
- nullptr,
- nullptr, // 0 1
- -17,
- 42, // 2 3
- 8u,
- 13u, // 4 5
- 3.14159,
- 23.42, // 6 7
- nan,
- nan, // 8 9
- "foo",
- "bar", // 10 11
- true,
- false, // 12 13
- {1, 2, 3},
- {"one", "two", "three"}, // 14 15
- {{"first", 1}, {"second", 2}},
- {{"a", "A"}, {"b", {"B"}}}, // 16 17
- json::binary({1, 2, 3}),
- json::binary({1, 2, 4}), // 18 19
- json(json::value_t::discarded),
- json(json::value_t::discarded) // 20 21
- };
+ json j_values = {
+ nullptr,
+ nullptr, // 0 1
+ -17,
+ 42, // 2 3
+ 8u,
+ 13u, // 4 5
+ 3.14159,
+ 23.42, // 6 7
+ nan,
+ nan, // 8 9
+ "foo",
+ "bar", // 10 11
+ true,
+ false, // 12 13
+ {1, 2, 3},
+ {"one", "two", "three"}, // 14 15
+ {{"first", 1}, {"second", 2}},
+ {{"a", "A"}, {"b", {"B"}}}, // 16 17
+ json::binary({1, 2, 3}),
+ json::binary({1, 2, 4}), // 18 19
+ json(json::value_t::discarded),
+ json(json::value_t::discarded) // 20 21
+ };
- std::vector<std::vector<bool>> expected_eq =
- {
- //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
- {_t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 0
- {_t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 1
- {f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 2
- {f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 3
- {f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 4
- {f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 5
- {f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 6
- {f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 7
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 8
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 9
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 10
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 11
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 12
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_}, // 13
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_}, // 14
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_}, // 15
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_}, // 16
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_}, // 17
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_}, // 18
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_}, // 19
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 20
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 21
- };
+ std::vector<std::vector<bool>> expected_eq = {
+ //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
+ {_t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 0
+ {_t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 1
+ {f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 2
+ {f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 3
+ {f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 4
+ {f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 5
+ {f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 6
+ {f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 7
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 8
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 9
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 10
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 11
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 12
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, f_}, // 13
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_}, // 14
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_}, // 15
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_}, // 16
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_}, // 17
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_}, // 18
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_}, // 19
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 20
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 21
+ };
- std::vector<std::vector<bool>> expected_lt =
- {
- //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
- {f_, f_, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, f_, f_}, // 0
- {f_, f_, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, f_, f_}, // 1
- {f_, f_, f_, _t, _t, _t, _t, _t, f_, f_, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 2
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 3
- {f_, f_, f_, _t, f_, _t, f_, _t, f_, f_, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 4
- {f_, f_, f_, _t, f_, f_, f_, _t, f_, f_, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 5
- {f_, f_, f_, _t, _t, _t, f_, _t, f_, f_, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 6
- {f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 7
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 8
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 9
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_}, // 10
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_}, // 11
- {f_, f_, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 12
- {f_, f_, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 13
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, _t, f_, f_, _t, _t, f_, f_}, // 14
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_}, // 15
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, _t, _t, f_, f_, _t, _t, f_, f_}, // 16
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, _t, _t, _t, f_, _t, _t, f_, f_}, // 17
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_}, // 18
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 19
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 20
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 21
- };
+ std::vector<std::vector<bool>> expected_lt = {
+ //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
+ {f_, f_, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, f_, f_}, // 0
+ {f_, f_, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, f_, f_}, // 1
+ {f_, f_, f_, _t, _t, _t, _t, _t, f_, f_, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 2
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 3
+ {f_, f_, f_, _t, f_, _t, f_, _t, f_, f_, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 4
+ {f_, f_, f_, _t, f_, f_, f_, _t, f_, f_, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 5
+ {f_, f_, f_, _t, _t, _t, f_, _t, f_, f_, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 6
+ {f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 7
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 8
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 9
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_}, // 10
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_}, // 11
+ {f_, f_, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, f_, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 12
+ {f_, f_, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, f_, _t, _t, _t, _t, _t, _t, f_, f_}, // 13
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, _t, f_, f_, _t, _t, f_, f_}, // 14
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_}, // 15
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, _t, _t, f_, f_, _t, _t, f_, f_}, // 16
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, _t, _t, _t, f_, _t, _t, f_, f_}, // 17
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, f_, f_}, // 18
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 19
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 20
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 21
+ };
SECTION("compares unordered")
{
- std::vector<std::vector<bool>> expected =
- {
- //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 0
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 1
- {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 2
- {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 3
- {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 4
- {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 5
- {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 6
- {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 7
- {f_, f_, _t, _t, _t, _t, _t, _t, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 8
- {f_, f_, _t, _t, _t, _t, _t, _t, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 9
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 10
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 11
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 12
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 13
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 14
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 15
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 16
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 17
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 18
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 19
- {_t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t}, // 20
- {_t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t}, // 21
- };
+ std::vector<std::vector<bool>> expected = {
+ //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 0
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 1
+ {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 2
+ {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 3
+ {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 4
+ {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 5
+ {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 6
+ {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 7
+ {f_, f_, _t, _t, _t, _t, _t, _t, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 8
+ {f_, f_, _t, _t, _t, _t, _t, _t, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 9
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 10
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 11
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 12
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 13
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 14
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 15
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 16
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 17
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 18
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, _t, _t}, // 19
+ {_t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t}, // 20
+ {_t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t, _t}, // 21
+ };
// check if two values compare unordered as expected
REQUIRE(expected.size() == j_values.size());
@@ -310,32 +304,31 @@
#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
SECTION("compares unordered (inverse)")
{
- std::vector<std::vector<bool>> expected =
- {
- //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 0
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 1
- {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 2
- {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 3
- {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 4
- {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 5
- {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 6
- {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 7
- {f_, f_, _t, _t, _t, _t, _t, _t, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 8
- {f_, f_, _t, _t, _t, _t, _t, _t, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 9
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 10
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 11
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 12
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 13
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 14
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 15
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 16
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 17
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 18
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 19
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 20
- {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 21
- };
+ std::vector<std::vector<bool>> expected = {
+ //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 0
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 1
+ {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 2
+ {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 3
+ {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 4
+ {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 5
+ {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 6
+ {f_, f_, f_, f_, f_, f_, f_, f_, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 7
+ {f_, f_, _t, _t, _t, _t, _t, _t, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 8
+ {f_, f_, _t, _t, _t, _t, _t, _t, _t, _t, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 9
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 10
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 11
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 12
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 13
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 14
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 15
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 16
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 17
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 18
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 19
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 20
+ {f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_, f_}, // 21
+ };
// check that two values compare unordered as expected (with legacy-mode enabled)
REQUIRE(expected.size() == j_values.size());
@@ -505,32 +498,31 @@
// JSON_HAS_CPP_20 (do not remove; see note at top of file)
SECTION("comparison: 3-way")
{
- std::vector<std::vector<std::partial_ordering>> expected =
- {
- //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
- {eq, eq, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, un, un}, // 0
- {eq, eq, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, un, un}, // 1
- {gt, gt, eq, lt, lt, lt, lt, lt, un, un, lt, lt, gt, gt, lt, lt, lt, lt, lt, lt, un, un}, // 2
- {gt, gt, gt, eq, gt, gt, gt, gt, un, un, lt, lt, gt, gt, lt, lt, lt, lt, lt, lt, un, un}, // 3
- {gt, gt, gt, lt, eq, lt, gt, lt, un, un, lt, lt, gt, gt, lt, lt, lt, lt, lt, lt, un, un}, // 4
- {gt, gt, gt, lt, gt, eq, gt, lt, un, un, lt, lt, gt, gt, lt, lt, lt, lt, lt, lt, un, un}, // 5
- {gt, gt, gt, lt, lt, lt, eq, lt, un, un, lt, lt, gt, gt, lt, lt, lt, lt, lt, lt, un, un}, // 6
- {gt, gt, gt, lt, gt, gt, gt, eq, un, un, lt, lt, gt, gt, lt, lt, lt, lt, lt, lt, un, un}, // 7
- {gt, gt, un, un, un, un, un, un, un, un, lt, lt, gt, gt, lt, lt, lt, lt, lt, lt, un, un}, // 8
- {gt, gt, un, un, un, un, un, un, un, un, lt, lt, gt, gt, lt, lt, lt, lt, lt, lt, un, un}, // 9
- {gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, eq, gt, gt, gt, gt, gt, gt, gt, lt, lt, un, un}, // 10
- {gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, lt, eq, gt, gt, gt, gt, gt, gt, lt, lt, un, un}, // 11
- {gt, gt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, eq, gt, lt, lt, lt, lt, lt, lt, un, un}, // 12
- {gt, gt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, eq, lt, lt, lt, lt, lt, lt, un, un}, // 13
- {gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, lt, lt, gt, gt, eq, lt, gt, gt, lt, lt, un, un}, // 14
- {gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, lt, lt, gt, gt, gt, eq, gt, gt, lt, lt, un, un}, // 15
- {gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, lt, lt, gt, gt, lt, lt, eq, gt, lt, lt, un, un}, // 16
- {gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, lt, lt, gt, gt, lt, lt, lt, eq, lt, lt, un, un}, // 17
- {gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, eq, lt, un, un}, // 18
- {gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, eq, un, un}, // 19
- {un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un}, // 20
- {un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un}, // 21
- };
+ std::vector<std::vector<std::partial_ordering>> expected = {
+ //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
+ {eq, eq, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, un, un}, // 0
+ {eq, eq, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, un, un}, // 1
+ {gt, gt, eq, lt, lt, lt, lt, lt, un, un, lt, lt, gt, gt, lt, lt, lt, lt, lt, lt, un, un}, // 2
+ {gt, gt, gt, eq, gt, gt, gt, gt, un, un, lt, lt, gt, gt, lt, lt, lt, lt, lt, lt, un, un}, // 3
+ {gt, gt, gt, lt, eq, lt, gt, lt, un, un, lt, lt, gt, gt, lt, lt, lt, lt, lt, lt, un, un}, // 4
+ {gt, gt, gt, lt, gt, eq, gt, lt, un, un, lt, lt, gt, gt, lt, lt, lt, lt, lt, lt, un, un}, // 5
+ {gt, gt, gt, lt, lt, lt, eq, lt, un, un, lt, lt, gt, gt, lt, lt, lt, lt, lt, lt, un, un}, // 6
+ {gt, gt, gt, lt, gt, gt, gt, eq, un, un, lt, lt, gt, gt, lt, lt, lt, lt, lt, lt, un, un}, // 7
+ {gt, gt, un, un, un, un, un, un, un, un, lt, lt, gt, gt, lt, lt, lt, lt, lt, lt, un, un}, // 8
+ {gt, gt, un, un, un, un, un, un, un, un, lt, lt, gt, gt, lt, lt, lt, lt, lt, lt, un, un}, // 9
+ {gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, eq, gt, gt, gt, gt, gt, gt, gt, lt, lt, un, un}, // 10
+ {gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, lt, eq, gt, gt, gt, gt, gt, gt, lt, lt, un, un}, // 11
+ {gt, gt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, eq, gt, lt, lt, lt, lt, lt, lt, un, un}, // 12
+ {gt, gt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, lt, eq, lt, lt, lt, lt, lt, lt, un, un}, // 13
+ {gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, lt, lt, gt, gt, eq, lt, gt, gt, lt, lt, un, un}, // 14
+ {gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, lt, lt, gt, gt, gt, eq, gt, gt, lt, lt, un, un}, // 15
+ {gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, lt, lt, gt, gt, lt, lt, eq, gt, lt, lt, un, un}, // 16
+ {gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, lt, lt, gt, gt, lt, lt, lt, eq, lt, lt, un, un}, // 17
+ {gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, eq, lt, un, un}, // 18
+ {gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, gt, eq, un, un}, // 19
+ {un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un}, // 20
+ {un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un, un}, // 21
+ };
// check expected partial_ordering against expected booleans
REQUIRE(expected.size() == expected_eq.size());
diff --git a/tests/src/unit-concepts.cpp b/tests/src/unit-concepts.cpp
index 629142e..d6bf2c9 100644
--- a/tests/src/unit-concepts.cpp
+++ b/tests/src/unit-concepts.cpp
@@ -52,8 +52,7 @@
// X::size_type must return an unsigned integer
CHECK((std::is_unsigned<json::size_type>::value));
// X::size_type can represent any non-negative value of X::difference_type
- CHECK(static_cast<json::size_type>((std::numeric_limits<json::difference_type>::max)()) <=
- (std::numeric_limits<json::size_type>::max)());
+ CHECK(static_cast<json::size_type>((std::numeric_limits<json::difference_type>::max)()) <= (std::numeric_limits<json::size_type>::max)());
// the expression "X u" has the post-condition "u.empty()"
{
diff --git a/tests/src/unit-constructor1.cpp b/tests/src/unit-constructor1.cpp
index b8ebdb6..3d3f1c5 100644
--- a/tests/src/unit-constructor1.cpp
+++ b/tests/src/unit-constructor1.cpp
@@ -173,7 +173,12 @@
SECTION("std::multimap<json::string_t, json>")
{
- std::multimap<json::string_t, json> const o{{"a", json(1)}, {"b", json(1u)}, {"c", json(2.2)}, {"d", json(false)}, {"e", json("string")}, {"f", json()}};
+ std::multimap<json::string_t, json> const o{{"a", json(1)},
+ {"b", json(1u)},
+ {"c", json(2.2)},
+ {"d", json(false)},
+ {"e", json("string")},
+ {"f", json()}};
json const j(o);
CHECK(j.type() == json::value_t::object);
CHECK(j == j_reference);
@@ -181,7 +186,12 @@
SECTION("std::unordered_map<json::string_t, json>")
{
- std::unordered_map<json::string_t, json> const o{{"a", json(1)}, {"b", json(1u)}, {"c", json(2.2)}, {"d", json(false)}, {"e", json("string")}, {"f", json()}};
+ std::unordered_map<json::string_t, json> const o{{"a", json(1)},
+ {"b", json(1u)},
+ {"c", json(2.2)},
+ {"d", json(false)},
+ {"e", json("string")},
+ {"f", json()}};
json const j(o);
CHECK(j.type() == json::value_t::object);
CHECK(j == j_reference);
@@ -189,7 +199,12 @@
SECTION("std::unordered_multimap<json::string_t, json>")
{
- std::unordered_multimap<json::string_t, json> const o{{"a", json(1)}, {"b", json(1u)}, {"c", json(2.2)}, {"d", json(false)}, {"e", json("string")}, {"f", json()}};
+ std::unordered_multimap<json::string_t, json> const o{{"a", json(1)},
+ {"b", json(1u)},
+ {"c", json(2.2)},
+ {"d", json(false)},
+ {"e", json("string")},
+ {"f", json()}};
json const j(o);
CHECK(j.type() == json::value_t::object);
CHECK(j == j_reference);
@@ -1083,7 +1098,9 @@
SECTION("object with error")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::object({{"one", 1}, {"two", 1u}, {"three", 2.2}, {"four", false}, 13}), "[json.exception.type_error.301] cannot create object from initializer list", json::type_error&);
+ CHECK_THROWS_WITH_AS(_ = json::object({{"one", 1}, {"two", 1u}, {"three", 2.2}, {"four", false}, 13}),
+ "[json.exception.type_error.301] cannot create object from initializer list",
+ json::type_error&);
}
SECTION("empty array")
@@ -1328,14 +1345,22 @@
{
json jobject = {{"a", "a"}, {"b", 1}, {"c", 17u}, {"d", false}, {"e", true}};
json jobject2 = {{"a", "a"}, {"b", 1}, {"c", 17u}};
- CHECK_THROWS_WITH_AS(json(jobject.begin(), jobject2.end()), "[json.exception.invalid_iterator.201] iterators are not compatible", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(json(jobject2.begin(), jobject.end()), "[json.exception.invalid_iterator.201] iterators are not compatible", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(jobject.begin(), jobject2.end()),
+ "[json.exception.invalid_iterator.201] iterators are not compatible",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(jobject2.begin(), jobject.end()),
+ "[json.exception.invalid_iterator.201] iterators are not compatible",
+ json::invalid_iterator&);
}
{
json const jobject = {{"a", "a"}, {"b", 1}, {"c", 17u}, {"d", false}, {"e", true}};
json const jobject2 = {{"a", "a"}, {"b", 1}, {"c", 17u}};
- CHECK_THROWS_WITH_AS(json(jobject.cbegin(), jobject2.cend()), "[json.exception.invalid_iterator.201] iterators are not compatible", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(json(jobject2.cbegin(), jobject.cend()), "[json.exception.invalid_iterator.201] iterators are not compatible", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(jobject.cbegin(), jobject2.cend()),
+ "[json.exception.invalid_iterator.201] iterators are not compatible",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(jobject2.cbegin(), jobject.cend()),
+ "[json.exception.invalid_iterator.201] iterators are not compatible",
+ json::invalid_iterator&);
}
}
}
@@ -1389,14 +1414,22 @@
{
json jarray = {1, 2, 3, 4};
json jarray2 = {2, 3, 4, 5};
- CHECK_THROWS_WITH_AS(json(jarray.begin(), jarray2.end()), "[json.exception.invalid_iterator.201] iterators are not compatible", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(json(jarray2.begin(), jarray.end()), "[json.exception.invalid_iterator.201] iterators are not compatible", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(jarray.begin(), jarray2.end()),
+ "[json.exception.invalid_iterator.201] iterators are not compatible",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(jarray2.begin(), jarray.end()),
+ "[json.exception.invalid_iterator.201] iterators are not compatible",
+ json::invalid_iterator&);
}
{
json const jarray = {1, 2, 3, 4};
json const jarray2 = {2, 3, 4, 5};
- CHECK_THROWS_WITH_AS(json(jarray.cbegin(), jarray2.cend()), "[json.exception.invalid_iterator.201] iterators are not compatible", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(json(jarray2.cbegin(), jarray.cend()), "[json.exception.invalid_iterator.201] iterators are not compatible", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(jarray.cbegin(), jarray2.cend()),
+ "[json.exception.invalid_iterator.201] iterators are not compatible",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(jarray2.cbegin(), jarray.cend()),
+ "[json.exception.invalid_iterator.201] iterators are not compatible",
+ json::invalid_iterator&);
}
}
}
@@ -1409,11 +1442,15 @@
{
{
json j;
- CHECK_THROWS_WITH_AS(json(j.begin(), j.end()), "[json.exception.invalid_iterator.206] cannot construct with iterators from null", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(j.begin(), j.end()),
+ "[json.exception.invalid_iterator.206] cannot construct with iterators from null",
+ json::invalid_iterator&);
}
{
json const j;
- CHECK_THROWS_WITH_AS(json(j.cbegin(), j.cend()), "[json.exception.invalid_iterator.206] cannot construct with iterators from null", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(j.cbegin(), j.cend()),
+ "[json.exception.invalid_iterator.206] cannot construct with iterators from null",
+ json::invalid_iterator&);
}
}
@@ -1509,12 +1546,16 @@
{
json j = "foo";
CHECK_THROWS_WITH_AS(json(j.end(), j.end()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(json(j.begin(), j.begin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(j.begin(), j.begin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
{
json const j = "bar";
CHECK_THROWS_WITH_AS(json(j.cend(), j.cend()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(json(j.cbegin(), j.cbegin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(j.cbegin(), j.cbegin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
}
@@ -1523,12 +1564,16 @@
{
json j = false;
CHECK_THROWS_WITH_AS(json(j.end(), j.end()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(json(j.begin(), j.begin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(j.begin(), j.begin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
{
json const j = true;
CHECK_THROWS_WITH_AS(json(j.cend(), j.cend()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(json(j.cbegin(), j.cbegin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(j.cbegin(), j.cbegin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
}
@@ -1537,12 +1582,16 @@
{
json j = 17;
CHECK_THROWS_WITH_AS(json(j.end(), j.end()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(json(j.begin(), j.begin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(j.begin(), j.begin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
{
json const j = 17;
CHECK_THROWS_WITH_AS(json(j.cend(), j.cend()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(json(j.cbegin(), j.cbegin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(j.cbegin(), j.cbegin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
}
@@ -1551,12 +1600,16 @@
{
json j = 17u;
CHECK_THROWS_WITH_AS(json(j.end(), j.end()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(json(j.begin(), j.begin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(j.begin(), j.begin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
{
json const j = 17u;
CHECK_THROWS_WITH_AS(json(j.cend(), j.cend()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(json(j.cbegin(), j.cbegin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(j.cbegin(), j.cbegin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
}
@@ -1565,12 +1618,16 @@
{
json j = 23.42;
CHECK_THROWS_WITH_AS(json(j.end(), j.end()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(json(j.begin(), j.begin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(j.begin(), j.begin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
{
json const j = 23.42;
CHECK_THROWS_WITH_AS(json(j.cend(), j.cend()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(json(j.cbegin(), j.cbegin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(json(j.cbegin(), j.cbegin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
}
}
diff --git a/tests/src/unit-convenience.cpp b/tests/src/unit-convenience.cpp
index f5c372a..4621e01 100644
--- a/tests/src/unit-convenience.cpp
+++ b/tests/src/unit-convenience.cpp
@@ -14,7 +14,8 @@
#include <sstream>
-namespace {
+namespace
+{
struct alt_string_iter
{
alt_string_iter() = default;
diff --git a/tests/src/unit-conversions.cpp b/tests/src/unit-conversions.cpp
index 6be465b..8c0fd73 100644
--- a/tests/src/unit-conversions.cpp
+++ b/tests/src/unit-conversions.cpp
@@ -36,12 +36,8 @@
{
SECTION("get an object (explicit)")
{
- const json::object_t o_reference = {{"object", json::object()},
- {"array", {1, 2, 3, 4}},
- {"number", 42},
- {"boolean", false},
- {"null", nullptr},
- {"string", "Hello world"}};
+ const json::object_t o_reference =
+ {{"object", json::object()}, {"array", {1, 2, 3, 4}}, {"number", 42}, {"boolean", false}, {"null", nullptr}, {"string", "Hello world"}};
json j(o_reference);
SECTION("json::object_t")
@@ -52,73 +48,59 @@
SECTION("std::map<json::string_t, json>")
{
- const std::map<json::string_t, json> o =
- j.get<std::map<json::string_t, json>>();
+ const std::map<json::string_t, json> o = j.get<std::map<json::string_t, json>>();
CHECK(json(o) == j);
}
SECTION("std::multimap<json::string_t, json>")
{
- const std::multimap<json::string_t, json> o =
- j.get<std::multimap<json::string_t, json>>();
+ const std::multimap<json::string_t, json> o = j.get<std::multimap<json::string_t, json>>();
CHECK(json(o) == j);
}
SECTION("std::unordered_map<json::string_t, json>")
{
- const std::unordered_map<json::string_t, json> o =
- j.get<std::unordered_map<json::string_t, json>>();
+ const std::unordered_map<json::string_t, json> o = j.get<std::unordered_map<json::string_t, json>>();
CHECK(json(o) == j);
}
SECTION("std::unordered_multimap<json::string_t, json>")
{
- const std::unordered_multimap<json::string_t, json> o =
- j.get<std::unordered_multimap<json::string_t, json>>();
+ const std::unordered_multimap<json::string_t, json> o = j.get<std::unordered_multimap<json::string_t, json>>();
CHECK(json(o) == j);
}
SECTION("exception in case of a non-object type")
{
- CHECK_THROWS_WITH_AS(
- json(json::value_t::null).get<json::object_t>(),
- "[json.exception.type_error.302] type must be object, but is null",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::array).get<json::object_t>(),
- "[json.exception.type_error.302] type must be object, but is array",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::string).get<json::object_t>(),
- "[json.exception.type_error.302] type must be object, but is string",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::null).get<json::object_t>(),
+ "[json.exception.type_error.302] type must be object, but is null",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::array).get<json::object_t>(),
+ "[json.exception.type_error.302] type must be object, but is array",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::string).get<json::object_t>(),
+ "[json.exception.type_error.302] type must be object, but is string",
+ json::type_error&);
CHECK_THROWS_WITH_AS(json(json::value_t::boolean).get<json::object_t>(),
"[json.exception.type_error.302] type must be object, "
"but is boolean",
json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::number_integer).get<json::object_t>(),
- "[json.exception.type_error.302] type must be object, but is number",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::number_unsigned).get<json::object_t>(),
- "[json.exception.type_error.302] type must be object, but is number",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::number_float).get<json::object_t>(),
- "[json.exception.type_error.302] type must be object, but is number",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::number_integer).get<json::object_t>(),
+ "[json.exception.type_error.302] type must be object, but is number",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::number_unsigned).get<json::object_t>(),
+ "[json.exception.type_error.302] type must be object, but is number",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::number_float).get<json::object_t>(),
+ "[json.exception.type_error.302] type must be object, but is number",
+ json::type_error&);
}
}
SECTION("get an object (explicit, get_to)")
{
- const json::object_t o_reference = {{"object", json::object()},
- {"array", {1, 2, 3, 4}},
- {"number", 42},
- {"boolean", false},
- {"null", nullptr},
- {"string", "Hello world"}};
+ const json::object_t o_reference =
+ {{"object", json::object()}, {"array", {1, 2, 3, 4}}, {"number", 42}, {"boolean", false}, {"null", nullptr}, {"string", "Hello world"}};
json j(o_reference);
SECTION("json::object_t")
@@ -160,12 +142,8 @@
#if JSON_USE_IMPLICIT_CONVERSIONS
SECTION("get an object (implicit)")
{
- const json::object_t o_reference = {{"object", json::object()},
- {"array", {1, 2, 3, 4}},
- {"number", 42},
- {"boolean", false},
- {"null", nullptr},
- {"string", "Hello world"}};
+ const json::object_t o_reference =
+ {{"object", json::object()}, {"array", {1, 2, 3, 4}}, {"number", 42}, {"boolean", false}, {"null", nullptr}, {"string", "Hello world"}};
json j(o_reference);
SECTION("json::object_t")
@@ -222,10 +200,9 @@
const std::forward_list<json> a = j.get<std::forward_list<json>>();
CHECK(json(a) == j);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::null).get<std::forward_list<json>>(),
- "[json.exception.type_error.302] type must be array, but is null",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::null).get<std::forward_list<json>>(),
+ "[json.exception.type_error.302] type must be array, but is null",
+ json::type_error&);
}
SECTION("std::vector<json>")
@@ -233,10 +210,9 @@
const std::vector<json> a = j.get<std::vector<json>>();
CHECK(json(a) == j);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::null).get<std::vector<json>>(),
- "[json.exception.type_error.302] type must be array, but is null",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::null).get<std::vector<json>>(),
+ "[json.exception.type_error.302] type must be array, but is null",
+ json::type_error&);
#if !defined(JSON_NOEXCEPTION)
SECTION("reserve is called on containers that supports it")
@@ -271,38 +247,30 @@
SECTION("exception in case of a non-array type")
{
- CHECK_THROWS_WITH_AS(
- json(json::value_t::object).get<std::vector<int>>(),
- "[json.exception.type_error.302] type must be array, but is object",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::null).get<json::array_t>(),
- "[json.exception.type_error.302] type must be array, but is null",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::object).get<json::array_t>(),
- "[json.exception.type_error.302] type must be array, but is object",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::string).get<json::array_t>(),
- "[json.exception.type_error.302] type must be array, but is string",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::boolean).get<json::array_t>(),
- "[json.exception.type_error.302] type must be array, but is boolean",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::number_integer).get<json::array_t>(),
- "[json.exception.type_error.302] type must be array, but is number",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::number_unsigned).get<json::array_t>(),
- "[json.exception.type_error.302] type must be array, but is number",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::number_float).get<json::array_t>(),
- "[json.exception.type_error.302] type must be array, but is number",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::object).get<std::vector<int>>(),
+ "[json.exception.type_error.302] type must be array, but is object",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::null).get<json::array_t>(),
+ "[json.exception.type_error.302] type must be array, but is null",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::object).get<json::array_t>(),
+ "[json.exception.type_error.302] type must be array, but is object",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::string).get<json::array_t>(),
+ "[json.exception.type_error.302] type must be array, but is string",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::boolean).get<json::array_t>(),
+ "[json.exception.type_error.302] type must be array, but is boolean",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::number_integer).get<json::array_t>(),
+ "[json.exception.type_error.302] type must be array, but is number",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::number_unsigned).get<json::array_t>(),
+ "[json.exception.type_error.302] type must be array, but is number",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::number_float).get<json::array_t>(),
+ "[json.exception.type_error.302] type must be array, but is number",
+ json::type_error&);
}
}
@@ -428,34 +396,28 @@
SECTION("exception in case of a non-string type")
{
- CHECK_THROWS_WITH_AS(
- json(json::value_t::null).get<json::string_t>(),
- "[json.exception.type_error.302] type must be string, but is null",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::object).get<json::string_t>(),
- "[json.exception.type_error.302] type must be string, but is object",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::array).get<json::string_t>(),
- "[json.exception.type_error.302] type must be string, but is array",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::null).get<json::string_t>(),
+ "[json.exception.type_error.302] type must be string, but is null",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::object).get<json::string_t>(),
+ "[json.exception.type_error.302] type must be string, but is object",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::array).get<json::string_t>(),
+ "[json.exception.type_error.302] type must be string, but is array",
+ json::type_error&);
CHECK_THROWS_WITH_AS(json(json::value_t::boolean).get<json::string_t>(),
"[json.exception.type_error.302] type must be string, "
"but is boolean",
json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::number_integer).get<json::string_t>(),
- "[json.exception.type_error.302] type must be string, but is number",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::number_unsigned).get<json::string_t>(),
- "[json.exception.type_error.302] type must be string, but is number",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::number_float).get<json::string_t>(),
- "[json.exception.type_error.302] type must be string, but is number",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::number_integer).get<json::string_t>(),
+ "[json.exception.type_error.302] type must be string, but is number",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::number_unsigned).get<json::string_t>(),
+ "[json.exception.type_error.302] type must be string, but is number",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::number_float).get<json::string_t>(),
+ "[json.exception.type_error.302] type must be string, but is number",
+ json::type_error&);
}
#if defined(JSON_HAS_CPP_17)
@@ -599,40 +561,34 @@
SECTION("exception in case of a non-number type")
{
- CHECK_THROWS_AS(json(json::value_t::string).get<uint8_t>(),
- json::type_error&);
+ CHECK_THROWS_AS(json(json::value_t::string).get<uint8_t>(), json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::null).get<json::boolean_t>(),
- "[json.exception.type_error.302] type must be boolean, but is null",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::null).get<json::boolean_t>(),
+ "[json.exception.type_error.302] type must be boolean, but is null",
+ json::type_error&);
CHECK_THROWS_WITH_AS(json(json::value_t::object).get<json::boolean_t>(),
"[json.exception.type_error.302] type must be boolean, "
"but is object",
json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::array).get<json::boolean_t>(),
- "[json.exception.type_error.302] type must be boolean, but is array",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::array).get<json::boolean_t>(),
+ "[json.exception.type_error.302] type must be boolean, but is array",
+ json::type_error&);
CHECK_THROWS_WITH_AS(json(json::value_t::string).get<json::boolean_t>(),
"[json.exception.type_error.302] type must be boolean, "
"but is string",
json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::number_integer).get<json::boolean_t>(),
- "[json.exception.type_error.302] type must be boolean, but is "
- "number",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::number_unsigned).get<json::boolean_t>(),
- "[json.exception.type_error.302] type must be boolean, but is "
- "number",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::number_float).get<json::boolean_t>(),
- "[json.exception.type_error.302] type must be boolean, but is "
- "number",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::number_integer).get<json::boolean_t>(),
+ "[json.exception.type_error.302] type must be boolean, but is "
+ "number",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::number_unsigned).get<json::boolean_t>(),
+ "[json.exception.type_error.302] type must be boolean, but is "
+ "number",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::number_float).get<json::boolean_t>(),
+ "[json.exception.type_error.302] type must be boolean, but is "
+ "number",
+ json::type_error&);
}
}
@@ -869,32 +825,25 @@
SECTION("exception in case of a non-number type")
{
- CHECK_THROWS_WITH_AS(
- json(json::value_t::null).get<json::number_integer_t>(),
- "[json.exception.type_error.302] type must be number, but is null",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::object).get<json::number_integer_t>(),
- "[json.exception.type_error.302] type must be number, but is object",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::array).get<json::number_integer_t>(),
- "[json.exception.type_error.302] type must be number, but is array",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::string).get<json::number_integer_t>(),
- "[json.exception.type_error.302] type must be number, but is string",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::boolean).get<json::number_integer_t>(),
- "[json.exception.type_error.302] type must be number, but is "
- "boolean",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::null).get<json::number_integer_t>(),
+ "[json.exception.type_error.302] type must be number, but is null",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::object).get<json::number_integer_t>(),
+ "[json.exception.type_error.302] type must be number, but is object",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::array).get<json::number_integer_t>(),
+ "[json.exception.type_error.302] type must be number, but is array",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::string).get<json::number_integer_t>(),
+ "[json.exception.type_error.302] type must be number, but is string",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::boolean).get<json::number_integer_t>(),
+ "[json.exception.type_error.302] type must be number, but is "
+ "boolean",
+ json::type_error&);
- CHECK_NOTHROW(
- json(json::value_t::number_float).get<json::number_integer_t>());
- CHECK_NOTHROW(
- json(json::value_t::number_float).get<json::number_unsigned_t>());
+ CHECK_NOTHROW(json(json::value_t::number_float).get<json::number_integer_t>());
+ CHECK_NOTHROW(json(json::value_t::number_float).get<json::number_unsigned_t>());
}
}
@@ -1137,32 +1086,25 @@
SECTION("exception in case of a non-string type")
{
- CHECK_THROWS_WITH_AS(
- json(json::value_t::null).get<json::number_float_t>(),
- "[json.exception.type_error.302] type must be number, but is null",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::object).get<json::number_float_t>(),
- "[json.exception.type_error.302] type must be number, but is object",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::array).get<json::number_float_t>(),
- "[json.exception.type_error.302] type must be number, but is array",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::string).get<json::number_float_t>(),
- "[json.exception.type_error.302] type must be number, but is string",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- json(json::value_t::boolean).get<json::number_float_t>(),
- "[json.exception.type_error.302] type must be number, but is "
- "boolean",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::null).get<json::number_float_t>(),
+ "[json.exception.type_error.302] type must be number, but is null",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::object).get<json::number_float_t>(),
+ "[json.exception.type_error.302] type must be number, but is object",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::array).get<json::number_float_t>(),
+ "[json.exception.type_error.302] type must be number, but is array",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::string).get<json::number_float_t>(),
+ "[json.exception.type_error.302] type must be number, but is string",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(json(json::value_t::boolean).get<json::number_float_t>(),
+ "[json.exception.type_error.302] type must be number, but is "
+ "boolean",
+ json::type_error&);
- CHECK_NOTHROW(
- json(json::value_t::number_integer).get<json::number_float_t>());
- CHECK_NOTHROW(
- json(json::value_t::number_unsigned).get<json::number_float_t>());
+ CHECK_NOTHROW(json(json::value_t::number_integer).get<json::number_float_t>());
+ CHECK_NOTHROW(json(json::value_t::number_unsigned).get<json::number_float_t>());
}
}
@@ -1232,69 +1174,31 @@
const json j_string_const(json::value_t::string);
const json j_boolean_const(json::value_t::boolean);
- CHECK_THROWS_WITH_AS(j_null.get<json::binary_t>(),
- "[json.exception.type_error.302] type must be binary, but is null",
- json::type_error&);
- CHECK_THROWS_WITH_AS(j_object.get<json::binary_t>(),
- "[json.exception.type_error.302] type must be binary, but is object",
- json::type_error&);
- CHECK_THROWS_WITH_AS(j_array.get<json::binary_t>(),
- "[json.exception.type_error.302] type must be binary, but is array",
- json::type_error&);
- CHECK_THROWS_WITH_AS(j_string.get<json::binary_t>(),
- "[json.exception.type_error.302] type must be binary, but is string",
- json::type_error&);
- CHECK_THROWS_WITH_AS(j_boolean.get<json::binary_t>(),
- "[json.exception.type_error.302] type must be binary, but is boolean",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(j_null.get<json::binary_t>(), "[json.exception.type_error.302] type must be binary, but is null", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_object.get<json::binary_t>(), "[json.exception.type_error.302] type must be binary, but is object", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_array.get<json::binary_t>(), "[json.exception.type_error.302] type must be binary, but is array", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_string.get<json::binary_t>(), "[json.exception.type_error.302] type must be binary, but is string", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_boolean.get<json::binary_t>(), "[json.exception.type_error.302] type must be binary, but is boolean", json::type_error&);
- CHECK_THROWS_WITH_AS(j_null_const.get<json::binary_t>(),
- "[json.exception.type_error.302] type must be binary, but is null",
- json::type_error&);
- CHECK_THROWS_WITH_AS(j_object_const.get<json::binary_t>(),
- "[json.exception.type_error.302] type must be binary, but is object",
- json::type_error&);
- CHECK_THROWS_WITH_AS(j_array_const.get<json::binary_t>(),
- "[json.exception.type_error.302] type must be binary, but is array",
- json::type_error&);
- CHECK_THROWS_WITH_AS(j_string_const.get<json::binary_t>(),
- "[json.exception.type_error.302] type must be binary, but is string",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(j_null_const.get<json::binary_t>(), "[json.exception.type_error.302] type must be binary, but is null", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_object_const.get<json::binary_t>(), "[json.exception.type_error.302] type must be binary, but is object", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_array_const.get<json::binary_t>(), "[json.exception.type_error.302] type must be binary, but is array", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_string_const.get<json::binary_t>(), "[json.exception.type_error.302] type must be binary, but is string", json::type_error&);
CHECK_THROWS_WITH_AS(j_boolean_const.get<json::binary_t>(),
"[json.exception.type_error.302] type must be binary, but is boolean",
json::type_error&);
- CHECK_THROWS_WITH_AS(j_null.get_binary(),
- "[json.exception.type_error.302] type must be binary, but is null",
- json::type_error&);
- CHECK_THROWS_WITH_AS(j_object.get_binary(),
- "[json.exception.type_error.302] type must be binary, but is object",
- json::type_error&);
- CHECK_THROWS_WITH_AS(j_array.get_binary(),
- "[json.exception.type_error.302] type must be binary, but is array",
- json::type_error&);
- CHECK_THROWS_WITH_AS(j_string.get_binary(),
- "[json.exception.type_error.302] type must be binary, but is string",
- json::type_error&);
- CHECK_THROWS_WITH_AS(j_boolean.get_binary(),
- "[json.exception.type_error.302] type must be binary, but is boolean",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(j_null.get_binary(), "[json.exception.type_error.302] type must be binary, but is null", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_object.get_binary(), "[json.exception.type_error.302] type must be binary, but is object", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_array.get_binary(), "[json.exception.type_error.302] type must be binary, but is array", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_string.get_binary(), "[json.exception.type_error.302] type must be binary, but is string", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_boolean.get_binary(), "[json.exception.type_error.302] type must be binary, but is boolean", json::type_error&);
- CHECK_THROWS_WITH_AS(j_null_const.get_binary(),
- "[json.exception.type_error.302] type must be binary, but is null",
- json::type_error&);
- CHECK_THROWS_WITH_AS(j_object_const.get_binary(),
- "[json.exception.type_error.302] type must be binary, but is object",
- json::type_error&);
- CHECK_THROWS_WITH_AS(j_array_const.get_binary(),
- "[json.exception.type_error.302] type must be binary, but is array",
- json::type_error&);
- CHECK_THROWS_WITH_AS(j_string_const.get_binary(),
- "[json.exception.type_error.302] type must be binary, but is string",
- json::type_error&);
- CHECK_THROWS_WITH_AS(j_boolean_const.get_binary(),
- "[json.exception.type_error.302] type must be binary, but is boolean",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(j_null_const.get_binary(), "[json.exception.type_error.302] type must be binary, but is null", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_object_const.get_binary(), "[json.exception.type_error.302] type must be binary, but is object", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_array_const.get_binary(), "[json.exception.type_error.302] type must be binary, but is array", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_string_const.get_binary(), "[json.exception.type_error.302] type must be binary, but is string", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_boolean_const.get_binary(), "[json.exception.type_error.302] type must be binary, but is boolean", json::type_error&);
}
}
@@ -1380,10 +1284,9 @@
SECTION("exception in case of a non-object type")
{
- CHECK_THROWS_WITH_AS(
- (json().get<std::map<std::string, int>>()),
- "[json.exception.type_error.302] type must be object, but is null",
- json::type_error&);
+ CHECK_THROWS_WITH_AS((json().get<std::map<std::string, int>>()),
+ "[json.exception.type_error.302] type must be object, but is null",
+ json::type_error&);
}
}
@@ -1424,8 +1327,9 @@
SECTION("std::array is larger than JSON")
{
std::array<int, 6> arr6 = {{1, 2, 3, 4, 5, 6}};
- CHECK_THROWS_WITH_AS(j1.get_to(arr6), "[json.exception.out_of_range.401] "
- "array index 4 is out of range",
+ CHECK_THROWS_WITH_AS(j1.get_to(arr6),
+ "[json.exception.out_of_range.401] "
+ "array index 4 is out of range",
json::out_of_range&);
}
@@ -1541,30 +1445,12 @@
{
// does type really must be an array? or it rather must not be null?
// that's what I thought when other test like this one broke
- CHECK_THROWS_WITH_AS(
- (json().get<std::list<int>>()),
- "[json.exception.type_error.302] type must be array, but is null",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- (json().get<std::vector<int>>()),
- "[json.exception.type_error.302] type must be array, but is null",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- (json().get<std::vector<json>>()),
- "[json.exception.type_error.302] type must be array, but is null",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- (json().get<std::list<json>>()),
- "[json.exception.type_error.302] type must be array, but is null",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- (json().get<std::valarray<int>>()),
- "[json.exception.type_error.302] type must be array, but is null",
- json::type_error&);
- CHECK_THROWS_WITH_AS(
- (json().get<std::map<int, int>>()),
- "[json.exception.type_error.302] type must be array, but is null",
- json::type_error&);
+ CHECK_THROWS_WITH_AS((json().get<std::list<int>>()), "[json.exception.type_error.302] type must be array, but is null", json::type_error&);
+ CHECK_THROWS_WITH_AS((json().get<std::vector<int>>()), "[json.exception.type_error.302] type must be array, but is null", json::type_error&);
+ CHECK_THROWS_WITH_AS((json().get<std::vector<json>>()), "[json.exception.type_error.302] type must be array, but is null", json::type_error&);
+ CHECK_THROWS_WITH_AS((json().get<std::list<json>>()), "[json.exception.type_error.302] type must be array, but is null", json::type_error&);
+ CHECK_THROWS_WITH_AS((json().get<std::valarray<int>>()), "[json.exception.type_error.302] type must be array, but is null", json::type_error&);
+ CHECK_THROWS_WITH_AS((json().get<std::map<int, int>>()), "[json.exception.type_error.302] type must be array, but is null", json::type_error&);
}
}
}
diff --git a/tests/src/unit-custom-base-class.cpp b/tests/src/unit-custom-base-class.cpp
index 03bb4b2..f9a4f7a 100644
--- a/tests/src/unit-custom-base-class.cpp
+++ b/tests/src/unit-custom-base-class.cpp
@@ -36,19 +36,17 @@
};
template<class T>
-using json_with_metadata =
- nlohmann::basic_json<
- std::map,
- std::vector,
- std::string,
- bool,
- std::int64_t,
- std::uint64_t,
- double,
- std::allocator,
- nlohmann::adl_serializer,
- std::vector<std::uint8_t>,
- json_metadata<T>>;
+using json_with_metadata = nlohmann::basic_json<std::map,
+ std::vector,
+ std::string,
+ bool,
+ std::int64_t,
+ std::uint64_t,
+ double,
+ std::allocator,
+ nlohmann::adl_serializer,
+ std::vector<std::uint8_t>,
+ json_metadata<T>>;
TEST_CASE("JSON Node Metadata")
{
@@ -196,18 +194,17 @@
void do_visit(const Ptr& ptr, const Fnc& fnc) const;
};
-using json_with_visitor_t = nlohmann::basic_json<
- std::map,
- std::vector,
- std::string,
- bool,
- std::int64_t,
- std::uint64_t,
- double,
- std::allocator,
- nlohmann::adl_serializer,
- std::vector<std::uint8_t>,
- visitor_adaptor>;
+using json_with_visitor_t = nlohmann::basic_json<std::map,
+ std::vector,
+ std::string,
+ bool,
+ std::int64_t,
+ std::uint64_t,
+ double,
+ std::allocator,
+ nlohmann::adl_serializer,
+ std::vector<std::uint8_t>,
+ visitor_adaptor>;
template<class Fnc>
void visitor_adaptor::visit(const Fnc& fnc) const
@@ -261,72 +258,69 @@
json["array"].push_back(1);
json["array"].push_back(json);
- std::set<std::string> expected{
- "/null - null - null",
- "/int - number_integer - -1",
- "/uint - number_unsigned - 1",
- "/float - number_float - 1.0",
- "/boolean - boolean - true",
- "/string - string - \"string\"",
- "/array/0 - number_integer - 0",
- "/array/1 - number_integer - 1",
+ std::set<std::string> expected{"/null - null - null",
+ "/int - number_integer - -1",
+ "/uint - number_unsigned - 1",
+ "/float - number_float - 1.0",
+ "/boolean - boolean - true",
+ "/string - string - \"string\"",
+ "/array/0 - number_integer - 0",
+ "/array/1 - number_integer - 1",
- "/array/2/null - null - null",
- "/array/2/int - number_integer - -1",
- "/array/2/uint - number_unsigned - 1",
- "/array/2/float - number_float - 1.0",
- "/array/2/boolean - boolean - true",
- "/array/2/string - string - \"string\"",
- "/array/2/array/0 - number_integer - 0",
- "/array/2/array/1 - number_integer - 1"};
+ "/array/2/null - null - null",
+ "/array/2/int - number_integer - -1",
+ "/array/2/uint - number_unsigned - 1",
+ "/array/2/float - number_float - 1.0",
+ "/array/2/boolean - boolean - true",
+ "/array/2/string - string - \"string\"",
+ "/array/2/array/0 - number_integer - 0",
+ "/array/2/array/1 - number_integer - 1"};
- json.visit(
- [&](const json_with_visitor_t::json_pointer& p,
- const json_with_visitor_t& j) {
- std::stringstream str;
- str << p.to_string() << " - ";
- using value_t = nlohmann::detail::value_t;
- switch (j.type())
- {
- case value_t::object:
- str << "object";
- break;
- case value_t::array:
- str << "array";
- break;
- case value_t::discarded:
- str << "discarded";
- break;
- case value_t::null:
- str << "null";
- break;
- case value_t::string:
- str << "string";
- break;
- case value_t::boolean:
- str << "boolean";
- break;
- case value_t::number_integer:
- str << "number_integer";
- break;
- case value_t::number_unsigned:
- str << "number_unsigned";
- break;
- case value_t::number_float:
- str << "number_float";
- break;
- case value_t::binary:
- str << "binary";
- break;
- default:
- str << "error";
- break;
- }
- str << " - " << j.dump();
- CHECK(json.at(p) == j);
- INFO(str.str());
- CHECK(expected.count(str.str()) == 1);
- expected.erase(str.str());
- });
+ json.visit([&](const json_with_visitor_t::json_pointer& p, const json_with_visitor_t& j) {
+ std::stringstream str;
+ str << p.to_string() << " - ";
+ using value_t = nlohmann::detail::value_t;
+ switch (j.type())
+ {
+ case value_t::object:
+ str << "object";
+ break;
+ case value_t::array:
+ str << "array";
+ break;
+ case value_t::discarded:
+ str << "discarded";
+ break;
+ case value_t::null:
+ str << "null";
+ break;
+ case value_t::string:
+ str << "string";
+ break;
+ case value_t::boolean:
+ str << "boolean";
+ break;
+ case value_t::number_integer:
+ str << "number_integer";
+ break;
+ case value_t::number_unsigned:
+ str << "number_unsigned";
+ break;
+ case value_t::number_float:
+ str << "number_float";
+ break;
+ case value_t::binary:
+ str << "binary";
+ break;
+ default:
+ str << "error";
+ break;
+ }
+ str << " - " << j.dump();
+ CHECK(json.at(p) == j);
+ INFO(str.str());
+ CHECK(expected.count(str.str()) == 1);
+ expected.erase(str.str());
+ });
CHECK(expected.empty());
}
diff --git a/tests/src/unit-deserialization.cpp b/tests/src/unit-deserialization.cpp
index 5b82ebf..46280f5 100644
--- a/tests/src/unit-deserialization.cpp
+++ b/tests/src/unit-deserialization.cpp
@@ -20,7 +20,8 @@
#include <sstream>
#include <valarray>
-namespace {
+namespace
+{
struct SaxEventLogger : public nlohmann::json_sax<json>
{
bool null() override
@@ -176,8 +177,7 @@
using value_type = typename std::iterator_traits<iterator>::value_type;
using reference = typename std::iterator_traits<iterator>::reference;
using pointer = typename std::iterator_traits<iterator>::pointer;
- using difference_type =
- typename std::iterator_traits<iterator>::difference_type;
+ using difference_type = typename std::iterator_traits<iterator>::difference_type;
using iterator_category = std::input_iterator_tag;
proxy_iterator() = default;
@@ -236,8 +236,17 @@
SaxEventLogger l;
CHECK(json::sax_parse(ss3, &l));
CHECK(l.events.size() == 11);
- CHECK(l.events == std::vector<std::string>(
- {"start_array()", "string(foo)", "number_unsigned(1)", "number_unsigned(2)", "number_unsigned(3)", "boolean(false)", "start_object()", "key(one)", "number_unsigned(1)", "end_object()", "end_array()"}));
+ CHECK(l.events == std::vector<std::string>({"start_array()",
+ "string(foo)",
+ "number_unsigned(1)",
+ "number_unsigned(2)",
+ "number_unsigned(3)",
+ "boolean(false)",
+ "start_object()",
+ "key(one)",
+ "number_unsigned(1)",
+ "end_object()",
+ "end_array()"}));
}
SECTION("string literal")
@@ -250,8 +259,17 @@
SaxEventLogger l;
CHECK(json::sax_parse(s, &l));
CHECK(l.events.size() == 11);
- CHECK(l.events == std::vector<std::string>(
- {"start_array()", "string(foo)", "number_unsigned(1)", "number_unsigned(2)", "number_unsigned(3)", "boolean(false)", "start_object()", "key(one)", "number_unsigned(1)", "end_object()", "end_array()"}));
+ CHECK(l.events == std::vector<std::string>({"start_array()",
+ "string(foo)",
+ "number_unsigned(1)",
+ "number_unsigned(2)",
+ "number_unsigned(3)",
+ "boolean(false)",
+ "start_object()",
+ "key(one)",
+ "number_unsigned(1)",
+ "end_object()",
+ "end_array()"}));
}
SECTION("string_t")
@@ -264,8 +282,17 @@
SaxEventLogger l;
CHECK(json::sax_parse(s, &l));
CHECK(l.events.size() == 11);
- CHECK(l.events == std::vector<std::string>(
- {"start_array()", "string(foo)", "number_unsigned(1)", "number_unsigned(2)", "number_unsigned(3)", "boolean(false)", "start_object()", "key(one)", "number_unsigned(1)", "end_object()", "end_array()"}));
+ CHECK(l.events == std::vector<std::string>({"start_array()",
+ "string(foo)",
+ "number_unsigned(1)",
+ "number_unsigned(2)",
+ "number_unsigned(3)",
+ "boolean(false)",
+ "start_object()",
+ "key(one)",
+ "number_unsigned(1)",
+ "end_object()",
+ "end_array()"}));
}
SECTION("operator<<")
@@ -306,7 +333,10 @@
ss5 << R"(["foo",1,2,3,false,{"one":1})";
json _;
- CHECK_THROWS_WITH_AS(_ = json::parse(ss1), "[json.exception.parse_error.101] parse error at line 1, column 29: syntax error while parsing array - unexpected end of input; expected ']'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse(ss1),
+ "[json.exception.parse_error.101] parse error at line 1, column 29: syntax error while parsing array - unexpected end of input; expected ']'",
+ json::parse_error&);
CHECK(!json::accept(ss3));
json j_error;
@@ -316,15 +346,27 @@
SaxEventLogger l;
CHECK(!json::sax_parse(ss5, &l));
CHECK(l.events.size() == 11);
- CHECK(l.events == std::vector<std::string>(
- {"start_array()", "string(foo)", "number_unsigned(1)", "number_unsigned(2)", "number_unsigned(3)", "boolean(false)", "start_object()", "key(one)", "number_unsigned(1)", "end_object()", "parse_error(29)"}));
+ CHECK(l.events == std::vector<std::string>({"start_array()",
+ "string(foo)",
+ "number_unsigned(1)",
+ "number_unsigned(2)",
+ "number_unsigned(3)",
+ "boolean(false)",
+ "start_object()",
+ "key(one)",
+ "number_unsigned(1)",
+ "end_object()",
+ "parse_error(29)"}));
}
SECTION("string")
{
json::string_t const s = R"(["foo",1,2,3,false,{"one":1})";
json _;
- CHECK_THROWS_WITH_AS(_ = json::parse(s), "[json.exception.parse_error.101] parse error at line 1, column 29: syntax error while parsing array - unexpected end of input; expected ']'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse(s),
+ "[json.exception.parse_error.101] parse error at line 1, column 29: syntax error while parsing array - unexpected end of input; expected ']'",
+ json::parse_error&);
CHECK(!json::accept(s));
json j_error;
@@ -334,8 +376,17 @@
SaxEventLogger l;
CHECK(!json::sax_parse(s, &l));
CHECK(l.events.size() == 11);
- CHECK(l.events == std::vector<std::string>(
- {"start_array()", "string(foo)", "number_unsigned(1)", "number_unsigned(2)", "number_unsigned(3)", "boolean(false)", "start_object()", "key(one)", "number_unsigned(1)", "end_object()", "parse_error(29)"}));
+ CHECK(l.events == std::vector<std::string>({"start_array()",
+ "string(foo)",
+ "number_unsigned(1)",
+ "number_unsigned(2)",
+ "number_unsigned(3)",
+ "boolean(false)",
+ "start_object()",
+ "key(one)",
+ "number_unsigned(1)",
+ "end_object()",
+ "parse_error(29)"}));
}
SECTION("operator<<")
@@ -343,7 +394,10 @@
std::stringstream ss;
ss << R"(["foo",1,2,3,false,{"one":1})";
json j;
- CHECK_THROWS_WITH_AS(j << ss, "[json.exception.parse_error.101] parse error at line 1, column 29: syntax error while parsing array - unexpected end of input; expected ']'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ j << ss,
+ "[json.exception.parse_error.101] parse error at line 1, column 29: syntax error while parsing array - unexpected end of input; expected ']'",
+ json::parse_error&);
}
SECTION("operator>>")
@@ -351,12 +405,18 @@
std::stringstream ss;
ss << R"(["foo",1,2,3,false,{"one":1})";
json j;
- CHECK_THROWS_WITH_AS(ss >> j, "[json.exception.parse_error.101] parse error at line 1, column 29: syntax error while parsing array - unexpected end of input; expected ']'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ ss >> j,
+ "[json.exception.parse_error.101] parse error at line 1, column 29: syntax error while parsing array - unexpected end of input; expected ']'",
+ json::parse_error&);
}
SECTION("user-defined string literal")
{
- CHECK_THROWS_WITH_AS("[\"foo\",1,2,3,false,{\"one\":1}"_json, "[json.exception.parse_error.101] parse error at line 1, column 29: syntax error while parsing array - unexpected end of input; expected ']'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ "[\"foo\",1,2,3,false,{\"one\":1}"_json,
+ "[json.exception.parse_error.101] parse error at line 1, column 29: syntax error while parsing array - unexpected end of input; expected ']'",
+ json::parse_error&);
}
}
@@ -658,7 +718,10 @@
{
std::array<std::uint8_t, 4> v = {{'\"', 0x7F, 0xDF, 0x7F}};
json _;
- CHECK_THROWS_WITH_AS(_ = json::parse(std::begin(v), std::end(v)), "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '\"\x7f\xdf\x7f'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse(std::begin(v), std::end(v)),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid string: ill-formed UTF-8 byte; last read: '\"\x7f\xdf\x7f'",
+ json::parse_error&);
CHECK(!json::accept(std::begin(v), std::end(v)));
json j_error;
@@ -838,8 +901,7 @@
SaxEventLogger l;
CHECK(!json::sax_parse(std::begin(v), std::end(v), &l));
CHECK(l.events.size() == 4);
- CHECK(l.events == std::vector<std::string>(
- {"start_object()", "key()", "number_unsigned(11)", "parse_error(7)"}));
+ CHECK(l.events == std::vector<std::string>({"start_object()", "key()", "number_unsigned(11)", "parse_error(7)"}));
}
}
}
@@ -851,15 +913,20 @@
SECTION("BOM only")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::parse(bom), "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - unexpected end of input; expected '[', '{', or a literal", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse(bom),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - unexpected end of input; expected '[', '{', or a literal",
+ json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::parse(std::istringstream(bom)), "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - unexpected end of input; expected '[', '{', or a literal", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse(std::istringstream(bom)),
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - unexpected end of input; expected '[', '{', or a literal",
+ json::parse_error&);
SaxEventLogger l;
CHECK(!json::sax_parse(bom, &l));
CHECK(l.events.size() == 1);
- CHECK(l.events == std::vector<std::string>(
- {"parse_error(4)"}));
+ CHECK(l.events == std::vector<std::string>({"parse_error(4)"}));
}
SECTION("BOM and content")
@@ -872,49 +939,55 @@
CHECK(json::sax_parse(std::istringstream(bom + "1"), &l1));
CHECK(json::sax_parse(bom + "1", &l2));
CHECK(l1.events.size() == 1);
- CHECK(l1.events == std::vector<std::string>(
- {"number_unsigned(1)"}));
+ CHECK(l1.events == std::vector<std::string>({"number_unsigned(1)"}));
CHECK(l2.events.size() == 1);
- CHECK(l2.events == std::vector<std::string>(
- {"number_unsigned(1)"}));
+ CHECK(l2.events == std::vector<std::string>({"number_unsigned(1)"}));
}
SECTION("2 byte of BOM")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::parse(bom.substr(0, 2)), "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid BOM; must be 0xEF 0xBB 0xBF if given; last read: '\xEF\xBB'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse(bom.substr(0, 2)),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid BOM; must be 0xEF 0xBB 0xBF if given; last read: '\xEF\xBB'",
+ json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::parse(std::istringstream(bom.substr(0, 2))), "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid BOM; must be 0xEF 0xBB 0xBF if given; last read: '\xEF\xBB'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse(std::istringstream(bom.substr(0, 2))),
+ "[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid BOM; must be 0xEF 0xBB 0xBF if given; last read: '\xEF\xBB'",
+ json::parse_error&);
SaxEventLogger l1;
SaxEventLogger l2;
CHECK(!json::sax_parse(std::istringstream(bom.substr(0, 2)), &l1));
CHECK(!json::sax_parse(bom.substr(0, 2), &l2));
CHECK(l1.events.size() == 1);
- CHECK(l1.events == std::vector<std::string>(
- {"parse_error(3)"}));
+ CHECK(l1.events == std::vector<std::string>({"parse_error(3)"}));
CHECK(l2.events.size() == 1);
- CHECK(l2.events == std::vector<std::string>(
- {"parse_error(3)"}));
+ CHECK(l2.events == std::vector<std::string>({"parse_error(3)"}));
}
SECTION("1 byte of BOM")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::parse(bom.substr(0, 1)), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid BOM; must be 0xEF 0xBB 0xBF if given; last read: '\xEF'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse(bom.substr(0, 1)),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid BOM; must be 0xEF 0xBB 0xBF if given; last read: '\xEF'",
+ json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::parse(std::istringstream(bom.substr(0, 1))), "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid BOM; must be 0xEF 0xBB 0xBF if given; last read: '\xEF'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse(std::istringstream(bom.substr(0, 1))),
+ "[json.exception.parse_error.101] parse error at line 1, column 2: syntax error while parsing value - invalid BOM; must be 0xEF 0xBB 0xBF if given; last read: '\xEF'",
+ json::parse_error&);
SaxEventLogger l1;
SaxEventLogger l2;
CHECK(!json::sax_parse(std::istringstream(bom.substr(0, 1)), &l1));
CHECK(!json::sax_parse(bom.substr(0, 1), &l2));
CHECK(l1.events.size() == 1);
- CHECK(l1.events == std::vector<std::string>(
- {"parse_error(2)"}));
+ CHECK(l1.events == std::vector<std::string>({"parse_error(2)"}));
CHECK(l2.events.size() == 1);
- CHECK(l2.events == std::vector<std::string>(
- {"parse_error(2)"}));
+ CHECK(l2.events == std::vector<std::string>({"parse_error(2)"}));
}
SECTION("variations")
@@ -946,8 +1019,7 @@
SaxEventLogger l;
CHECK(json::sax_parse(s + "null", &l));
CHECK(l.events.size() == 1);
- CHECK(l.events == std::vector<std::string>(
- {"null()"}));
+ CHECK(l.events == std::vector<std::string>({"null()"}));
}
else
{
@@ -962,18 +1034,15 @@
if (i0 != 0)
{
- CHECK(l.events == std::vector<std::string>(
- {"parse_error(1)"}));
+ CHECK(l.events == std::vector<std::string>({"parse_error(1)"}));
}
else if (i1 != 0)
{
- CHECK(l.events == std::vector<std::string>(
- {"parse_error(2)"}));
+ CHECK(l.events == std::vector<std::string>({"parse_error(2)"}));
}
else
{
- CHECK(l.events == std::vector<std::string>(
- {"parse_error(3)"}));
+ CHECK(l.events == std::vector<std::string>({"parse_error(3)"}));
}
}
}
@@ -1003,23 +1072,43 @@
json::sax_parse(s, &default_logger);
CHECK(default_logger.events.size() == 14);
- CHECK(default_logger.events == std::vector<std::string>(
- {"start_array()", "number_unsigned(1)", "start_array()", "string(string)", "number_float(43.12)", "end_array()", "null()", "start_object()", "key(key1)", "boolean(true)", "key(key2)", "boolean(false)", "end_object()", "end_array()"}));
+ CHECK(default_logger.events == std::vector<std::string>({"start_array()",
+ "number_unsigned(1)",
+ "start_array()",
+ "string(string)",
+ "number_float(43.12)",
+ "end_array()",
+ "null()",
+ "start_object()",
+ "key(key1)",
+ "boolean(true)",
+ "key(key2)",
+ "boolean(false)",
+ "end_object()",
+ "end_array()"}));
json::sax_parse(s, &exit_after_start_object);
CHECK(exit_after_start_object.events.size() == 8);
- CHECK(exit_after_start_object.events == std::vector<std::string>(
- {"start_array()", "number_unsigned(1)", "start_array()", "string(string)", "number_float(43.12)", "end_array()", "null()", "start_object()"}));
+ CHECK(
+ exit_after_start_object.events ==
+ std::vector<std::string>(
+ {"start_array()", "number_unsigned(1)", "start_array()", "string(string)", "number_float(43.12)", "end_array()", "null()", "start_object()"}));
json::sax_parse(s, &exit_after_key);
CHECK(exit_after_key.events.size() == 9);
- CHECK(exit_after_key.events == std::vector<std::string>(
- {"start_array()", "number_unsigned(1)", "start_array()", "string(string)", "number_float(43.12)", "end_array()", "null()", "start_object()", "key(key1)"}));
+ CHECK(exit_after_key.events == std::vector<std::string>({"start_array()",
+ "number_unsigned(1)",
+ "start_array()",
+ "string(string)",
+ "number_float(43.12)",
+ "end_array()",
+ "null()",
+ "start_object()",
+ "key(key1)"}));
json::sax_parse(s, &exit_after_start_array);
CHECK(exit_after_start_array.events.size() == 1);
- CHECK(exit_after_start_array.events == std::vector<std::string>(
- {"start_array()"}));
+ CHECK(exit_after_start_array.events == std::vector<std::string>({"start_array()"}));
}
SECTION("JSON Lines")
@@ -1065,7 +1154,20 @@
}
}
-TEST_CASE_TEMPLATE("deserialization of different character types (ASCII)", T, char, unsigned char, signed char, wchar_t, char16_t, char32_t, std::uint8_t, std::int8_t, std::int16_t, std::uint16_t, std::int32_t, std::uint32_t)
+TEST_CASE_TEMPLATE("deserialization of different character types (ASCII)",
+ T,
+ char,
+ unsigned char,
+ signed char,
+ wchar_t,
+ char16_t,
+ char32_t,
+ std::uint8_t,
+ std::int8_t,
+ std::int16_t,
+ std::uint16_t,
+ std::int32_t,
+ std::uint32_t)
{
std::vector<T> const v = {'t', 'r', 'u', 'e'};
CHECK(json::parse(v) == json(true));
@@ -1080,7 +1182,8 @@
TEST_CASE_TEMPLATE("deserialization of different character types (UTF-8)", T, char, unsigned char, std::uint8_t)
{
// a star emoji
- std::vector<T> const v = {'"', static_cast<T>(0xe2u), static_cast<T>(0xadu), static_cast<T>(0x90u), static_cast<T>(0xefu), static_cast<T>(0xb8u), static_cast<T>(0x8fu), '"'};
+ std::vector<T> const v =
+ {'"', static_cast<T>(0xe2u), static_cast<T>(0xadu), static_cast<T>(0x90u), static_cast<T>(0xefu), static_cast<T>(0xb8u), static_cast<T>(0x8fu), '"'};
CHECK(json::parse(v).dump(-1, ' ', true) == "\"\\u2b50\\ufe0f\"");
CHECK(json::accept(v));
diff --git a/tests/src/unit-diagnostics.cpp b/tests/src/unit-diagnostics.cpp
index 0e172b9..8c79a54 100644
--- a/tests/src/unit-diagnostics.cpp
+++ b/tests/src/unit-diagnostics.cpp
@@ -32,7 +32,9 @@
json j;
j["a"]["b"]["c"] = 1;
std::string s;
- CHECK_THROWS_WITH_AS(s = j["a"]["b"]["c"].get<std::string>(), "[json.exception.type_error.302] (/a/b/c) type must be string, but is number", json::type_error);
+ CHECK_THROWS_WITH_AS(s = j["a"]["b"]["c"].get<std::string>(),
+ "[json.exception.type_error.302] (/a/b/c) type must be string, but is number",
+ json::type_error);
}
SECTION("missing key")
@@ -53,14 +55,18 @@
{
json j;
j["array"][4] = true;
- CHECK_THROWS_WITH_AS(j["array"][4][5], "[json.exception.type_error.305] (/array/4) cannot use operator[] with a numeric argument with boolean", json::type_error);
+ CHECK_THROWS_WITH_AS(j["array"][4][5],
+ "[json.exception.type_error.305] (/array/4) cannot use operator[] with a numeric argument with boolean",
+ json::type_error);
}
SECTION("wrong iterator")
{
json j;
j["array"] = json::array();
- CHECK_THROWS_WITH_AS(j["array"].erase(j.begin()), "[json.exception.invalid_iterator.202] (/array) iterator does not fit current value", json::invalid_iterator);
+ CHECK_THROWS_WITH_AS(j["array"].erase(j.begin()),
+ "[json.exception.invalid_iterator.202] (/array) iterator does not fit current value",
+ json::invalid_iterator);
}
SECTION("JSON Pointer escaping")
@@ -68,13 +74,18 @@
json j;
j["a/b"]["m~n"] = 1;
std::string s;
- CHECK_THROWS_WITH_AS(s = j["a/b"]["m~n"].get<std::string>(), "[json.exception.type_error.302] (/a~1b/m~0n) type must be string, but is number", json::type_error);
+ CHECK_THROWS_WITH_AS(s = j["a/b"]["m~n"].get<std::string>(),
+ "[json.exception.type_error.302] (/a~1b/m~0n) type must be string, but is number",
+ json::type_error);
}
SECTION("Parse error")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::parse(""), "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON", json::parse_error);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse(""),
+ "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON",
+ json::parse_error);
}
SECTION("Wrong type in update()")
@@ -82,7 +93,9 @@
json j = {{"foo", "bar"}};
json k = {{"bla", 1}};
- CHECK_THROWS_WITH_AS(j.update(k["bla"].begin(), k["bla"].end()), "[json.exception.type_error.312] (/bla) cannot use update() with number", json::type_error);
+ CHECK_THROWS_WITH_AS(j.update(k["bla"].begin(), k["bla"].end()),
+ "[json.exception.type_error.312] (/bla) cannot use update() with number",
+ json::type_error);
CHECK_THROWS_WITH_AS(j.update(k["bla"]), "[json.exception.type_error.312] (/bla) cannot use update() with number", json::type_error);
}
}
diff --git a/tests/src/unit-disabled_exceptions.cpp b/tests/src/unit-disabled_exceptions.cpp
index 032b0c6..917d73f 100644
--- a/tests/src/unit-disabled_exceptions.cpp
+++ b/tests/src/unit-disabled_exceptions.cpp
@@ -46,7 +46,8 @@
sax_no_exception sax(j);
CHECK(!json::sax_parse("xyz", &sax));
- CHECK(*sax_no_exception::error_string == "[json.exception.parse_error.101] parse error at line 1, column 1: syntax error while parsing value - invalid literal; last read: 'x'");
+ CHECK(*sax_no_exception::error_string ==
+ "[json.exception.parse_error.101] parse error at line 1, column 1: syntax error while parsing value - invalid literal; last read: 'x'");
delete sax_no_exception::error_string; // NOLINT(cppcoreguidelines-owning-memory)
}
}
diff --git a/tests/src/unit-element_access1.cpp b/tests/src/unit-element_access1.cpp
index 95d05d2..0534c2f 100644
--- a/tests/src/unit-element_access1.cpp
+++ b/tests/src/unit-element_access1.cpp
@@ -44,12 +44,8 @@
SECTION("access outside bounds")
{
- CHECK_THROWS_WITH_AS(j.at(8),
- "[json.exception.out_of_range.401] array index 8 is out of range",
- json::out_of_range&);
- CHECK_THROWS_WITH_AS(j_const.at(8),
- "[json.exception.out_of_range.401] array index 8 is out of range",
- json::out_of_range&);
+ CHECK_THROWS_WITH_AS(j.at(8), "[json.exception.out_of_range.401] array index 8 is out of range", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(j_const.at(8), "[json.exception.out_of_range.401] array index 8 is out of range", json::out_of_range&);
}
SECTION("access on non-array type")
@@ -159,7 +155,9 @@
json j_nonarray(json::value_t::null);
const json j_nonarray_const(j_nonarray);
CHECK_NOTHROW(j_nonarray[0]);
- 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&);
+ 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&);
}
SECTION("implicit transformation to properly filled array")
@@ -174,48 +172,72 @@
{
json j_nonarray(json::value_t::boolean);
const json j_nonarray_const(j_nonarray);
- CHECK_THROWS_WITH_AS(j_nonarray[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with boolean", json::type_error&);
- 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&);
+ CHECK_THROWS_WITH_AS(j_nonarray[0],
+ "[json.exception.type_error.305] cannot use operator[] with a numeric argument with boolean",
+ json::type_error&);
+ 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&);
}
SECTION("string")
{
json j_nonarray(json::value_t::string);
const json j_nonarray_const(j_nonarray);
- CHECK_THROWS_WITH_AS(j_nonarray[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with string", json::type_error&);
- 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&);
+ CHECK_THROWS_WITH_AS(j_nonarray[0],
+ "[json.exception.type_error.305] cannot use operator[] with a numeric argument with string",
+ json::type_error&);
+ 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&);
}
SECTION("object")
{
json j_nonarray(json::value_t::object);
const json j_nonarray_const(j_nonarray);
- CHECK_THROWS_WITH_AS(j_nonarray[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with object", json::type_error&);
- 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&);
+ CHECK_THROWS_WITH_AS(j_nonarray[0],
+ "[json.exception.type_error.305] cannot use operator[] with a numeric argument with object",
+ json::type_error&);
+ 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&);
}
SECTION("number (integer)")
{
json j_nonarray(json::value_t::number_integer);
const json j_nonarray_const(j_nonarray);
- CHECK_THROWS_WITH_AS(j_nonarray[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with number", json::type_error&);
- 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&);
+ CHECK_THROWS_WITH_AS(j_nonarray[0],
+ "[json.exception.type_error.305] cannot use operator[] with a numeric argument with number",
+ json::type_error&);
+ 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&);
}
SECTION("number (unsigned)")
{
json j_nonarray(json::value_t::number_unsigned);
const json j_nonarray_const(j_nonarray);
- CHECK_THROWS_WITH_AS(j_nonarray[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with number", json::type_error&);
- 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&);
+ CHECK_THROWS_WITH_AS(j_nonarray[0],
+ "[json.exception.type_error.305] cannot use operator[] with a numeric argument with number",
+ json::type_error&);
+ 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&);
}
SECTION("number (floating-point)")
{
json j_nonarray(json::value_t::number_float);
const json j_nonarray_const(j_nonarray);
- CHECK_THROWS_WITH_AS(j_nonarray[0], "[json.exception.type_error.305] cannot use operator[] with a numeric argument with number", json::type_error&);
- 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&);
+ CHECK_THROWS_WITH_AS(j_nonarray[0],
+ "[json.exception.type_error.305] cannot use operator[] with a numeric argument with number",
+ json::type_error&);
+ 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&);
}
}
}
@@ -539,9 +561,7 @@
}
{
json j;
- CHECK_THROWS_WITH_AS(j.erase(j.begin()),
- "[json.exception.type_error.307] cannot use erase() with null",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(j.erase(j.begin()), "[json.exception.type_error.307] cannot use erase() with null", json::type_error&);
}
}
@@ -823,12 +843,16 @@
{
json j = "foo";
CHECK_THROWS_WITH_AS(j.erase(j.end(), j.end()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j.erase(j.begin(), j.begin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.erase(j.begin(), j.begin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
{
json j = "bar";
CHECK_THROWS_WITH_AS(j.erase(j.cend(), j.cend()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j.erase(j.cbegin(), j.cbegin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.erase(j.cbegin(), j.cbegin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
}
@@ -837,12 +861,16 @@
{
json j = false;
CHECK_THROWS_WITH_AS(j.erase(j.end(), j.end()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j.erase(j.begin(), j.begin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.erase(j.begin(), j.begin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
{
json j = true;
CHECK_THROWS_WITH_AS(j.erase(j.cend(), j.cend()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j.erase(j.cbegin(), j.cbegin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.erase(j.cbegin(), j.cbegin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
}
@@ -851,12 +879,16 @@
{
json j = 17;
CHECK_THROWS_WITH_AS(j.erase(j.end(), j.end()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j.erase(j.begin(), j.begin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.erase(j.begin(), j.begin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
{
json j = 17;
CHECK_THROWS_WITH_AS(j.erase(j.cend(), j.cend()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j.erase(j.cbegin(), j.cbegin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.erase(j.cbegin(), j.cbegin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
}
@@ -865,12 +897,16 @@
{
json j = 17u;
CHECK_THROWS_WITH_AS(j.erase(j.end(), j.end()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j.erase(j.begin(), j.begin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.erase(j.begin(), j.begin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
{
json j = 17u;
CHECK_THROWS_WITH_AS(j.erase(j.cend(), j.cend()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j.erase(j.cbegin(), j.cbegin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.erase(j.cbegin(), j.cbegin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
}
@@ -879,12 +915,16 @@
{
json j = 23.42;
CHECK_THROWS_WITH_AS(j.erase(j.end(), j.end()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j.erase(j.begin(), j.begin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.erase(j.begin(), j.begin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
{
json j = 23.42;
CHECK_THROWS_WITH_AS(j.erase(j.cend(), j.cend()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j.erase(j.cbegin(), j.cbegin()), "[json.exception.invalid_iterator.204] iterators out of range", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.erase(j.cbegin(), j.cbegin()),
+ "[json.exception.invalid_iterator.204] iterators out of range",
+ json::invalid_iterator&);
}
}
}
diff --git a/tests/src/unit-element_access2.cpp b/tests/src/unit-element_access2.cpp
index 9b1b4b2..9bdbd7f 100644
--- a/tests/src/unit-element_access2.cpp
+++ b/tests/src/unit-element_access2.cpp
@@ -21,7 +21,14 @@
{
SECTION("object")
{
- Json j = {{"integer", 1}, {"unsigned", 1u}, {"floating", 42.23}, {"null", nullptr}, {"string", "hello world"}, {"boolean", true}, {"object", Json::object()}, {"array", {1, 2, 3}}};
+ Json j = {{"integer", 1},
+ {"unsigned", 1u},
+ {"floating", 42.23},
+ {"null", nullptr},
+ {"string", "hello world"},
+ {"boolean", true},
+ {"object", Json::object()},
+ {"array", {1, 2, 3}}};
const Json j_const = j;
SECTION("access specified element with bounds checking")
@@ -74,7 +81,9 @@
#ifdef JSON_HAS_CPP_17
CHECK_THROWS_WITH_AS(j.at(std::string_view("foo")), "[json.exception.out_of_range.403] key 'foo' not found", typename Json::out_of_range&);
- CHECK_THROWS_WITH_AS(j_const.at(std::string_view("foo")), "[json.exception.out_of_range.403] key 'foo' not found", typename Json::out_of_range&);
+ CHECK_THROWS_WITH_AS(j_const.at(std::string_view("foo")),
+ "[json.exception.out_of_range.403] key 'foo' not found",
+ typename Json::out_of_range&);
#endif
}
@@ -88,8 +97,12 @@
CHECK_THROWS_WITH_AS(j_nonobject_const.at("foo"), "[json.exception.type_error.304] cannot use at() with null", typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.at(std::string_view(std::string_view("foo"))), "[json.exception.type_error.304] cannot use at() with null", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.at(std::string_view(std::string_view("foo"))), "[json.exception.type_error.304] cannot use at() with null", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.at(std::string_view(std::string_view("foo"))),
+ "[json.exception.type_error.304] cannot use at() with null",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.at(std::string_view(std::string_view("foo"))),
+ "[json.exception.type_error.304] cannot use at() with null",
+ typename Json::type_error&);
#endif
}
@@ -98,11 +111,17 @@
Json j_nonobject(Json::value_t::boolean);
const Json j_nonobject_const(j_nonobject);
CHECK_THROWS_WITH_AS(j_nonobject.at("foo"), "[json.exception.type_error.304] cannot use at() with boolean", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.at("foo"), "[json.exception.type_error.304] cannot use at() with boolean", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.at("foo"),
+ "[json.exception.type_error.304] cannot use at() with boolean",
+ typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.at(std::string_view("foo")), "[json.exception.type_error.304] cannot use at() with boolean", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.at(std::string_view("foo")), "[json.exception.type_error.304] cannot use at() with boolean", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.at(std::string_view("foo")),
+ "[json.exception.type_error.304] cannot use at() with boolean",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.at(std::string_view("foo")),
+ "[json.exception.type_error.304] cannot use at() with boolean",
+ typename Json::type_error&);
#endif
}
@@ -111,11 +130,17 @@
Json j_nonobject(Json::value_t::string);
const Json j_nonobject_const(j_nonobject);
CHECK_THROWS_WITH_AS(j_nonobject.at("foo"), "[json.exception.type_error.304] cannot use at() with string", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.at("foo"), "[json.exception.type_error.304] cannot use at() with string", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.at("foo"),
+ "[json.exception.type_error.304] cannot use at() with string",
+ typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.at(std::string_view("foo")), "[json.exception.type_error.304] cannot use at() with string", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.at(std::string_view("foo")), "[json.exception.type_error.304] cannot use at() with string", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.at(std::string_view("foo")),
+ "[json.exception.type_error.304] cannot use at() with string",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.at(std::string_view("foo")),
+ "[json.exception.type_error.304] cannot use at() with string",
+ typename Json::type_error&);
#endif
}
@@ -127,8 +152,12 @@
CHECK_THROWS_WITH_AS(j_nonobject_const.at("foo"), "[json.exception.type_error.304] cannot use at() with array", typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.at(std::string_view("foo")), "[json.exception.type_error.304] cannot use at() with array", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.at(std::string_view("foo")), "[json.exception.type_error.304] cannot use at() with array", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.at(std::string_view("foo")),
+ "[json.exception.type_error.304] cannot use at() with array",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.at(std::string_view("foo")),
+ "[json.exception.type_error.304] cannot use at() with array",
+ typename Json::type_error&);
#endif
}
@@ -137,11 +166,17 @@
Json j_nonobject(Json::value_t::number_integer);
const Json j_nonobject_const(j_nonobject);
CHECK_THROWS_WITH_AS(j_nonobject.at("foo"), "[json.exception.type_error.304] cannot use at() with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.at("foo"), "[json.exception.type_error.304] cannot use at() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.at("foo"),
+ "[json.exception.type_error.304] cannot use at() with number",
+ typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.at(std::string_view("foo")), "[json.exception.type_error.304] cannot use at() with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.at(std::string_view("foo")), "[json.exception.type_error.304] cannot use at() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.at(std::string_view("foo")),
+ "[json.exception.type_error.304] cannot use at() with number",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.at(std::string_view("foo")),
+ "[json.exception.type_error.304] cannot use at() with number",
+ typename Json::type_error&);
#endif
}
@@ -150,11 +185,17 @@
Json j_nonobject(Json::value_t::number_unsigned);
const Json j_nonobject_const(j_nonobject);
CHECK_THROWS_WITH_AS(j_nonobject.at("foo"), "[json.exception.type_error.304] cannot use at() with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.at("foo"), "[json.exception.type_error.304] cannot use at() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.at("foo"),
+ "[json.exception.type_error.304] cannot use at() with number",
+ typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.at(std::string_view("foo")), "[json.exception.type_error.304] cannot use at() with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.at(std::string_view("foo")), "[json.exception.type_error.304] cannot use at() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.at(std::string_view("foo")),
+ "[json.exception.type_error.304] cannot use at() with number",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.at(std::string_view("foo")),
+ "[json.exception.type_error.304] cannot use at() with number",
+ typename Json::type_error&);
#endif
}
@@ -163,11 +204,17 @@
Json j_nonobject(Json::value_t::number_float);
const Json j_nonobject_const(j_nonobject);
CHECK_THROWS_WITH_AS(j_nonobject.at("foo"), "[json.exception.type_error.304] cannot use at() with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.at("foo"), "[json.exception.type_error.304] cannot use at() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.at("foo"),
+ "[json.exception.type_error.304] cannot use at() with number",
+ typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.at(std::string_view("foo")), "[json.exception.type_error.304] cannot use at() with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.at(std::string_view("foo")), "[json.exception.type_error.304] cannot use at() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.at(std::string_view("foo")),
+ "[json.exception.type_error.304] cannot use at() with number",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.at(std::string_view("foo")),
+ "[json.exception.type_error.304] cannot use at() with number",
+ typename Json::type_error&);
#endif
}
}
@@ -275,12 +322,20 @@
{
Json j_nonobject(Json::value_t::null);
const Json j_nonobject_const(Json::value_t::null);
- CHECK_THROWS_WITH_AS(j_nonobject.value("foo", 1), "[json.exception.type_error.306] cannot use value() with null", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value("foo", 1), "[json.exception.type_error.306] cannot use value() with null", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value("foo", 1),
+ "[json.exception.type_error.306] cannot use value() with null",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value("foo", 1),
+ "[json.exception.type_error.306] cannot use value() with null",
+ typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.value(std::string_view("foo"), 1), "[json.exception.type_error.306] cannot use value() with null", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value(std::string_view("foo"), 1), "[json.exception.type_error.306] cannot use value() with null", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value(std::string_view("foo"), 1),
+ "[json.exception.type_error.306] cannot use value() with null",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value(std::string_view("foo"), 1),
+ "[json.exception.type_error.306] cannot use value() with null",
+ typename Json::type_error&);
#endif
}
@@ -288,12 +343,20 @@
{
Json j_nonobject(Json::value_t::boolean);
const Json j_nonobject_const(Json::value_t::boolean);
- CHECK_THROWS_WITH_AS(j_nonobject.value("foo", 1), "[json.exception.type_error.306] cannot use value() with boolean", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value("foo", 1), "[json.exception.type_error.306] cannot use value() with boolean", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value("foo", 1),
+ "[json.exception.type_error.306] cannot use value() with boolean",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value("foo", 1),
+ "[json.exception.type_error.306] cannot use value() with boolean",
+ typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.value(std::string_view("foo"), 1), "[json.exception.type_error.306] cannot use value() with boolean", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value(std::string_view("foo"), 1), "[json.exception.type_error.306] cannot use value() with boolean", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value(std::string_view("foo"), 1),
+ "[json.exception.type_error.306] cannot use value() with boolean",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value(std::string_view("foo"), 1),
+ "[json.exception.type_error.306] cannot use value() with boolean",
+ typename Json::type_error&);
#endif
}
@@ -301,12 +364,20 @@
{
Json j_nonobject(Json::value_t::string);
const Json j_nonobject_const(Json::value_t::string);
- CHECK_THROWS_WITH_AS(j_nonobject.value("foo", 1), "[json.exception.type_error.306] cannot use value() with string", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value("foo", 1), "[json.exception.type_error.306] cannot use value() with string", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value("foo", 1),
+ "[json.exception.type_error.306] cannot use value() with string",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value("foo", 1),
+ "[json.exception.type_error.306] cannot use value() with string",
+ typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.value(std::string_view("foo"), 1), "[json.exception.type_error.306] cannot use value() with string", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value(std::string_view("foo"), 1), "[json.exception.type_error.306] cannot use value() with string", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value(std::string_view("foo"), 1),
+ "[json.exception.type_error.306] cannot use value() with string",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value(std::string_view("foo"), 1),
+ "[json.exception.type_error.306] cannot use value() with string",
+ typename Json::type_error&);
#endif
}
@@ -314,12 +385,20 @@
{
Json j_nonobject(Json::value_t::array);
const Json j_nonobject_const(Json::value_t::array);
- CHECK_THROWS_WITH_AS(j_nonobject.value("foo", 1), "[json.exception.type_error.306] cannot use value() with array", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value("foo", 1), "[json.exception.type_error.306] cannot use value() with array", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value("foo", 1),
+ "[json.exception.type_error.306] cannot use value() with array",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value("foo", 1),
+ "[json.exception.type_error.306] cannot use value() with array",
+ typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.value(std::string_view("foo"), 1), "[json.exception.type_error.306] cannot use value() with array", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value(std::string_view("foo"), 1), "[json.exception.type_error.306] cannot use value() with array", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value(std::string_view("foo"), 1),
+ "[json.exception.type_error.306] cannot use value() with array",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value(std::string_view("foo"), 1),
+ "[json.exception.type_error.306] cannot use value() with array",
+ typename Json::type_error&);
#endif
}
@@ -327,12 +406,20 @@
{
Json j_nonobject(Json::value_t::number_integer);
const Json j_nonobject_const(Json::value_t::number_integer);
- CHECK_THROWS_WITH_AS(j_nonobject.value("foo", 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value("foo", 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value("foo", 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value("foo", 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.value(std::string_view("foo"), 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value(std::string_view("foo"), 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value(std::string_view("foo"), 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value(std::string_view("foo"), 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
#endif
}
@@ -340,12 +427,20 @@
{
Json j_nonobject(Json::value_t::number_unsigned);
const Json j_nonobject_const(Json::value_t::number_unsigned);
- CHECK_THROWS_WITH_AS(j_nonobject.value("foo", 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value("foo", 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value("foo", 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value("foo", 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.value(std::string_view("foo"), 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value(std::string_view("foo"), 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value(std::string_view("foo"), 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value(std::string_view("foo"), 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
#endif
}
@@ -353,12 +448,20 @@
{
Json j_nonobject(Json::value_t::number_float);
const Json j_nonobject_const(Json::value_t::number_float);
- CHECK_THROWS_WITH_AS(j_nonobject.value("foo", 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value("foo", 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value("foo", 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value("foo", 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.value(std::string_view("foo"), 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value(std::string_view("foo"), 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value(std::string_view("foo"), 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value(std::string_view("foo"), 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
#endif
}
}
@@ -400,63 +503,90 @@
{
Json j_nonobject(Json::value_t::null);
const Json j_nonobject_const(Json::value_t::null);
- CHECK_THROWS_WITH_AS(j_nonobject.value("/foo"_json_pointer, 1), "[json.exception.type_error.306] cannot use value() with null", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value("/foo"_json_pointer, 1), "[json.exception.type_error.306] cannot use value() with null", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value("/foo"_json_pointer, 1),
+ "[json.exception.type_error.306] cannot use value() with null",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value("/foo"_json_pointer, 1),
+ "[json.exception.type_error.306] cannot use value() with null",
+ typename Json::type_error&);
}
SECTION("boolean")
{
Json j_nonobject(Json::value_t::boolean);
const Json j_nonobject_const(Json::value_t::boolean);
- CHECK_THROWS_WITH_AS(j_nonobject.value("/foo"_json_pointer, 1), "[json.exception.type_error.306] cannot use value() with boolean", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value("/foo"_json_pointer, 1), "[json.exception.type_error.306] cannot use value() with boolean", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value("/foo"_json_pointer, 1),
+ "[json.exception.type_error.306] cannot use value() with boolean",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value("/foo"_json_pointer, 1),
+ "[json.exception.type_error.306] cannot use value() with boolean",
+ typename Json::type_error&);
}
SECTION("string")
{
Json j_nonobject(Json::value_t::string);
const Json j_nonobject_const(Json::value_t::string);
- CHECK_THROWS_WITH_AS(j_nonobject.value("/foo"_json_pointer, 1), "[json.exception.type_error.306] cannot use value() with string", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value("/foo"_json_pointer, 1), "[json.exception.type_error.306] cannot use value() with string", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value("/foo"_json_pointer, 1),
+ "[json.exception.type_error.306] cannot use value() with string",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value("/foo"_json_pointer, 1),
+ "[json.exception.type_error.306] cannot use value() with string",
+ typename Json::type_error&);
}
SECTION("array")
{
Json j_nonobject(Json::value_t::array);
const Json j_nonobject_const(Json::value_t::array);
- CHECK_THROWS_WITH_AS(j_nonobject.value("/foo"_json_pointer, 1), "[json.exception.type_error.306] cannot use value() with array", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value("/foo"_json_pointer, 1), "[json.exception.type_error.306] cannot use value() with array", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value("/foo"_json_pointer, 1),
+ "[json.exception.type_error.306] cannot use value() with array",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value("/foo"_json_pointer, 1),
+ "[json.exception.type_error.306] cannot use value() with array",
+ typename Json::type_error&);
}
SECTION("number (integer)")
{
Json j_nonobject(Json::value_t::number_integer);
const Json j_nonobject_const(Json::value_t::number_integer);
- CHECK_THROWS_WITH_AS(j_nonobject.value("/foo"_json_pointer, 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value("/foo"_json_pointer, 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value("/foo"_json_pointer, 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value("/foo"_json_pointer, 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
}
SECTION("number (unsigned)")
{
Json j_nonobject(Json::value_t::number_unsigned);
const Json j_nonobject_const(Json::value_t::number_unsigned);
- CHECK_THROWS_WITH_AS(j_nonobject.value("/foo"_json_pointer, 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value("/foo"_json_pointer, 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value("/foo"_json_pointer, 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value("/foo"_json_pointer, 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
}
SECTION("number (floating-point)")
{
Json j_nonobject(Json::value_t::number_float);
const Json j_nonobject_const(Json::value_t::number_float);
- CHECK_THROWS_WITH_AS(j_nonobject.value("/foo"_json_pointer, 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject_const.value("/foo"_json_pointer, 1), "[json.exception.type_error.306] cannot use value() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.value("/foo"_json_pointer, 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject_const.value("/foo"_json_pointer, 1),
+ "[json.exception.type_error.306] cannot use value() with number",
+ typename Json::type_error&);
}
}
}
}
- SECTION("non-const operator[]"){
- {Json j_null;
+ SECTION("non-const operator[]"){{Json j_null;
CHECK(j_null.is_null());
j_null["key"] = 1;
CHECK(j_null.is_object());
@@ -610,12 +740,18 @@
CHECK_NOTHROW(j_nonobject["foo"]);
CHECK_NOTHROW(j_nonobject2[typename Json::object_t::key_type("foo")]);
- CHECK_THROWS_WITH_AS(j_const_nonobject["foo"], "[json.exception.type_error.305] cannot use operator[] with a string argument with null", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_const_nonobject[typename Json::object_t::key_type("foo")], "[json.exception.type_error.305] cannot use operator[] with a string argument with null", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_const_nonobject["foo"],
+ "[json.exception.type_error.305] cannot use operator[] with a string argument with null",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_const_nonobject[typename Json::object_t::key_type("foo")],
+ "[json.exception.type_error.305] cannot use operator[] with a string argument with null",
+ typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
CHECK_NOTHROW(j_nonobject2[std::string_view("foo")]);
- CHECK_THROWS_WITH_AS(j_const_nonobject[std::string_view("foo")], "[json.exception.type_error.305] cannot use operator[] with a string argument with null", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_const_nonobject[std::string_view("foo")],
+ "[json.exception.type_error.305] cannot use operator[] with a string argument with null",
+ typename Json::type_error&);
#endif
}
@@ -637,8 +773,12 @@
typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject[std::string_view("foo")], "[json.exception.type_error.305] cannot use operator[] with a string argument with boolean", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_const_nonobject[std::string_view("foo")], "[json.exception.type_error.305] cannot use operator[] with a string argument with boolean", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject[std::string_view("foo")],
+ "[json.exception.type_error.305] cannot use operator[] with a string argument with boolean",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_const_nonobject[std::string_view("foo")],
+ "[json.exception.type_error.305] cannot use operator[] with a string argument with boolean",
+ typename Json::type_error&);
#endif
}
@@ -660,8 +800,12 @@
typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject[std::string_view("foo")], "[json.exception.type_error.305] cannot use operator[] with a string argument with string", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_const_nonobject[std::string_view("foo")], "[json.exception.type_error.305] cannot use operator[] with a string argument with string", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject[std::string_view("foo")],
+ "[json.exception.type_error.305] cannot use operator[] with a string argument with string",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_const_nonobject[std::string_view("foo")],
+ "[json.exception.type_error.305] cannot use operator[] with a string argument with string",
+ typename Json::type_error&);
#endif
}
@@ -672,7 +816,9 @@
CHECK_THROWS_WITH_AS(j_nonobject["foo"],
"[json.exception.type_error.305] cannot use operator[] with a string argument with array",
typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonobject[typename Json::object_t::key_type("foo")], "[json.exception.type_error.305] cannot use operator[] with a string argument with array", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject[typename Json::object_t::key_type("foo")],
+ "[json.exception.type_error.305] cannot use operator[] with a string argument with array",
+ typename Json::type_error&);
CHECK_THROWS_WITH_AS(j_const_nonobject["foo"],
"[json.exception.type_error.305] cannot use operator[] with a string argument with array",
typename Json::type_error&);
@@ -681,8 +827,12 @@
typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject[std::string_view("foo")], "[json.exception.type_error.305] cannot use operator[] with a string argument with array", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_const_nonobject[std::string_view("foo")], "[json.exception.type_error.305] cannot use operator[] with a string argument with array", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject[std::string_view("foo")],
+ "[json.exception.type_error.305] cannot use operator[] with a string argument with array",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_const_nonobject[std::string_view("foo")],
+ "[json.exception.type_error.305] cannot use operator[] with a string argument with array",
+ typename Json::type_error&);
#endif
}
@@ -704,8 +854,12 @@
typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject[std::string_view("foo")], "[json.exception.type_error.305] cannot use operator[] with a string argument with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_const_nonobject[std::string_view("foo")], "[json.exception.type_error.305] cannot use operator[] with a string argument with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject[std::string_view("foo")],
+ "[json.exception.type_error.305] cannot use operator[] with a string argument with number",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_const_nonobject[std::string_view("foo")],
+ "[json.exception.type_error.305] cannot use operator[] with a string argument with number",
+ typename Json::type_error&);
#endif
}
@@ -727,8 +881,12 @@
typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject[std::string_view("foo")], "[json.exception.type_error.305] cannot use operator[] with a string argument with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_const_nonobject[std::string_view("foo")], "[json.exception.type_error.305] cannot use operator[] with a string argument with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject[std::string_view("foo")],
+ "[json.exception.type_error.305] cannot use operator[] with a string argument with number",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_const_nonobject[std::string_view("foo")],
+ "[json.exception.type_error.305] cannot use operator[] with a string argument with number",
+ typename Json::type_error&);
#endif
}
@@ -750,8 +908,12 @@
typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject[std::string_view("foo")], "[json.exception.type_error.305] cannot use operator[] with a string argument with number", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(j_const_nonobject[std::string_view("foo")], "[json.exception.type_error.305] cannot use operator[] with a string argument with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject[std::string_view("foo")],
+ "[json.exception.type_error.305] cannot use operator[] with a string argument with number",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_const_nonobject[std::string_view("foo")],
+ "[json.exception.type_error.305] cannot use operator[] with a string argument with number",
+ typename Json::type_error&);
#endif
}
}
@@ -976,7 +1138,9 @@
CHECK_THROWS_WITH_AS(j_nonobject.erase("foo"), "[json.exception.type_error.307] cannot use erase() with null", typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.erase(std::string_view("foo")), "[json.exception.type_error.307] cannot use erase() with null", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.erase(std::string_view("foo")),
+ "[json.exception.type_error.307] cannot use erase() with null",
+ typename Json::type_error&);
#endif
}
@@ -986,7 +1150,9 @@
CHECK_THROWS_WITH_AS(j_nonobject.erase("foo"), "[json.exception.type_error.307] cannot use erase() with boolean", typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.erase(std::string_view("foo")), "[json.exception.type_error.307] cannot use erase() with boolean", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.erase(std::string_view("foo")),
+ "[json.exception.type_error.307] cannot use erase() with boolean",
+ typename Json::type_error&);
#endif
}
@@ -996,7 +1162,9 @@
CHECK_THROWS_WITH_AS(j_nonobject.erase("foo"), "[json.exception.type_error.307] cannot use erase() with string", typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.erase(std::string_view("foo")), "[json.exception.type_error.307] cannot use erase() with string", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.erase(std::string_view("foo")),
+ "[json.exception.type_error.307] cannot use erase() with string",
+ typename Json::type_error&);
#endif
}
@@ -1006,7 +1174,9 @@
CHECK_THROWS_WITH_AS(j_nonobject.erase("foo"), "[json.exception.type_error.307] cannot use erase() with array", typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.erase(std::string_view("foo")), "[json.exception.type_error.307] cannot use erase() with array", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.erase(std::string_view("foo")),
+ "[json.exception.type_error.307] cannot use erase() with array",
+ typename Json::type_error&);
#endif
}
@@ -1016,7 +1186,9 @@
CHECK_THROWS_WITH_AS(j_nonobject.erase("foo"), "[json.exception.type_error.307] cannot use erase() with number", typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.erase(std::string_view("foo")), "[json.exception.type_error.307] cannot use erase() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.erase(std::string_view("foo")),
+ "[json.exception.type_error.307] cannot use erase() with number",
+ typename Json::type_error&);
#endif
}
@@ -1026,7 +1198,9 @@
CHECK_THROWS_WITH_AS(j_nonobject.erase("foo"), "[json.exception.type_error.307] cannot use erase() with number", typename Json::type_error&);
#ifdef JSON_HAS_CPP_17
- CHECK_THROWS_WITH_AS(j_nonobject.erase(std::string_view("foo")), "[json.exception.type_error.307] cannot use erase() with number", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonobject.erase(std::string_view("foo")),
+ "[json.exception.type_error.307] cannot use erase() with number",
+ typename Json::type_error&);
#endif
}
}
@@ -1036,8 +1210,7 @@
{
SECTION("existing element")
{
- for (const auto* key :
- {"integer", "unsigned", "floating", "null", "string", "boolean", "object", "array"})
+ for (const auto* key : {"integer", "unsigned", "floating", "null", "string", "boolean", "object", "array"})
{
CHECK(j.find(key) != j.end());
CHECK(*j.find(key) == j.at(key));
@@ -1045,8 +1218,7 @@
CHECK(*j_const.find(key) == j_const.at(key));
}
#ifdef JSON_HAS_CPP_17
- for (const std::string_view key :
- {"integer", "unsigned", "floating", "null", "string", "boolean", "object", "array"})
+ for (const std::string_view key : {"integer", "unsigned", "floating", "null", "string", "boolean", "object", "array"})
{
CHECK(j.find(key) != j.end());
CHECK(*j.find(key) == j.at(key));
@@ -1187,15 +1359,13 @@
{
SECTION("existing element")
{
- for (const auto* key :
- {"integer", "unsigned", "floating", "null", "string", "boolean", "object", "array"})
+ for (const auto* key : {"integer", "unsigned", "floating", "null", "string", "boolean", "object", "array"})
{
CHECK(j.count(key) == 1);
CHECK(j_const.count(key) == 1);
}
#ifdef JSON_HAS_CPP_17
- for (const std::string_view key :
- {"integer", "unsigned", "floating", "null", "string", "boolean", "object", "array"})
+ for (const std::string_view key : {"integer", "unsigned", "floating", "null", "string", "boolean", "object", "array"})
{
CHECK(j.count(key) == 1);
CHECK(j_const.count(key) == 1);
@@ -1334,16 +1504,14 @@
{
SECTION("existing element")
{
- for (const auto* key :
- {"integer", "unsigned", "floating", "null", "string", "boolean", "object", "array"})
+ for (const auto* key : {"integer", "unsigned", "floating", "null", "string", "boolean", "object", "array"})
{
CHECK(j.contains(key) == true);
CHECK(j_const.contains(key) == true);
}
#ifdef JSON_HAS_CPP_17
- for (const std::string_view key :
- {"integer", "unsigned", "floating", "null", "string", "boolean", "object", "array"})
+ for (const std::string_view key : {"integer", "unsigned", "floating", "null", "string", "boolean", "object", "array"})
{
CHECK(j.contains(key) == true);
CHECK(j_const.contains(key) == true);
@@ -1483,8 +1651,22 @@
{
SECTION("object")
{
- Json j = {{"integer", 1}, {"unsigned", 1u}, {"floating", 42.23}, {"null", nullptr}, {"string", "hello world"}, {"boolean", true}, {"object", Json::object()}, {"array", {1, 2, 3}}};
- const Json j_const = {{"integer", 1}, {"unsigned", 1u}, {"floating", 42.23}, {"null", nullptr}, {"string", "hello world"}, {"boolean", true}, {"object", Json::object()}, {"array", {1, 2, 3}}};
+ Json j = {{"integer", 1},
+ {"unsigned", 1u},
+ {"floating", 42.23},
+ {"null", nullptr},
+ {"string", "hello world"},
+ {"boolean", true},
+ {"object", Json::object()},
+ {"array", {1, 2, 3}}};
+ const Json j_const = {{"integer", 1},
+ {"unsigned", 1u},
+ {"floating", 42.23},
+ {"null", nullptr},
+ {"string", "hello world"},
+ {"boolean", true},
+ {"object", Json::object()},
+ {"array", {1, 2, 3}}};
SECTION("access specified element with default value")
{
@@ -1523,9 +1705,7 @@
// test assumes string_t and object_t::key_type are the same
REQUIRE(std::is_same<string_t, typename Json::object_t::key_type>::value);
- Json j{
- {"foo", "bar"},
- {"baz", 42}};
+ Json j{{"foo", "bar"}, {"baz", 42}};
const char* cpstr = "default";
const char castr[] = "default"; // NOLINT(hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-avoid-c-arrays)
@@ -1534,9 +1714,7 @@
number_integer_t integer = 69;
std::size_t size = 69;
- SECTION("deduced ValueType"){
- SECTION("literal key"){
- CHECK(j.value("foo", "default") == "bar");
+ SECTION("deduced ValueType"){SECTION("literal key"){CHECK(j.value("foo", "default") == "bar");
CHECK(j.value("foo", cpstr) == "bar");
CHECK(j.value("foo", castr) == "bar");
CHECK(j.value("foo", str) == "bar");
@@ -1684,8 +1862,12 @@
CHECK(j.template value<std::size_t>("bar", 47) == 47);
CHECK(j.template value<std::size_t>("bar", size) == size);
- CHECK_THROWS_WITH_AS(Json().template value<string_t>("foo", "default"), "[json.exception.type_error.306] cannot use value() with null", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(Json().template value<string_t>("foo", str), "[json.exception.type_error.306] cannot use value() with null", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(Json().template value<string_t>("foo", "default"),
+ "[json.exception.type_error.306] cannot use value() with null",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(Json().template value<string_t>("foo", str),
+ "[json.exception.type_error.306] cannot use value() with null",
+ typename Json::type_error&);
}
SECTION("const char * key")
@@ -1713,8 +1895,12 @@
CHECK(j.template value<std::size_t>(key_notfound, 47) == 47);
CHECK(j.template value<std::size_t>(key_notfound, size) == size);
- CHECK_THROWS_WITH_AS(Json().template value<string_t>(key, "default"), "[json.exception.type_error.306] cannot use value() with null", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(Json().template value<string_t>(key, str), "[json.exception.type_error.306] cannot use value() with null", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(Json().template value<string_t>(key, "default"),
+ "[json.exception.type_error.306] cannot use value() with null",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(Json().template value<string_t>(key, str),
+ "[json.exception.type_error.306] cannot use value() with null",
+ typename Json::type_error&);
}
SECTION("const char(&)[] key")
@@ -1742,8 +1928,12 @@
CHECK(j.template value<std::size_t>(key_notfound, 47) == 47);
CHECK(j.template value<std::size_t>(key_notfound, size) == size);
- CHECK_THROWS_WITH_AS(Json().template value<string_t>(key, "default"), "[json.exception.type_error.306] cannot use value() with null", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(Json().template value<string_t>(key, str), "[json.exception.type_error.306] cannot use value() with null", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(Json().template value<string_t>(key, "default"),
+ "[json.exception.type_error.306] cannot use value() with null",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(Json().template value<string_t>(key, str),
+ "[json.exception.type_error.306] cannot use value() with null",
+ typename Json::type_error&);
}
SECTION("string_t/object_t::key_type key")
@@ -1767,8 +1957,12 @@
CHECK(j.template value<std::size_t>(key_notfound, 0) == 0);
CHECK(j.template value<std::size_t>(key_notfound, 47) == 47);
- CHECK_THROWS_WITH_AS(Json().template value<string_t>(key, "default"), "[json.exception.type_error.306] cannot use value() with null", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(Json().template value<string_t>(key, str), "[json.exception.type_error.306] cannot use value() with null", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(Json().template value<string_t>(key, "default"),
+ "[json.exception.type_error.306] cannot use value() with null",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(Json().template value<string_t>(key, str),
+ "[json.exception.type_error.306] cannot use value() with null",
+ typename Json::type_error&);
}
#ifdef JSON_HAS_CPP_17
@@ -1804,8 +1998,12 @@
CHECK(j.template value<std::string_view>(key_notfound, "default") == "default");
- CHECK_THROWS_WITH_AS(Json().template value<string_t>(key, "default"), "[json.exception.type_error.306] cannot use value() with null", typename Json::type_error&);
- CHECK_THROWS_WITH_AS(Json().template value<string_t>(key, str), "[json.exception.type_error.306] cannot use value() with null", typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(Json().template value<string_t>(key, "default"),
+ "[json.exception.type_error.306] cannot use value() with null",
+ typename Json::type_error&);
+ CHECK_THROWS_WITH_AS(Json().template value<string_t>(key, str),
+ "[json.exception.type_error.306] cannot use value() with null",
+ typename Json::type_error&);
}
#endif
}
diff --git a/tests/src/unit-inspection.cpp b/tests/src/unit-inspection.cpp
index f4eb322..f3403f2 100644
--- a/tests/src/unit-inspection.cpp
+++ b/tests/src/unit-inspection.cpp
@@ -206,8 +206,7 @@
SECTION("no indent / indent=-1")
{
- CHECK(j.dump() ==
- "{\"array\":[1,2,3,4],\"boolean\":false,\"null\":null,\"number\":42,\"object\":{},\"string\":\"Hello world\"}");
+ CHECK(j.dump() == "{\"array\":[1,2,3,4],\"boolean\":false,\"null\":null,\"number\":42,\"object\":{},\"string\":\"Hello world\"}");
CHECK(j.dump() == j.dump(-1));
}
@@ -220,14 +219,16 @@
SECTION("indent=1, space='\t'")
{
- CHECK(j.dump(1, '\t') ==
- "{\n\t\"array\": [\n\t\t1,\n\t\t2,\n\t\t3,\n\t\t4\n\t],\n\t\"boolean\": false,\n\t\"null\": null,\n\t\"number\": 42,\n\t\"object\": {},\n\t\"string\": \"Hello world\"\n}");
+ CHECK(
+ j.dump(1, '\t') ==
+ "{\n\t\"array\": [\n\t\t1,\n\t\t2,\n\t\t3,\n\t\t4\n\t],\n\t\"boolean\": false,\n\t\"null\": null,\n\t\"number\": 42,\n\t\"object\": {},\n\t\"string\": \"Hello world\"\n}");
}
SECTION("indent=4")
{
- CHECK(j.dump(4) ==
- "{\n \"array\": [\n 1,\n 2,\n 3,\n 4\n ],\n \"boolean\": false,\n \"null\": null,\n \"number\": 42,\n \"object\": {},\n \"string\": \"Hello world\"\n}");
+ CHECK(
+ j.dump(4) ==
+ "{\n \"array\": [\n 1,\n 2,\n 3,\n 4\n ],\n \"boolean\": false,\n \"null\": null,\n \"number\": 42,\n \"object\": {},\n \"string\": \"Hello world\"\n}");
}
SECTION("indent=x")
@@ -291,8 +292,7 @@
json const value = json::parse(f_unescaped);
std::string text = value.dump(4, ' ', true);
- std::string expected((std::istreambuf_iterator<char>(f_escaped)),
- std::istreambuf_iterator<char>());
+ std::string expected((std::istreambuf_iterator<char>(f_escaped)), std::istreambuf_iterator<char>());
CHECK(text == expected);
}
}
@@ -328,8 +328,7 @@
SECTION("round trips")
{
- for (const auto& s :
- {"3.141592653589793", "1000000000000000010E5"})
+ for (const auto& s : {"3.141592653589793", "1000000000000000010E5"})
{
json const j1 = json::parse(s);
std::string s1 = j1.dump();
diff --git a/tests/src/unit-items.cpp b/tests/src/unit-items.cpp
index 40cf5c8..f913e93 100644
--- a/tests/src/unit-items.cpp
+++ b/tests/src/unit-items.cpp
@@ -718,9 +718,7 @@
TEST_CASE("items()")
{
- SECTION("object"){
- SECTION("value"){
- json j = {{"A", 1}, {"B", 2}};
+ SECTION("object"){SECTION("value"){json j = {{"A", 1}, {"B", 2}};
int counter = 1;
for (auto i : j.items()) // NOLINT(performance-for-range-copy)
diff --git a/tests/src/unit-iterators2.cpp b/tests/src/unit-iterators2.cpp
index 116d231..0c8c0e0 100644
--- a/tests/src/unit-iterators2.cpp
+++ b/tests/src/unit-iterators2.cpp
@@ -74,23 +74,47 @@
if (j.type() == json::value_t::object)
{
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(it1 < it1, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1 < it2, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2 < it3, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1 < it3, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c < it1_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c < it2_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2_c < it3_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c < it3_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 < it1,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 < it2,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2 < it3,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 < it3,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c < it1_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c < it2_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2_c < it3_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c < it3_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
#else
CHECK_THROWS_WITH_AS(it1 < it1, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it1 < it2, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it2 < it3, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it1 < it3, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c < it1_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c < it2_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2_c < it3_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c < it3_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c < it1_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c < it2_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2_c < it3_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c < it3_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
#endif
}
else
@@ -111,23 +135,47 @@
if (j.type() == json::value_t::object)
{
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(it1 <= it1, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1 <= it2, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2 <= it3, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1 <= it3, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c <= it1_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c <= it2_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2_c <= it3_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c <= it3_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 <= it1,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 <= it2,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2 <= it3,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 <= it3,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c <= it1_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c <= it2_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2_c <= it3_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c <= it3_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
#else
CHECK_THROWS_WITH_AS(it1 <= it1, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it1 <= it2, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it2 <= it3, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it1 <= it3, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c <= it1_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c <= it2_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2_c <= it3_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c <= it3_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c <= it1_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c <= it2_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2_c <= it3_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c <= it3_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
#endif
}
else
@@ -149,23 +197,47 @@
if (j.type() == json::value_t::object)
{
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(it1 > it1, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1 > it2, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2 > it3, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1 > it3, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c > it1_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c > it2_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2_c > it3_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c > it3_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 > it1,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 > it2,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2 > it3,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 > it3,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c > it1_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c > it2_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2_c > it3_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c > it3_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
#else
CHECK_THROWS_WITH_AS(it1 > it1, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it1 > it2, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it2 > it3, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it1 > it3, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c > it1_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c > it2_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2_c > it3_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c > it3_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c > it1_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c > it2_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2_c > it3_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c > it3_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
#endif
}
else
@@ -187,23 +259,47 @@
if (j.type() == json::value_t::object)
{
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(it1 >= it1, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1 >= it2, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2 >= it3, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1 >= it3, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c >= it1_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c >= it2_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2_c >= it3_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c >= it3_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 >= it1,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 >= it2,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2 >= it3,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 >= it3,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c >= it1_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c >= it2_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2_c >= it3_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c >= it3_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
#else
CHECK_THROWS_WITH_AS(it1 >= it1, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it1 >= it2, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it2 >= it3, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it1 >= it3, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c >= it1_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c >= it2_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2_c >= it3_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c >= it3_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c >= it1_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c >= it2_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2_c >= it3_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c >= it3_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
#endif
}
else
@@ -231,10 +327,18 @@
#if JSON_DIAGNOSTICS
// the output differs in each loop, so we cannot fix a string for the expected exception
#else
- CHECK_THROWS_WITH_AS(j.begin() == k.begin(), "[json.exception.invalid_iterator.212] cannot compare iterators of different containers", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j.cbegin() == k.cbegin(), "[json.exception.invalid_iterator.212] cannot compare iterators of different containers", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j.begin() < k.begin(), "[json.exception.invalid_iterator.212] cannot compare iterators of different containers", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j.cbegin() < k.cbegin(), "[json.exception.invalid_iterator.212] cannot compare iterators of different containers", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.begin() == k.begin(),
+ "[json.exception.invalid_iterator.212] cannot compare iterators of different containers",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.cbegin() == k.cbegin(),
+ "[json.exception.invalid_iterator.212] cannot compare iterators of different containers",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.begin() < k.begin(),
+ "[json.exception.invalid_iterator.212] cannot compare iterators of different containers",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.cbegin() < k.cbegin(),
+ "[json.exception.invalid_iterator.212] cannot compare iterators of different containers",
+ json::invalid_iterator&);
#endif
}
}
@@ -498,23 +602,47 @@
if (j.type() == json::value_t::object)
{
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(it1 < it1, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1 < it2, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2 < it3, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1 < it3, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c < it1_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c < it2_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2_c < it3_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c < it3_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 < it1,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 < it2,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2 < it3,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 < it3,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c < it1_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c < it2_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2_c < it3_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c < it3_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
#else
CHECK_THROWS_WITH_AS(it1 < it1, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it1 < it2, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it2 < it3, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it1 < it3, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c < it1_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c < it2_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2_c < it3_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c < it3_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c < it1_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c < it2_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2_c < it3_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c < it3_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
#endif
}
else
@@ -535,23 +663,47 @@
if (j.type() == json::value_t::object)
{
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(it1 <= it1, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1 <= it2, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2 <= it3, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1 <= it3, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c <= it1_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c <= it2_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2_c <= it3_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c <= it3_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 <= it1,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 <= it2,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2 <= it3,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 <= it3,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c <= it1_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c <= it2_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2_c <= it3_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c <= it3_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
#else
CHECK_THROWS_WITH_AS(it1 <= it1, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it1 <= it2, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it2 <= it3, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it1 <= it3, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c <= it1_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c <= it2_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2_c <= it3_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c <= it3_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c <= it1_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c <= it2_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2_c <= it3_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c <= it3_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
#endif
}
else
@@ -573,23 +725,47 @@
if (j.type() == json::value_t::object)
{
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(it1 > it1, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1 > it2, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2 > it3, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1 > it3, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c > it1_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c > it2_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2_c > it3_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c > it3_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 > it1,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 > it2,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2 > it3,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 > it3,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c > it1_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c > it2_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2_c > it3_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c > it3_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
#else
CHECK_THROWS_WITH_AS(it1 > it1, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it1 > it2, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it2 > it3, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it1 > it3, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c > it1_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c > it2_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2_c > it3_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c > it3_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c > it1_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c > it2_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2_c > it3_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c > it3_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
#endif
}
else
@@ -611,23 +787,47 @@
if (j.type() == json::value_t::object)
{
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(it1 >= it1, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1 >= it2, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2 >= it3, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1 >= it3, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c >= it1_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c >= it2_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2_c >= it3_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c >= it3_c, "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 >= it1,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 >= it2,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2 >= it3,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1 >= it3,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c >= it1_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c >= it2_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2_c >= it3_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c >= it3_c,
+ "[json.exception.invalid_iterator.213] (/5) cannot compare order of object iterators",
+ json::invalid_iterator&);
#else
CHECK_THROWS_WITH_AS(it1 >= it1, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it1 >= it2, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it2 >= it3, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
CHECK_THROWS_WITH_AS(it1 >= it3, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c >= it1_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c >= it2_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it2_c >= it3_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(it1_c >= it3_c, "[json.exception.invalid_iterator.213] cannot compare order of object iterators", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c >= it1_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c >= it2_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it2_c >= it3_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(it1_c >= it3_c,
+ "[json.exception.invalid_iterator.213] cannot compare order of object iterators",
+ json::invalid_iterator&);
#endif
}
else
@@ -655,10 +855,18 @@
#if JSON_DIAGNOSTICS
// the output differs in each loop, so we cannot fix a string for the expected exception
#else
- CHECK_THROWS_WITH_AS(j.rbegin() == k.rbegin(), "[json.exception.invalid_iterator.212] cannot compare iterators of different containers", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j.crbegin() == k.crbegin(), "[json.exception.invalid_iterator.212] cannot compare iterators of different containers", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j.rbegin() < k.rbegin(), "[json.exception.invalid_iterator.212] cannot compare iterators of different containers", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j.crbegin() < k.crbegin(), "[json.exception.invalid_iterator.212] cannot compare iterators of different containers", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.rbegin() == k.rbegin(),
+ "[json.exception.invalid_iterator.212] cannot compare iterators of different containers",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.crbegin() == k.crbegin(),
+ "[json.exception.invalid_iterator.212] cannot compare iterators of different containers",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.rbegin() < k.rbegin(),
+ "[json.exception.invalid_iterator.212] cannot compare iterators of different containers",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j.crbegin() < k.crbegin(),
+ "[json.exception.invalid_iterator.212] cannot compare iterators of different containers",
+ json::invalid_iterator&);
#endif
}
}
diff --git a/tests/src/unit-json_patch.cpp b/tests/src/unit-json_patch.cpp
index 28ae39f..68655e4 100644
--- a/tests/src/unit-json_patch.cpp
+++ b/tests/src/unit-json_patch.cpp
@@ -667,7 +667,9 @@
{
json const j;
json const patch = {{"op", "add"}, {"path", ""}, {"value", 1}};
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.104] parse error: JSON patch must be an array of objects", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.104] parse error: JSON patch must be an array of objects",
+ json::parse_error&);
}
SECTION("not an array of objects")
@@ -675,9 +677,13 @@
json const j;
json const patch = {"op", "add", "path", "", "value", 1};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.104] parse error: (/0) JSON patch must be an array of objects", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.104] parse error: (/0) JSON patch must be an array of objects",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.104] parse error: JSON patch must be an array of objects", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.104] parse error: JSON patch must be an array of objects",
+ json::parse_error&);
#endif
}
@@ -697,9 +703,13 @@
json const j;
json const patch = {{{"op", 1}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation must have string member 'op'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation must have string member 'op'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation must have string member 'op'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation must have string member 'op'",
+ json::parse_error&);
#endif
}
@@ -722,9 +732,13 @@
json const j;
json const patch = {{{"op", "add"}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'add' must have member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'add' must have member 'path'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'add' must have member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'add' must have member 'path'",
+ json::parse_error&);
#endif
}
@@ -733,9 +747,13 @@
json const j;
json const patch = {{{"op", "add"}, {"path", 1}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'add' must have string member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'add' must have string member 'path'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'add' must have string member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'add' must have string member 'path'",
+ json::parse_error&);
#endif
}
@@ -744,9 +762,13 @@
json const j;
json const patch = {{{"op", "add"}, {"path", ""}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'add' must have member 'value'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'add' must have member 'value'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'add' must have member 'value'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'add' must have member 'value'",
+ json::parse_error&);
#endif
}
@@ -765,9 +787,13 @@
json const j;
json const patch = {{{"op", "remove"}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'remove' must have member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'remove' must have member 'path'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'remove' must have member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'remove' must have member 'path'",
+ json::parse_error&);
#endif
}
@@ -776,9 +802,13 @@
json const j;
json const patch = {{{"op", "remove"}, {"path", 1}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'remove' must have string member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'remove' must have string member 'path'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'remove' must have string member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'remove' must have string member 'path'",
+ json::parse_error&);
#endif
}
@@ -811,9 +841,13 @@
json const j;
json const patch = {{{"op", "replace"}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'replace' must have member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'replace' must have member 'path'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'replace' must have member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'replace' must have member 'path'",
+ json::parse_error&);
#endif
}
@@ -822,9 +856,13 @@
json const j;
json const patch = {{{"op", "replace"}, {"path", 1}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'replace' must have string member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'replace' must have string member 'path'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'replace' must have string member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'replace' must have string member 'path'",
+ json::parse_error&);
#endif
}
@@ -833,9 +871,13 @@
json const j;
json const patch = {{{"op", "replace"}, {"path", ""}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'replace' must have member 'value'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'replace' must have member 'value'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'replace' must have member 'value'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'replace' must have member 'value'",
+ json::parse_error&);
#endif
}
@@ -861,9 +903,13 @@
json const j;
json const patch = {{{"op", "move"}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'move' must have member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'move' must have member 'path'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'move' must have member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'move' must have member 'path'",
+ json::parse_error&);
#endif
}
@@ -872,9 +918,13 @@
json const j;
json const patch = {{{"op", "move"}, {"path", 1}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'move' must have string member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'move' must have string member 'path'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'move' must have string member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'move' must have string member 'path'",
+ json::parse_error&);
#endif
}
@@ -884,9 +934,13 @@
json const patch = {{{"op", "move"}, {"path", ""}}};
CHECK_THROWS_AS(j.patch(patch), json::parse_error&);
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'move' must have member 'from'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'move' must have member 'from'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'move' must have member 'from'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'move' must have member 'from'",
+ json::parse_error&);
#endif
}
@@ -896,9 +950,13 @@
json const patch = {{{"op", "move"}, {"path", ""}, {"from", 1}}};
CHECK_THROWS_AS(j.patch(patch), json::parse_error&);
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'move' must have string member 'from'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'move' must have string member 'from'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'move' must have string member 'from'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'move' must have string member 'from'",
+ json::parse_error&);
#endif
}
@@ -924,9 +982,13 @@
json const j;
json const patch = {{{"op", "copy"}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'copy' must have member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'copy' must have member 'path'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'copy' must have member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'copy' must have member 'path'",
+ json::parse_error&);
#endif
}
@@ -935,9 +997,13 @@
json const j;
json const patch = {{{"op", "copy"}, {"path", 1}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'copy' must have string member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'copy' must have string member 'path'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'copy' must have string member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'copy' must have string member 'path'",
+ json::parse_error&);
#endif
}
@@ -946,9 +1012,13 @@
json const j;
json const patch = {{{"op", "copy"}, {"path", ""}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'copy' must have member 'from'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'copy' must have member 'from'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'copy' must have member 'from'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'copy' must have member 'from'",
+ json::parse_error&);
#endif
}
@@ -957,9 +1027,13 @@
json const j;
json const patch = {{{"op", "copy"}, {"path", ""}, {"from", 1}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'copy' must have string member 'from'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'copy' must have string member 'from'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'copy' must have string member 'from'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'copy' must have string member 'from'",
+ json::parse_error&);
#endif
}
@@ -985,9 +1059,13 @@
json const j;
json const patch = {{{"op", "test"}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'test' must have member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'test' must have member 'path'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'test' must have member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'test' must have member 'path'",
+ json::parse_error&);
#endif
}
@@ -996,9 +1074,13 @@
json const j;
json const patch = {{{"op", "test"}, {"path", 1}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'test' must have string member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'test' must have string member 'path'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'test' must have string member 'path'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'test' must have string member 'path'",
+ json::parse_error&);
#endif
}
@@ -1007,9 +1089,13 @@
json const j;
json const patch = {{{"op", "test"}, {"path", ""}}};
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: (/0) operation 'test' must have member 'value'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: (/0) operation 'test' must have member 'value'",
+ json::parse_error&);
#else
- CHECK_THROWS_WITH_AS(j.patch(patch), "[json.exception.parse_error.105] parse error: operation 'test' must have member 'value'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(j.patch(patch),
+ "[json.exception.parse_error.105] parse error: operation 'test' must have member 'value'",
+ json::parse_error&);
#endif
}
}
@@ -1216,65 +1302,52 @@
{
SECTION("add")
{
- CHECK(R"( {} )"_json.patch(
- R"( [{"op": "add", "path": "/foo", "value": "bar"}] )"_json) == R"( {"foo": "bar"} )"_json);
+ CHECK(R"( {} )"_json.patch(R"( [{"op": "add", "path": "/foo", "value": "bar"}] )"_json) == R"( {"foo": "bar"} )"_json);
- CHECK(R"( {"foo": [1, 3]} )"_json.patch(
- R"( [{"op": "add", "path": "/foo", "value": "bar"}] )"_json) == R"( {"foo": "bar"} )"_json);
+ CHECK(R"( {"foo": [1, 3]} )"_json.patch(R"( [{"op": "add", "path": "/foo", "value": "bar"}] )"_json) == R"( {"foo": "bar"} )"_json);
- CHECK(R"( {"foo": [{}]} )"_json.patch(
- R"( [{"op": "add", "path": "/foo/0/bar", "value": "baz"}] )"_json) == R"( {"foo": [{"bar": "baz"}]} )"_json);
+ CHECK(R"( {"foo": [{}]} )"_json.patch(R"( [{"op": "add", "path": "/foo/0/bar", "value": "baz"}] )"_json) == R"( {"foo": [{"bar": "baz"}]} )"_json);
}
SECTION("remove")
{
- CHECK(R"( {"foo": "bar"} )"_json.patch(
- R"( [{"op": "remove", "path": "/foo"}] )"_json) == R"( {} )"_json);
+ CHECK(R"( {"foo": "bar"} )"_json.patch(R"( [{"op": "remove", "path": "/foo"}] )"_json) == R"( {} )"_json);
- CHECK(R"( {"foo": [1, 2, 3]} )"_json.patch(
- R"( [{"op": "remove", "path": "/foo/1"}] )"_json) == R"( {"foo": [1, 3]} )"_json);
+ CHECK(R"( {"foo": [1, 2, 3]} )"_json.patch(R"( [{"op": "remove", "path": "/foo/1"}] )"_json) == R"( {"foo": [1, 3]} )"_json);
- CHECK(R"( {"foo": [{"bar": "baz"}]} )"_json.patch(
- R"( [{"op": "remove", "path": "/foo/0/bar"}] )"_json) == R"( {"foo": [{}]} )"_json);
+ CHECK(R"( {"foo": [{"bar": "baz"}]} )"_json.patch(R"( [{"op": "remove", "path": "/foo/0/bar"}] )"_json) == R"( {"foo": [{}]} )"_json);
}
SECTION("replace")
{
- CHECK(R"( {"foo": "bar"} )"_json.patch(
- R"( [{"op": "replace", "path": "/foo", "value": 1}] )"_json) == R"( {"foo": 1} )"_json);
+ CHECK(R"( {"foo": "bar"} )"_json.patch(R"( [{"op": "replace", "path": "/foo", "value": 1}] )"_json) == R"( {"foo": 1} )"_json);
- CHECK(R"( {"foo": [1, 2, 3]} )"_json.patch(
- R"( [{"op": "replace", "path": "/foo/1", "value": 4}] )"_json) == R"( {"foo": [1, 4, 3]} )"_json);
+ CHECK(R"( {"foo": [1, 2, 3]} )"_json.patch(R"( [{"op": "replace", "path": "/foo/1", "value": 4}] )"_json) == R"( {"foo": [1, 4, 3]} )"_json);
- CHECK(R"( {"foo": [{"bar": "baz"}]} )"_json.patch(
- R"( [{"op": "replace", "path": "/foo/0/bar", "value": 1}] )"_json) == R"( {"foo": [{"bar": 1}]} )"_json);
+ CHECK(R"( {"foo": [{"bar": "baz"}]} )"_json.patch(R"( [{"op": "replace", "path": "/foo/0/bar", "value": 1}] )"_json) ==
+ R"( {"foo": [{"bar": 1}]} )"_json);
}
SECTION("move")
{
- CHECK(R"( {"foo": [1, 2, 3]} )"_json.patch(
- R"( [{"op": "move", "from": "/foo", "path": "/bar"}] )"_json) == R"( {"bar": [1, 2, 3]} )"_json);
+ CHECK(R"( {"foo": [1, 2, 3]} )"_json.patch(R"( [{"op": "move", "from": "/foo", "path": "/bar"}] )"_json) == R"( {"bar": [1, 2, 3]} )"_json);
}
SECTION("copy")
{
- CHECK(R"( {"foo": [1, 2, 3]} )"_json.patch(
- R"( [{"op": "copy", "from": "/foo/1", "path": "/bar"}] )"_json) == R"( {"foo": [1, 2, 3], "bar": 2} )"_json);
+ CHECK(R"( {"foo": [1, 2, 3]} )"_json.patch(R"( [{"op": "copy", "from": "/foo/1", "path": "/bar"}] )"_json) ==
+ R"( {"foo": [1, 2, 3], "bar": 2} )"_json);
}
SECTION("copy")
{
- CHECK_NOTHROW(R"( {"foo": "bar"} )"_json.patch(
- R"( [{"op": "test", "path": "/foo", "value": "bar"}] )"_json));
+ CHECK_NOTHROW(R"( {"foo": "bar"} )"_json.patch(R"( [{"op": "test", "path": "/foo", "value": "bar"}] )"_json));
}
}
SECTION("Tests from github.com/json-patch/json-patch-tests")
{
- for (const auto* filename :
- {
- TEST_DATA_DIRECTORY "/json-patch-tests/spec_tests.json",
- TEST_DATA_DIRECTORY "/json-patch-tests/tests.json"})
+ for (const auto* filename : {TEST_DATA_DIRECTORY "/json-patch-tests/spec_tests.json", TEST_DATA_DIRECTORY "/json-patch-tests/tests.json"})
{
CAPTURE(filename)
std::ifstream f(filename);
diff --git a/tests/src/unit-json_pointer.cpp b/tests/src/unit-json_pointer.cpp
index 4201715..653846b 100644
--- a/tests/src/unit-json_pointer.cpp
+++ b/tests/src/unit-json_pointer.cpp
@@ -35,20 +35,14 @@
json::parse_error&);
json::json_pointer p;
- CHECK_THROWS_WITH_AS(p.top(),
- "[json.exception.out_of_range.405] JSON pointer has no parent",
- json::out_of_range&);
- CHECK_THROWS_WITH_AS(p.pop_back(),
- "[json.exception.out_of_range.405] JSON pointer has no parent",
- json::out_of_range&);
+ CHECK_THROWS_WITH_AS(p.top(), "[json.exception.out_of_range.405] JSON pointer has no parent", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(p.pop_back(), "[json.exception.out_of_range.405] JSON pointer has no parent", json::out_of_range&);
SECTION("array index error")
{
json v = {1, 2, 3, 4};
json::json_pointer const ptr("/10e");
- CHECK_THROWS_WITH_AS(v[ptr],
- "[json.exception.out_of_range.404] unresolved reference token '10e'",
- json::out_of_range&);
+ CHECK_THROWS_WITH_AS(v[ptr], "[json.exception.out_of_range.404] unresolved reference token '10e'", json::out_of_range&);
}
}
@@ -149,9 +143,7 @@
// unresolved access
json j_primitive = 1;
- CHECK_THROWS_WITH_AS(j_primitive["/foo"_json_pointer],
- "[json.exception.out_of_range.404] unresolved reference token 'foo'",
- json::out_of_range&);
+ CHECK_THROWS_WITH_AS(j_primitive["/foo"_json_pointer], "[json.exception.out_of_range.404] unresolved reference token 'foo'", json::out_of_range&);
CHECK_THROWS_WITH_AS(j_primitive.at("/foo"_json_pointer),
"[json.exception.out_of_range.404] unresolved reference token 'foo'",
json::out_of_range&);
@@ -213,15 +205,11 @@
CHECK(j[json::json_pointer("/m~0n")] == j["m~n"]);
// unescaped access
- CHECK_THROWS_WITH_AS(j.at(json::json_pointer("/a/b")),
- "[json.exception.out_of_range.403] key 'a' not found",
- json::out_of_range&);
+ CHECK_THROWS_WITH_AS(j.at(json::json_pointer("/a/b")), "[json.exception.out_of_range.403] key 'a' not found", json::out_of_range&);
// unresolved access
const json j_primitive = 1;
- CHECK_THROWS_WITH_AS(j_primitive["/foo"_json_pointer],
- "[json.exception.out_of_range.404] unresolved reference token 'foo'",
- json::out_of_range&);
+ CHECK_THROWS_WITH_AS(j_primitive["/foo"_json_pointer], "[json.exception.out_of_range.404] unresolved reference token 'foo'", json::out_of_range&);
CHECK_THROWS_WITH_AS(j_primitive.at("/foo"_json_pointer),
"[json.exception.out_of_range.404] unresolved reference token 'foo'",
json::out_of_range&);
@@ -324,12 +312,8 @@
"[json.exception.parse_error.109] parse error: array index '+1' is not a number",
json::parse_error&);
- CHECK_THROWS_WITH_AS(j["/1+1"_json_pointer] = 1,
- "[json.exception.out_of_range.404] unresolved reference token '1+1'",
- json::out_of_range&);
- CHECK_THROWS_WITH_AS(j_const["/1+1"_json_pointer] == 1,
- "[json.exception.out_of_range.404] unresolved reference token '1+1'",
- json::out_of_range&);
+ CHECK_THROWS_WITH_AS(j["/1+1"_json_pointer] = 1, "[json.exception.out_of_range.404] unresolved reference token '1+1'", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(j_const["/1+1"_json_pointer] == 1, "[json.exception.out_of_range.404] unresolved reference token '1+1'", json::out_of_range&);
{
auto too_large_index = std::to_string((std::numeric_limits<unsigned long long>::max)()) + "1";
@@ -378,18 +362,12 @@
CHECK(j == json({1, 13, 3, 33, nullptr, 55, 99}));
// error when using "-" in const object
- CHECK_THROWS_WITH_AS(j_const["/-"_json_pointer],
- "[json.exception.out_of_range.402] array index '-' (3) is out of range",
- json::out_of_range&);
+ CHECK_THROWS_WITH_AS(j_const["/-"_json_pointer], "[json.exception.out_of_range.402] array index '-' (3) is out of range", json::out_of_range&);
CHECK(!j_const.contains("/-"_json_pointer));
// error when using "-" with at
- CHECK_THROWS_WITH_AS(j.at("/-"_json_pointer),
- "[json.exception.out_of_range.402] array index '-' (7) is out of range",
- json::out_of_range&);
- CHECK_THROWS_WITH_AS(j_const.at("/-"_json_pointer),
- "[json.exception.out_of_range.402] array index '-' (3) is out of range",
- json::out_of_range&);
+ CHECK_THROWS_WITH_AS(j.at("/-"_json_pointer), "[json.exception.out_of_range.402] array index '-' (7) is out of range", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(j_const.at("/-"_json_pointer), "[json.exception.out_of_range.402] array index '-' (3) is out of range", json::out_of_range&);
CHECK(!j_const.contains("/-"_json_pointer));
}
@@ -403,56 +381,44 @@
CHECK(j["/2"_json_pointer] == j[2]);
// assign to nonexisting index
- CHECK_THROWS_WITH_AS(j.at("/3"_json_pointer),
- "[json.exception.out_of_range.401] array index 3 is out of range",
- json::out_of_range&);
+ CHECK_THROWS_WITH_AS(j.at("/3"_json_pointer), "[json.exception.out_of_range.401] array index 3 is out of range", json::out_of_range&);
CHECK(!j.contains("/3"_json_pointer));
// assign to nonexisting index (with gap)
- CHECK_THROWS_WITH_AS(j.at("/5"_json_pointer),
- "[json.exception.out_of_range.401] array index 5 is out of range",
- json::out_of_range&);
+ CHECK_THROWS_WITH_AS(j.at("/5"_json_pointer), "[json.exception.out_of_range.401] array index 5 is out of range", json::out_of_range&);
CHECK(!j.contains("/5"_json_pointer));
// assign to "-"
- CHECK_THROWS_WITH_AS(j["/-"_json_pointer],
- "[json.exception.out_of_range.402] array index '-' (3) is out of range",
- json::out_of_range&);
- CHECK_THROWS_WITH_AS(j.at("/-"_json_pointer),
- "[json.exception.out_of_range.402] array index '-' (3) is out of range",
- json::out_of_range&);
+ CHECK_THROWS_WITH_AS(j["/-"_json_pointer], "[json.exception.out_of_range.402] array index '-' (3) is out of range", json::out_of_range&);
+ CHECK_THROWS_WITH_AS(j.at("/-"_json_pointer), "[json.exception.out_of_range.402] array index '-' (3) is out of range", json::out_of_range&);
CHECK(!j.contains("/-"_json_pointer));
}
}
SECTION("flatten")
{
- json j =
- {
- {"pi", 3.141},
- {"happy", true},
- {"name", "Niels"},
- {"nothing", nullptr},
- {"answer", {{"everything", 42}}},
- {"list", {1, 0, 2}},
- {"object", {{"currency", "USD"}, {"value", 42.99}, {"", "empty string"}, {"/", "slash"}, {"~", "tilde"}, {"~1", "tilde1"}}}};
+ json j = {{"pi", 3.141},
+ {"happy", true},
+ {"name", "Niels"},
+ {"nothing", nullptr},
+ {"answer", {{"everything", 42}}},
+ {"list", {1, 0, 2}},
+ {"object", {{"currency", "USD"}, {"value", 42.99}, {"", "empty string"}, {"/", "slash"}, {"~", "tilde"}, {"~1", "tilde1"}}}};
- json j_flatten =
- {
- {"/pi", 3.141},
- {"/happy", true},
- {"/name", "Niels"},
- {"/nothing", nullptr},
- {"/answer/everything", 42},
- {"/list/0", 1},
- {"/list/1", 0},
- {"/list/2", 2},
- {"/object/currency", "USD"},
- {"/object/value", 42.99},
- {"/object/", "empty string"},
- {"/object/~1", "slash"},
- {"/object/~0", "tilde"},
- {"/object/~01", "tilde1"}};
+ json j_flatten = {{"/pi", 3.141},
+ {"/happy", true},
+ {"/name", "Niels"},
+ {"/nothing", nullptr},
+ {"/answer/everything", 42},
+ {"/list/0", 1},
+ {"/list/1", 0},
+ {"/list/2", 2},
+ {"/object/currency", "USD"},
+ {"/object/value", 42.99},
+ {"/object/", "empty string"},
+ {"/object/~1", "slash"},
+ {"/object/~0", "tilde"},
+ {"/object/~01", "tilde1"}};
// check if flattened result is as expected
CHECK(j.flatten() == j_flatten);
@@ -461,22 +427,20 @@
CHECK(j_flatten.unflatten() == j);
// error for nonobjects
- CHECK_THROWS_WITH_AS(json(1).unflatten(),
- "[json.exception.type_error.314] only objects can be unflattened",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(json(1).unflatten(), "[json.exception.type_error.314] only objects can be unflattened", json::type_error&);
// error for nonprimitve values
#if JSON_DIAGNOSTICS
- CHECK_THROWS_WITH_AS(json({{"/1", {1, 2, 3}}}).unflatten(), "[json.exception.type_error.315] (/~11) values in object must be primitive", json::type_error&);
+ CHECK_THROWS_WITH_AS(json({{"/1", {1, 2, 3}}}).unflatten(),
+ "[json.exception.type_error.315] (/~11) values in object must be primitive",
+ json::type_error&);
#else
CHECK_THROWS_WITH_AS(json({{"/1", {1, 2, 3}}}).unflatten(), "[json.exception.type_error.315] values in object must be primitive", json::type_error&);
#endif
// error for conflicting values
json const j_error = {{"", 42}, {"/foo", 17}};
- CHECK_THROWS_WITH_AS(j_error.unflatten(),
- "[json.exception.type_error.313] invalid value to unflatten",
- json::type_error&);
+ CHECK_THROWS_WITH_AS(j_error.unflatten(), "[json.exception.type_error.313] invalid value to unflatten", json::type_error&);
// explicit roundtrip check
CHECK(j.flatten().unflatten() == j);
@@ -500,8 +464,7 @@
SECTION("string representation")
{
- for (const auto* ptr_str :
- {"", "/foo", "/foo/0", "/", "/a~1b", "/c%d", "/e^f", "/g|h", "/i\\j", "/k\"l", "/ ", "/m~0n"})
+ for (const auto* ptr_str : {"", "/foo", "/foo/0", "/", "/a~1b", "/c%d", "/e^f", "/g|h", "/i\\j", "/k\"l", "/ ", "/m~0n"})
{
json::json_pointer const ptr(ptr_str);
std::stringstream ss;
@@ -533,16 +496,14 @@
SECTION("empty, push, pop and parent")
{
- const json j =
- {
- {"", "Hello"},
- {"pi", 3.141},
- {"happy", true},
- {"name", "Niels"},
- {"nothing", nullptr},
- {"answer", {{"everything", 42}}},
- {"list", {1, 0, 2}},
- {"object", {{"currency", "USD"}, {"value", 42.99}, {"", "empty string"}, {"/", "slash"}, {"~", "tilde"}, {"~1", "tilde1"}}}};
+ const json j = {{"", "Hello"},
+ {"pi", 3.141},
+ {"happy", true},
+ {"name", "Niels"},
+ {"nothing", nullptr},
+ {"answer", {{"everything", 42}}},
+ {"list", {1, 0, 2}},
+ {"object", {{"currency", "USD"}, {"value", 42.99}, {"", "empty string"}, {"/", "slash"}, {"~", "tilde"}, {"~1", "tilde1"}}}};
// empty json_pointer returns the root JSON-object
auto ptr = ""_json_pointer;
@@ -589,22 +550,19 @@
CHECK(ptr.empty());
CHECK(j[ptr] == j);
- CHECK_THROWS_WITH(ptr.pop_back(),
- "[json.exception.out_of_range.405] JSON pointer has no parent");
+ CHECK_THROWS_WITH(ptr.pop_back(), "[json.exception.out_of_range.405] JSON pointer has no parent");
}
SECTION("operators")
{
- const json j =
- {
- {"", "Hello"},
- {"pi", 3.141},
- {"happy", true},
- {"name", "Niels"},
- {"nothing", nullptr},
- {"answer", {{"everything", 42}}},
- {"list", {1, 0, 2}},
- {"object", {{"currency", "USD"}, {"value", 42.99}, {"", "empty string"}, {"/", "slash"}, {"~", "tilde"}, {"~1", "tilde1"}}}};
+ const json j = {{"", "Hello"},
+ {"pi", 3.141},
+ {"happy", true},
+ {"name", "Niels"},
+ {"nothing", nullptr},
+ {"answer", {{"everything", 42}}},
+ {"list", {1, 0, 2}},
+ {"object", {{"currency", "USD"}, {"value", 42.99}, {"", "empty string"}, {"/", "slash"}, {"~", "tilde"}, {"~1", "tilde1"}}}};
// empty json_pointer returns the root JSON-object
auto ptr = ""_json_pointer;
diff --git a/tests/src/unit-meta.cpp b/tests/src/unit-meta.cpp
index ce23e22..0be2347 100644
--- a/tests/src/unit-meta.cpp
+++ b/tests/src/unit-meta.cpp
@@ -20,11 +20,7 @@
CHECK(j["name"] == "JSON for Modern C++");
CHECK(j["copyright"] == "(C) 2013-2023 Niels Lohmann");
CHECK(j["url"] == "https://github.com/nlohmann/json");
- CHECK(j["version"] == json(
- {{"string", "3.11.3"},
- {"major", 3},
- {"minor", 11},
- {"patch", 3}}));
+ CHECK(j["version"] == json({{"string", "3.11.3"}, {"major", 3}, {"minor", 11}, {"patch", 3}}));
CHECK(j.find("platform") != j.end());
CHECK(j.at("compiler").find("family") != j.at("compiler").end());
diff --git a/tests/src/unit-modifiers.cpp b/tests/src/unit-modifiers.cpp
index 1430776..84ffe88 100644
--- a/tests/src/unit-modifiers.cpp
+++ b/tests/src/unit-modifiers.cpp
@@ -239,7 +239,9 @@
{
json j = 1;
json const k("Hello");
- CHECK_THROWS_WITH_AS(j.push_back(json::object_t::value_type({"one", 1})), "[json.exception.type_error.308] cannot use push_back() with number", json::type_error&);
+ CHECK_THROWS_WITH_AS(j.push_back(json::object_t::value_type({"one", 1})),
+ "[json.exception.type_error.308] cannot use push_back() with number",
+ json::type_error&);
}
}
@@ -467,7 +469,9 @@
{
json j = 1;
json const k("Hello");
- CHECK_THROWS_WITH_AS(j += json::object_t::value_type({"one", 1}), "[json.exception.type_error.308] cannot use push_back() with number", json::type_error&);
+ CHECK_THROWS_WITH_AS(j += json::object_t::value_type({"one", 1}),
+ "[json.exception.type_error.308] cannot use push_back() with number",
+ json::type_error&);
}
}
@@ -637,8 +641,12 @@
{
json j_other_array2 = {"first", "second"};
- CHECK_THROWS_WITH_AS(j_array.insert(j_array.end(), j_array.begin(), j_array.end()), "[json.exception.invalid_iterator.211] passed iterators may not belong to container", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j_array.insert(j_array.end(), j_other_array.begin(), j_other_array2.end()), "[json.exception.invalid_iterator.210] iterators do not fit", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j_array.insert(j_array.end(), j_array.begin(), j_array.end()),
+ "[json.exception.invalid_iterator.211] passed iterators may not belong to container",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j_array.insert(j_array.end(), j_other_array.begin(), j_other_array2.end()),
+ "[json.exception.invalid_iterator.210] iterators do not fit",
+ json::invalid_iterator&);
}
}
@@ -663,9 +671,15 @@
{
json const j_other_array2 = {"first", "second"};
- CHECK_THROWS_WITH_AS(j_array.insert(j_object2.begin(), j_object2.end()), "[json.exception.type_error.309] cannot use insert() with array", json::type_error&);
- CHECK_THROWS_WITH_AS(j_object1.insert(j_object1.begin(), j_object2.end()), "[json.exception.invalid_iterator.210] iterators do not fit", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j_object1.insert(j_array.begin(), j_array.end()), "[json.exception.invalid_iterator.202] iterators first and last must point to objects", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j_array.insert(j_object2.begin(), j_object2.end()),
+ "[json.exception.type_error.309] cannot use insert() with array",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(j_object1.insert(j_object1.begin(), j_object2.end()),
+ "[json.exception.invalid_iterator.210] iterators do not fit",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j_object1.insert(j_array.begin(), j_array.end()),
+ "[json.exception.invalid_iterator.202] iterators first and last must point to objects",
+ json::invalid_iterator&);
}
}
@@ -704,11 +718,21 @@
// pass iterator to a different array
json j_another_array = {1, 2};
json j_yet_another_array = {"first", "second"};
- CHECK_THROWS_WITH_AS(j_array.insert(j_another_array.end(), 10), "[json.exception.invalid_iterator.202] iterator does not fit current value", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j_array.insert(j_another_array.end(), j_value), "[json.exception.invalid_iterator.202] iterator does not fit current value", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j_array.insert(j_another_array.end(), 10, 11), "[json.exception.invalid_iterator.202] iterator does not fit current value", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j_array.insert(j_another_array.end(), j_yet_another_array.begin(), j_yet_another_array.end()), "[json.exception.invalid_iterator.202] iterator does not fit current value", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j_array.insert(j_another_array.end(), {1, 2, 3, 4}), "[json.exception.invalid_iterator.202] iterator does not fit current value", json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j_array.insert(j_another_array.end(), 10),
+ "[json.exception.invalid_iterator.202] iterator does not fit current value",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j_array.insert(j_another_array.end(), j_value),
+ "[json.exception.invalid_iterator.202] iterator does not fit current value",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j_array.insert(j_another_array.end(), 10, 11),
+ "[json.exception.invalid_iterator.202] iterator does not fit current value",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j_array.insert(j_another_array.end(), j_yet_another_array.begin(), j_yet_another_array.end()),
+ "[json.exception.invalid_iterator.202] iterator does not fit current value",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j_array.insert(j_another_array.end(), {1, 2, 3, 4}),
+ "[json.exception.invalid_iterator.202] iterator does not fit current value",
+ json::invalid_iterator&);
}
SECTION("non-array type")
@@ -717,10 +741,18 @@
json j_nonarray = 3;
json j_yet_another_array = {"first", "second"};
CHECK_THROWS_WITH_AS(j_nonarray.insert(j_nonarray.end(), 10), "[json.exception.type_error.309] cannot use insert() with number", json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonarray.insert(j_nonarray.end(), j_value), "[json.exception.type_error.309] cannot use insert() with number", json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonarray.insert(j_nonarray.end(), 10, 11), "[json.exception.type_error.309] cannot use insert() with number", json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonarray.insert(j_nonarray.end(), j_yet_another_array.begin(), j_yet_another_array.end()), "[json.exception.type_error.309] cannot use insert() with number", json::type_error&);
- CHECK_THROWS_WITH_AS(j_nonarray.insert(j_nonarray.end(), {1, 2, 3, 4}), "[json.exception.type_error.309] cannot use insert() with number", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonarray.insert(j_nonarray.end(), j_value),
+ "[json.exception.type_error.309] cannot use insert() with number",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonarray.insert(j_nonarray.end(), 10, 11),
+ "[json.exception.type_error.309] cannot use insert() with number",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonarray.insert(j_nonarray.end(), j_yet_another_array.begin(), j_yet_another_array.end()),
+ "[json.exception.type_error.309] cannot use insert() with number",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(j_nonarray.insert(j_nonarray.end(), {1, 2, 3, 4}),
+ "[json.exception.type_error.309] cannot use insert() with number",
+ json::type_error&);
}
}
@@ -774,9 +806,15 @@
{
json const j_other_array2 = {"first", "second"};
- CHECK_THROWS_WITH_AS(j_array.update(j_object2.begin(), j_object2.end()), "[json.exception.type_error.312] cannot use update() with array", json::type_error&);
- CHECK_THROWS_WITH_AS(j_object1.update(j_object1.begin(), j_object2.end()), "[json.exception.invalid_iterator.210] iterators do not fit", json::invalid_iterator&);
- CHECK_THROWS_WITH_AS(j_object1.update(j_array.begin(), j_array.end()), "[json.exception.type_error.312] cannot use update() with array", json::type_error&);
+ CHECK_THROWS_WITH_AS(j_array.update(j_object2.begin(), j_object2.end()),
+ "[json.exception.type_error.312] cannot use update() with array",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(j_object1.update(j_object1.begin(), j_object2.end()),
+ "[json.exception.invalid_iterator.210] iterators do not fit",
+ json::invalid_iterator&);
+ CHECK_THROWS_WITH_AS(j_object1.update(j_array.begin(), j_array.end()),
+ "[json.exception.type_error.312] cannot use update() with array",
+ json::type_error&);
}
}
}
diff --git a/tests/src/unit-msgpack.cpp b/tests/src/unit-msgpack.cpp
index d8635a4..7ed17c4 100644
--- a/tests/src/unit-msgpack.cpp
+++ b/tests/src/unit-msgpack.cpp
@@ -22,7 +22,8 @@
#include <set>
#include <sstream>
-namespace {
+namespace
+{
class SaxCountdown
{
public:
@@ -90,7 +91,9 @@
return events_left-- > 0;
}
- bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const json::exception& /*unused*/) // NOLINT(readability-convert-member-functions-to-static)
+ bool parse_error(std::size_t /*unused*/,
+ const std::string& /*unused*/,
+ const json::exception& /*unused*/) // NOLINT(readability-convert-member-functions-to-static)
{
return false;
}
@@ -168,8 +171,7 @@
CHECK(j.is_number_integer());
// create expected byte vector
- std::vector<uint8_t> const expected{
- static_cast<uint8_t>(i)};
+ std::vector<uint8_t> const expected{static_cast<uint8_t>(i)};
// compare result + size
const auto result = json::to_msgpack(j);
@@ -288,12 +290,7 @@
SECTION("65536..4294967295 (int 32)")
{
- for (uint32_t i :
- {
- 65536u,
- 77777u,
- 1048576u,
- 4294967295u})
+ for (uint32_t i : {65536u, 77777u, 1048576u, 4294967295u})
{
CAPTURE(i)
@@ -320,10 +317,8 @@
// check individual bytes
CHECK(result[0] == 0xce);
- uint32_t const restored = (static_cast<uint32_t>(result[1]) << 030) +
- (static_cast<uint32_t>(result[2]) << 020) +
- (static_cast<uint32_t>(result[3]) << 010) +
- static_cast<uint32_t>(result[4]);
+ uint32_t const restored = (static_cast<uint32_t>(result[1]) << 030) + (static_cast<uint32_t>(result[2]) << 020) +
+ (static_cast<uint32_t>(result[3]) << 010) + static_cast<uint32_t>(result[4]);
CHECK(restored == i);
// roundtrip
@@ -334,10 +329,7 @@
SECTION("4294967296..9223372036854775807 (int 64)")
{
- for (uint64_t i :
- {
- 4294967296LU,
- 9223372036854775807LU})
+ for (uint64_t i : {4294967296LU, 9223372036854775807LU})
{
CAPTURE(i)
@@ -368,14 +360,10 @@
// check individual bytes
CHECK(result[0] == 0xcf);
- uint64_t const restored = (static_cast<uint64_t>(result[1]) << 070) +
- (static_cast<uint64_t>(result[2]) << 060) +
- (static_cast<uint64_t>(result[3]) << 050) +
- (static_cast<uint64_t>(result[4]) << 040) +
- (static_cast<uint64_t>(result[5]) << 030) +
- (static_cast<uint64_t>(result[6]) << 020) +
- (static_cast<uint64_t>(result[7]) << 010) +
- static_cast<uint64_t>(result[8]);
+ uint64_t const restored = (static_cast<uint64_t>(result[1]) << 070) + (static_cast<uint64_t>(result[2]) << 060) +
+ (static_cast<uint64_t>(result[3]) << 050) + (static_cast<uint64_t>(result[4]) << 040) +
+ (static_cast<uint64_t>(result[5]) << 030) + (static_cast<uint64_t>(result[6]) << 020) +
+ (static_cast<uint64_t>(result[7]) << 010) + static_cast<uint64_t>(result[8]);
CHECK(restored == i);
// roundtrip
@@ -503,10 +491,8 @@
// check individual bytes
CHECK(result[0] == 0xd2);
- uint32_t const restored = (static_cast<uint32_t>(result[1]) << 030) +
- (static_cast<uint32_t>(result[2]) << 020) +
- (static_cast<uint32_t>(result[3]) << 010) +
- static_cast<uint32_t>(result[4]);
+ uint32_t const restored = (static_cast<uint32_t>(result[1]) << 030) + (static_cast<uint32_t>(result[2]) << 020) +
+ (static_cast<uint32_t>(result[3]) << 010) + static_cast<uint32_t>(result[4]);
CHECK(static_cast<std::int32_t>(restored) == i);
// roundtrip
@@ -551,14 +537,10 @@
// check individual bytes
CHECK(result[0] == 0xd3);
- int64_t const restored = (static_cast<int64_t>(result[1]) << 070) +
- (static_cast<int64_t>(result[2]) << 060) +
- (static_cast<int64_t>(result[3]) << 050) +
- (static_cast<int64_t>(result[4]) << 040) +
- (static_cast<int64_t>(result[5]) << 030) +
- (static_cast<int64_t>(result[6]) << 020) +
- (static_cast<int64_t>(result[7]) << 010) +
- static_cast<int64_t>(result[8]);
+ int64_t const restored = (static_cast<int64_t>(result[1]) << 070) + (static_cast<int64_t>(result[2]) << 060) +
+ (static_cast<int64_t>(result[3]) << 050) + (static_cast<int64_t>(result[4]) << 040) +
+ (static_cast<int64_t>(result[5]) << 030) + (static_cast<int64_t>(result[6]) << 020) +
+ (static_cast<int64_t>(result[7]) << 010) + static_cast<int64_t>(result[8]);
CHECK(restored == i);
// roundtrip
@@ -670,12 +652,7 @@
SECTION("65536..4294967295 (uint 32)")
{
- for (const uint32_t i :
- {
- 65536u,
- 77777u,
- 1048576u,
- 4294967295u})
+ for (const uint32_t i : {65536u, 77777u, 1048576u, 4294967295u})
{
CAPTURE(i)
@@ -701,10 +678,8 @@
// check individual bytes
CHECK(result[0] == 0xce);
- uint32_t const restored = (static_cast<uint32_t>(result[1]) << 030) +
- (static_cast<uint32_t>(result[2]) << 020) +
- (static_cast<uint32_t>(result[3]) << 010) +
- static_cast<uint32_t>(result[4]);
+ uint32_t const restored = (static_cast<uint32_t>(result[1]) << 030) + (static_cast<uint32_t>(result[2]) << 020) +
+ (static_cast<uint32_t>(result[3]) << 010) + static_cast<uint32_t>(result[4]);
CHECK(restored == i);
// roundtrip
@@ -715,10 +690,7 @@
SECTION("4294967296..18446744073709551615 (uint 64)")
{
- for (const uint64_t i :
- {
- 4294967296LU,
- 18446744073709551615LU})
+ for (const uint64_t i : {4294967296LU, 18446744073709551615LU})
{
CAPTURE(i)
@@ -748,14 +720,10 @@
// check individual bytes
CHECK(result[0] == 0xcf);
- uint64_t const restored = (static_cast<uint64_t>(result[1]) << 070) +
- (static_cast<uint64_t>(result[2]) << 060) +
- (static_cast<uint64_t>(result[3]) << 050) +
- (static_cast<uint64_t>(result[4]) << 040) +
- (static_cast<uint64_t>(result[5]) << 030) +
- (static_cast<uint64_t>(result[6]) << 020) +
- (static_cast<uint64_t>(result[7]) << 010) +
- static_cast<uint64_t>(result[8]);
+ uint64_t const restored = (static_cast<uint64_t>(result[1]) << 070) + (static_cast<uint64_t>(result[2]) << 060) +
+ (static_cast<uint64_t>(result[3]) << 050) + (static_cast<uint64_t>(result[4]) << 040) +
+ (static_cast<uint64_t>(result[5]) << 030) + (static_cast<uint64_t>(result[6]) << 020) +
+ (static_cast<uint64_t>(result[7]) << 010) + static_cast<uint64_t>(result[8]);
CHECK(restored == i);
// roundtrip
@@ -771,17 +739,7 @@
{
double const v = 3.1415925;
json const j = v;
- std::vector<uint8_t> const expected =
- {
- 0xcb,
- 0x40,
- 0x09,
- 0x21,
- 0xfb,
- 0x3f,
- 0xa6,
- 0xde,
- 0xfc};
+ std::vector<uint8_t> const expected = {0xcb, 0x40, 0x09, 0x21, 0xfb, 0x3f, 0xa6, 0xde, 0xfc};
const auto result = json::to_msgpack(j);
CHECK(result == expected);
@@ -795,13 +753,7 @@
{
double const v = 1.0;
json const j = v;
- std::vector<uint8_t> const expected =
- {
- 0xca,
- 0x3f,
- 0x80,
- 0x00,
- 0x00};
+ std::vector<uint8_t> const expected = {0xca, 0x3f, 0x80, 0x00, 0x00};
const auto result = json::to_msgpack(j);
CHECK(result == expected);
@@ -815,13 +767,7 @@
{
double const v = 128.1280059814453125;
json const j = v;
- std::vector<uint8_t> const expected =
- {
- 0xca,
- 0x43,
- 0x00,
- 0x20,
- 0xc5};
+ std::vector<uint8_t> const expected = {0xca, 0x43, 0x00, 0x20, 0xc5};
const auto result = json::to_msgpack(j);
CHECK(result == expected);
@@ -838,40 +784,8 @@
SECTION("N = 0..31")
{
// explicitly enumerate the first byte for all 32 strings
- const std::vector<uint8_t> first_bytes =
- {
- 0xa0,
- 0xa1,
- 0xa2,
- 0xa3,
- 0xa4,
- 0xa5,
- 0xa6,
- 0xa7,
- 0xa8,
- 0xa9,
- 0xaa,
- 0xab,
- 0xac,
- 0xad,
- 0xae,
- 0xaf,
- 0xb0,
- 0xb1,
- 0xb2,
- 0xb3,
- 0xb4,
- 0xb5,
- 0xb6,
- 0xb7,
- 0xb8,
- 0xb9,
- 0xba,
- 0xbb,
- 0xbc,
- 0xbd,
- 0xbe,
- 0xbf};
+ const std::vector<uint8_t> first_bytes = {0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf};
for (size_t N = 0; N < first_bytes.size(); ++N)
{
@@ -942,14 +856,7 @@
SECTION("N = 256..65535")
{
- for (size_t N :
- {
- 256u,
- 999u,
- 1025u,
- 3333u,
- 2048u,
- 65535u})
+ for (size_t N : {256u, 999u, 1025u, 3333u, 2048u, 65535u})
{
CAPTURE(N)
@@ -979,11 +886,7 @@
SECTION("N = 65536..4294967295")
{
- for (size_t N :
- {
- 65536u,
- 77777u,
- 1048576u})
+ for (size_t N : {65536u, 77777u, 1048576u})
{
CAPTURE(N)
@@ -1133,18 +1036,7 @@
SECTION("{\"a\": {\"b\": {\"c\": {}}}}")
{
json const j = json::parse(R"({"a": {"b": {"c": {}}}})");
- std::vector<uint8_t> const expected =
- {
- 0x81,
- 0xa1,
- 0x61,
- 0x81,
- 0xa1,
- 0x62,
- 0x81,
- 0xa1,
- 0x63,
- 0x80};
+ std::vector<uint8_t> const expected = {0x81, 0xa1, 0x61, 0x81, 0xa1, 0x62, 0x81, 0xa1, 0x63, 0x80};
const auto result = json::to_msgpack(j);
CHECK(result == expected);
@@ -1285,14 +1177,7 @@
SECTION("N = 256..65535")
{
- for (std::size_t N :
- {
- 256u,
- 999u,
- 1025u,
- 3333u,
- 2048u,
- 65535u})
+ for (std::size_t N : {256u, 999u, 1025u, 3333u, 2048u, 65535u})
{
CAPTURE(N)
@@ -1325,11 +1210,7 @@
SECTION("N = 65536..4294967295")
{
- for (std::size_t N :
- {
- 65536u,
- 77777u,
- 1048576u})
+ for (std::size_t N : {65536u, 77777u, 1048576u})
{
CAPTURE(N)
@@ -1402,14 +1283,7 @@
SECTION("N = 256..65535")
{
- for (std::size_t N :
- {
- 256u,
- 999u,
- 1025u,
- 3333u,
- 2048u,
- 65535u})
+ for (std::size_t N : {256u, 999u, 1025u, 3333u, 2048u, 65535u})
{
CAPTURE(N)
@@ -1439,11 +1313,7 @@
SECTION("N = 65536..4294967295")
{
- for (std::size_t N :
- {
- 65536u,
- 77777u,
- 1048576u})
+ for (std::size_t N : {65536u, 77777u, 1048576u})
{
CAPTURE(N)
@@ -1487,7 +1357,10 @@
SECTION("empty byte vector")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>()), "[json.exception.parse_error.110] parse error at byte 1: syntax error while parsing MessagePack value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>()),
+ "[json.exception.parse_error.110] parse error at byte 1: syntax error while parsing MessagePack value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_msgpack(std::vector<uint8_t>(), true, false).is_discarded());
}
@@ -1495,66 +1368,86 @@
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0x87})),
- "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing MessagePack string: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xcc})),
- "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing MessagePack number: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xcd})),
- "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing MessagePack number: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xcd, 0x00})),
- "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing MessagePack number: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xce})),
- "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing MessagePack number: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xce, 0x00})),
- "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing MessagePack number: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xce, 0x00, 0x00})),
- "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing MessagePack number: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xce, 0x00, 0x00, 0x00})),
- "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing MessagePack number: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xcf})),
- "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing MessagePack number: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xcf, 0x00})),
- "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing MessagePack number: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xcf, 0x00, 0x00})),
- "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing MessagePack number: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xcf, 0x00, 0x00, 0x00})),
- "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing MessagePack number: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xcf, 0x00, 0x00, 0x00, 0x00})),
- "[json.exception.parse_error.110] parse error at byte 6: syntax error while parsing MessagePack number: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xcf, 0x00, 0x00, 0x00, 0x00, 0x00})),
- "[json.exception.parse_error.110] parse error at byte 7: syntax error while parsing MessagePack number: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})),
- "[json.exception.parse_error.110] parse error at byte 8: syntax error while parsing MessagePack number: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})),
- "[json.exception.parse_error.110] parse error at byte 9: syntax error while parsing MessagePack number: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xa5, 0x68, 0x65})),
- "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing MessagePack string: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0x92, 0x01})),
- "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing MessagePack value: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0x81, 0xa1, 0x61})),
- "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing MessagePack value: unexpected end of input",
- json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xc4, 0x02})),
- "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing MessagePack binary: unexpected end of input",
- json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0x87})),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing MessagePack string: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xcc})),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xcd})),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xcd, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xce})),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xce, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xce, 0x00, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xce, 0x00, 0x00, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xcf})),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xcf, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xcf, 0x00, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xcf, 0x00, 0x00, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xcf, 0x00, 0x00, 0x00, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 6: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xcf, 0x00, 0x00, 0x00, 0x00, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 7: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 8: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})),
+ "[json.exception.parse_error.110] parse error at byte 9: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xa5, 0x68, 0x65})),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing MessagePack string: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0x92, 0x01})),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing MessagePack value: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0x81, 0xa1, 0x61})),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing MessagePack value: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0xc4, 0x02})),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing MessagePack binary: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_msgpack(std::vector<uint8_t>({0x87}), true, false).is_discarded());
CHECK(json::from_msgpack(std::vector<uint8_t>({0xcc}), true, false).is_discarded());
@@ -1584,15 +1477,15 @@
SECTION("concrete examples")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xc1})), "[json.exception.parse_error.112] parse error at byte 1: syntax error while parsing MessagePack value: invalid byte: 0xC1", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0xc1})),
+ "[json.exception.parse_error.112] parse error at byte 1: syntax error while parsing MessagePack value: invalid byte: 0xC1",
+ json::parse_error&);
}
SECTION("all unsupported bytes")
{
- for (auto byte :
- {
- // never used
- 0xc1})
+ for (auto byte : {// never used
+ 0xc1})
{
json _;
CHECK_THROWS_AS(_ = json::from_msgpack(std::vector<uint8_t>({static_cast<uint8_t>(byte)})), json::parse_error&);
@@ -1604,7 +1497,10 @@
SECTION("invalid string in map")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(std::vector<uint8_t>({0x81, 0xff, 0x01})), "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing MessagePack string: expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0xFF", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(std::vector<uint8_t>({0x81, 0xff, 0x01})),
+ "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing MessagePack string: expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0xFF",
+ json::parse_error&);
CHECK(json::from_msgpack(std::vector<uint8_t>({0x81, 0xff, 0x01}), true, false).is_discarded());
}
@@ -1620,7 +1516,10 @@
SECTION("strict mode")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(vec), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing MessagePack value: expected end of input; last byte: 0xC0", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_msgpack(vec),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing MessagePack value: expected end of input; last byte: 0xC0",
+ json::parse_error&);
CHECK(json::from_msgpack(vec, true, false).is_discarded());
}
}
@@ -1716,153 +1615,151 @@
exclude_packed.insert(TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_simple.json");
exclude_packed.insert(TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_string_unicode.json");
- for (std::string filename :
- {
- TEST_DATA_DIRECTORY "/json_nlohmann_tests/all_unicode.json",
- TEST_DATA_DIRECTORY "/json.org/1.json",
- TEST_DATA_DIRECTORY "/json.org/2.json",
- TEST_DATA_DIRECTORY "/json.org/3.json",
- TEST_DATA_DIRECTORY "/json.org/4.json",
- TEST_DATA_DIRECTORY "/json.org/5.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip01.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip02.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip03.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip04.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip05.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip06.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip07.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip08.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip09.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip10.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip11.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip12.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip13.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip14.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip15.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip16.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip17.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip18.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip19.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip20.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip21.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip22.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip23.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip24.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip25.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip26.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip27.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip28.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip29.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip30.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip31.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip32.json",
- TEST_DATA_DIRECTORY "/json_testsuite/sample.json", // kills AppVeyor
- TEST_DATA_DIRECTORY "/json_tests/pass1.json",
- TEST_DATA_DIRECTORY "/json_tests/pass2.json",
- TEST_DATA_DIRECTORY "/json_tests/pass3.json",
- TEST_DATA_DIRECTORY "/regression/floats.json",
- TEST_DATA_DIRECTORY "/regression/signed_ints.json",
- TEST_DATA_DIRECTORY "/regression/unsigned_ints.json",
- TEST_DATA_DIRECTORY "/regression/working_file.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_arraysWithSpaces.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_empty-string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_empty.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_ending_with_newline.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_false.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_heterogeneous.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_1_and_newline.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_leading_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_several_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_trailing_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_0e+1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_0e1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_after_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_double_close_to_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_double_huge_neg_exp.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_huge_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_int_with_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_minus_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_one.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e_neg_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e_pos_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_exponent.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_fraction_exponent.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_neg_exp.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_neg_overflow.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_pos_exponent.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_pos_overflow.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_underflow.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_simple_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_simple_real.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_too_big_neg_int.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_too_big_pos_int.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_very_big_negative_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_basic.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_duplicated_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_duplicated_key_and_value.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_empty.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_empty_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_escaped_null_in_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_extreme_numbers.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_long_strings.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_simple.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_string_unicode.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_with_newlines.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_UTF-16_Surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_accepted_surrogate_pair.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_accepted_surrogate_pairs.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_allowed_escapes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_backslash_and_u_escaped_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_backslash_doublequotes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_comments.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_double_escape_a.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_double_escape_n.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_escaped_control_character.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_escaped_noncharacter.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_in_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_in_array_with_leading_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_last_surrogates_1_and_2.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_newline_uescaped.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+1FFFF.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_null_escape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_one-byte-utf-8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_pi.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_simple_ascii.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_three-byte-utf-8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_two-byte-utf-8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_u+2028_line_sep.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_u+2029_par_sep.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_uEscape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unescaped_char_delete.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicodeEscapedBackslash.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_2.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_U+2064_invisible_plus.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_escaped_double_quote.json",
- // TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_utf16.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_utf8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_with_del_character.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_false.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_negative_real.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_true.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_string_empty.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_trailing_newline.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_true_in_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_whitespace_array.json"})
+ for (std::string filename : {TEST_DATA_DIRECTORY "/json_nlohmann_tests/all_unicode.json",
+ TEST_DATA_DIRECTORY "/json.org/1.json",
+ TEST_DATA_DIRECTORY "/json.org/2.json",
+ TEST_DATA_DIRECTORY "/json.org/3.json",
+ TEST_DATA_DIRECTORY "/json.org/4.json",
+ TEST_DATA_DIRECTORY "/json.org/5.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip01.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip02.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip03.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip04.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip05.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip06.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip07.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip08.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip09.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip10.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip11.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip12.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip13.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip14.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip15.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip16.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip17.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip18.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip19.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip20.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip21.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip22.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip23.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip24.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip25.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip26.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip27.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip28.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip29.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip30.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip31.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip32.json",
+ TEST_DATA_DIRECTORY "/json_testsuite/sample.json", // kills AppVeyor
+ TEST_DATA_DIRECTORY "/json_tests/pass1.json",
+ TEST_DATA_DIRECTORY "/json_tests/pass2.json",
+ TEST_DATA_DIRECTORY "/json_tests/pass3.json",
+ TEST_DATA_DIRECTORY "/regression/floats.json",
+ TEST_DATA_DIRECTORY "/regression/signed_ints.json",
+ TEST_DATA_DIRECTORY "/regression/unsigned_ints.json",
+ TEST_DATA_DIRECTORY "/regression/working_file.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_arraysWithSpaces.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_empty-string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_empty.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_ending_with_newline.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_false.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_heterogeneous.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_1_and_newline.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_leading_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_several_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_trailing_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_0e+1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_0e1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_after_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_double_close_to_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_double_huge_neg_exp.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_huge_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_int_with_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_minus_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_one.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e_neg_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e_pos_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_exponent.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_fraction_exponent.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_neg_exp.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_neg_overflow.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_pos_exponent.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_pos_overflow.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_underflow.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_simple_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_simple_real.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_too_big_neg_int.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_too_big_pos_int.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_very_big_negative_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_basic.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_duplicated_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_duplicated_key_and_value.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_empty.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_empty_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_escaped_null_in_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_extreme_numbers.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_long_strings.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_simple.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_string_unicode.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_with_newlines.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_UTF-16_Surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_accepted_surrogate_pair.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_accepted_surrogate_pairs.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_allowed_escapes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_backslash_and_u_escaped_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_backslash_doublequotes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_comments.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_double_escape_a.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_double_escape_n.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_escaped_control_character.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_escaped_noncharacter.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_in_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_in_array_with_leading_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_last_surrogates_1_and_2.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_newline_uescaped.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+1FFFF.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_null_escape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_one-byte-utf-8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_pi.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_simple_ascii.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_three-byte-utf-8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_two-byte-utf-8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_u+2028_line_sep.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_u+2029_par_sep.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_uEscape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unescaped_char_delete.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicodeEscapedBackslash.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_2.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_U+2064_invisible_plus.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_escaped_double_quote.json",
+ // TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_utf16.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_utf8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_with_del_character.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_false.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_negative_real.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_true.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_string_empty.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_trailing_newline.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_true_in_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_whitespace_array.json"})
{
CAPTURE(filename)
diff --git a/tests/src/unit-no-mem-leak-on-adl-serialize.cpp b/tests/src/unit-no-mem-leak-on-adl-serialize.cpp
index 3ca8b65..24d6018 100644
--- a/tests/src/unit-no-mem-leak-on-adl-serialize.cpp
+++ b/tests/src/unit-no-mem-leak-on-adl-serialize.cpp
@@ -18,7 +18,8 @@
int b;
};
-namespace nlohmann {
+namespace nlohmann
+{
template<>
struct adl_serializer<Foo>
{
diff --git a/tests/src/unit-noexcept.cpp b/tests/src/unit-noexcept.cpp
index 7aa213f..666748e 100644
--- a/tests/src/unit-noexcept.cpp
+++ b/tests/src/unit-noexcept.cpp
@@ -16,7 +16,8 @@
using nlohmann::json;
-namespace {
+namespace
+{
enum test
{
};
diff --git a/tests/src/unit-readme.cpp b/tests/src/unit-readme.cpp
index d30a0af..810cdff 100644
--- a/tests/src/unit-readme.cpp
+++ b/tests/src/unit-readme.cpp
@@ -61,15 +61,13 @@
j["object"] = {{"currency", "USD"}, {"value", 42.99}};
// instead, you could also write (which looks very similar to the JSON above)
- json const j2 =
- {
- {"pi", 3.141},
- {"happy", true},
- {"name", "Niels"},
- {"nothing", nullptr},
- {"answer", {{"everything", 42}}},
- {"list", {1, 0, 2}},
- {"object", {{"currency", "USD"}, {"value", 42.99}}}};
+ json const j2 = {{"pi", 3.141},
+ {"happy", true},
+ {"name", "Niels"},
+ {"nothing", nullptr},
+ {"answer", {{"everything", 42}}},
+ {"list", {1, 0, 2}},
+ {"object", {{"currency", "USD"}, {"value", 42.99}}}};
}
{
diff --git a/tests/src/unit-reference_access.cpp b/tests/src/unit-reference_access.cpp
index 024bc36..e2738a1 100644
--- a/tests/src/unit-reference_access.cpp
+++ b/tests/src/unit-reference_access.cpp
@@ -14,13 +14,11 @@
TEST_CASE("reference access")
{
// create a JSON value with different types
- const json json_types =
- {
- {"boolean", true},
- {"number", {{"integer", 42}, {"floating-point", 17.23}}},
- {"string", "Hello, world!"},
- {"array", {1, 2, 3, 4, 5}},
- {"null", nullptr}};
+ const json json_types = {{"boolean", true},
+ {"number", {{"integer", 42}, {"floating-point", 17.23}}},
+ {"string", "Hello, world!"},
+ {"array", {1, 2, 3, 4, 5}},
+ {"null", nullptr}};
SECTION("reference access to object_t")
{
@@ -246,7 +244,9 @@
//CHECK_THROWS_WITH_AS(value.get_ref<json::number_integer_t&>(),
// "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number", json::type_error&);
CHECK_NOTHROW(value.get_ref<json::number_unsigned_t&>());
- CHECK_THROWS_WITH_AS(value.get_ref<json::number_float_t&>(), "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number", json::type_error&);
+ CHECK_THROWS_WITH_AS(value.get_ref<json::number_float_t&>(),
+ "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number",
+ json::type_error&);
}
SECTION("reference access to number_float_t")
@@ -264,12 +264,24 @@
CHECK(p2 == value.get<test_type>());
// check if mismatching references throw correctly
- CHECK_THROWS_WITH_AS(value.get_ref<json::object_t&>(), "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number", json::type_error&);
- CHECK_THROWS_WITH_AS(value.get_ref<json::array_t&>(), "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number", json::type_error&);
- CHECK_THROWS_WITH_AS(value.get_ref<json::string_t&>(), "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number", json::type_error&);
- CHECK_THROWS_WITH_AS(value.get_ref<json::boolean_t&>(), "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number", json::type_error&);
- CHECK_THROWS_WITH_AS(value.get_ref<json::number_integer_t&>(), "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number", json::type_error&);
- CHECK_THROWS_WITH_AS(value.get_ref<json::number_unsigned_t&>(), "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number", json::type_error&);
+ CHECK_THROWS_WITH_AS(value.get_ref<json::object_t&>(),
+ "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(value.get_ref<json::array_t&>(),
+ "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(value.get_ref<json::string_t&>(),
+ "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(value.get_ref<json::boolean_t&>(),
+ "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(value.get_ref<json::number_integer_t&>(),
+ "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number",
+ json::type_error&);
+ CHECK_THROWS_WITH_AS(value.get_ref<json::number_unsigned_t&>(),
+ "[json.exception.type_error.303] incompatible ReferenceType for get_ref, actual type is number",
+ json::type_error&);
CHECK_NOTHROW(value.get_ref<json::number_float_t&>());
}
}
diff --git a/tests/src/unit-regression1.cpp b/tests/src/unit-regression1.cpp
index a7a515d..286a18e 100644
--- a/tests/src/unit-regression1.cpp
+++ b/tests/src/unit-regression1.cpp
@@ -43,7 +43,8 @@
// for #977
/////////////////////////////////////////////////////////////////////
-namespace ns {
+namespace ns
+{
struct foo
{
int x;
@@ -83,13 +84,15 @@
};
} // namespace ns
-using foo_json = nlohmann::basic_json<std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, double, std::allocator, ns::foo_serializer, std::vector<std::uint8_t>>;
+using foo_json = nlohmann::
+ basic_json<std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, double, std::allocator, ns::foo_serializer, std::vector<std::uint8_t>>;
/////////////////////////////////////////////////////////////////////
// for #805
/////////////////////////////////////////////////////////////////////
-namespace {
+namespace
+{
struct nocopy // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions)
{
nocopy() = default;
@@ -187,8 +190,7 @@
static_assert(std::is_same<decltype(anon_enum_value), decltype(u)>::value, "types must be the same");
- j.push_back(json::object(
- {{"game_type", t}}));
+ j.push_back(json::object({{"game_type", t}}));
}
SECTION("issue #76 - dump() / parse() not idempotent")
@@ -248,8 +250,7 @@
SECTION("issue #89 - nonstandard integer type")
{
// create JSON class with nonstandard integer number type
- using custom_json =
- nlohmann::basic_json<std::map, std::vector, std::string, bool, int32_t, uint32_t, float>;
+ using custom_json = nlohmann::basic_json<std::map, std::vector, std::string, bool, int32_t, uint32_t, float>;
custom_json j;
j["int_1"] = 1;
CHECK(j["int_1"] == 1);
@@ -314,11 +315,7 @@
SECTION("issue #100 - failed to iterator json object with reverse_iterator")
{
- json config =
- {
- {"111", 111},
- {"112", 112},
- {"113", 113}};
+ json config = {{"111", 111}, {"112", 112}, {"113", 113}};
std::stringstream ss;
@@ -464,13 +461,11 @@
// create JSON class with nonstandard float number type
// float
- nlohmann::basic_json<std::map, std::vector, std::string, bool, int32_t, uint32_t, float> const j_float =
- 1.23e25f;
+ nlohmann::basic_json<std::map, std::vector, std::string, bool, int32_t, uint32_t, float> const j_float = 1.23e25f;
CHECK(j_float.get<float>() == 1.23e25f);
// double
- nlohmann::basic_json<std::map, std::vector, std::string, bool, int64_t, uint64_t, double> const j_double =
- 1.23e35;
+ nlohmann::basic_json<std::map, std::vector, std::string, bool, int64_t, uint64_t, double> const j_double = 1.23e35;
CHECK(j_double.get<double>() == 1.23e35);
// long double
@@ -592,10 +587,9 @@
SECTION("issue #283 - value() does not work with _json_pointer types")
{
- json j =
- {
- {"object", {{"key1", 1}, {"key2", 2}}},
- };
+ json j = {
+ {"object", {{"key1", 1}, {"key2", 2}}},
+ };
int at_integer{j.at("/object/key2"_json_pointer)};
int val_integer = j.value("/object/key2"_json_pointer, 0);
@@ -614,10 +608,7 @@
SECTION("issue #306 - Parsing fails without space at end of file")
{
- for (const auto* filename :
- {
- TEST_DATA_DIRECTORY "/regression/broken_file.json",
- TEST_DATA_DIRECTORY "/regression/working_file.json"})
+ for (const auto* filename : {TEST_DATA_DIRECTORY "/regression/broken_file.json", TEST_DATA_DIRECTORY "/regression/working_file.json"})
{
CAPTURE(filename)
json j;
@@ -628,12 +619,10 @@
SECTION("issue #310 - make json_benchmarks no longer working in 2.0.4")
{
- for (const auto* filename :
- {
- TEST_DATA_DIRECTORY "/regression/floats.json",
- TEST_DATA_DIRECTORY "/regression/signed_ints.json",
- TEST_DATA_DIRECTORY "/regression/unsigned_ints.json",
- TEST_DATA_DIRECTORY "/regression/small_signed_ints.json"})
+ for (const auto* filename : {TEST_DATA_DIRECTORY "/regression/floats.json",
+ TEST_DATA_DIRECTORY "/regression/signed_ints.json",
+ TEST_DATA_DIRECTORY "/regression/unsigned_ints.json",
+ TEST_DATA_DIRECTORY "/regression/small_signed_ints.json"})
{
CAPTURE(filename)
json j;
@@ -716,7 +705,10 @@
{
std::ifstream f("file_not_found.json");
json _;
- CHECK_THROWS_WITH_AS(_ = json::parse(f), "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse(f),
+ "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON",
+ json::parse_error&);
}
SECTION("issue #367 - calling stream at EOF")
@@ -730,7 +722,10 @@
// ss is not at EOF; this yielded an error before the fix
// (threw basic_string::append). No, it should just throw
// a parse error because of the EOF.
- CHECK_THROWS_WITH_AS(ss >> j, "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ ss >> j,
+ "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON",
+ json::parse_error&);
}
SECTION("issue #367 - behavior of operator>> should more closely resemble that of built-in overloads")
@@ -739,7 +734,10 @@
{
std::stringstream ss;
json j;
- CHECK_THROWS_WITH_AS(ss >> j, "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ ss >> j,
+ "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON",
+ json::parse_error&);
}
SECTION("(whitespace)")
@@ -747,9 +745,10 @@
std::stringstream ss;
ss << " ";
json j;
- CHECK_THROWS_WITH_AS(ss >> j,
- "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - unexpected end of input; expected '[', '{', or a literal",
- json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ ss >> j,
+ "[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - unexpected end of input; expected '[', '{', or a literal",
+ json::parse_error&);
}
SECTION("one value")
@@ -760,7 +759,10 @@
CHECK_NOTHROW(ss >> j);
CHECK(j == 111);
- CHECK_THROWS_WITH_AS(ss >> j, "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ ss >> j,
+ "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON",
+ json::parse_error&);
}
SECTION("one value + whitespace")
@@ -771,9 +773,10 @@
CHECK_NOTHROW(ss >> j);
CHECK(j == 222);
- CHECK_THROWS_WITH_AS(ss >> j,
- "[json.exception.parse_error.101] parse error at line 2, column 1: syntax error while parsing value - unexpected end of input; expected '[', '{', or a literal",
- json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ ss >> j,
+ "[json.exception.parse_error.101] parse error at line 2, column 1: syntax error while parsing value - unexpected end of input; expected '[', '{', or a literal",
+ json::parse_error&);
}
SECTION("whitespace + one value")
@@ -784,7 +787,10 @@
CHECK_NOTHROW(ss >> j);
CHECK(j == 333);
- CHECK_THROWS_WITH_AS(ss >> j, "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ ss >> j,
+ "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON",
+ json::parse_error&);
}
SECTION("three values")
@@ -799,7 +805,10 @@
CHECK_NOTHROW(ss >> j);
CHECK(j == 333);
- CHECK_THROWS_WITH_AS(ss >> j, "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ ss >> j,
+ "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON",
+ json::parse_error&);
}
SECTION("literals without whitespace")
@@ -816,7 +825,10 @@
CHECK_NOTHROW(ss >> j);
CHECK(j == "");
- CHECK_THROWS_WITH_AS(ss >> j, "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ ss >> j,
+ "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON",
+ json::parse_error&);
}
SECTION("example from #529")
@@ -829,7 +841,10 @@
CHECK_NOTHROW(ss >> j);
CHECK(j == json({{"three", 3}}));
- CHECK_THROWS_WITH_AS(ss >> j, "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ ss >> j,
+ "[json.exception.parse_error.101] parse error at line 1, column 1: attempting to parse an empty input; check that your input string or stream contains the expected JSON",
+ json::parse_error&);
}
SECTION("second example from #529")
@@ -898,7 +913,9 @@
// original test case
std::vector<uint8_t> const vec{0x65, 0xf5, 0x0a, 0x48, 0x21};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec), "[json.exception.parse_error.110] parse error at byte 6: syntax error while parsing CBOR string: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec),
+ "[json.exception.parse_error.110] parse error at byte 6: syntax error while parsing CBOR string: unexpected end of input",
+ json::parse_error&);
}
SECTION("issue #407 - Heap-buffer-overflow (OSS-Fuzz issue 343)")
@@ -907,23 +924,33 @@
// original test case: incomplete float64
std::vector<uint8_t> const vec1{0xcb, 0x8f, 0x0a};
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(vec1), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing MessagePack number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_msgpack(vec1),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
// related test case: incomplete float32
std::vector<uint8_t> const vec2{0xca, 0x8f, 0x0a};
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(vec2), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing MessagePack number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_msgpack(vec2),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing MessagePack number: unexpected end of input",
+ json::parse_error&);
// related test case: incomplete Half-Precision Float (CBOR)
std::vector<uint8_t> const vec3{0xf9, 0x8f};
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec3), "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec3),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
// related test case: incomplete Single-Precision Float (CBOR)
std::vector<uint8_t> const vec4{0xfa, 0x8f, 0x0a};
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec4), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec4),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
// related test case: incomplete Double-Precision Float (CBOR)
std::vector<uint8_t> const vec5{0xfb, 0x8f, 0x0a};
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec5), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing CBOR number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec5),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing CBOR number: unexpected end of input",
+ json::parse_error&);
}
SECTION("issue #408 - Heap-buffer-overflow (OSS-Fuzz issue 344)")
@@ -932,148 +959,30 @@
// original test case
std::vector<uint8_t> const vec1{0x87};
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(vec1), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing MessagePack string: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_msgpack(vec1),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing MessagePack string: unexpected end of input",
+ json::parse_error&);
// more test cases for MessagePack
- for (auto b :
- {
- 0x81,
- 0x82,
- 0x83,
- 0x84,
- 0x85,
- 0x86,
- 0x87,
- 0x88,
- 0x89,
- 0x8a,
- 0x8b,
- 0x8c,
- 0x8d,
- 0x8e,
- 0x8f, // fixmap
- 0x91,
- 0x92,
- 0x93,
- 0x94,
- 0x95,
- 0x96,
- 0x97,
- 0x98,
- 0x99,
- 0x9a,
- 0x9b,
- 0x9c,
- 0x9d,
- 0x9e,
- 0x9f, // fixarray
- 0xa1,
- 0xa2,
- 0xa3,
- 0xa4,
- 0xa5,
- 0xa6,
- 0xa7,
- 0xa8,
- 0xa9,
- 0xaa,
- 0xab,
- 0xac,
- 0xad,
- 0xae,
- 0xaf, // fixstr
- 0xb0,
- 0xb1,
- 0xb2,
- 0xb3,
- 0xb4,
- 0xb5,
- 0xb6,
- 0xb7,
- 0xb8,
- 0xb9,
- 0xba,
- 0xbb,
- 0xbc,
- 0xbd,
- 0xbe,
- 0xbf})
+ for (auto b : {0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e,
+ 0x8f, // fixmap
+ 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e,
+ 0x9f, // fixarray
+ 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae,
+ 0xaf, // fixstr
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf})
{
std::vector<uint8_t> const vec(1, static_cast<uint8_t>(b));
CHECK_THROWS_AS(_ = json::from_msgpack(vec), json::parse_error&);
}
// more test cases for CBOR
- for (auto b :
- {
- 0x61,
- 0x62,
- 0x63,
- 0x64,
- 0x65,
- 0x66,
- 0x67,
- 0x68,
- 0x69,
- 0x6a,
- 0x6b,
- 0x6c,
- 0x6d,
- 0x6e,
- 0x6f,
- 0x70,
- 0x71,
- 0x72,
- 0x73,
- 0x74,
- 0x75,
- 0x76,
+ for (auto b : {
+ 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76,
0x77, // UTF-8 string
- 0x81,
- 0x82,
- 0x83,
- 0x84,
- 0x85,
- 0x86,
- 0x87,
- 0x88,
- 0x89,
- 0x8a,
- 0x8b,
- 0x8c,
- 0x8d,
- 0x8e,
- 0x8f,
- 0x90,
- 0x91,
- 0x92,
- 0x93,
- 0x94,
- 0x95,
- 0x96,
+ 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
0x97, // array
- 0xa1,
- 0xa2,
- 0xa3,
- 0xa4,
- 0xa5,
- 0xa6,
- 0xa7,
- 0xa8,
- 0xa9,
- 0xaa,
- 0xab,
- 0xac,
- 0xad,
- 0xae,
- 0xaf,
- 0xb0,
- 0xb1,
- 0xb2,
- 0xb3,
- 0xb4,
- 0xb5,
- 0xb6,
+ 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
0xb7 // map
})
{
@@ -1083,8 +992,12 @@
// special case: empty input
std::vector<uint8_t> const vec2;
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec2), "[json.exception.parse_error.110] parse error at byte 1: syntax error while parsing CBOR value: unexpected end of input", json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::from_msgpack(vec2), "[json.exception.parse_error.110] parse error at byte 1: syntax error while parsing MessagePack value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec2),
+ "[json.exception.parse_error.110] parse error at byte 1: syntax error while parsing CBOR value: unexpected end of input",
+ json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_msgpack(vec2),
+ "[json.exception.parse_error.110] parse error at byte 1: syntax error while parsing MessagePack value: unexpected end of input",
+ json::parse_error&);
}
SECTION("issue #411 - Heap-buffer-overflow (OSS-Fuzz issue 366)")
@@ -1093,180 +1006,65 @@
// original test case: empty UTF-8 string (indefinite length)
std::vector<uint8_t> const vec1{0x7f};
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec1), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR string: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec1),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR string: unexpected end of input",
+ json::parse_error&);
// related test case: empty array (indefinite length)
std::vector<uint8_t> const vec2{0x9f};
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec2), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec2),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR value: unexpected end of input",
+ json::parse_error&);
// related test case: empty map (indefinite length)
std::vector<uint8_t> const vec3{0xbf};
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec3), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR string: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec3),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing CBOR string: unexpected end of input",
+ json::parse_error&);
}
SECTION("issue #412 - Heap-buffer-overflow (OSS-Fuzz issue 367)")
{
// original test case
- std::vector<uint8_t> const vec{
- 0xab,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x00,
- 0x00,
- 0x00,
- 0x60,
- 0xab,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x98,
- 0x00,
- 0x00,
- 0x00,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0xa0,
- 0x9f,
- 0x9f,
- 0x97,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60,
- 0x60};
+ std::vector<uint8_t> const vec{0xab, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x00, 0x00, 0x00, 0x60, 0xab, 0x98, 0x98,
+ 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x00, 0x00, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xa0, 0x9f, 0x9f, 0x97, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec), "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing CBOR string: expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x98", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_cbor(vec),
+ "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing CBOR string: expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x98",
+ json::parse_error&);
// related test case: nonempty UTF-8 string (indefinite length)
std::vector<uint8_t> const vec1{0x7f, 0x61, 0x61};
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec1), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing CBOR string: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec1),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing CBOR string: unexpected end of input",
+ json::parse_error&);
// related test case: nonempty array (indefinite length)
std::vector<uint8_t> const vec2{0x9f, 0x01};
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec2), "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec2),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing CBOR value: unexpected end of input",
+ json::parse_error&);
// related test case: nonempty map (indefinite length)
std::vector<uint8_t> const vec3{0xbf, 0x61, 0x61, 0x01};
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec3), "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR string: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec3),
+ "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing CBOR string: unexpected end of input",
+ json::parse_error&);
}
SECTION("issue #414 - compare with literal 0)")
{
-#define CHECK_TYPE(v) \
- CHECK((json(v) == (v))); \
- CHECK(((v) == json(v))); \
- CHECK_FALSE((json(v) != (v))); \
+#define CHECK_TYPE(v) \
+ CHECK((json(v) == (v))); \
+ CHECK(((v) == json(v))); \
+ CHECK_FALSE((json(v) != (v))); \
CHECK_FALSE(((v) != json(v)));
CHECK_TYPE(nullptr)
@@ -1282,110 +1080,24 @@
SECTION("issue #416 - Use-of-uninitialized-value (OSS-Fuzz issue 377)")
{
// original test case
- std::vector<uint8_t> const vec1{
- 0x94,
- 0xfa,
- 0xfa,
- 0xfa,
- 0xfa,
- 0xfa,
- 0xfa,
- 0xfa,
- 0x3a,
- 0x96,
- 0x96,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0x71,
- 0xb4,
- 0xb4,
- 0xfa,
- 0xfa,
- 0xfa,
- 0xfa,
- 0xfa,
- 0x3a,
- 0x96,
- 0x96,
- 0xb4,
- 0xb4,
- 0xfa,
- 0x94,
- 0x94,
- 0x61,
- 0x61,
- 0x61,
- 0x61,
- 0x61,
- 0x61,
- 0x61,
- 0x61,
- 0xfa};
+ std::vector<uint8_t> const vec1{0x94, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0x3a, 0x96, 0x96, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
+ 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0x71, 0xb4, 0xb4, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0x3a,
+ 0x96, 0x96, 0xb4, 0xb4, 0xfa, 0x94, 0x94, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0xfa};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec1), "[json.exception.parse_error.113] parse error at byte 13: syntax error while parsing CBOR string: expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0xB4", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_cbor(vec1),
+ "[json.exception.parse_error.113] parse error at byte 13: syntax error while parsing CBOR string: expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0xB4",
+ json::parse_error&);
// related test case: double-precision
- std::vector<uint8_t> const vec2{
- 0x94,
- 0xfa,
- 0xfa,
- 0xfa,
- 0xfa,
- 0xfa,
- 0xfa,
- 0xfa,
- 0x3a,
- 0x96,
- 0x96,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0xb4,
- 0x71,
- 0xb4,
- 0xb4,
- 0xfa,
- 0xfa,
- 0xfa,
- 0xfa,
- 0xfa,
- 0x3a,
- 0x96,
- 0x96,
- 0xb4,
- 0xb4,
- 0xfa,
- 0x94,
- 0x94,
- 0x61,
- 0x61,
- 0x61,
- 0x61,
- 0x61,
- 0x61,
- 0x61,
- 0x61,
- 0xfb};
- CHECK_THROWS_WITH_AS(_ = json::from_cbor(vec2), "[json.exception.parse_error.113] parse error at byte 13: syntax error while parsing CBOR string: expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0xB4", json::parse_error&);
+ std::vector<uint8_t> const vec2{0x94, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0x3a, 0x96, 0x96, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
+ 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0x71, 0xb4, 0xb4, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0x3a,
+ 0x96, 0x96, 0xb4, 0xb4, 0xfa, 0x94, 0x94, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0xfb};
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_cbor(vec2),
+ "[json.exception.parse_error.113] parse error at byte 13: syntax error while parsing CBOR string: expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0xB4",
+ json::parse_error&);
}
SECTION("issue #452 - Heap-buffer-overflow (OSS-Fuzz issue 585)")
@@ -1636,8 +1348,8 @@
{
{
std::ifstream is;
- is.exceptions(
- is.exceptions() | std::ios_base::failbit | std::ios_base::badbit); // handle different exceptions as 'file not found', 'permission denied'
+ is.exceptions(is.exceptions() | std::ios_base::failbit |
+ std::ios_base::badbit); // handle different exceptions as 'file not found', 'permission denied'
is.open(TEST_DATA_DIRECTORY "/regression/working_file.json");
json _;
@@ -1646,11 +1358,10 @@
{
std::ifstream is;
- is.exceptions(
- is.exceptions() | std::ios_base::failbit | std::ios_base::badbit); // handle different exceptions as 'file not found', 'permission denied'
+ is.exceptions(is.exceptions() | std::ios_base::failbit |
+ std::ios_base::badbit); // handle different exceptions as 'file not found', 'permission denied'
- is.open(TEST_DATA_DIRECTORY "/json_nlohmann_tests/all_unicode.json.cbor",
- std::ios_base::in | std::ios_base::binary);
+ is.open(TEST_DATA_DIRECTORY "/json_nlohmann_tests/all_unicode.json.cbor", std::ios_base::in | std::ios_base::binary);
json _;
CHECK_NOTHROW(_ = nlohmann::json::from_cbor(is));
}
@@ -1666,7 +1377,8 @@
SECTION("issue #838 - incorrect parse error with binary data in keys")
{
- std::array<uint8_t, 28> key1 = {{103, 92, 117, 48, 48, 48, 55, 92, 114, 215, 126, 214, 95, 92, 34, 174, 40, 71, 38, 174, 40, 71, 38, 223, 134, 247, 127, 0}};
+ std::array<uint8_t, 28> key1 = {
+ {103, 92, 117, 48, 48, 48, 55, 92, 114, 215, 126, 214, 95, 92, 34, 174, 40, 71, 38, 174, 40, 71, 38, 223, 134, 247, 127, 0}};
std::string const key1_str(reinterpret_cast<char*>(key1.data()));
json const j = key1_str;
CHECK_THROWS_WITH_AS(j.dump(), "[json.exception.type_error.316] invalid UTF-8 byte at index 10: 0x7E", json::type_error&);
@@ -1696,33 +1408,17 @@
auto p1 = R"([{"op": "move",
"from": "/one/two/three",
"path": "/a/b/c"}])"_json;
- CHECK_THROWS_WITH_AS(model.patch(p1),
- "[json.exception.out_of_range.403] key 'a' not found",
- json::out_of_range&);
+ CHECK_THROWS_WITH_AS(model.patch(p1), "[json.exception.out_of_range.403] key 'a' not found", json::out_of_range&);
auto p2 = R"([{"op": "copy",
"from": "/one/two/three",
"path": "/a/b/c"}])"_json;
- CHECK_THROWS_WITH_AS(model.patch(p2),
- "[json.exception.out_of_range.403] key 'a' not found",
- json::out_of_range&);
+ CHECK_THROWS_WITH_AS(model.patch(p2), "[json.exception.out_of_range.403] key 'a' not found", json::out_of_range&);
}
SECTION("issue #961 - incorrect parsing of indefinite length CBOR strings")
{
- std::vector<uint8_t> const v_cbor =
- {
- 0x7F,
- 0x64,
- 'a',
- 'b',
- 'c',
- 'd',
- 0x63,
- '1',
- '2',
- '3',
- 0xFF};
+ std::vector<uint8_t> const v_cbor = {0x7F, 0x64, 'a', 'b', 'c', 'd', 0x63, '1', '2', '3', 0xFF};
json j = json::from_cbor(v_cbor);
CHECK(j == "abcd123");
}
diff --git a/tests/src/unit-regression2.cpp b/tests/src/unit-regression2.cpp
index 9f345a5..d2b43bd 100644
--- a/tests/src/unit-regression2.cpp
+++ b/tests/src/unit-regression2.cpp
@@ -55,7 +55,8 @@
/////////////////////////////////////////////////////////////////////
// for #1647
/////////////////////////////////////////////////////////////////////
-namespace {
+namespace
+{
struct NonDefaultFromJsonStruct
{};
@@ -111,7 +112,8 @@
// return !(lhs == rhs);
//}
-namespace nlohmann {
+namespace nlohmann
+{
template<>
struct adl_serializer<NonDefaultFromJsonStruct>
{
@@ -144,7 +146,8 @@
int x;
};
-namespace nlohmann {
+namespace nlohmann
+{
template<>
struct adl_serializer<NonDefaultConstructible>
{
@@ -429,16 +432,10 @@
using it_type = decltype(p1.begin());
- std::set_difference(
- p1.begin(),
- p1.end(),
- p2.begin(),
- p2.end(),
- std::inserter(diffs, diffs.end()),
- [&](const it_type& e1, const it_type& e2) -> bool {
- using comper_pair = std::pair<std::string, decltype(e1.value())>; // Trying to avoid unneeded copy
- return comper_pair(e1.key(), e1.value()) < comper_pair(e2.key(), e2.value()); // Using pair comper
- });
+ std::set_difference(p1.begin(), p1.end(), p2.begin(), p2.end(), std::inserter(diffs, diffs.end()), [&](const it_type& e1, const it_type& e2) -> bool {
+ using comper_pair = std::pair<std::string, decltype(e1.value())>; // Trying to avoid unneeded copy
+ return comper_pair(e1.key(), e1.value()) < comper_pair(e2.key(), e2.value()); // Using pair comper
+ });
CHECK(diffs.size() == 1); // Note the change here, was 2
}
@@ -453,12 +450,11 @@
SECTION("issue #1299 - compile error in from_json converting to container "
"with std::pair")
{
- const json j =
- {
- {"1", {{"a", "testa_1"}, {"b", "testb_1"}}},
- {"2", {{"a", "testa_2"}, {"b", "testb_2"}}},
- {"3", {{"a", "testa_3"}, {"b", "testb_3"}}},
- };
+ const json j = {
+ {"1", {{"a", "testa_1"}, {"b", "testb_1"}}},
+ {"2", {{"a", "testa_2"}, {"b", "testb_2"}}},
+ {"3", {{"a", "testa_3"}, {"b", "testb_3"}}},
+ };
std::map<std::string, Data> expected{
{"1", {"testa_1", "testb_1"}},
@@ -508,9 +504,11 @@
SECTION("test case in issue #1445")
{
nlohmann::json dump_test;
- const std::array<int, 108> data =
- {
- {109, 108, 103, 125, -122, -53, 115, 18, 3, 0, 102, 19, 1, 15, -110, 13, -3, -1, -81, 32, 2, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -80, 2, 0, 0, 96, -118, 46, -116, 46, 109, -84, -87, 108, 14, 109, -24, -83, 13, -18, -51, -83, -52, -115, 14, 6, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 3, 0, 0, 0, 35, -74, -73, 55, 57, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, -96, -54, -28, -26}};
+ const std::array<int, 108> data = {{109, 108, 103, 125, -122, -53, 115, 18, 3, 0, 102, 19, 1, 15, -110, 13, -3, -1, -81, 32, 2, 0,
+ 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -80, 2, 0, 0,
+ 96, -118, 46, -116, 46, 109, -84, -87, 108, 14, 109, -24, -83, 13, -18, -51, -83, -52, -115, 14, 6, 32,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 3, 0, 0, 0, 35, -74, -73, 55, 57, -128,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, -96, -54, -28, -26}};
std::string s;
for (const int i : data)
{
@@ -607,14 +605,14 @@
SECTION("issue #2067 - cannot serialize binary data to text JSON")
{
- const std::array<unsigned char, 23> data = {{0x81, 0xA4, 0x64, 0x61, 0x74, 0x61, 0xC4, 0x0F, 0x33, 0x30, 0x30, 0x32, 0x33, 0x34, 0x30, 0x31, 0x30, 0x37, 0x30, 0x35, 0x30, 0x31, 0x30}};
+ const std::array<unsigned char, 23> data = {
+ {0x81, 0xA4, 0x64, 0x61, 0x74, 0x61, 0xC4, 0x0F, 0x33, 0x30, 0x30, 0x32, 0x33, 0x34, 0x30, 0x31, 0x30, 0x37, 0x30, 0x35, 0x30, 0x31, 0x30}};
const json j = json::from_msgpack(data.data(), data.size());
- CHECK_NOTHROW(
- j.dump(4, // Indent
- ' ', // Indent char
- false, // Ensure ascii
- json::error_handler_t::strict // Error
- ));
+ CHECK_NOTHROW(j.dump(4, // Indent
+ ' ', // Indent char
+ false, // Ensure ascii
+ json::error_handler_t::strict // Error
+ ));
}
SECTION("PR #2181 - regression bug with lvalue")
@@ -628,18 +626,7 @@
SECTION("issue #2293 - eof doesn't cause parsing to stop")
{
- const std::vector<uint8_t> data =
- {
- 0x7B,
- 0x6F,
- 0x62,
- 0x6A,
- 0x65,
- 0x63,
- 0x74,
- 0x20,
- 0x4F,
- 0x42};
+ const std::vector<uint8_t> data = {0x7B, 0x6F, 0x62, 0x6A, 0x65, 0x63, 0x74, 0x20, 0x4F, 0x42};
const json result = json::from_cbor(data, true, false);
CHECK(result.is_discarded());
}
@@ -654,8 +641,7 @@
auto jsonAnimals_parsed = nlohmann::ordered_json::parse(jsonAnimals.dump());
CHECK(jsonAnimals == jsonAnimals_parsed);
- const std::vector<std::pair<std::string, int64_t>> intData = {std::make_pair("aaaa", 11),
- std::make_pair("bbb", 222)};
+ const std::vector<std::pair<std::string, int64_t>> intData = {std::make_pair("aaaa", 11), std::make_pair("bbb", 222)};
nlohmann::ordered_json jsonObj;
for (const auto& data : intData)
{
@@ -785,7 +771,8 @@
sax_no_exception sax(j);
CHECK(!json::sax_parse("xyz", &sax));
- CHECK(*sax_no_exception::error_string == "[json.exception.parse_error.101] parse error at line 1, column 1: syntax error while parsing value - invalid literal; last read: 'x'");
+ CHECK(*sax_no_exception::error_string ==
+ "[json.exception.parse_error.101] parse error at line 1, column 1: syntax error while parsing value - invalid literal; last read: 'x'");
delete sax_no_exception::error_string; // NOLINT(cppcoreguidelines-owning-memory)
}
@@ -856,9 +843,11 @@
CHECK(j.dump() == "[1,2,4]");
- j.erase(std::remove_if(j.begin(), j.end(), [](const ordered_json& val) {
- return val == 2;
- }),
+ j.erase(std::remove_if(j.begin(),
+ j.end(),
+ [](const ordered_json& val) {
+ return val == 2;
+ }),
j.end());
CHECK(j.dump() == "[1,4]");
@@ -924,9 +913,7 @@
SECTION("issue #3333 - Ambiguous conversion from nlohmann::basic_json<> to custom class")
{
- const json j{
- {"x", 1},
- {"y", 2}};
+ const json j{{"x", 1}, {"y", 2}};
for_3333 p = j;
CHECK(p.x == 1);
diff --git a/tests/src/unit-serialization.cpp b/tests/src/unit-serialization.cpp
index 17fc733..0a2b67c 100644
--- a/tests/src/unit-serialization.cpp
+++ b/tests/src/unit-serialization.cpp
@@ -31,8 +31,7 @@
std::stringstream ss;
const json j = {"foo", 1, 2, 3, false, {{"one", 1}}};
ss << std::setw(4) << j;
- CHECK(ss.str() ==
- "[\n \"foo\",\n 1,\n 2,\n 3,\n false,\n {\n \"one\": 1\n }\n]");
+ CHECK(ss.str() == "[\n \"foo\",\n 1,\n 2,\n 3,\n false,\n {\n \"one\": 1\n }\n]");
}
SECTION("given fill")
@@ -40,8 +39,7 @@
std::stringstream ss;
const json j = {"foo", 1, 2, 3, false, {{"one", 1}}};
ss << std::setw(1) << std::setfill('\t') << j;
- CHECK(ss.str() ==
- "[\n\t\"foo\",\n\t1,\n\t2,\n\t3,\n\tfalse,\n\t{\n\t\t\"one\": 1\n\t}\n]");
+ CHECK(ss.str() == "[\n\t\"foo\",\n\t1,\n\t2,\n\t3,\n\tfalse,\n\t{\n\t\t\"one\": 1\n\t}\n]");
}
}
@@ -61,8 +59,7 @@
const json j = {"foo", 1, 2, 3, false, {{"one", 1}}};
ss.width(4);
j >> ss;
- CHECK(ss.str() ==
- "[\n \"foo\",\n 1,\n 2,\n 3,\n false,\n {\n \"one\": 1\n }\n]");
+ CHECK(ss.str() == "[\n \"foo\",\n 1,\n 2,\n 3,\n false,\n {\n \"one\": 1\n }\n]");
}
SECTION("given fill")
@@ -72,8 +69,7 @@
ss.width(1);
ss.fill('\t');
j >> ss;
- CHECK(ss.str() ==
- "[\n\t\"foo\",\n\t1,\n\t2,\n\t3,\n\tfalse,\n\t{\n\t\t\"one\": 1\n\t}\n]");
+ CHECK(ss.str() == "[\n\t\"foo\",\n\t1,\n\t2,\n\t3,\n\tfalse,\n\t{\n\t\t\"one\": 1\n\t}\n]");
}
}
@@ -84,7 +80,9 @@
const json j = "ä\xA9ü";
CHECK_THROWS_WITH_AS(j.dump(), "[json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9", json::type_error&);
- CHECK_THROWS_WITH_AS(j.dump(1, ' ', false, json::error_handler_t::strict), "[json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9", json::type_error&);
+ CHECK_THROWS_WITH_AS(j.dump(1, ' ', false, json::error_handler_t::strict),
+ "[json.exception.type_error.316] invalid UTF-8 byte at index 2: 0xA9",
+ json::type_error&);
CHECK(j.dump(-1, ' ', false, json::error_handler_t::ignore) == "\"äü\"");
CHECK(j.dump(-1, ' ', false, json::error_handler_t::replace) == "\"ä\xEF\xBF\xBDü\"");
CHECK(j.dump(-1, ' ', true, json::error_handler_t::replace) == "\"\\u00e4\\ufffd\\u00fc\"");
@@ -124,78 +122,96 @@
};
test("\xC2", "\\ufffd");
- test("\xC2\x41\x42", "\\ufffd"
- "\x41"
- "\x42");
- test("\xC2\xF4", "\\ufffd"
- "\\ufffd");
+ test("\xC2\x41\x42",
+ "\\ufffd"
+ "\x41"
+ "\x42");
+ test("\xC2\xF4",
+ "\\ufffd"
+ "\\ufffd");
- test("\xF0\x80\x80\x41", "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\x41");
- test("\xF1\x80\x80\x41", "\\ufffd"
- "\x41");
- test("\xF2\x80\x80\x41", "\\ufffd"
- "\x41");
- test("\xF3\x80\x80\x41", "\\ufffd"
- "\x41");
- test("\xF4\x80\x80\x41", "\\ufffd"
- "\x41");
- test("\xF5\x80\x80\x41", "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\x41");
+ test("\xF0\x80\x80\x41",
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\x41");
+ test("\xF1\x80\x80\x41",
+ "\\ufffd"
+ "\x41");
+ test("\xF2\x80\x80\x41",
+ "\\ufffd"
+ "\x41");
+ test("\xF3\x80\x80\x41",
+ "\\ufffd"
+ "\x41");
+ test("\xF4\x80\x80\x41",
+ "\\ufffd"
+ "\x41");
+ test("\xF5\x80\x80\x41",
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\x41");
- test("\xF0\x90\x80\x41", "\\ufffd"
- "\x41");
- test("\xF1\x90\x80\x41", "\\ufffd"
- "\x41");
- test("\xF2\x90\x80\x41", "\\ufffd"
- "\x41");
- test("\xF3\x90\x80\x41", "\\ufffd"
- "\x41");
- test("\xF4\x90\x80\x41", "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\x41");
- test("\xF5\x90\x80\x41", "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\x41");
+ test("\xF0\x90\x80\x41",
+ "\\ufffd"
+ "\x41");
+ test("\xF1\x90\x80\x41",
+ "\\ufffd"
+ "\x41");
+ test("\xF2\x90\x80\x41",
+ "\\ufffd"
+ "\x41");
+ test("\xF3\x90\x80\x41",
+ "\\ufffd"
+ "\x41");
+ test("\xF4\x90\x80\x41",
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\x41");
+ test("\xF5\x90\x80\x41",
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\x41");
- test("\xC0\xAF\xE0\x80\xBF\xF0\x81\x82\x41", "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\x41");
- test("\xED\xA0\x80\xED\xBF\xBF\xED\xAF\x41", "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\x41");
- test("\xF4\x91\x92\x93\xFF\x41\x80\xBF\x42", "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\x41"
- "\\ufffd"
- "\\ufffd"
- "\x42");
- test("\xE1\x80\xE2\xF0\x91\x92\xF1\xBF\x41", "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\\ufffd"
- "\x41");
+ test("\xC0\xAF\xE0\x80\xBF\xF0\x81\x82\x41",
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\x41");
+ test("\xED\xA0\x80\xED\xBF\xBF\xED\xAF\x41",
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\x41");
+ test("\xF4\x91\x92\x93\xFF\x41\x80\xBF\x42",
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\x41"
+ "\\ufffd"
+ "\\ufffd"
+ "\x42");
+ test("\xE1\x80\xE2\xF0\x91\x92\xF1\xBF\x41",
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\\ufffd"
+ "\x41");
}
}
diff --git a/tests/src/unit-testsuites.cpp b/tests/src/unit-testsuites.cpp
index ddd9032..33c8253 100644
--- a/tests/src/unit-testsuites.cpp
+++ b/tests/src/unit-testsuites.cpp
@@ -20,41 +20,39 @@
SECTION("expected failures")
{
- for (const auto* filename :
- {
- //TEST_DATA_DIRECTORY "/json_tests/fail1.json",
- TEST_DATA_DIRECTORY "/json_tests/fail2.json",
- TEST_DATA_DIRECTORY "/json_tests/fail3.json",
- TEST_DATA_DIRECTORY "/json_tests/fail4.json",
- TEST_DATA_DIRECTORY "/json_tests/fail5.json",
- TEST_DATA_DIRECTORY "/json_tests/fail6.json",
- TEST_DATA_DIRECTORY "/json_tests/fail7.json",
- TEST_DATA_DIRECTORY "/json_tests/fail8.json",
- TEST_DATA_DIRECTORY "/json_tests/fail9.json",
- TEST_DATA_DIRECTORY "/json_tests/fail10.json",
- TEST_DATA_DIRECTORY "/json_tests/fail11.json",
- TEST_DATA_DIRECTORY "/json_tests/fail12.json",
- TEST_DATA_DIRECTORY "/json_tests/fail13.json",
- TEST_DATA_DIRECTORY "/json_tests/fail14.json",
- TEST_DATA_DIRECTORY "/json_tests/fail15.json",
- TEST_DATA_DIRECTORY "/json_tests/fail16.json",
- TEST_DATA_DIRECTORY "/json_tests/fail17.json",
- //TEST_DATA_DIRECTORY "/json_tests/fail18.json",
- TEST_DATA_DIRECTORY "/json_tests/fail19.json",
- TEST_DATA_DIRECTORY "/json_tests/fail20.json",
- TEST_DATA_DIRECTORY "/json_tests/fail21.json",
- TEST_DATA_DIRECTORY "/json_tests/fail22.json",
- TEST_DATA_DIRECTORY "/json_tests/fail23.json",
- TEST_DATA_DIRECTORY "/json_tests/fail24.json",
- TEST_DATA_DIRECTORY "/json_tests/fail25.json",
- TEST_DATA_DIRECTORY "/json_tests/fail26.json",
- TEST_DATA_DIRECTORY "/json_tests/fail27.json",
- TEST_DATA_DIRECTORY "/json_tests/fail28.json",
- TEST_DATA_DIRECTORY "/json_tests/fail29.json",
- TEST_DATA_DIRECTORY "/json_tests/fail30.json",
- TEST_DATA_DIRECTORY "/json_tests/fail31.json",
- TEST_DATA_DIRECTORY "/json_tests/fail32.json",
- TEST_DATA_DIRECTORY "/json_tests/fail33.json"})
+ for (const auto* filename : {//TEST_DATA_DIRECTORY "/json_tests/fail1.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail2.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail3.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail4.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail5.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail6.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail7.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail8.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail9.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail10.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail11.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail12.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail13.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail14.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail15.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail16.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail17.json",
+ //TEST_DATA_DIRECTORY "/json_tests/fail18.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail19.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail20.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail21.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail22.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail23.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail24.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail25.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail26.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail27.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail28.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail29.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail30.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail31.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail32.json",
+ TEST_DATA_DIRECTORY "/json_tests/fail33.json"})
{
CAPTURE(filename)
std::ifstream f(filename);
@@ -68,8 +66,7 @@
// these tests fail above, because the parser does not end on EOF;
// they succeed when the operator>> is used, because it does not
// have this constraint
- for (const auto* filename :
- {
+ for (const auto* filename : {
TEST_DATA_DIRECTORY "/json_tests/fail7.json",
TEST_DATA_DIRECTORY "/json_tests/fail8.json",
TEST_DATA_DIRECTORY "/json_tests/fail10.json",
@@ -85,10 +82,7 @@
SECTION("expected passes")
{
for (const auto* filename :
- {
- TEST_DATA_DIRECTORY "/json_tests/pass1.json",
- TEST_DATA_DIRECTORY "/json_tests/pass2.json",
- TEST_DATA_DIRECTORY "/json_tests/pass3.json"})
+ {TEST_DATA_DIRECTORY "/json_tests/pass1.json", TEST_DATA_DIRECTORY "/json_tests/pass2.json", TEST_DATA_DIRECTORY "/json_tests/pass3.json"})
{
CAPTURE(filename)
std::ifstream f(filename);
@@ -144,8 +138,7 @@
0.9868011474609375); // https://github.com/miloyip/rapidjson/issues/120
TEST_DOUBLE("[123e34]", 123e34); // Fast Path Cases In Disguise
TEST_DOUBLE("[45913141877270640000.0]", 45913141877270640000.0);
- TEST_DOUBLE("[2.2250738585072011e-308]",
- 2.2250738585072011e-308);
+ TEST_DOUBLE("[2.2250738585072011e-308]", 2.2250738585072011e-308);
//TEST_DOUBLE("[1e-00011111111111]", 0.0);
//TEST_DOUBLE("[-1e-00011111111111]", -0.0);
TEST_DOUBLE("[1e-214748363]", 0.0);
@@ -157,15 +150,12 @@
// abs((2^-1022 - 2^-1074) - 2.2250738585072012e-308) = 3.109754131239141401123495768877590405345064751974375599... ¡Á 10^-324
// abs((2^-1022) - 2.2250738585072012e-308) = 1.830902327173324040642192159804623318305533274168872044... ¡Á 10 ^ -324
// So 2.2250738585072012e-308 should round to 2^-1022 = 2.2250738585072014e-308
- TEST_DOUBLE("[2.2250738585072012e-308]",
- 2.2250738585072014e-308);
+ TEST_DOUBLE("[2.2250738585072012e-308]", 2.2250738585072014e-308);
// More closer to normal/subnormal boundary
// boundary = 2^-1022 - 2^-1075 = 2.225073858507201136057409796709131975934819546351645648... ¡Á 10^-308
- TEST_DOUBLE("[2.22507385850720113605740979670913197593481954635164564e-308]",
- 2.2250738585072009e-308);
- TEST_DOUBLE("[2.22507385850720113605740979670913197593481954635164565e-308]",
- 2.2250738585072014e-308);
+ TEST_DOUBLE("[2.22507385850720113605740979670913197593481954635164564e-308]", 2.2250738585072009e-308);
+ TEST_DOUBLE("[2.22507385850720113605740979670913197593481954635164565e-308]", 2.2250738585072014e-308);
// 1.0 is in (1.0 - 2^-54, 1.0 + 2^-53)
// 1.0 - 2^-54 = 0.999999999999999944488848768742172978818416595458984375
@@ -199,16 +189,11 @@
TEST_DOUBLE("[1014120480182583464902367222169599999e-5]", 10141204801825834086073718800384.0);
TEST_DOUBLE("[1014120480182583464902367222169600001e-5]", 10141204801825835211973625643008.0);
- TEST_DOUBLE("[5708990770823838890407843763683279797179383808]",
- 5708990770823838890407843763683279797179383808.0);
- TEST_DOUBLE("[5708990770823839524233143877797980545530986496]",
- 5708990770823839524233143877797980545530986496.0);
- TEST_DOUBLE("[5708990770823839207320493820740630171355185152]",
- 5708990770823839524233143877797980545530986496.0);
- TEST_DOUBLE("[5708990770823839207320493820740630171355185151999e-3]",
- 5708990770823838890407843763683279797179383808.0);
- TEST_DOUBLE("[5708990770823839207320493820740630171355185152001e-3]",
- 5708990770823839524233143877797980545530986496.0);
+ TEST_DOUBLE("[5708990770823838890407843763683279797179383808]", 5708990770823838890407843763683279797179383808.0);
+ TEST_DOUBLE("[5708990770823839524233143877797980545530986496]", 5708990770823839524233143877797980545530986496.0);
+ TEST_DOUBLE("[5708990770823839207320493820740630171355185152]", 5708990770823839524233143877797980545530986496.0);
+ TEST_DOUBLE("[5708990770823839207320493820740630171355185151999e-3]", 5708990770823838890407843763683279797179383808.0);
+ TEST_DOUBLE("[5708990770823839207320493820740630171355185152001e-3]", 5708990770823839524233143877797980545530986496.0);
{
std::string n1e308(312, '0'); // '1' followed by 308 '0'
@@ -220,17 +205,16 @@
}
// Cover trimming
- TEST_DOUBLE(
- "[2.22507385850720113605740979670913197593481954635164564802342610972482222202107694551652952390813508"
- "7914149158913039621106870086438694594645527657207407820621743379988141063267329253552286881372149012"
- "9811224514518898490572223072852551331557550159143974763979834118019993239625482890171070818506906306"
- "6665599493827577257201576306269066333264756530000924588831643303777979186961204949739037782970490505"
- "1080609940730262937128958950003583799967207254304360284078895771796150945516748243471030702609144621"
- "5722898802581825451803257070188608721131280795122334262883686223215037756666225039825343359745688844"
- "2390026549819838548794829220689472168983109969836584681402285424333066033985088644580400103493397042"
- "7567186443383770486037861622771738545623065874679014086723327636718751234567890123456789012345678901"
- "e-308]",
- 2.2250738585072014e-308);
+ TEST_DOUBLE("[2.22507385850720113605740979670913197593481954635164564802342610972482222202107694551652952390813508"
+ "7914149158913039621106870086438694594645527657207407820621743379988141063267329253552286881372149012"
+ "9811224514518898490572223072852551331557550159143974763979834118019993239625482890171070818506906306"
+ "6665599493827577257201576306269066333264756530000924588831643303777979186961204949739037782970490505"
+ "1080609940730262937128958950003583799967207254304360284078895771796150945516748243471030702609144621"
+ "5722898802581825451803257070188608721131280795122334262883686223215037756666225039825343359745688844"
+ "2390026549819838548794829220689472168983109969836584681402285424333066033985088644580400103493397042"
+ "7567186443383770486037861622771738545623065874679014086723327636718751234567890123456789012345678901"
+ "e-308]",
+ 2.2250738585072014e-308);
}
SECTION("strings")
@@ -256,8 +240,7 @@
{
// test cases are from https://github.com/miloyip/nativejson-benchmark/tree/master/test/data/roundtrip
- for (const auto* filename :
- {
+ for (const auto* filename : {
TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip01.json",
TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip02.json",
TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip03.json",
@@ -294,8 +277,7 @@
{
CAPTURE(filename)
std::ifstream f(filename);
- std::string json_string((std::istreambuf_iterator<char>(f)),
- (std::istreambuf_iterator<char>()));
+ std::string json_string((std::istreambuf_iterator<char>(f)), (std::istreambuf_iterator<char>()));
CAPTURE(json_string)
const json j = json::parse(json_string);
@@ -471,104 +453,102 @@
{
SECTION("y")
{
- for (const auto* filename :
- {
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_arraysWithSpaces.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_empty-string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_empty.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_ending_with_newline.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_false.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_heterogeneous.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_1_and_newline.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_leading_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_several_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_trailing_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_0e+1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_0e1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_after_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_double_close_to_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_double_huge_neg_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_int_with_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_minus_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_one.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e_neg_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e_pos_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_exponent.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_fraction_exponent.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_neg_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_pos_exponent.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_underflow.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_simple_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_simple_real.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_too_big_neg_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_too_big_pos_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_very_big_negative_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_basic.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_duplicated_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_duplicated_key_and_value.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_empty.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_empty_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_escaped_null_in_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_extreme_numbers.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_long_strings.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_simple.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_string_unicode.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_with_newlines.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_UTF-16_Surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_accepted_surrogate_pair.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_accepted_surrogate_pairs.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_allowed_escapes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_backslash_and_u_escaped_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_backslash_doublequotes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_comments.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_double_escape_a.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_double_escape_n.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_escaped_control_character.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_escaped_noncharacter.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_in_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_in_array_with_leading_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_last_surrogates_1_and_2.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_newline_uescaped.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+1FFFF.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_null_escape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_one-byte-utf-8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_pi.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_simple_ascii.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_three-byte-utf-8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_two-byte-utf-8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_u+2028_line_sep.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_u+2029_par_sep.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_uEscape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unescaped_char_delete.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicodeEscapedBackslash.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_2.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_U+2064_invisible_plus.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_escaped_double_quote.json",
- // TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_utf16.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_utf8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_with_del_character.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_false.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_negative_real.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_true.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_string_empty.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_trailing_newline.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_true_in_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_whitespace_array.json"})
+ for (const auto* filename : {TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_arraysWithSpaces.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_empty-string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_empty.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_ending_with_newline.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_false.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_heterogeneous.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_1_and_newline.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_leading_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_several_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_array_with_trailing_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_0e+1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_0e1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_after_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_double_close_to_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_double_huge_neg_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_int_with_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_minus_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_one.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_negative_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e_neg_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_capital_e_pos_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_exponent.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_fraction_exponent.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_neg_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_pos_exponent.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_underflow.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_simple_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_simple_real.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_too_big_neg_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_too_big_pos_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_very_big_negative_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_basic.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_duplicated_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_duplicated_key_and_value.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_empty.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_empty_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_escaped_null_in_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_extreme_numbers.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_long_strings.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_simple.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_string_unicode.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_object_with_newlines.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_UTF-16_Surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_accepted_surrogate_pair.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_accepted_surrogate_pairs.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_allowed_escapes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_backslash_and_u_escaped_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_backslash_doublequotes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_comments.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_double_escape_a.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_double_escape_n.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_escaped_control_character.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_escaped_noncharacter.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_in_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_in_array_with_leading_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_last_surrogates_1_and_2.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_newline_uescaped.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+1FFFF.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_null_escape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_one-byte-utf-8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_pi.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_simple_ascii.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_three-byte-utf-8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_two-byte-utf-8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_u+2028_line_sep.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_u+2029_par_sep.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_uEscape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unescaped_char_delete.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicodeEscapedBackslash.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_2.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_U+2064_invisible_plus.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_unicode_escaped_double_quote.json",
+ // TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_utf16.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_utf8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_string_with_del_character.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_false.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_negative_real.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_lonely_true.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_string_empty.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_trailing_newline.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_true_in_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_structure_whitespace_array.json"})
{
CAPTURE(filename)
std::ifstream f(filename);
@@ -579,203 +559,201 @@
SECTION("n")
{
- for (const auto* filename :
- {
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_1_true_without_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_a_invalid_utf8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_colon_instead_of_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_comma_after_close.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_comma_and_number.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_double_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_double_extra_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_extra_close.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_extra_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_incomplete.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_incomplete_invalid_value.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_inner_array_no_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_invalid_utf8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_items_separated_by_semicolon.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_just_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_just_minus.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_missing_value.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_newlines_unclosed.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_number_and_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_number_and_several_commas.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_spaces_vertical_tab_formfeed.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_star_inside.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_unclosed.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_unclosed_trailing_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_unclosed_with_new_lines.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_unclosed_with_object_inside.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_incomplete_false.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_incomplete_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_incomplete_true.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_++.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_+1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_+Inf.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_-01.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_-1.0..json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_-2..json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_-NaN.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_.-1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_.2e-3.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_0.1.2.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_0.3e+.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_0.3e.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_0.e1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_0_capital_E+.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_0_capital_E.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_0e+.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_0e.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_1.0e+.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_1.0e-.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_1.0e.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_1_000.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_1eE2.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_2.e+3.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_2.e-3.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_2.e3.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_9.e+.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_Inf.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_NaN.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_U+FF11_fullwidth_digit_one.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_expression.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_hex_1_digit.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_hex_2_digits.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_infinity.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_invalid+-.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_invalid-negative-real.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_invalid-utf-8-in-bigger-int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_invalid-utf-8-in-exponent.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_invalid-utf-8-in-int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_minus_infinity.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_minus_sign_with_trailing_garbage.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_minus_space_1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_neg_int_starting_with_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_neg_real_without_int_part.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_neg_with_garbage_at_end.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_real_garbage_after_e.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_real_with_invalid_utf8_after_e.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_real_without_fractional_part.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_starting_with_dot.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_then_00.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_with_alpha.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_with_alpha_char.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_with_leading_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_bad_value.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_bracket_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_comma_instead_of_colon.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_double_colon.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_emoji.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_garbage_at_end.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_key_with_single_quotes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_missing_colon.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_missing_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_missing_semicolon.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_missing_value.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_no-colon.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_non_string_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_non_string_key_but_huge_number_instead.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_pi_in_key_and_trailing_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_repeated_null_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_several_trailing_commas.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_single_quote.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comment.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comment_open.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comment_slash_open.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comment_slash_open_incomplete.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_two_commas_in_a_row.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_unquoted_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_unterminated-value.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_with_single_string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_with_trailing_garbage.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_single_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_1_surrogate_then_escape u.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_1_surrogate_then_escape u1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_1_surrogate_then_escape u1x.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_1_surrogate_then_escape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_UTF-16_incomplete_surrogate.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_UTF8_surrogate_U+D800.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_accentuated_char_no_quotes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_backslash_00.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_escape_x.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_escaped_backslash_bad.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_escaped_ctrl_char_tab.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_escaped_emoji.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_incomplete_escape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_incomplete_escaped_character.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_incomplete_surrogate_escape_invalid.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_invalid-utf-8-in-escape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_invalid_backslash_esc.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_invalid_unicode_escape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_invalid_utf-8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_invalid_utf8_after_escape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_iso_latin_1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_leading_uescaped_thinspace.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_lone_utf8_continuation_byte.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_no_quotes_with_bad_escape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_overlong_sequence_2_bytes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_overlong_sequence_6_bytes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_overlong_sequence_6_bytes_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_single_doublequote.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_single_quote.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_single_string_no_double_quotes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_start_escape_unclosed.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_unescaped_crtl_char.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_unescaped_newline.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_unescaped_tab.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_unicode_CapitalU.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_with_trailing_garbage.json",
- //!TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_100000_opening_arrays.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_3C.3E.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_3Cnull3E.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_U+2060_word_joined.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_UTF8_BOM_no_data.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_array_trailing_garbage.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_array_with_extra_array_close.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_array_with_unclosed_string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_ascii-unicode-identifier.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_capitalized_True.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_close_unopened_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_comma_instead_of_closing_brace.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_double_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_end_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_incomplete_UTF8_BOM.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_lone-invalid-utf-8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_lone-open-bracket.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_no_data.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_null-byte-outside-string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_number_with_trailing_garbage.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_object_followed_by_closing_object.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_object_unclosed_no_value.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_object_with_comment.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_object_with_trailing_garbage.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_array_apostrophe.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_array_comma.json",
- //!TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_array_object.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_array_open_object.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_array_open_string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_array_string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_object.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_object_close_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_object_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_object_open_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_object_open_string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_object_string_with_apostrophes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_open.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_single_point.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_single_star.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_trailing_#.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_uescaped_LF_before_string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_unclosed_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_unclosed_array_partial_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_unclosed_array_unfinished_false.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_unclosed_array_unfinished_true.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_unclosed_object.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_unicode-identifier.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_whitespace_U+2060_word_joiner.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_whitespace_formfeed.json"})
+ for (const auto* filename : {TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_1_true_without_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_a_invalid_utf8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_colon_instead_of_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_comma_after_close.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_comma_and_number.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_double_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_double_extra_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_extra_close.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_extra_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_incomplete.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_incomplete_invalid_value.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_inner_array_no_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_invalid_utf8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_items_separated_by_semicolon.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_just_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_just_minus.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_missing_value.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_newlines_unclosed.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_number_and_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_number_and_several_commas.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_spaces_vertical_tab_formfeed.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_star_inside.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_unclosed.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_unclosed_trailing_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_unclosed_with_new_lines.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_unclosed_with_object_inside.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_incomplete_false.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_incomplete_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_incomplete_true.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_++.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_+1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_+Inf.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_-01.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_-1.0..json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_-2..json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_-NaN.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_.-1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_.2e-3.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_0.1.2.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_0.3e+.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_0.3e.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_0.e1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_0_capital_E+.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_0_capital_E.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_0e+.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_0e.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_1.0e+.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_1.0e-.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_1.0e.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_1_000.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_1eE2.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_2.e+3.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_2.e-3.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_2.e3.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_9.e+.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_Inf.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_NaN.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_U+FF11_fullwidth_digit_one.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_expression.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_hex_1_digit.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_hex_2_digits.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_infinity.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_invalid+-.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_invalid-negative-real.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_invalid-utf-8-in-bigger-int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_invalid-utf-8-in-exponent.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_invalid-utf-8-in-int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_minus_infinity.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_minus_sign_with_trailing_garbage.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_minus_space_1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_neg_int_starting_with_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_neg_real_without_int_part.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_neg_with_garbage_at_end.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_real_garbage_after_e.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_real_with_invalid_utf8_after_e.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_real_without_fractional_part.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_starting_with_dot.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_then_00.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_with_alpha.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_with_alpha_char.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_number_with_leading_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_bad_value.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_bracket_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_comma_instead_of_colon.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_double_colon.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_emoji.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_garbage_at_end.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_key_with_single_quotes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_missing_colon.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_missing_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_missing_semicolon.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_missing_value.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_no-colon.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_non_string_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_non_string_key_but_huge_number_instead.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_pi_in_key_and_trailing_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_repeated_null_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_several_trailing_commas.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_single_quote.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comment.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comment_open.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comment_slash_open.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comment_slash_open_incomplete.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_two_commas_in_a_row.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_unquoted_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_unterminated-value.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_with_single_string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_with_trailing_garbage.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_single_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_1_surrogate_then_escape u.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_1_surrogate_then_escape u1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_1_surrogate_then_escape u1x.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_1_surrogate_then_escape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_UTF-16_incomplete_surrogate.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_UTF8_surrogate_U+D800.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_accentuated_char_no_quotes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_backslash_00.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_escape_x.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_escaped_backslash_bad.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_escaped_ctrl_char_tab.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_escaped_emoji.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_incomplete_escape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_incomplete_escaped_character.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_incomplete_surrogate_escape_invalid.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_invalid-utf-8-in-escape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_invalid_backslash_esc.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_invalid_unicode_escape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_invalid_utf-8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_invalid_utf8_after_escape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_iso_latin_1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_leading_uescaped_thinspace.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_lone_utf8_continuation_byte.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_no_quotes_with_bad_escape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_overlong_sequence_2_bytes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_overlong_sequence_6_bytes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_overlong_sequence_6_bytes_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_single_doublequote.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_single_quote.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_single_string_no_double_quotes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_start_escape_unclosed.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_unescaped_crtl_char.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_unescaped_newline.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_unescaped_tab.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_unicode_CapitalU.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_with_trailing_garbage.json",
+ //!TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_100000_opening_arrays.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_3C.3E.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_3Cnull3E.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_U+2060_word_joined.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_UTF8_BOM_no_data.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_array_trailing_garbage.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_array_with_extra_array_close.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_array_with_unclosed_string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_ascii-unicode-identifier.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_capitalized_True.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_close_unopened_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_comma_instead_of_closing_brace.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_double_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_end_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_incomplete_UTF8_BOM.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_lone-invalid-utf-8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_lone-open-bracket.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_no_data.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_null-byte-outside-string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_number_with_trailing_garbage.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_object_followed_by_closing_object.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_object_unclosed_no_value.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_object_with_comment.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_object_with_trailing_garbage.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_array_apostrophe.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_array_comma.json",
+ //!TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_array_object.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_array_open_object.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_array_open_string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_array_string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_object.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_object_close_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_object_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_object_open_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_object_open_string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_object_string_with_apostrophes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_open_open.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_single_point.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_single_star.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_trailing_#.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_uescaped_LF_before_string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_unclosed_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_unclosed_array_partial_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_unclosed_array_unfinished_false.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_unclosed_array_unfinished_true.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_unclosed_object.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_unicode-identifier.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_whitespace_U+2060_word_joiner.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_whitespace_formfeed.json"})
{
CAPTURE(filename)
std::ifstream f(filename);
@@ -789,24 +767,22 @@
// these tests fail above, because the parser does not end on EOF;
// they succeed when the operator>> is used, because it does not
// have this constraint
- for (const auto* filename :
- {
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_comma_after_close.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_extra_close.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comment.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comment_open.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comment_slash_open.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comment_slash_open_incomplete.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_with_trailing_garbage.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_with_trailing_garbage.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_array_trailing_garbage.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_array_with_extra_array_close.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_close_unopened_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_double_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_number_with_trailing_garbage.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_object_followed_by_closing_object.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_object_with_trailing_garbage.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_trailing_#.json"})
+ for (const auto* filename : {TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_comma_after_close.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_array_extra_close.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comment.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comment_open.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comment_slash_open.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_trailing_comment_slash_open_incomplete.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_object_with_trailing_garbage.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_string_with_trailing_garbage.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_array_trailing_garbage.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_array_with_extra_array_close.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_close_unopened_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_double_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_number_with_trailing_garbage.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_object_followed_by_closing_object.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_object_with_trailing_garbage.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/n_structure_trailing_#.json"})
{
CAPTURE(filename)
std::ifstream f(filename);
@@ -817,17 +793,15 @@
SECTION("i -> y")
{
- for (const auto* filename :
- {
- // we do not pose a limit on nesting
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_structure_500_nested_arrays.json",
- // we silently ignore BOMs
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_structure_UTF-8_BOM_empty_object.json",
- // we accept and forward non-characters
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_unicode_U+10FFFE_nonchar.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_unicode_U+1FFFE_nonchar.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_unicode_U+FDD0_nonchar.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_unicode_U+FFFE_nonchar.json"})
+ for (const auto* filename : {// we do not pose a limit on nesting
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_structure_500_nested_arrays.json",
+ // we silently ignore BOMs
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_structure_UTF-8_BOM_empty_object.json",
+ // we accept and forward non-characters
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_unicode_U+10FFFE_nonchar.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_unicode_U+1FFFE_nonchar.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_unicode_U+FDD0_nonchar.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_unicode_U+FFFE_nonchar.json"})
{
CAPTURE(filename)
std::ifstream f(filename);
@@ -839,13 +813,11 @@
// numbers that overflow during parsing
SECTION("i/y -> n (out of range)")
{
- for (const auto* filename :
- {
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_number_neg_int_huge_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_number_pos_double_huge_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_huge_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_neg_overflow.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_pos_overflow.json"})
+ for (const auto* filename : {TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_number_neg_int_huge_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_number_pos_double_huge_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_huge_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_neg_overflow.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/y_number_real_pos_overflow.json"})
{
CAPTURE(filename)
std::ifstream f(filename);
@@ -856,21 +828,19 @@
SECTION("i -> n")
{
- for (const auto* filename :
- {
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_object_key_lone_2nd_surrogate.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_1st_surrogate_but_2nd_missing.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_1st_valid_surrogate_2nd_invalid.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_UTF-16_invalid_lonely_surrogate.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_UTF-16_invalid_surrogate.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_UTF-8_invalid_sequence.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_incomplete_surrogate_and_escape_valid.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_incomplete_surrogate_pair.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_incomplete_surrogates_escape_valid.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_inverted_surrogates_U+1D11E.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_lone_second_surrogate.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_not_in_unicode_range.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_truncated-utf-8.json"})
+ for (const auto* filename : {TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_object_key_lone_2nd_surrogate.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_1st_surrogate_but_2nd_missing.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_1st_valid_surrogate_2nd_invalid.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_UTF-16_invalid_lonely_surrogate.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_UTF-16_invalid_surrogate.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_UTF-8_invalid_sequence.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_incomplete_surrogate_and_escape_valid.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_incomplete_surrogate_pair.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_incomplete_surrogates_escape_valid.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_inverted_surrogates_U+1D11E.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_lone_second_surrogate.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_not_in_unicode_range.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite/test_parsing/i_string_truncated-utf-8.json"})
{
CAPTURE(filename)
std::ifstream f(filename);
@@ -887,103 +857,101 @@
{
SECTION("y")
{
- for (const auto* filename :
- {
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_arraysWithSpaces.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_empty-string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_empty.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_ending_with_newline.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_false.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_heterogeneous.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_with_1_and_newline.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_with_leading_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_with_several_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_with_trailing_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_0e+1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_0e1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_after_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_double_close_to_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_int_with_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_minus_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_negative_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_negative_one.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_negative_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_real_capital_e.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_real_capital_e_neg_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_real_capital_e_pos_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_real_exponent.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_real_fraction_exponent.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_real_neg_exp.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_real_pos_exponent.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_simple_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_simple_real.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_basic.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_duplicated_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_duplicated_key_and_value.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_empty.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_empty_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_escaped_null_in_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_extreme_numbers.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_long_strings.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_simple.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_string_unicode.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_with_newlines.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_accepted_surrogate_pair.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_accepted_surrogate_pairs.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_allowed_escapes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_backslash_and_u_escaped_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_backslash_doublequotes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_comments.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_double_escape_a.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_double_escape_n.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_escaped_control_character.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_escaped_noncharacter.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_in_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_in_array_with_leading_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_last_surrogates_1_and_2.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_nbsp_uescaped.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_null_escape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_one-byte-utf-8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_pi.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_reservedCharacterInUTF-8_U+1BFFF.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_simple_ascii.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_three-byte-utf-8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_two-byte-utf-8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_u+2028_line_sep.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_u+2029_par_sep.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_uEscape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_uescaped_newline.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unescaped_char_delete.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicodeEscapedBackslash.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode_2.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode_U+10FFFE_nonchar.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode_U+1FFFE_nonchar.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode_U+2064_invisible_plus.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode_U+FDD0_nonchar.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode_U+FFFE_nonchar.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode_escaped_double_quote.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_utf8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_with_del_character.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_lonely_false.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_lonely_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_lonely_negative_real.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_lonely_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_lonely_string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_lonely_true.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_string_empty.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_trailing_newline.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_true_in_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_whitespace_array.json"})
+ for (const auto* filename : {TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_arraysWithSpaces.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_empty-string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_empty.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_ending_with_newline.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_false.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_heterogeneous.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_with_1_and_newline.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_with_leading_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_with_several_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_array_with_trailing_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_0e+1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_0e1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_after_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_double_close_to_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_int_with_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_minus_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_negative_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_negative_one.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_negative_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_real_capital_e.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_real_capital_e_neg_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_real_capital_e_pos_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_real_exponent.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_real_fraction_exponent.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_real_neg_exp.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_real_pos_exponent.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_simple_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_number_simple_real.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_basic.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_duplicated_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_duplicated_key_and_value.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_empty.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_empty_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_escaped_null_in_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_extreme_numbers.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_long_strings.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_simple.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_string_unicode.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_object_with_newlines.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_1_2_3_bytes_UTF-8_sequences.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_accepted_surrogate_pair.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_accepted_surrogate_pairs.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_allowed_escapes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_backslash_and_u_escaped_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_backslash_doublequotes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_comments.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_double_escape_a.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_double_escape_n.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_escaped_control_character.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_escaped_noncharacter.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_in_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_in_array_with_leading_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_last_surrogates_1_and_2.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_nbsp_uescaped.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_nonCharacterInUTF-8_U+10FFFF.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_nonCharacterInUTF-8_U+FFFF.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_null_escape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_one-byte-utf-8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_pi.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_reservedCharacterInUTF-8_U+1BFFF.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_simple_ascii.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_three-byte-utf-8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_two-byte-utf-8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_u+2028_line_sep.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_u+2029_par_sep.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_uEscape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_uescaped_newline.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unescaped_char_delete.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicodeEscapedBackslash.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode_2.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode_U+10FFFE_nonchar.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode_U+1FFFE_nonchar.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode_U+2064_invisible_plus.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode_U+FDD0_nonchar.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode_U+FFFE_nonchar.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_unicode_escaped_double_quote.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_utf8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_string_with_del_character.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_lonely_false.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_lonely_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_lonely_negative_real.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_lonely_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_lonely_string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_lonely_true.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_string_empty.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_trailing_newline.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_true_in_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/y_structure_whitespace_array.json"})
{
CAPTURE(filename)
std::ifstream f(filename);
@@ -996,194 +964,192 @@
SECTION("n")
{
- for (const auto* filename :
- {
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_1_true_without_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_a_invalid_utf8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_colon_instead_of_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_comma_after_close.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_comma_and_number.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_double_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_double_extra_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_extra_close.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_extra_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_incomplete.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_incomplete_invalid_value.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_inner_array_no_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_invalid_utf8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_items_separated_by_semicolon.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_just_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_just_minus.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_missing_value.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_newlines_unclosed.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_number_and_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_number_and_several_commas.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_spaces_vertical_tab_formfeed.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_star_inside.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_unclosed.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_unclosed_trailing_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_unclosed_with_new_lines.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_unclosed_with_object_inside.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_incomplete_false.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_incomplete_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_incomplete_true.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_multidigit_number_then_00.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_++.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_+1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_+Inf.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_-01.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_-1.0..json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_-2..json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_-NaN.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_.-1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_.2e-3.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_0.1.2.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_0.3e+.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_0.3e.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_0.e1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_0_capital_E+.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_0_capital_E.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_0e+.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_0e.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_1.0e+.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_1.0e-.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_1.0e.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_1_000.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_1eE2.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_2.e+3.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_2.e-3.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_2.e3.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_9.e+.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_Inf.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_NaN.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_U+FF11_fullwidth_digit_one.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_expression.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_hex_1_digit.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_hex_2_digits.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_infinity.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_invalid+-.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_invalid-negative-real.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_invalid-utf-8-in-bigger-int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_invalid-utf-8-in-exponent.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_invalid-utf-8-in-int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_minus_infinity.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_minus_sign_with_trailing_garbage.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_minus_space_1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_neg_int_starting_with_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_neg_real_without_int_part.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_neg_with_garbage_at_end.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_real_garbage_after_e.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_real_with_invalid_utf8_after_e.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_real_without_fractional_part.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_starting_with_dot.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_with_alpha.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_with_alpha_char.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_with_leading_zero.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_bad_value.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_bracket_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_comma_instead_of_colon.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_double_colon.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_emoji.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_garbage_at_end.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_key_with_single_quotes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_lone_continuation_byte_in_key_and_trailing_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_missing_colon.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_missing_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_missing_semicolon.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_missing_value.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_no-colon.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_non_string_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_non_string_key_but_huge_number_instead.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_repeated_null_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_several_trailing_commas.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_single_quote.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_trailing_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_trailing_comment.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_trailing_comment_open.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_trailing_comment_slash_open.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_trailing_comment_slash_open_incomplete.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_two_commas_in_a_row.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_unquoted_key.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_unterminated-value.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_with_single_string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_with_trailing_garbage.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_single_space.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_1_surrogate_then_escape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_1_surrogate_then_escape_u.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_1_surrogate_then_escape_u1.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_1_surrogate_then_escape_u1x.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_accentuated_char_no_quotes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_backslash_00.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_escape_x.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_escaped_backslash_bad.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_escaped_ctrl_char_tab.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_escaped_emoji.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_incomplete_escape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_incomplete_escaped_character.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_incomplete_surrogate.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_incomplete_surrogate_escape_invalid.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_invalid-utf-8-in-escape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_invalid_backslash_esc.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_invalid_unicode_escape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_invalid_utf8_after_escape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_leading_uescaped_thinspace.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_no_quotes_with_bad_escape.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_single_doublequote.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_single_quote.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_single_string_no_double_quotes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_start_escape_unclosed.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_unescaped_crtl_char.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_unescaped_newline.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_unescaped_tab.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_unicode_CapitalU.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_with_trailing_garbage.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_U+2060_word_joined.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_UTF8_BOM_no_data.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_angle_bracket_..json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_angle_bracket_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_array_trailing_garbage.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_array_with_extra_array_close.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_array_with_unclosed_string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_ascii-unicode-identifier.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_capitalized_True.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_close_unopened_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_comma_instead_of_closing_brace.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_double_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_end_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_incomplete_UTF8_BOM.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_lone-invalid-utf-8.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_lone-open-bracket.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_no_data.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_null-byte-outside-string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_number_with_trailing_garbage.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_object_followed_by_closing_object.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_object_unclosed_no_value.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_object_with_comment.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_object_with_trailing_garbage.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_array_apostrophe.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_array_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_array_open_object.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_array_open_string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_array_string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_object.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_object_close_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_object_comma.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_object_open_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_object_open_string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_object_string_with_apostrophes.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_open.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_single_eacute.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_single_star.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_trailing_#.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_uescaped_LF_before_string.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_unclosed_array.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_unclosed_array_partial_null.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_unclosed_array_unfinished_false.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_unclosed_array_unfinished_true.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_unclosed_object.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_unicode-identifier.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_whitespace_U+2060_word_joiner.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_whitespace_formfeed.json"})
+ for (const auto* filename : {TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_1_true_without_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_a_invalid_utf8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_colon_instead_of_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_comma_after_close.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_comma_and_number.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_double_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_double_extra_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_extra_close.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_extra_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_incomplete.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_incomplete_invalid_value.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_inner_array_no_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_invalid_utf8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_items_separated_by_semicolon.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_just_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_just_minus.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_missing_value.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_newlines_unclosed.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_number_and_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_number_and_several_commas.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_spaces_vertical_tab_formfeed.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_star_inside.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_unclosed.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_unclosed_trailing_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_unclosed_with_new_lines.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_array_unclosed_with_object_inside.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_incomplete_false.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_incomplete_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_incomplete_true.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_multidigit_number_then_00.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_++.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_+1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_+Inf.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_-01.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_-1.0..json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_-2..json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_-NaN.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_.-1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_.2e-3.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_0.1.2.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_0.3e+.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_0.3e.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_0.e1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_0_capital_E+.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_0_capital_E.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_0e+.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_0e.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_1.0e+.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_1.0e-.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_1.0e.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_1_000.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_1eE2.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_2.e+3.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_2.e-3.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_2.e3.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_9.e+.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_Inf.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_NaN.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_U+FF11_fullwidth_digit_one.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_expression.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_hex_1_digit.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_hex_2_digits.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_infinity.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_invalid+-.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_invalid-negative-real.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_invalid-utf-8-in-bigger-int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_invalid-utf-8-in-exponent.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_invalid-utf-8-in-int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_minus_infinity.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_minus_sign_with_trailing_garbage.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_minus_space_1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_neg_int_starting_with_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_neg_real_without_int_part.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_neg_with_garbage_at_end.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_real_garbage_after_e.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_real_with_invalid_utf8_after_e.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_real_without_fractional_part.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_starting_with_dot.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_with_alpha.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_with_alpha_char.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_number_with_leading_zero.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_bad_value.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_bracket_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_comma_instead_of_colon.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_double_colon.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_emoji.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_garbage_at_end.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_key_with_single_quotes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_lone_continuation_byte_in_key_and_trailing_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_missing_colon.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_missing_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_missing_semicolon.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_missing_value.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_no-colon.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_non_string_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_non_string_key_but_huge_number_instead.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_repeated_null_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_several_trailing_commas.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_single_quote.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_trailing_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_trailing_comment.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_trailing_comment_open.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_trailing_comment_slash_open.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_trailing_comment_slash_open_incomplete.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_two_commas_in_a_row.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_unquoted_key.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_unterminated-value.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_with_single_string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_object_with_trailing_garbage.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_single_space.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_1_surrogate_then_escape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_1_surrogate_then_escape_u.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_1_surrogate_then_escape_u1.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_1_surrogate_then_escape_u1x.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_accentuated_char_no_quotes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_backslash_00.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_escape_x.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_escaped_backslash_bad.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_escaped_ctrl_char_tab.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_escaped_emoji.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_incomplete_escape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_incomplete_escaped_character.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_incomplete_surrogate.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_incomplete_surrogate_escape_invalid.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_invalid-utf-8-in-escape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_invalid_backslash_esc.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_invalid_unicode_escape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_invalid_utf8_after_escape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_leading_uescaped_thinspace.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_no_quotes_with_bad_escape.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_single_doublequote.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_single_quote.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_single_string_no_double_quotes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_start_escape_unclosed.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_unescaped_crtl_char.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_unescaped_newline.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_unescaped_tab.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_unicode_CapitalU.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_string_with_trailing_garbage.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_U+2060_word_joined.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_UTF8_BOM_no_data.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_angle_bracket_..json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_angle_bracket_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_array_trailing_garbage.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_array_with_extra_array_close.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_array_with_unclosed_string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_ascii-unicode-identifier.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_capitalized_True.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_close_unopened_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_comma_instead_of_closing_brace.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_double_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_end_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_incomplete_UTF8_BOM.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_lone-invalid-utf-8.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_lone-open-bracket.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_no_data.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_null-byte-outside-string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_number_with_trailing_garbage.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_object_followed_by_closing_object.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_object_unclosed_no_value.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_object_with_comment.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_object_with_trailing_garbage.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_array_apostrophe.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_array_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_array_open_object.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_array_open_string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_array_string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_object.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_object_close_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_object_comma.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_object_open_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_object_open_string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_object_string_with_apostrophes.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_open.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_single_eacute.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_single_star.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_trailing_#.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_uescaped_LF_before_string.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_unclosed_array.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_unclosed_array_partial_null.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_unclosed_array_unfinished_false.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_unclosed_array_unfinished_true.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_unclosed_object.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_unicode-identifier.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_whitespace_U+2060_word_joiner.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_whitespace_formfeed.json"})
{
CAPTURE(filename)
std::ifstream f(filename);
@@ -1196,10 +1162,8 @@
SECTION("n (previously overflowed)")
{
- for (const auto* filename :
- {
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_100000_opening_arrays.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_array_object.json"})
+ for (const auto* filename : {TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_100000_opening_arrays.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/n_structure_open_array_object.json"})
{
CAPTURE(filename)
std::ifstream f(filename);
@@ -1209,43 +1173,41 @@
SECTION("i -> y")
{
- for (const auto* filename :
- {
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_double_huge_neg_exp.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_huge_exp.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_neg_int_huge_exp.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_pos_double_huge_exp.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_real_neg_overflow.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_real_pos_overflow.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_real_underflow.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_too_big_neg_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_too_big_pos_int.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_very_big_negative_int.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_object_key_lone_2nd_surrogate.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_1st_surrogate_but_2nd_missing.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_1st_valid_surrogate_2nd_invalid.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_UTF-16LE_with_BOM.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_UTF-8_invalid_sequence.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_UTF8_surrogate_U+D800.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_incomplete_surrogate_and_escape_valid.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_incomplete_surrogate_pair.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_incomplete_surrogates_escape_valid.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_invalid_lonely_surrogate.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_invalid_surrogate.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_invalid_utf-8.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_inverted_surrogates_U+1D11E.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_iso_latin_1.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_lone_second_surrogate.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_lone_utf8_continuation_byte.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_not_in_unicode_range.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_overlong_sequence_2_bytes.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_overlong_sequence_6_bytes.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_overlong_sequence_6_bytes_null.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_truncated-utf-8.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_utf16BE_no_BOM.json",
- //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_utf16LE_no_BOM.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_structure_500_nested_arrays.json",
- TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_structure_UTF-8_BOM_empty_object.json"})
+ for (const auto* filename : {TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_double_huge_neg_exp.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_huge_exp.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_neg_int_huge_exp.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_pos_double_huge_exp.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_real_neg_overflow.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_real_pos_overflow.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_real_underflow.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_too_big_neg_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_too_big_pos_int.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_very_big_negative_int.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_object_key_lone_2nd_surrogate.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_1st_surrogate_but_2nd_missing.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_1st_valid_surrogate_2nd_invalid.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_UTF-16LE_with_BOM.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_UTF-8_invalid_sequence.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_UTF8_surrogate_U+D800.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_incomplete_surrogate_and_escape_valid.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_incomplete_surrogate_pair.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_incomplete_surrogates_escape_valid.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_invalid_lonely_surrogate.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_invalid_surrogate.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_invalid_utf-8.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_inverted_surrogates_U+1D11E.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_iso_latin_1.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_lone_second_surrogate.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_lone_utf8_continuation_byte.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_not_in_unicode_range.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_overlong_sequence_2_bytes.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_overlong_sequence_6_bytes.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_overlong_sequence_6_bytes_null.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_truncated-utf-8.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_utf16BE_no_BOM.json",
+ //TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_string_utf16LE_no_BOM.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_structure_500_nested_arrays.json",
+ TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_structure_UTF-8_BOM_empty_object.json"})
{
CAPTURE(filename)
std::ifstream f(filename);
@@ -1258,8 +1220,7 @@
SECTION("i -> n")
{
- for (const auto* filename :
- {
+ for (const auto* filename : {
//TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_double_huge_neg_exp.json",
TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_huge_exp.json",
TEST_DATA_DIRECTORY "/nst_json_testsuite2/test_parsing/i_number_neg_int_huge_exp.json",
@@ -1308,7 +1269,8 @@
}
}
-namespace {
+namespace
+{
std::string trim(const std::string& str);
// from https://stackoverflow.com/a/25829178/266378
diff --git a/tests/src/unit-to_chars.cpp b/tests/src/unit-to_chars.cpp
index 258d690..a059e49 100644
--- a/tests/src/unit-to_chars.cpp
+++ b/tests/src/unit-to_chars.cpp
@@ -15,7 +15,8 @@
#include <nlohmann/json.hpp>
using nlohmann::detail::dtoa_impl::reinterpret_bits;
-namespace {
+namespace
+{
float make_float(uint32_t sign_bit, uint32_t biased_exponent, uint32_t significand)
{
assert(sign_bit == 0 || sign_bit == 1);
@@ -60,9 +61,7 @@
e--;
}
- const uint64_t biased_exponent = (e == kDenormalExponent && (f & kHiddenBit) == 0)
- ? 0
- : static_cast<uint64_t>(e + kExponentBias);
+ const uint64_t biased_exponent = (e == kDenormalExponent && (f & kHiddenBit) == 0) ? 0 : static_cast<uint64_t>(e + kExponentBias);
const uint64_t bits = (f & kSignificandMask) | (biased_exponent << kPhysicalSignificandSize);
return reinterpret_bits<float>(static_cast<uint32_t>(bits));
@@ -112,9 +111,7 @@
e--;
}
- const uint64_t biased_exponent = (e == kDenormalExponent && (f & kHiddenBit) == 0)
- ? 0
- : static_cast<uint64_t>(e + kExponentBias);
+ const uint64_t biased_exponent = (e == kDenormalExponent && (f & kHiddenBit) == 0) ? 0 : static_cast<uint64_t>(e + kExponentBias);
const uint64_t bits = (f & kSignificandMask) | (biased_exponent << kPhysicalSignificandSize);
return reinterpret_bits<double>(bits);
diff --git a/tests/src/unit-ubjson.cpp b/tests/src/unit-ubjson.cpp
index 3d3ad6c..1aa5b15 100644
--- a/tests/src/unit-ubjson.cpp
+++ b/tests/src/unit-ubjson.cpp
@@ -17,7 +17,8 @@
#include <iostream>
#include <set>
-namespace {
+namespace
+{
class SaxCountdown
{
public:
@@ -85,7 +86,9 @@
return events_left-- > 0;
}
- bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const json::exception& /*unused*/) // NOLINT(readability-convert-member-functions-to-static)
+ bool parse_error(std::size_t /*unused*/,
+ const std::string& /*unused*/,
+ const json::exception& /*unused*/) // NOLINT(readability-convert-member-functions-to-static)
{
return false;
}
@@ -195,14 +198,10 @@
// check individual bytes
CHECK(result[0] == 'L');
- int64_t const restored = (static_cast<int64_t>(result[1]) << 070) +
- (static_cast<int64_t>(result[2]) << 060) +
- (static_cast<int64_t>(result[3]) << 050) +
- (static_cast<int64_t>(result[4]) << 040) +
- (static_cast<int64_t>(result[5]) << 030) +
- (static_cast<int64_t>(result[6]) << 020) +
- (static_cast<int64_t>(result[7]) << 010) +
- static_cast<int64_t>(result[8]);
+ int64_t const restored = (static_cast<int64_t>(result[1]) << 070) + (static_cast<int64_t>(result[2]) << 060) +
+ (static_cast<int64_t>(result[3]) << 050) + (static_cast<int64_t>(result[4]) << 040) +
+ (static_cast<int64_t>(result[5]) << 030) + (static_cast<int64_t>(result[6]) << 020) +
+ (static_cast<int64_t>(result[7]) << 010) + static_cast<int64_t>(result[8]);
CHECK(restored == i);
// roundtrip
@@ -247,10 +246,8 @@
// check individual bytes
CHECK(result[0] == 'l');
- int32_t const restored = (static_cast<int32_t>(result[1]) << 030) +
- (static_cast<int32_t>(result[2]) << 020) +
- (static_cast<int32_t>(result[3]) << 010) +
- static_cast<int32_t>(result[4]);
+ int32_t const restored = (static_cast<int32_t>(result[1]) << 030) + (static_cast<int32_t>(result[2]) << 020) +
+ (static_cast<int32_t>(result[3]) << 010) + static_cast<int32_t>(result[4]);
CHECK(restored == i);
// roundtrip
@@ -453,11 +450,7 @@
SECTION("65536..2147483647 (int32)")
{
- for (uint32_t i :
- {
- 65536u,
- 77777u,
- 1048576u})
+ for (uint32_t i : {65536u, 77777u, 1048576u})
{
CAPTURE(i)
@@ -484,10 +477,8 @@
// check individual bytes
CHECK(result[0] == 'l');
- uint32_t const restored = (static_cast<uint32_t>(result[1]) << 030) +
- (static_cast<uint32_t>(result[2]) << 020) +
- (static_cast<uint32_t>(result[3]) << 010) +
- static_cast<uint32_t>(result[4]);
+ uint32_t const restored = (static_cast<uint32_t>(result[1]) << 030) + (static_cast<uint32_t>(result[2]) << 020) +
+ (static_cast<uint32_t>(result[3]) << 010) + static_cast<uint32_t>(result[4]);
CHECK(restored == i);
// roundtrip
@@ -530,14 +521,10 @@
// check individual bytes
CHECK(result[0] == 'L');
- uint64_t const restored = (static_cast<uint64_t>(result[1]) << 070) +
- (static_cast<uint64_t>(result[2]) << 060) +
- (static_cast<uint64_t>(result[3]) << 050) +
- (static_cast<uint64_t>(result[4]) << 040) +
- (static_cast<uint64_t>(result[5]) << 030) +
- (static_cast<uint64_t>(result[6]) << 020) +
- (static_cast<uint64_t>(result[7]) << 010) +
- static_cast<uint64_t>(result[8]);
+ uint64_t const restored = (static_cast<uint64_t>(result[1]) << 070) + (static_cast<uint64_t>(result[2]) << 060) +
+ (static_cast<uint64_t>(result[3]) << 050) + (static_cast<uint64_t>(result[4]) << 040) +
+ (static_cast<uint64_t>(result[5]) << 030) + (static_cast<uint64_t>(result[6]) << 020) +
+ (static_cast<uint64_t>(result[7]) << 010) + static_cast<uint64_t>(result[8]);
CHECK(restored == i);
// roundtrip
@@ -654,11 +641,7 @@
SECTION("65536..2147483647 (int32)")
{
- for (uint32_t i :
- {
- 65536u,
- 77777u,
- 1048576u})
+ for (uint32_t i : {65536u, 77777u, 1048576u})
{
CAPTURE(i)
@@ -684,10 +667,8 @@
// check individual bytes
CHECK(result[0] == 'l');
- uint32_t const restored = (static_cast<uint32_t>(result[1]) << 030) +
- (static_cast<uint32_t>(result[2]) << 020) +
- (static_cast<uint32_t>(result[3]) << 010) +
- static_cast<uint32_t>(result[4]);
+ uint32_t const restored = (static_cast<uint32_t>(result[1]) << 030) + (static_cast<uint32_t>(result[2]) << 020) +
+ (static_cast<uint32_t>(result[3]) << 010) + static_cast<uint32_t>(result[4]);
CHECK(restored == i);
// roundtrip
@@ -729,14 +710,10 @@
// check individual bytes
CHECK(result[0] == 'L');
- uint64_t const restored = (static_cast<uint64_t>(result[1]) << 070) +
- (static_cast<uint64_t>(result[2]) << 060) +
- (static_cast<uint64_t>(result[3]) << 050) +
- (static_cast<uint64_t>(result[4]) << 040) +
- (static_cast<uint64_t>(result[5]) << 030) +
- (static_cast<uint64_t>(result[6]) << 020) +
- (static_cast<uint64_t>(result[7]) << 010) +
- static_cast<uint64_t>(result[8]);
+ uint64_t const restored = (static_cast<uint64_t>(result[1]) << 070) + (static_cast<uint64_t>(result[2]) << 060) +
+ (static_cast<uint64_t>(result[3]) << 050) + (static_cast<uint64_t>(result[4]) << 040) +
+ (static_cast<uint64_t>(result[5]) << 030) + (static_cast<uint64_t>(result[6]) << 020) +
+ (static_cast<uint64_t>(result[7]) << 010) + static_cast<uint64_t>(result[8]);
CHECK(restored == i);
// roundtrip
@@ -752,17 +729,7 @@
{
double v = 3.1415925;
json const j = v;
- std::vector<uint8_t> expected =
- {
- 'D',
- 0x40,
- 0x09,
- 0x21,
- 0xfb,
- 0x3f,
- 0xa6,
- 0xde,
- 0xfc};
+ std::vector<uint8_t> expected = {'D', 0x40, 0x09, 0x21, 0xfb, 0x3f, 0xa6, 0xde, 0xfc};
const auto result = json::to_ubjson(j);
CHECK(result == expected);
@@ -777,7 +744,8 @@
{
SECTION("unsigned integer number")
{
- std::vector<uint8_t> const vec = {'H', 'i', 0x14, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
+ std::vector<uint8_t> const vec = {'H', 'i', 0x14, '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
const auto j = json::from_ubjson(vec);
CHECK(j.is_number_unsigned());
CHECK(j.dump() == "12345678901234567890");
@@ -785,7 +753,8 @@
SECTION("signed integer number")
{
- std::vector<uint8_t> const vec = {'H', 'i', 0x13, '-', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8'};
+ std::vector<uint8_t> const vec = {'H', 'i', 0x13, '-', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', '0', '1', '2', '3', '4', '5', '6', '7', '8'};
const auto j = json::from_ubjson(vec);
CHECK(j.is_number_integer());
CHECK(j.dump() == "-123456789012345678");
@@ -793,7 +762,8 @@
SECTION("floating-point number")
{
- std::vector<uint8_t> const vec = {'H', 'i', 0x16, '3', '.', '1', '4', '1', '5', '9', '2', '6', '5', '3', '5', '8', '9', '7', '9', '3', '2', '3', '8', '4', '6'};
+ std::vector<uint8_t> const vec = {'H', 'i', 0x16, '3', '.', '1', '4', '1', '5', '9', '2', '6', '5',
+ '3', '5', '8', '9', '7', '9', '3', '2', '3', '8', '4', '6'};
const auto j = json::from_ubjson(vec);
CHECK(j.is_number_float());
CHECK(j.dump() == "3.141592653589793");
@@ -810,11 +780,20 @@
json _;
std::vector<uint8_t> const vec2 = {'H', 'i', 2, '1', 'A', '3'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vec2), "[json.exception.parse_error.115] parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1A", json::parse_error);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_ubjson(vec2),
+ "[json.exception.parse_error.115] parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1A",
+ json::parse_error);
std::vector<uint8_t> const vec3 = {'H', 'i', 2, '1', '.'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vec3), "[json.exception.parse_error.115] parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1.", json::parse_error);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_ubjson(vec3),
+ "[json.exception.parse_error.115] parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1.",
+ json::parse_error);
std::vector<uint8_t> const vec4 = {'H', 2, '1', '0'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vec4), "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON size: expected length type specification (U, i, I, l, L) after '#'; last byte: 0x02", json::parse_error);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_ubjson(vec4),
+ "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON size: expected length type specification (U, i, I, l, L) after '#'; last byte: 0x02",
+ json::parse_error);
}
SECTION("serialization")
@@ -825,7 +804,8 @@
// number will be serialized to high-precision number
const auto vec = json::to_ubjson(j);
- std::vector<uint8_t> expected = {'H', 'i', 0x14, '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'};
+ std::vector<uint8_t> expected = {'H', 'i', 0x14, '1', '1', '1', '1', '1', '1', '1', '1', '1',
+ '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'};
CHECK(vec == expected);
// roundtrip
@@ -907,14 +887,7 @@
SECTION("N = 256..32767")
{
- for (size_t N :
- {
- 256u,
- 999u,
- 1025u,
- 3333u,
- 2048u,
- 32767u})
+ for (size_t N : {256u, 999u, 1025u, 3333u, 2048u, 32767u})
{
CAPTURE(N)
@@ -945,11 +918,7 @@
SECTION("N = 65536..2147483647")
{
- for (size_t N :
- {
- 65536u,
- 77777u,
- 1048576u})
+ for (size_t N : {65536u, 77777u, 1048576u})
{
CAPTURE(N)
@@ -1073,14 +1042,7 @@
SECTION("N = 256..32767")
{
- for (std::size_t N :
- {
- 256u,
- 999u,
- 1025u,
- 3333u,
- 2048u,
- 32767u})
+ for (std::size_t N : {256u, 999u, 1025u, 3333u, 2048u, 32767u})
{
CAPTURE(N)
@@ -1114,11 +1076,7 @@
SECTION("N = 32768..2147483647")
{
- for (std::size_t N :
- {
- 32768u,
- 77777u,
- 1048576u})
+ for (std::size_t N : {32768u, 77777u, 1048576u})
{
CAPTURE(N)
@@ -1549,25 +1507,7 @@
SECTION("size=false type=false")
{
json const j = json::parse(R"({"a": {"b": {"c": {}}}})");
- std::vector<uint8_t> expected =
- {
- '{',
- 'i',
- 1,
- 'a',
- '{',
- 'i',
- 1,
- 'b',
- '{',
- 'i',
- 1,
- 'c',
- '{',
- '}',
- '}',
- '}',
- '}'};
+ std::vector<uint8_t> expected = {'{', 'i', 1, 'a', '{', 'i', 1, 'b', '{', 'i', 1, 'c', '{', '}', '}', '}', '}'};
const auto result = json::to_ubjson(j);
CHECK(result == expected);
@@ -1579,33 +1519,8 @@
SECTION("size=true type=false")
{
json const j = json::parse(R"({"a": {"b": {"c": {}}}})");
- std::vector<uint8_t> expected =
- {
- '{',
- '#',
- 'i',
- 1,
- 'i',
- 1,
- 'a',
- '{',
- '#',
- 'i',
- 1,
- 'i',
- 1,
- 'b',
- '{',
- '#',
- 'i',
- 1,
- 'i',
- 1,
- 'c',
- '{',
- '#',
- 'i',
- 0};
+ std::vector<uint8_t> expected = {'{', '#', 'i', 1, 'i', 1, 'a', '{', '#', 'i', 1, 'i', 1,
+ 'b', '{', '#', 'i', 1, 'i', 1, 'c', '{', '#', 'i', 0};
const auto result = json::to_ubjson(j, true);
CHECK(result == expected);
@@ -1617,36 +1532,8 @@
SECTION("size=true type=true")
{
json const j = json::parse(R"({"a": {"b": {"c": {}}}})");
- std::vector<uint8_t> expected =
- {
- '{',
- '$',
- '{',
- '#',
- 'i',
- 1,
- 'i',
- 1,
- 'a',
- '$',
- '{',
- '#',
- 'i',
- 1,
- 'i',
- 1,
- 'b',
- '$',
- '{',
- '#',
- 'i',
- 1,
- 'i',
- 1,
- 'c',
- '#',
- 'i',
- 0};
+ std::vector<uint8_t> expected = {'{', '$', '{', '#', 'i', 1, 'i', 1, 'a', '$', '{', '#', 'i', 1,
+ 'i', 1, 'b', '$', '{', '#', 'i', 1, 'i', 1, 'c', '#', 'i', 0};
const auto result = json::to_ubjson(j, true, true);
CHECK(result == expected);
@@ -1672,7 +1559,10 @@
SECTION("strict mode")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vec), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON value: expected end of input; last byte: 0x5A", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_ubjson(vec),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON value: expected end of input; last byte: 0x5A",
+ json::parse_error&);
}
}
@@ -1685,9 +1575,10 @@
CHECK_THROWS_AS(_ = json::from_ubjson(v_ubjson), json::out_of_range&);
json j;
- nlohmann::detail::json_sax_dom_callback_parser<json> scp(j, [](int /*unused*/, json::parse_event_t /*unused*/, const json& /*unused*/) noexcept {
- return true;
- });
+ nlohmann::detail::json_sax_dom_callback_parser<json> scp(j,
+ [](int /*unused*/, json::parse_event_t /*unused*/, const json& /*unused*/) noexcept {
+ return true;
+ });
CHECK_THROWS_AS(_ = json::sax_parse(v_ubjson, &scp, json::input_format_t::ubjson), json::out_of_range&);
}
@@ -1698,9 +1589,10 @@
CHECK_THROWS_AS(_ = json::from_ubjson(v_ubjson), json::out_of_range&);
json j;
- nlohmann::detail::json_sax_dom_callback_parser<json> scp(j, [](int /*unused*/, json::parse_event_t /*unused*/, const json& /*unused*/) noexcept {
- return true;
- });
+ nlohmann::detail::json_sax_dom_callback_parser<json> scp(j,
+ [](int /*unused*/, json::parse_event_t /*unused*/, const json& /*unused*/) noexcept {
+ return true;
+ });
CHECK_THROWS_AS(_ = json::sax_parse(v_ubjson, &scp, json::input_format_t::ubjson), json::out_of_range&);
}
}
@@ -1807,8 +1699,10 @@
std::vector<uint8_t> const v_U = {'[', '#', 'i', 2, 'U', 0xFF, 'U', 0xFF};
std::vector<uint8_t> const v_I = {'[', '#', 'i', 2, 'I', 0x7F, 0xFF, 'I', 0x7F, 0xFF};
std::vector<uint8_t> const v_l = {'[', '#', 'i', 2, 'l', 0x7F, 0xFF, 0xFF, 0xFF, 'l', 0x7F, 0xFF, 0xFF, 0xFF};
- std::vector<uint8_t> const v_L = {'[', '#', 'i', 2, 'L', 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 'L', 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
- std::vector<uint8_t> const v_D = {'[', '#', 'i', 2, 'D', 0x40, 0x09, 0x21, 0xfb, 0x4d, 0x12, 0xd8, 0x4a, 'D', 0x40, 0x09, 0x21, 0xfb, 0x4d, 0x12, 0xd8, 0x4a};
+ std::vector<uint8_t> const v_L = {'[', '#', 'i', 2, 'L', 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 'L', 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
+ std::vector<uint8_t> const v_D = {'[', '#', 'i', 2, 'D', 0x40, 0x09, 0x21, 0xfb, 0x4d, 0x12,
+ 0xd8, 0x4a, 'D', 0x40, 0x09, 0x21, 0xfb, 0x4d, 0x12, 0xd8, 0x4a};
std::vector<uint8_t> const v_S = {'[', '#', 'i', 2, 'S', 'i', 1, 'a', 'S', 'i', 1, 'a'};
std::vector<uint8_t> const v_C = {'[', '#', 'i', 2, 'C', 'a', 'C', 'a'};
@@ -1851,8 +1745,10 @@
std::vector<uint8_t> const v_U = {'[', '$', 'U', '#', 'i', 2, 0xFF, 0xFF};
std::vector<uint8_t> const v_I = {'[', '$', 'I', '#', 'i', 2, 0x7F, 0xFF, 0x7F, 0xFF};
std::vector<uint8_t> const v_l = {'[', '$', 'l', '#', 'i', 2, 0x7F, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF};
- std::vector<uint8_t> const v_L = {'[', '$', 'L', '#', 'i', 2, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
- std::vector<uint8_t> const v_D = {'[', '$', 'D', '#', 'i', 2, 0x40, 0x09, 0x21, 0xfb, 0x4d, 0x12, 0xd8, 0x4a, 0x40, 0x09, 0x21, 0xfb, 0x4d, 0x12, 0xd8, 0x4a};
+ std::vector<uint8_t> const v_L = {'[', '$', 'L', '#', 'i', 2, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
+ std::vector<uint8_t> const v_D = {'[', '$', 'D', '#', 'i', 2, 0x40, 0x09, 0x21, 0xfb, 0x4d,
+ 0x12, 0xd8, 0x4a, 0x40, 0x09, 0x21, 0xfb, 0x4d, 0x12, 0xd8, 0x4a};
std::vector<uint8_t> const v_S = {'[', '$', 'S', '#', 'i', 2, 'i', 1, 'a', 'i', 1, 'a'};
std::vector<uint8_t> const v_C = {'[', '$', 'C', '#', 'i', 2, 'a', 'a'};
@@ -1893,7 +1789,9 @@
SECTION("empty byte vector")
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(std::vector<uint8_t>()), "[json.exception.parse_error.110] parse error at byte 1: syntax error while parsing UBJSON value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(std::vector<uint8_t>()),
+ "[json.exception.parse_error.110] parse error at byte 1: syntax error while parsing UBJSON value: unexpected end of input",
+ json::parse_error&);
}
SECTION("char")
@@ -1902,14 +1800,19 @@
{
std::vector<uint8_t> const v = {'C'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON char: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON char: unexpected end of input",
+ json::parse_error&);
}
SECTION("byte out of range")
{
std::vector<uint8_t> const v = {'C', 130};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v), "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON char: byte after 'C' must be in range 0x00..0x7F; last byte: 0x82", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_ubjson(v),
+ "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON char: byte after 'C' must be in range 0x00..0x7F; last byte: 0x82",
+ json::parse_error&);
}
}
@@ -1919,14 +1822,19 @@
{
std::vector<uint8_t> const v = {'S'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON value: unexpected end of input",
+ json::parse_error&);
}
SECTION("invalid byte")
{
std::vector<uint8_t> const v = {'S', '1', 'a'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v), "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON string: expected length type specification (U, i, I, l, L); last byte: 0x31", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_ubjson(v),
+ "[json.exception.parse_error.113] parse error at byte 2: syntax error while parsing UBJSON string: expected length type specification (U, i, I, l, L); last byte: 0x31",
+ json::parse_error&);
}
}
@@ -1936,7 +1844,10 @@
{
std::vector<uint8_t> const v = {'[', '$', 'i', 2};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v), "[json.exception.parse_error.112] parse error at byte 4: syntax error while parsing UBJSON size: expected '#' after type information; last byte: 0x02", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_ubjson(v),
+ "[json.exception.parse_error.112] parse error at byte 4: syntax error while parsing UBJSON size: expected '#' after type information; last byte: 0x02",
+ json::parse_error&);
}
}
@@ -1944,15 +1855,21 @@
{
std::vector<uint8_t> const vS = {'S'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vS), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vS),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(vS, true, false).is_discarded());
std::vector<uint8_t> const v = {'S', 'i', '2', 'a'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v), "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing UBJSON string: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v),
+ "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing UBJSON string: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(v, true, false).is_discarded());
std::vector<uint8_t> const vC = {'C'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vC), "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON char: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vC),
+ "[json.exception.parse_error.110] parse error at byte 2: syntax error while parsing UBJSON char: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(vC, true, false).is_discarded());
}
@@ -1960,27 +1877,40 @@
{
std::vector<uint8_t> const vU = {'[', '#', 'U'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vU), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing UBJSON number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vU),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing UBJSON number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(vU, true, false).is_discarded());
std::vector<uint8_t> const vi = {'[', '#', 'i'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vi), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing UBJSON number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vi),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing UBJSON number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(vi, true, false).is_discarded());
std::vector<uint8_t> const vI = {'[', '#', 'I'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vI), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing UBJSON number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vI),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing UBJSON number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(vI, true, false).is_discarded());
std::vector<uint8_t> const vl = {'[', '#', 'l'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vl), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing UBJSON number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vl),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing UBJSON number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(vl, true, false).is_discarded());
std::vector<uint8_t> const vL = {'[', '#', 'L'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vL), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing UBJSON number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vL),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing UBJSON number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(vL, true, false).is_discarded());
std::vector<uint8_t> const v0 = {'[', '#', 'T', ']'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v0), "[json.exception.parse_error.113] parse error at byte 3: syntax error while parsing UBJSON size: expected length type specification (U, i, I, l, L) after '#'; last byte: 0x54", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_ubjson(v0),
+ "[json.exception.parse_error.113] parse error at byte 3: syntax error while parsing UBJSON size: expected length type specification (U, i, I, l, L) after '#'; last byte: 0x54",
+ json::parse_error&);
CHECK(json::from_ubjson(v0, true, false).is_discarded());
}
@@ -1988,15 +1918,21 @@
{
std::vector<uint8_t> const v0 = {'[', '$'};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v0), "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing UBJSON type: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v0),
+ "[json.exception.parse_error.110] parse error at byte 3: syntax error while parsing UBJSON type: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(v0, true, false).is_discarded());
std::vector<uint8_t> const vi = {'[', '$', '#'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vi), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing UBJSON value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vi),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing UBJSON value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(vi, true, false).is_discarded());
std::vector<uint8_t> const vT = {'[', '$', 'T'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vT), "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing UBJSON value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vT),
+ "[json.exception.parse_error.110] parse error at byte 4: syntax error while parsing UBJSON value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(vT, true, false).is_discarded());
}
@@ -2004,15 +1940,21 @@
{
std::vector<uint8_t> const vST = {'[', '$', 'i', '#', 'i', 2, 1};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vST), "[json.exception.parse_error.110] parse error at byte 8: syntax error while parsing UBJSON number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vST),
+ "[json.exception.parse_error.110] parse error at byte 8: syntax error while parsing UBJSON number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(vST, true, false).is_discarded());
std::vector<uint8_t> const vS = {'[', '#', 'i', 2, 'i', 1};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vS), "[json.exception.parse_error.110] parse error at byte 7: syntax error while parsing UBJSON value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vS),
+ "[json.exception.parse_error.110] parse error at byte 7: syntax error while parsing UBJSON value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(vS, true, false).is_discarded());
std::vector<uint8_t> const v = {'[', 'i', 2, 'i', 1};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v), "[json.exception.parse_error.110] parse error at byte 6: syntax error while parsing UBJSON value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v),
+ "[json.exception.parse_error.110] parse error at byte 6: syntax error while parsing UBJSON value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(v, true, false).is_discarded());
}
@@ -2020,35 +1962,52 @@
{
std::vector<uint8_t> const vST = {'{', '$', 'i', '#', 'i', 2, 'i', 1, 'a', 1};
json _;
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vST), "[json.exception.parse_error.110] parse error at byte 11: syntax error while parsing UBJSON value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vST),
+ "[json.exception.parse_error.110] parse error at byte 11: syntax error while parsing UBJSON value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(vST, true, false).is_discarded());
std::vector<uint8_t> const vT = {'{', '$', 'i', 'i', 1, 'a', 1};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vT), "[json.exception.parse_error.112] parse error at byte 4: syntax error while parsing UBJSON size: expected '#' after type information; last byte: 0x69", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::from_ubjson(vT),
+ "[json.exception.parse_error.112] parse error at byte 4: syntax error while parsing UBJSON size: expected '#' after type information; last byte: 0x69",
+ json::parse_error&);
CHECK(json::from_ubjson(vT, true, false).is_discarded());
std::vector<uint8_t> const vS = {'{', '#', 'i', 2, 'i', 1, 'a', 'i', 1};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vS), "[json.exception.parse_error.110] parse error at byte 10: syntax error while parsing UBJSON value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vS),
+ "[json.exception.parse_error.110] parse error at byte 10: syntax error while parsing UBJSON value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(vS, true, false).is_discarded());
std::vector<uint8_t> const v = {'{', 'i', 1, 'a', 'i', 1};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v), "[json.exception.parse_error.110] parse error at byte 7: syntax error while parsing UBJSON value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v),
+ "[json.exception.parse_error.110] parse error at byte 7: syntax error while parsing UBJSON value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(v, true, false).is_discarded());
std::vector<uint8_t> const v2 = {'{', 'i', 1, 'a', 'i', 1, 'i'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v2), "[json.exception.parse_error.110] parse error at byte 8: syntax error while parsing UBJSON number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v2),
+ "[json.exception.parse_error.110] parse error at byte 8: syntax error while parsing UBJSON number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(v2, true, false).is_discarded());
std::vector<uint8_t> const v3 = {'{', 'i', 1, 'a'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v3), "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing UBJSON value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(v3),
+ "[json.exception.parse_error.110] parse error at byte 5: syntax error while parsing UBJSON value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(v3, true, false).is_discarded());
std::vector<uint8_t> const vST1 = {'{', '$', 'd', '#', 'i', 2, 'i', 1, 'a'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vST1), "[json.exception.parse_error.110] parse error at byte 10: syntax error while parsing UBJSON number: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vST1),
+ "[json.exception.parse_error.110] parse error at byte 10: syntax error while parsing UBJSON number: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(vST1, true, false).is_discarded());
std::vector<uint8_t> const vST2 = {'{', '#', 'i', 2, 'i', 1, 'a'};
- CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vST2), "[json.exception.parse_error.110] parse error at byte 8: syntax error while parsing UBJSON value: unexpected end of input", json::parse_error&);
+ CHECK_THROWS_WITH_AS(_ = json::from_ubjson(vST2),
+ "[json.exception.parse_error.110] parse error at byte 8: syntax error while parsing UBJSON value: unexpected end of input",
+ json::parse_error&);
CHECK(json::from_ubjson(vST2, true, false).is_discarded());
}
}
@@ -2088,7 +2047,8 @@
SECTION("array of L")
{
json const j = {5000000000, -5000000000};
- std::vector<uint8_t> expected = {'[', '$', 'L', '#', 'i', 2, 0x00, 0x00, 0x00, 0x01, 0x2A, 0x05, 0xF2, 0x00, 0xFF, 0xFF, 0xFF, 0xFE, 0xD5, 0xFA, 0x0E, 0x00};
+ std::vector<uint8_t> expected = {'[', '$', 'L', '#', 'i', 2, 0x00, 0x00, 0x00, 0x01, 0x2A,
+ 0x05, 0xF2, 0x00, 0xFF, 0xFF, 0xFF, 0xFE, 0xD5, 0xFA, 0x0E, 0x00};
CHECK(json::to_ubjson(j, true, true) == expected);
}
}
@@ -2134,8 +2094,10 @@
SECTION("array of L")
{
json const j = {5000000000u, 5000000001u};
- std::vector<uint8_t> expected = {'[', '$', 'L', '#', 'i', 2, 0x00, 0x00, 0x00, 0x01, 0x2A, 0x05, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2A, 0x05, 0xF2, 0x01};
- std::vector<uint8_t> expected_size = {'[', '#', 'i', 2, 'L', 0x00, 0x00, 0x00, 0x01, 0x2A, 0x05, 0xF2, 0x00, 'L', 0x00, 0x00, 0x00, 0x01, 0x2A, 0x05, 0xF2, 0x01};
+ std::vector<uint8_t> expected = {'[', '$', 'L', '#', 'i', 2, 0x00, 0x00, 0x00, 0x01, 0x2A,
+ 0x05, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x01, 0x2A, 0x05, 0xF2, 0x01};
+ std::vector<uint8_t> expected_size = {'[', '#', 'i', 2, 'L', 0x00, 0x00, 0x00, 0x01, 0x2A, 0x05,
+ 0xF2, 0x00, 'L', 0x00, 0x00, 0x00, 0x01, 0x2A, 0x05, 0xF2, 0x01};
CHECK(json::to_ubjson(j, true, true) == expected);
CHECK(json::to_ubjson(j, true) == expected_size);
}
@@ -2164,7 +2126,8 @@
{
json const j = {"foo", "bar", "baz"};
std::vector<uint8_t> const v = {'[', 'S', 'i', 3, 'f', 'o', 'o', 'S', 'i', 3, 'b', 'a', 'r', 'S', 'i', 3, 'b', 'a', 'z', ']'};
- std::vector<uint8_t> const v2 = {'[', 'S', 'i', 3, 'f', 'o', 'o', 'N', 'S', 'i', 3, 'b', 'a', 'r', 'N', 'N', 'N', 'S', 'i', 3, 'b', 'a', 'z', 'N', 'N', ']'};
+ std::vector<uint8_t> const v2 = {'[', 'S', 'i', 3, 'f', 'o', 'o', 'N', 'S', 'i', 3, 'b', 'a',
+ 'r', 'N', 'N', 'N', 'S', 'i', 3, 'b', 'a', 'z', 'N', 'N', ']'};
CHECK(json::to_ubjson(j) == v);
CHECK(json::from_ubjson(v) == j);
CHECK(json::from_ubjson(v2) == j);
@@ -2173,96 +2136,19 @@
SECTION("Boolean Types")
{
json const j = {{"authorized", true}, {"verified", false}};
- std::vector<uint8_t> const v = {'{', 'i', 10, 'a', 'u', 't', 'h', 'o', 'r', 'i', 'z', 'e', 'd', 'T', 'i', 8, 'v', 'e', 'r', 'i', 'f', 'i', 'e', 'd', 'F', '}'};
+ std::vector<uint8_t> const v = {'{', 'i', 10, 'a', 'u', 't', 'h', 'o', 'r', 'i', 'z', 'e', 'd',
+ 'T', 'i', 8, 'v', 'e', 'r', 'i', 'f', 'i', 'e', 'd', 'F', '}'};
CHECK(json::to_ubjson(j) == v);
CHECK(json::from_ubjson(v) == j);
}
SECTION("Numeric Types")
{
- json const j =
- {
- {"int8", 16},
- {"uint8", 255},
- {"int16", 32767},
- {"int32", 2147483647},
- {"int64", 9223372036854775807},
- {"float64", 113243.7863123}};
- std::vector<uint8_t> const v = {'{',
- 'i',
- 7,
- 'f',
- 'l',
- 'o',
- 'a',
- 't',
- '6',
- '4',
- 'D',
- 0x40,
- 0xfb,
- 0xa5,
- 0xbc,
- 0x94,
- 0xbc,
- 0x34,
- 0xcf,
- 'i',
- 5,
- 'i',
- 'n',
- 't',
- '1',
- '6',
- 'I',
- 0x7f,
- 0xff,
- 'i',
- 5,
- 'i',
- 'n',
- 't',
- '3',
- '2',
- 'l',
- 0x7f,
- 0xff,
- 0xff,
- 0xff,
- 'i',
- 5,
- 'i',
- 'n',
- 't',
- '6',
- '4',
- 'L',
- 0x7f,
- 0xff,
- 0xff,
- 0xff,
- 0xff,
- 0xff,
- 0xff,
- 0xff,
- 'i',
- 4,
- 'i',
- 'n',
- 't',
- '8',
- 'i',
- 16,
- 'i',
- 5,
- 'u',
- 'i',
- 'n',
- 't',
- '8',
- 'U',
- 0xff,
- '}'};
+ json const j = {{"int8", 16}, {"uint8", 255}, {"int16", 32767}, {"int32", 2147483647}, {"int64", 9223372036854775807}, {"float64", 113243.7863123}};
+ std::vector<uint8_t> const v = {'{', 'i', 7, 'f', 'l', 'o', 'a', 't', '6', '4', 'D', 0x40, 0xfb, 0xa5, 0xbc, 0x94, 0xbc, 0x34, 0xcf,
+ 'i', 5, 'i', 'n', 't', '1', '6', 'I', 0x7f, 0xff, 'i', 5, 'i', 'n', 't', '3', '2', 'l', 0x7f,
+ 0xff, 0xff, 0xff, 'i', 5, 'i', 'n', 't', '6', '4', 'L', 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 'i', 4, 'i', 'n', 't', '8', 'i', 16, 'i', 5, 'u', 'i', 'n', 't', '8', 'U', 0xff, '}'};
CHECK(json::to_ubjson(j) == v);
CHECK(json::from_ubjson(v) == j);
}
@@ -2308,7 +2194,8 @@
{
// note the float has been replaced by a double
json const j = {nullptr, true, false, 4782345193, 153.132, "ham"};
- std::vector<uint8_t> const v = {'[', 'Z', 'T', 'F', 'L', 0x00, 0x00, 0x00, 0x01, 0x1D, 0x0C, 0xCB, 0xE9, 'D', 0x40, 0x63, 0x24, 0x39, 0x58, 0x10, 0x62, 0x4e, 'S', 'i', 3, 'h', 'a', 'm', ']'};
+ std::vector<uint8_t> const v = {'[', 'Z', 'T', 'F', 'L', 0x00, 0x00, 0x00, 0x01, 0x1D, 0x0C, 0xCB, 0xE9, 'D', 0x40,
+ 0x63, 0x24, 0x39, 0x58, 0x10, 0x62, 0x4e, 'S', 'i', 3, 'h', 'a', 'm', ']'};
CHECK(json::to_ubjson(j) == v);
CHECK(json::from_ubjson(v) == j);
}
@@ -2317,7 +2204,8 @@
{
// note the float has been replaced by a double
json const j = {nullptr, true, false, 4782345193, 153.132, "ham"};
- std::vector<uint8_t> const v = {'[', '#', 'i', 6, 'Z', 'T', 'F', 'L', 0x00, 0x00, 0x00, 0x01, 0x1D, 0x0C, 0xCB, 0xE9, 'D', 0x40, 0x63, 0x24, 0x39, 0x58, 0x10, 0x62, 0x4e, 'S', 'i', 3, 'h', 'a', 'm'};
+ std::vector<uint8_t> const v = {'[', '#', 'i', 6, 'Z', 'T', 'F', 'L', 0x00, 0x00, 0x00, 0x01, 0x1D, 0x0C, 0xCB, 0xE9,
+ 'D', 0x40, 0x63, 0x24, 0x39, 0x58, 0x10, 0x62, 0x4e, 'S', 'i', 3, 'h', 'a', 'm'};
CHECK(json::to_ubjson(j, true) == v);
CHECK(json::from_ubjson(v) == j);
}
@@ -2326,7 +2214,8 @@
{
// note the float has been replaced by a double
json const j = {nullptr, true, false, 4782345193, 153.132, "ham"};
- std::vector<uint8_t> const v = {'[', '#', 'i', 6, 'Z', 'T', 'F', 'L', 0x00, 0x00, 0x00, 0x01, 0x1D, 0x0C, 0xCB, 0xE9, 'D', 0x40, 0x63, 0x24, 0x39, 0x58, 0x10, 0x62, 0x4e, 'S', 'i', 3, 'h', 'a', 'm'};
+ std::vector<uint8_t> const v = {'[', '#', 'i', 6, 'Z', 'T', 'F', 'L', 0x00, 0x00, 0x00, 0x01, 0x1D, 0x0C, 0xCB, 0xE9,
+ 'D', 0x40, 0x63, 0x24, 0x39, 0x58, 0x10, 0x62, 0x4e, 'S', 'i', 3, 'h', 'a', 'm'};
CHECK(json::to_ubjson(j, true, true) == v);
CHECK(json::from_ubjson(v) == j);
}
@@ -2336,30 +2225,33 @@
{
SECTION("size=false type=false")
{
- json const j =
- {
- {"post", {{"id", 1137}, {"author", "rkalla"}, {"timestamp", 1364482090592}, {"body", "I totally agree!"}}}};
- std::vector<uint8_t> const v = {'{', 'i', 4, 'p', 'o', 's', 't', '{', 'i', 6, 'a', 'u', 't', 'h', 'o', 'r', 'S', 'i', 6, 'r', 'k', 'a', 'l', 'l', 'a', 'i', 4, 'b', 'o', 'd', 'y', 'S', 'i', 16, 'I', ' ', 't', 'o', 't', 'a', 'l', 'l', 'y', ' ', 'a', 'g', 'r', 'e', 'e', '!', 'i', 2, 'i', 'd', 'I', 0x04, 0x71, 'i', 9, 't', 'i', 'm', 'e', 's', 't', 'a', 'm', 'p', 'L', 0x00, 0x00, 0x01, 0x3D, 0xB1, 0x78, 0x66, 0x60, '}', '}'};
+ json const j = {{"post", {{"id", 1137}, {"author", "rkalla"}, {"timestamp", 1364482090592}, {"body", "I totally agree!"}}}};
+ std::vector<uint8_t> const v = {'{', 'i', 4, 'p', 'o', 's', 't', '{', 'i', 6, 'a', 'u', 't', 'h', 'o', 'r', 'S', 'i', 6, 'r',
+ 'k', 'a', 'l', 'l', 'a', 'i', 4, 'b', 'o', 'd', 'y', 'S', 'i', 16, 'I', ' ', 't', 'o', 't', 'a',
+ 'l', 'l', 'y', ' ', 'a', 'g', 'r', 'e', 'e', '!', 'i', 2, 'i', 'd', 'I', 0x04, 0x71, 'i', 9, 't',
+ 'i', 'm', 'e', 's', 't', 'a', 'm', 'p', 'L', 0x00, 0x00, 0x01, 0x3D, 0xB1, 0x78, 0x66, 0x60, '}', '}'};
CHECK(json::to_ubjson(j) == v);
CHECK(json::from_ubjson(v) == j);
}
SECTION("size=true type=false")
{
- json const j =
- {
- {"post", {{"id", 1137}, {"author", "rkalla"}, {"timestamp", 1364482090592}, {"body", "I totally agree!"}}}};
- std::vector<uint8_t> const v = {'{', '#', 'i', 1, 'i', 4, 'p', 'o', 's', 't', '{', '#', 'i', 4, 'i', 6, 'a', 'u', 't', 'h', 'o', 'r', 'S', 'i', 6, 'r', 'k', 'a', 'l', 'l', 'a', 'i', 4, 'b', 'o', 'd', 'y', 'S', 'i', 16, 'I', ' ', 't', 'o', 't', 'a', 'l', 'l', 'y', ' ', 'a', 'g', 'r', 'e', 'e', '!', 'i', 2, 'i', 'd', 'I', 0x04, 0x71, 'i', 9, 't', 'i', 'm', 'e', 's', 't', 'a', 'm', 'p', 'L', 0x00, 0x00, 0x01, 0x3D, 0xB1, 0x78, 0x66, 0x60};
+ json const j = {{"post", {{"id", 1137}, {"author", "rkalla"}, {"timestamp", 1364482090592}, {"body", "I totally agree!"}}}};
+ std::vector<uint8_t> const v = {'{', '#', 'i', 1, 'i', 4, 'p', 'o', 's', 't', '{', '#', 'i', 4, 'i', 6, 'a', 'u', 't', 'h', 'o',
+ 'r', 'S', 'i', 6, 'r', 'k', 'a', 'l', 'l', 'a', 'i', 4, 'b', 'o', 'd', 'y', 'S', 'i', 16, 'I', ' ',
+ 't', 'o', 't', 'a', 'l', 'l', 'y', ' ', 'a', 'g', 'r', 'e', 'e', '!', 'i', 2, 'i', 'd', 'I', 0x04, 0x71,
+ 'i', 9, 't', 'i', 'm', 'e', 's', 't', 'a', 'm', 'p', 'L', 0x00, 0x00, 0x01, 0x3D, 0xB1, 0x78, 0x66, 0x60};
CHECK(json::to_ubjson(j, true) == v);
CHECK(json::from_ubjson(v) == j);
}
SECTION("size=true type=true")
{
- json const j =
- {
- {"post", {{"id", 1137}, {"author", "rkalla"}, {"timestamp", 1364482090592}, {"body", "I totally agree!"}}}};
- std::vector<uint8_t> const v = {'{', '$', '{', '#', 'i', 1, 'i', 4, 'p', 'o', 's', 't', '#', 'i', 4, 'i', 6, 'a', 'u', 't', 'h', 'o', 'r', 'S', 'i', 6, 'r', 'k', 'a', 'l', 'l', 'a', 'i', 4, 'b', 'o', 'd', 'y', 'S', 'i', 16, 'I', ' ', 't', 'o', 't', 'a', 'l', 'l', 'y', ' ', 'a', 'g', 'r', 'e', 'e', '!', 'i', 2, 'i', 'd', 'I', 0x04, 0x71, 'i', 9, 't', 'i', 'm', 'e', 's', 't', 'a', 'm', 'p', 'L', 0x00, 0x00, 0x01, 0x3D, 0xB1, 0x78, 0x66, 0x60};
+ json const j = {{"post", {{"id", 1137}, {"author", "rkalla"}, {"timestamp", 1364482090592}, {"body", "I totally agree!"}}}};
+ std::vector<uint8_t> const v = {'{', '$', '{', '#', 'i', 1, 'i', 4, 'p', 'o', 's', 't', '#', 'i', 4, 'i', 6, 'a', 'u', 't', 'h',
+ 'o', 'r', 'S', 'i', 6, 'r', 'k', 'a', 'l', 'l', 'a', 'i', 4, 'b', 'o', 'd', 'y', 'S', 'i', 16, 'I',
+ ' ', 't', 'o', 't', 'a', 'l', 'l', 'y', ' ', 'a', 'g', 'r', 'e', 'e', '!', 'i', 2, 'i', 'd', 'I', 0x04,
+ 0x71, 'i', 9, 't', 'i', 'm', 'e', 's', 't', 'a', 'm', 'p', 'L', 0x00, 0x00, 0x01, 0x3D, 0xB1, 0x78, 0x66, 0x60};
CHECK(json::to_ubjson(j, true, true) == v);
CHECK(json::from_ubjson(v) == j);
}
@@ -2373,53 +2265,9 @@
{
// note the floats have been replaced by doubles
json const j = {29.97, 31.13, 67.0, 2.113, 23.888};
- std::vector<uint8_t> const v = {'[',
- 'D',
- 0x40,
- 0x3d,
- 0xf8,
- 0x51,
- 0xeb,
- 0x85,
- 0x1e,
- 0xb8,
- 'D',
- 0x40,
- 0x3f,
- 0x21,
- 0x47,
- 0xae,
- 0x14,
- 0x7a,
- 0xe1,
- 'D',
- 0x40,
- 0x50,
- 0xc0,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 'D',
- 0x40,
- 0x00,
- 0xe7,
- 0x6c,
- 0x8b,
- 0x43,
- 0x95,
- 0x81,
- 'D',
- 0x40,
- 0x37,
- 0xe3,
- 0x53,
- 0xf7,
- 0xce,
- 0xd9,
- 0x17,
- ']'};
+ std::vector<uint8_t> const v = {'[', 'D', 0x40, 0x3d, 0xf8, 0x51, 0xeb, 0x85, 0x1e, 0xb8, 'D', 0x40, 0x3f, 0x21, 0x47, 0xae,
+ 0x14, 0x7a, 0xe1, 'D', 0x40, 0x50, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 'D', 0x40, 0x00, 0xe7,
+ 0x6c, 0x8b, 0x43, 0x95, 0x81, 'D', 0x40, 0x37, 0xe3, 0x53, 0xf7, 0xce, 0xd9, 0x17, ']'};
CHECK(json::to_ubjson(j) == v);
CHECK(json::from_ubjson(v) == j);
}
@@ -2428,7 +2276,9 @@
{
// note the floats have been replaced by doubles
json const j = {29.97, 31.13, 67.0, 2.113, 23.888};
- std::vector<uint8_t> const v = {'[', '#', 'i', 5, 'D', 0x40, 0x3d, 0xf8, 0x51, 0xeb, 0x85, 0x1e, 0xb8, 'D', 0x40, 0x3f, 0x21, 0x47, 0xae, 0x14, 0x7a, 0xe1, 'D', 0x40, 0x50, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 'D', 0x40, 0x00, 0xe7, 0x6c, 0x8b, 0x43, 0x95, 0x81, 'D', 0x40, 0x37, 0xe3, 0x53, 0xf7, 0xce, 0xd9, 0x17};
+ std::vector<uint8_t> const v = {'[', '#', 'i', 5, 'D', 0x40, 0x3d, 0xf8, 0x51, 0xeb, 0x85, 0x1e, 0xb8, 'D', 0x40, 0x3f, 0x21,
+ 0x47, 0xae, 0x14, 0x7a, 0xe1, 'D', 0x40, 0x50, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 'D', 0x40, 0x00,
+ 0xe7, 0x6c, 0x8b, 0x43, 0x95, 0x81, 'D', 0x40, 0x37, 0xe3, 0x53, 0xf7, 0xce, 0xd9, 0x17};
CHECK(json::to_ubjson(j, true) == v);
CHECK(json::from_ubjson(v) == j);
}
@@ -2437,7 +2287,9 @@
{
// note the floats have been replaced by doubles
json const j = {29.97, 31.13, 67.0, 2.113, 23.888};
- std::vector<uint8_t> const v = {'[', '$', 'D', '#', 'i', 5, 0x40, 0x3d, 0xf8, 0x51, 0xeb, 0x85, 0x1e, 0xb8, 0x40, 0x3f, 0x21, 0x47, 0xae, 0x14, 0x7a, 0xe1, 0x40, 0x50, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0xe7, 0x6c, 0x8b, 0x43, 0x95, 0x81, 0x40, 0x37, 0xe3, 0x53, 0xf7, 0xce, 0xd9, 0x17};
+ std::vector<uint8_t> const v = {'[', '$', 'D', '#', 'i', 5, 0x40, 0x3d, 0xf8, 0x51, 0xeb, 0x85, 0x1e, 0xb8, 0x40, 0x3f,
+ 0x21, 0x47, 0xae, 0x14, 0x7a, 0xe1, 0x40, 0x50, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
+ 0xe7, 0x6c, 0x8b, 0x43, 0x95, 0x81, 0x40, 0x37, 0xe3, 0x53, 0xf7, 0xce, 0xd9, 0x17};
CHECK(json::to_ubjson(j, true, true) == v);
CHECK(json::from_ubjson(v) == j);
}
@@ -2449,51 +2301,9 @@
{
// note the floats have been replaced by doubles
json const j = {{"lat", 29.976}, {"long", 31.131}, {"alt", 67.0}};
- std::vector<uint8_t> const v = {'{',
- 'i',
- 3,
- 'a',
- 'l',
- 't',
- 'D',
- 0x40,
- 0x50,
- 0xc0,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 0x00,
- 'i',
- 3,
- 'l',
- 'a',
- 't',
- 'D',
- 0x40,
- 0x3d,
- 0xf9,
- 0xdb,
- 0x22,
- 0xd0,
- 0xe5,
- 0x60,
- 'i',
- 4,
- 'l',
- 'o',
- 'n',
- 'g',
- 'D',
- 0x40,
- 0x3f,
- 0x21,
- 0x89,
- 0x37,
- 0x4b,
- 0xc6,
- 0xa8,
- '}'};
+ std::vector<uint8_t> const v = {'{', 'i', 3, 'a', 'l', 't', 'D', 0x40, 0x50, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 'i', 3, 'l', 'a', 't', 'D', 0x40, 0x3d, 0xf9, 0xdb, 0x22, 0xd0, 0xe5, 0x60, 'i',
+ 4, 'l', 'o', 'n', 'g', 'D', 0x40, 0x3f, 0x21, 0x89, 0x37, 0x4b, 0xc6, 0xa8, '}'};
CHECK(json::to_ubjson(j) == v);
CHECK(json::from_ubjson(v) == j);
}
@@ -2502,7 +2312,9 @@
{
// note the floats have been replaced by doubles
json const j = {{"lat", 29.976}, {"long", 31.131}, {"alt", 67.0}};
- std::vector<uint8_t> const v = {'{', '#', 'i', 3, 'i', 3, 'a', 'l', 't', 'D', 0x40, 0x50, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 'i', 3, 'l', 'a', 't', 'D', 0x40, 0x3d, 0xf9, 0xdb, 0x22, 0xd0, 0xe5, 0x60, 'i', 4, 'l', 'o', 'n', 'g', 'D', 0x40, 0x3f, 0x21, 0x89, 0x37, 0x4b, 0xc6, 0xa8};
+ std::vector<uint8_t> const v = {'{', '#', 'i', 3, 'i', 3, 'a', 'l', 't', 'D', 0x40, 0x50, 0xc0, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 'i', 3, 'l', 'a', 't', 'D', 0x40, 0x3d, 0xf9, 0xdb, 0x22, 0xd0, 0xe5, 0x60,
+ 'i', 4, 'l', 'o', 'n', 'g', 'D', 0x40, 0x3f, 0x21, 0x89, 0x37, 0x4b, 0xc6, 0xa8};
CHECK(json::to_ubjson(j, true) == v);
CHECK(json::from_ubjson(v) == j);
}
@@ -2511,7 +2323,9 @@
{
// note the floats have been replaced by doubles
json const j = {{"lat", 29.976}, {"long", 31.131}, {"alt", 67.0}};
- std::vector<uint8_t> const v = {'{', '$', 'D', '#', 'i', 3, 'i', 3, 'a', 'l', 't', 0x40, 0x50, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 'i', 3, 'l', 'a', 't', 0x40, 0x3d, 0xf9, 0xdb, 0x22, 0xd0, 0xe5, 0x60, 'i', 4, 'l', 'o', 'n', 'g', 0x40, 0x3f, 0x21, 0x89, 0x37, 0x4b, 0xc6, 0xa8};
+ std::vector<uint8_t> const v = {'{', '$', 'D', '#', 'i', 3, 'i', 3, 'a', 'l', 't', 0x40, 0x50, 0xc0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 'i', 3, 'l', 'a', 't', 0x40, 0x3d, 0xf9, 0xdb, 0x22, 0xd0, 0xe5, 0x60,
+ 'i', 4, 'l', 'o', 'n', 'g', 0x40, 0x3f, 0x21, 0x89, 0x37, 0x4b, 0xc6, 0xa8};
CHECK(json::to_ubjson(j, true, true) == v);
CHECK(json::from_ubjson(v) == j);
}
@@ -2527,7 +2341,8 @@
SECTION("Object")
{
- std::vector<uint8_t> const v = {'{', '$', 'Z', '#', 'i', 3, 'i', 4, 'n', 'a', 'm', 'e', 'i', 8, 'p', 'a', 's', 's', 'w', 'o', 'r', 'd', 'i', 5, 'e', 'm', 'a', 'i', 'l'};
+ std::vector<uint8_t> const v = {'{', '$', 'Z', '#', 'i', 3, 'i', 4, 'n', 'a', 'm', 'e', 'i', 8, 'p',
+ 'a', 's', 's', 'w', 'o', 'r', 'd', 'i', 5, 'e', 'm', 'a', 'i', 'l'};
CHECK(json::from_ubjson(v) == json({{"name", nullptr}, {"password", nullptr}, {"email", nullptr}}));
}
}
@@ -2538,24 +2353,7 @@
TEST_CASE("all UBJSON first bytes")
{
// these bytes will fail immediately with exception parse_error.112
- std::set<uint8_t> supported =
- {
- 'T',
- 'F',
- 'Z',
- 'U',
- 'i',
- 'I',
- 'l',
- 'L',
- 'd',
- 'D',
- 'C',
- 'S',
- '[',
- '{',
- 'N',
- 'H'};
+ std::set<uint8_t> supported = {'T', 'F', 'Z', 'U', 'i', 'I', 'l', 'L', 'd', 'D', 'C', 'S', '[', '{', 'N', 'H'};
for (auto i = 0; i < 256; ++i)
{
@@ -2588,50 +2386,48 @@
{
SECTION("input from self-generated UBJSON files")
{
- for (std::string filename :
- {
- TEST_DATA_DIRECTORY "/json_nlohmann_tests/all_unicode.json",
- TEST_DATA_DIRECTORY "/json.org/1.json",
- TEST_DATA_DIRECTORY "/json.org/2.json",
- TEST_DATA_DIRECTORY "/json.org/3.json",
- TEST_DATA_DIRECTORY "/json.org/4.json",
- TEST_DATA_DIRECTORY "/json.org/5.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip01.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip02.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip03.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip04.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip05.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip06.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip07.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip08.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip09.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip10.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip11.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip12.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip13.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip14.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip15.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip16.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip17.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip18.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip19.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip20.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip21.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip22.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip23.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip24.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip25.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip26.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip27.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip28.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip29.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip30.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip31.json",
- TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip32.json",
- TEST_DATA_DIRECTORY "/json_testsuite/sample.json",
- TEST_DATA_DIRECTORY "/json_tests/pass1.json",
- TEST_DATA_DIRECTORY "/json_tests/pass2.json",
- TEST_DATA_DIRECTORY "/json_tests/pass3.json"})
+ for (std::string filename : {TEST_DATA_DIRECTORY "/json_nlohmann_tests/all_unicode.json",
+ TEST_DATA_DIRECTORY "/json.org/1.json",
+ TEST_DATA_DIRECTORY "/json.org/2.json",
+ TEST_DATA_DIRECTORY "/json.org/3.json",
+ TEST_DATA_DIRECTORY "/json.org/4.json",
+ TEST_DATA_DIRECTORY "/json.org/5.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip01.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip02.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip03.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip04.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip05.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip06.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip07.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip08.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip09.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip10.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip11.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip12.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip13.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip14.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip15.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip16.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip17.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip18.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip19.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip20.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip21.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip22.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip23.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip24.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip25.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip26.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip27.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip28.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip29.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip30.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip31.json",
+ TEST_DATA_DIRECTORY "/json_roundtrip/roundtrip32.json",
+ TEST_DATA_DIRECTORY "/json_testsuite/sample.json",
+ TEST_DATA_DIRECTORY "/json_tests/pass1.json",
+ TEST_DATA_DIRECTORY "/json_tests/pass2.json",
+ TEST_DATA_DIRECTORY "/json_tests/pass3.json"})
{
CAPTURE(filename)
diff --git a/tests/src/unit-udt.cpp b/tests/src/unit-udt.cpp
index 6709813..b3995ff 100644
--- a/tests/src/unit-udt.cpp
+++ b/tests/src/unit-udt.cpp
@@ -23,7 +23,8 @@
#include <string>
#include <utility>
-namespace udt {
+namespace udt
+{
enum class country
{
china,
@@ -92,7 +93,8 @@
} // namespace udt
// to_json methods
-namespace udt {
+namespace udt
+{
// templates because of the custom_json tests (see below)
template<typename BasicJsonType>
static void to_json(BasicJsonType& j, age a)
@@ -169,19 +171,18 @@
static bool operator==(const contact& lhs, const contact& rhs)
{
- return std::tie(lhs.m_person, lhs.m_address) ==
- std::tie(rhs.m_person, rhs.m_address);
+ return std::tie(lhs.m_person, lhs.m_address) == std::tie(rhs.m_person, rhs.m_address);
}
static bool operator==(const contact_book& lhs, const contact_book& rhs)
{
- return std::tie(lhs.m_book_name, lhs.m_contacts) ==
- std::tie(rhs.m_book_name, rhs.m_contacts);
+ return std::tie(lhs.m_book_name, lhs.m_contacts) == std::tie(rhs.m_book_name, rhs.m_contacts);
}
} // namespace udt
// from_json methods
-namespace udt {
+namespace udt
+{
template<typename BasicJsonType>
static void from_json(const BasicJsonType& j, age& a)
{
@@ -198,11 +199,7 @@
static void from_json(const BasicJsonType& j, country& c)
{
const auto str = j.template get<std::string>();
- const std::map<std::string, country> m =
- {
- {"中华人民共和国", country::china},
- {"France", country::france},
- {"Российская Федерация", country::russia}};
+ const std::map<std::string, country> m = {{"中华人民共和国", country::china}, {"France", country::france}, {"Российская Федерация", country::russia}};
const auto it = m.find(str);
// TODO(nlohmann) test exceptions
@@ -238,8 +235,7 @@
TEST_CASE("basic usage" * doctest::test_suite("udt"))
{
// a bit narcissistic maybe :) ?
- const udt::age a{
- 23};
+ const udt::age a{23};
const udt::name n{"theo"};
const udt::country c{udt::country::france};
const udt::person sfinae_addict{a, n, c};
@@ -255,8 +251,7 @@
CHECK(json(c) == json("France"));
CHECK(json(sfinae_addict) == R"({"name":"theo", "age":23, "country":"France"})"_json);
CHECK(json("Paris") == json(addr));
- CHECK(json(cpp_programmer) ==
- R"({"person" : {"age":23, "name":"theo", "country":"France"}, "address":"Paris"})"_json);
+ CHECK(json(cpp_programmer) == R"({"person" : {"age":23, "name":"theo", "country":"France"}, "address":"Paris"})"_json);
CHECK(
json(book) ==
@@ -271,15 +266,13 @@
{
const auto parsed_book = big_json.get<udt::contact_book>();
const auto book_name = big_json["name"].get<udt::name>();
- const auto contacts =
- big_json["contacts"].get<std::vector<udt::contact>>();
+ const auto contacts = big_json["contacts"].get<std::vector<udt::contact>>();
const auto contact_json = big_json["contacts"].at(0);
const auto contact = contact_json.get<udt::contact>();
const auto person = contact_json["person"].get<udt::person>();
const auto address = contact_json["address"].get<udt::address>();
const auto age = contact_json["person"]["age"].get<udt::age>();
- const auto country =
- contact_json["person"]["country"].get<udt::country>();
+ const auto country = contact_json["person"]["country"].get<udt::country>();
const auto name = contact_json["person"]["name"].get<udt::name>();
CHECK(age == a);
@@ -334,7 +327,8 @@
}
}
-namespace udt {
+namespace udt
+{
struct legacy_type
{
std::string number{};
@@ -345,7 +339,8 @@
};
} // namespace udt
-namespace nlohmann {
+namespace nlohmann
+{
template<typename T>
struct adl_serializer<std::shared_ptr<T>>
{
@@ -441,7 +436,8 @@
}
}
-namespace nlohmann {
+namespace nlohmann
+{
template<>
struct adl_serializer<std::vector<float>>
{
@@ -473,7 +469,8 @@
CHECK((f == std::vector<float>{4.0, 5.0, 6.0}));
}
-namespace nlohmann {
+namespace nlohmann
+{
template<typename T>
struct adl_serializer<std::unique_ptr<T>>
{
@@ -540,12 +537,7 @@
struct pod_serializer
{
// use adl for non-pods, or scalar types
- template<
- typename BasicJsonType,
- typename U = T,
- typename std::enable_if<
- !(std::is_pod<U>::value && std::is_class<U>::value),
- int>::type = 0>
+ template<typename BasicJsonType, typename U = T, typename std::enable_if<!(std::is_pod<U>::value && std::is_class<U>::value), int>::type = 0>
static void from_json(const BasicJsonType& j, U& t)
{
using nlohmann::from_json;
@@ -576,12 +568,7 @@
std::memcpy(&t, bytes, sizeof(value));
}
- template<
- typename BasicJsonType,
- typename U = T,
- typename std::enable_if<
- !(std::is_pod<U>::value && std::is_class<U>::value),
- int>::type = 0>
+ template<typename BasicJsonType, typename U = T, typename std::enable_if<!(std::is_pod<U>::value && std::is_class<U>::value), int>::type = 0>
static void to_json(BasicJsonType& j, const T& t)
{
using nlohmann::to_json;
@@ -598,7 +585,8 @@
}
};
-namespace udt {
+namespace udt
+{
struct small_pod
{
int begin;
@@ -629,8 +617,7 @@
static bool operator==(small_pod lhs, small_pod rhs) noexcept
{
- return std::tie(lhs.begin, lhs.middle, lhs.end) ==
- std::tie(rhs.begin, rhs.middle, rhs.end);
+ return std::tie(lhs.begin, lhs.middle, lhs.end) == std::tie(rhs.begin, rhs.middle, rhs.end);
}
static bool operator==(const non_pod& lhs, const non_pod& rhs) noexcept
@@ -646,8 +633,7 @@
TEST_CASE("custom serializer for pods" * doctest::test_suite("udt"))
{
- using custom_json =
- nlohmann::basic_json<std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, double, std::allocator, pod_serializer>;
+ using custom_json = nlohmann::basic_json<std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, double, std::allocator, pod_serializer>;
auto p = udt::small_pod{42, '/', 42};
custom_json const j = p;
@@ -781,7 +767,8 @@
}
}
-namespace {
+namespace
+{
struct incomplete;
// std::is_constructible is broken on macOS' libc++
@@ -801,7 +788,8 @@
static_assert(!is_constructible_patched<json, incomplete>::value, "");
}
-namespace {
+namespace
+{
class Evil
{
public:
@@ -839,7 +827,8 @@
static_assert(!std::is_convertible<json, non_convertible_type>::value, "");
}
-namespace {
+namespace
+{
class no_iterator_type
{
public:
diff --git a/tests/src/unit-udt_macro.cpp b/tests/src/unit-udt_macro.cpp
index ea27543..7db36cb 100644
--- a/tests/src/unit-udt_macro.cpp
+++ b/tests/src/unit-udt_macro.cpp
@@ -13,7 +13,8 @@
#include <nlohmann/json.hpp>
using nlohmann::json;
-namespace persons {
+namespace persons
+{
class person_with_private_data
{
private:
@@ -157,32 +158,9 @@
public:
bool operator==(const person_with_private_alphabet& other) const
{
- return a == other.a &&
- b == other.b &&
- c == other.c &&
- d == other.d &&
- e == other.e &&
- f == other.f &&
- g == other.g &&
- h == other.h &&
- i == other.i &&
- j == other.j &&
- k == other.k &&
- l == other.l &&
- m == other.m &&
- n == other.n &&
- o == other.o &&
- p == other.p &&
- q == other.q &&
- r == other.r &&
- s == other.s &&
- t == other.t &&
- u == other.u &&
- v == other.v &&
- w == other.w &&
- x == other.x &&
- y == other.y &&
- z == other.z;
+ return a == other.a && b == other.b && c == other.c && d == other.d && e == other.e && f == other.f && g == other.g && h == other.h && i == other.i &&
+ j == other.j && k == other.k && l == other.l && m == other.m && n == other.n && o == other.o && p == other.p && q == other.q && r == other.r &&
+ s == other.s && t == other.t && u == other.u && v == other.v && w == other.w && x == other.x && y == other.y && z == other.z;
}
private:
@@ -220,32 +198,9 @@
public:
bool operator==(const person_with_public_alphabet& other) const
{
- return a == other.a &&
- b == other.b &&
- c == other.c &&
- d == other.d &&
- e == other.e &&
- f == other.f &&
- g == other.g &&
- h == other.h &&
- i == other.i &&
- j == other.j &&
- k == other.k &&
- l == other.l &&
- m == other.m &&
- n == other.n &&
- o == other.o &&
- p == other.p &&
- q == other.q &&
- r == other.r &&
- s == other.s &&
- t == other.t &&
- u == other.u &&
- v == other.v &&
- w == other.w &&
- x == other.x &&
- y == other.y &&
- z == other.z;
+ return a == other.a && b == other.b && c == other.c && d == other.d && e == other.e && f == other.f && g == other.g && h == other.h && i == other.i &&
+ j == other.j && k == other.k && l == other.l && m == other.m && n == other.n && o == other.o && p == other.p && q == other.q && r == other.r &&
+ s == other.s && t == other.t && u == other.u && v == other.v && w == other.w && x == other.x && y == other.y && z == other.z;
}
int a = 0;
@@ -318,7 +273,11 @@
} // namespace persons
-TEST_CASE_TEMPLATE("Serialization/deserialization via NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE", T, persons::person_with_private_data, persons::person_without_private_data_1, persons::person_without_private_data_2)
+TEST_CASE_TEMPLATE("Serialization/deserialization via NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE",
+ T,
+ persons::person_with_private_data,
+ persons::person_without_private_data_1,
+ persons::person_without_private_data_2)
{
SECTION("person")
{
@@ -341,7 +300,10 @@
}
}
-TEST_CASE_TEMPLATE("Serialization/deserialization via NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT", T, persons::person_with_private_data_2, persons::person_without_private_data_3)
+TEST_CASE_TEMPLATE("Serialization/deserialization via NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT",
+ T,
+ persons::person_with_private_data_2,
+ persons::person_without_private_data_3)
{
SECTION("person with default values")
{
@@ -373,7 +335,11 @@
}
}
-TEST_CASE_TEMPLATE("Serialization/deserialization of classes with 26 public/private member variables via NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE", T, persons::person_with_private_alphabet, persons::person_with_public_alphabet)
+TEST_CASE_TEMPLATE(
+ "Serialization/deserialization of classes with 26 public/private member variables via NLOHMANN_DEFINE_TYPE_INTRUSIVE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE",
+ T,
+ persons::person_with_private_alphabet,
+ persons::person_with_public_alphabet)
{
SECTION("alphabet")
{
@@ -443,7 +409,11 @@
}
}
-TEST_CASE_TEMPLATE("Serialization of non-default-constructible classes via NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE", T, persons::person_without_default_constructor_1, persons::person_without_default_constructor_2)
+TEST_CASE_TEMPLATE(
+ "Serialization of non-default-constructible classes via NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE and NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE",
+ T,
+ persons::person_without_default_constructor_1,
+ persons::person_without_default_constructor_2)
{
SECTION("person")
{
@@ -453,9 +423,7 @@
CHECK(json(person).dump() == "{\"age\":1,\"name\":\"Erik\"}");
// serialization of a container with objects
- std::vector<T> const two_persons{
- {"Erik", 1},
- {"Kyle", 2}};
+ std::vector<T> const two_persons{{"Erik", 1}, {"Kyle", 2}};
CHECK(json(two_persons).dump() == "[{\"age\":1,\"name\":\"Erik\"},{\"age\":2,\"name\":\"Kyle\"}]");
}
}
diff --git a/tests/src/unit-unicode1.cpp b/tests/src/unit-unicode1.cpp
index 1a1b085..849c4a0 100644
--- a/tests/src/unit-unicode1.cpp
+++ b/tests/src/unit-unicode1.cpp
@@ -85,19 +85,40 @@
{
json _;
- CHECK_THROWS_WITH_AS(_ = json::parse("\"\\uDC00\\uDC00\""), "[json.exception.parse_error.101] parse error at line 1, column 7: syntax error while parsing value - invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF; last read: '\"\\uDC00'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse("\"\\uDC00\\uDC00\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 7: syntax error while parsing value - invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF; last read: '\"\\uDC00'",
+ json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::parse("\"\\uD7FF\\uDC00\""), "[json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF; last read: '\"\\uD7FF\\uDC00'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse("\"\\uD7FF\\uDC00\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF; last read: '\"\\uD7FF\\uDC00'",
+ json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::parse("\"\\uD800]\""), "[json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF; last read: '\"\\uD800]'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse("\"\\uD800]\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 8: syntax error while parsing value - invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF; last read: '\"\\uD800]'",
+ json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::parse("\"\\uD800\\v\""), "[json.exception.parse_error.101] parse error at line 1, column 9: syntax error while parsing value - invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF; last read: '\"\\uD800\\v'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse("\"\\uD800\\v\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 9: syntax error while parsing value - invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF; last read: '\"\\uD800\\v'",
+ json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::parse("\"\\uD800\\u123\""), "[json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\uD800\\u123\"'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse("\"\\uD800\\u123\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '\"\\uD800\\u123\"'",
+ json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::parse("\"\\uD800\\uDBFF\""), "[json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF; last read: '\"\\uD800\\uDBFF'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse("\"\\uD800\\uDBFF\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF; last read: '\"\\uD800\\uDBFF'",
+ json::parse_error&);
- CHECK_THROWS_WITH_AS(_ = json::parse("\"\\uD800\\uE000\""), "[json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF; last read: '\"\\uD800\\uE000'", json::parse_error&);
+ CHECK_THROWS_WITH_AS(
+ _ = json::parse("\"\\uD800\\uE000\""),
+ "[json.exception.parse_error.101] parse error at line 1, column 13: syntax error while parsing value - invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF; last read: '\"\\uD800\\uE000'",
+ json::parse_error&);
}
}
@@ -222,7 +243,8 @@
}
}
-namespace {
+namespace
+{
void roundtrip(bool success_expected, const std::string& s);
void roundtrip(bool success_expected, const std::string& s)
@@ -353,13 +375,17 @@
roundtrip(false, "\x80\xbf\x80\xbf\x80\xbf\x80");
// 3.1.9 Sequence of all 64 possible continuation bytes (0x80-0xbf)
- roundtrip(false, "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf");
+ roundtrip(
+ false,
+ "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf");
}
SECTION("3.2 Lonely start characters")
{
// 3.2.1 All 32 first bytes of 2-byte sequences (0xc0-0xdf)
- roundtrip(false, "\xc0 \xc1 \xc2 \xc3 \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce \xcf \xd0 \xd1 \xd2 \xd3 \xd4 \xd5 \xd6 \xd7 \xd8 \xd9 \xda \xdb \xdc \xdd \xde \xdf");
+ roundtrip(
+ false,
+ "\xc0 \xc1 \xc2 \xc3 \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce \xcf \xd0 \xd1 \xd2 \xd3 \xd4 \xd5 \xd6 \xd7 \xd8 \xd9 \xda \xdb \xdc \xdd \xde \xdf");
// 3.2.2 All 16 first bytes of 3-byte sequences (0xe0-0xef)
roundtrip(false, "\xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec \xed \xee \xef");
// 3.2.3 All 8 first bytes of 4-byte sequences (0xf0-0xf7)
diff --git a/tests/src/unit-unicode2.cpp b/tests/src/unit-unicode2.cpp
index 5e9bb36..e14612c 100644
--- a/tests/src/unit-unicode2.cpp
+++ b/tests/src/unit-unicode2.cpp
@@ -24,7 +24,8 @@
DOCTEST_CLANG_SUPPRESS_WARNING_PUSH
DOCTEST_CLANG_SUPPRESS_WARNING("-Wexit-time-destructors")
-namespace {
+namespace
+{
extern size_t calls;
size_t calls = 0;
diff --git a/tests/src/unit-unicode3.cpp b/tests/src/unit-unicode3.cpp
index 6044574..1c92236 100644
--- a/tests/src/unit-unicode3.cpp
+++ b/tests/src/unit-unicode3.cpp
@@ -24,7 +24,8 @@
DOCTEST_CLANG_SUPPRESS_WARNING_PUSH
DOCTEST_CLANG_SUPPRESS_WARNING("-Wexit-time-destructors")
-namespace {
+namespace
+{
extern size_t calls;
size_t calls = 0;
diff --git a/tests/src/unit-unicode4.cpp b/tests/src/unit-unicode4.cpp
index 851b8a5..20305e5 100644
--- a/tests/src/unit-unicode4.cpp
+++ b/tests/src/unit-unicode4.cpp
@@ -24,7 +24,8 @@
DOCTEST_CLANG_SUPPRESS_WARNING_PUSH
DOCTEST_CLANG_SUPPRESS_WARNING("-Wexit-time-destructors")
-namespace {
+namespace
+{
extern size_t calls;
size_t calls = 0;
diff --git a/tests/src/unit-unicode5.cpp b/tests/src/unit-unicode5.cpp
index 1967fc2..0c79a5b 100644
--- a/tests/src/unit-unicode5.cpp
+++ b/tests/src/unit-unicode5.cpp
@@ -24,7 +24,8 @@
DOCTEST_CLANG_SUPPRESS_WARNING_PUSH
DOCTEST_CLANG_SUPPRESS_WARNING("-Wexit-time-destructors")
-namespace {
+namespace
+{
extern size_t calls;
size_t calls = 0;
diff --git a/tests/src/unit-user_defined_input.cpp b/tests/src/unit-user_defined_input.cpp
index f9c096a..f3c5374 100644
--- a/tests/src/unit-user_defined_input.cpp
+++ b/tests/src/unit-user_defined_input.cpp
@@ -13,7 +13,8 @@
#include <list>
-namespace {
+namespace
+{
TEST_CASE("Use arbitrary stdlib container")
{
std::string raw_data = "[1,2,3,4]";
diff --git a/tests/src/unit-wstring.cpp b/tests/src/unit-wstring.cpp
index 7469fce..e13e626 100644
--- a/tests/src/unit-wstring.cpp
+++ b/tests/src/unit-wstring.cpp
@@ -13,7 +13,8 @@
// ICPC errors out on multibyte character sequences in source files
#ifndef __INTEL_COMPILER
-namespace {
+namespace
+{
bool wstring_is_utf16();
bool wstring_is_utf16()
{