Skip to content

Commit

Permalink
refactor: stringify and get to handle WeakPointer (#1182)
Browse files Browse the repository at this point in the history
Signed-off-by: Tony Gorez <[email protected]>
  • Loading branch information
tony-go authored Sep 11, 2024
1 parent a0aafd3 commit fda77d5
Show file tree
Hide file tree
Showing 4 changed files with 175 additions and 16 deletions.
74 changes: 72 additions & 2 deletions src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,30 @@ const Pointer empty_pointer;
SOURCEMETA_JSONTOOLKIT_JSONPOINTER_EXPORT
auto get(const JSON &document, const Pointer &pointer) -> const JSON &;

/// @ingroup jsonpointer
/// Get a value from a JSON document using a JSON WeakPointer (`const`
/// overload).
///
/// ```cpp
/// #include <sourcemeta/jsontoolkit/json.h>
/// #include <sourcemeta/jsontoolkit/jsonpointer.h>
/// #include <cassert>
/// #include <sstream>
///
/// std::istringstream stream{"[ { \"foo\": 1 }, { \"bar\": 2 } ]"};
/// const sourcemeta::jsontoolkit::JSON document =
/// sourcemeta::jsontoolkit::parse(stream);
///
/// const std::string bar = "bar";
/// const sourcemeta::jsontoolkit::WeakPointer pointer{1, std::cref(bar)};
/// const sourcemeta::jsontoolkit::JSON &value{
/// sourcemeta::jsontoolkit::get(document, pointer)};
/// assert(value.is_integer());
/// assert(value.to_integer() == 2);
/// ```
SOURCEMETA_JSONTOOLKIT_JSONPOINTER_EXPORT
auto get(const JSON &document, const WeakPointer &pointer) -> const JSON &;

/// @ingroup jsonpointer
/// Get a value from a JSON document using a JSON Pointer (non-`const`
/// overload).
Expand Down Expand Up @@ -98,13 +122,38 @@ auto get(JSON &document, const Pointer &pointer) -> JSON &;
/// sourcemeta::jsontoolkit::parse(stream);
///
/// const sourcemeta::jsontoolkit::JSON &value{
/// sourcemeta::jsontoolkit::get(document, "bar")};
/// sourcemeta::jsontoolkit::get(document,
/// sourcemeta::jsontoolkit::Pointer{"foo"})};
/// assert(value.is_integer());
/// assert(value.to_integer() == 2);
/// assert(value.to_integer() == 1);
/// ```
SOURCEMETA_JSONTOOLKIT_JSONPOINTER_EXPORT
auto get(const JSON &document, const Pointer::Token &token) -> const JSON &;

/// @ingroup jsonpointer
/// Get a value from a JSON document using a JSON WeakPointer token (`const`
/// overload).
///
/// ```cpp
/// #include <sourcemeta/jsontoolkit/json.h>
/// #include <sourcemeta/jsontoolkit/jsonpointer.h>
/// #include <cassert>
/// #include <sstream>
///
/// std::istringstream stream{"{ \"foo\": 1 }"};
/// const sourcemeta::jsontoolkit::JSON document =
/// sourcemeta::jsontoolkit::parse(stream);
///
/// const std::string foo = "foo";
/// const sourcemeta::jsontoolkit::JSON &value{
/// sourcemeta::jsontoolkit::get(document,
/// sourcemeta::jsontoolkit::WeakPointer{std::cref(foo)})};
/// assert(value.is_integer());
/// assert(value.to_integer() == 1);
/// ```
SOURCEMETA_JSONTOOLKIT_JSONPOINTER_EXPORT
auto get(const JSON &document, const WeakPointer::Token &token) -> const JSON &;

/// @ingroup jsonpointer
/// Get a value from a JSON document using a JSON Pointer token (non-`const`
/// overload).
Expand Down Expand Up @@ -233,6 +282,27 @@ auto stringify(const Pointer &pointer,
std::basic_ostream<JSON::Char, JSON::CharTraits> &stream)
-> void;

/// @ingroup jsonpointer
///
/// Stringify the input JSON WeakPointer into a given C++ standard output
/// stream. For example:
///
/// ```cpp
/// #include <sourcemeta/jsontoolkit/jsonpointer.h>
/// #include <iostream>
/// #include <sstream>
///
/// const std::string foo = "foo";
/// const sourcemeta::jsontoolkit::WeakPointer pointer{std::cref(foo)};
/// std::ostringstream stream;
/// sourcemeta::jsontoolkit::stringify(pointer, stream);
/// std::cout << stream.str() << std::endl;
/// ```
SOURCEMETA_JSONTOOLKIT_JSONPOINTER_EXPORT
auto stringify(const WeakPointer &pointer,
std::basic_ostream<JSON::Char, JSON::CharTraits> &stream)
-> void;

/// @ingroup jsonpointer
///
/// Stringify the input JSON Pointer into a C++ standard string. For example:
Expand Down
35 changes: 27 additions & 8 deletions src/jsonpointer/jsonpointer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,14 @@
#include <utility> // std::move

namespace {
template <template <typename T> typename Allocator, typename V>
auto traverse(V &document,
typename sourcemeta::jsontoolkit::GenericPointer<
typename V::String>::const_iterator begin,
typename sourcemeta::jsontoolkit::GenericPointer<
typename V::String>::const_iterator end) -> V & {
using Pointer = sourcemeta::jsontoolkit::GenericPointer<typename V::String>;
template <template <typename T> typename Allocator, typename V,
typename PointerT =
sourcemeta::jsontoolkit::GenericPointer<typename V::String>>
auto traverse(V &document, typename PointerT::const_iterator begin,
typename PointerT::const_iterator end) -> V & {
// Make sure types match
static_assert(
std::is_same_v<typename Pointer::Value, std::remove_const_t<V>>);
std::is_same_v<typename PointerT::Value, std::remove_const_t<V>>);

std::reference_wrapper<V> current{document};

Expand Down Expand Up @@ -65,6 +63,11 @@ auto get(const JSON &document, const Pointer &pointer) -> const JSON & {
std::cend(pointer));
}

auto get(const JSON &document, const WeakPointer &pointer) -> const JSON & {
return traverse<std::allocator, const JSON, WeakPointer>(
document, std::cbegin(pointer), std::cend(pointer));
}

auto get(JSON &document, const Pointer &pointer) -> JSON & {
return traverse<std::allocator, JSON>(document, std::cbegin(pointer),
std::cend(pointer));
Expand All @@ -78,6 +81,15 @@ auto get(const JSON &document, const Pointer::Token &token) -> const JSON & {
}
}

auto get(const JSON &document,
const WeakPointer::Token &token) -> const JSON & {
if (token.is_property()) {
return document.at(token.to_property());
} else {
return document.at(token.to_index());
}
}

auto get(JSON &document, const Pointer::Token &token) -> JSON & {
if (token.is_property()) {
return document.at(token.to_property());
Expand Down Expand Up @@ -157,6 +169,13 @@ auto stringify(const Pointer &pointer,
false);
}

auto stringify(const WeakPointer &pointer,
std::basic_ostream<JSON::Char, JSON::CharTraits> &stream)
-> void {
stringify<JSON::Char, JSON::CharTraits, std::allocator>(pointer, stream,
false);
}

auto to_string(const Pointer &pointer)
-> std::basic_string<JSON::Char, JSON::CharTraits,
std::allocator<JSON::Char>> {
Expand Down
48 changes: 42 additions & 6 deletions test/jsonpointer/jsonpointer_get_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -526,8 +526,8 @@ TEST(JSONPointer_get, token_property) {
"foo": 2
})JSON");

const sourcemeta::jsontoolkit::JSON &result{
sourcemeta::jsontoolkit::get(document, "foo")};
const sourcemeta::jsontoolkit::JSON &result{sourcemeta::jsontoolkit::get(
document, sourcemeta::jsontoolkit::Pointer{"foo"})};
EXPECT_TRUE(result.is_integer());
EXPECT_EQ(result.to_integer(), 2);
}
Expand All @@ -536,8 +536,8 @@ TEST(JSONPointer_get, token_index) {
const sourcemeta::jsontoolkit::JSON document =
sourcemeta::jsontoolkit::parse(R"JSON([ 1, 2, 3 ])JSON");

const sourcemeta::jsontoolkit::JSON &result{
sourcemeta::jsontoolkit::get(document, 1)};
const sourcemeta::jsontoolkit::JSON &result{sourcemeta::jsontoolkit::get(
document, sourcemeta::jsontoolkit::Pointer{1})};
EXPECT_TRUE(result.is_integer());
EXPECT_EQ(result.to_integer(), 2);
}
Expand All @@ -548,8 +548,44 @@ TEST(JSONPointer_get, token_hyphen) {
"-": 2
})JSON");

const sourcemeta::jsontoolkit::JSON &result{
sourcemeta::jsontoolkit::get(document, "-")};
const sourcemeta::jsontoolkit::JSON &result{sourcemeta::jsontoolkit::get(
document, sourcemeta::jsontoolkit::Pointer{"-"})};
EXPECT_TRUE(result.is_integer());
EXPECT_EQ(result.to_integer(), 2);
}

TEST(JSONWeakPointer_get, token_property) {
const sourcemeta::jsontoolkit::JSON document =
sourcemeta::jsontoolkit::parse(R"JSON({
"foo": 2
})JSON");

const std::string foo = "foo";
const sourcemeta::jsontoolkit::JSON &result{sourcemeta::jsontoolkit::get(
document, sourcemeta::jsontoolkit::WeakPointer{std::cref(foo)})};
EXPECT_TRUE(result.is_integer());
EXPECT_EQ(result.to_integer(), 2);
}

TEST(JSONWeakPointer_get, token_index) {
const sourcemeta::jsontoolkit::JSON document =
sourcemeta::jsontoolkit::parse(R"JSON([ 1, 2, 3 ])JSON");

const sourcemeta::jsontoolkit::JSON &result{sourcemeta::jsontoolkit::get(
document, sourcemeta::jsontoolkit::WeakPointer{1})};
EXPECT_TRUE(result.is_integer());
EXPECT_EQ(result.to_integer(), 2);
}

TEST(JSONWeakPointer_get, token_hyphen) {
const sourcemeta::jsontoolkit::JSON document =
sourcemeta::jsontoolkit::parse(R"JSON({
"-": 2
})JSON");

const std::string hyphen = "-";
const sourcemeta::jsontoolkit::JSON &result{sourcemeta::jsontoolkit::get(
document, sourcemeta::jsontoolkit::WeakPointer{std::cref(hyphen)})};
EXPECT_TRUE(result.is_integer());
EXPECT_EQ(result.to_integer(), 2);
}
34 changes: 34 additions & 0 deletions test/jsonpointer/jsonpointer_stringify_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -374,3 +374,37 @@ TEST(JSONPointer_stringify, no_uri_escape) {
sourcemeta::jsontoolkit::stringify(pointer, stream);
EXPECT_EQ(stream.str(), "/foo/percent%field");
}

TEST(JSONWeakPointer, empty_string) {
const std::string empty_string = "";
const sourcemeta::jsontoolkit::WeakPointer pointer{std::cref(empty_string)};
std::ostringstream stream;
sourcemeta::jsontoolkit::stringify(pointer, stream);
EXPECT_EQ(stream.str(), "/");
}

TEST(JSONWeakPointer, string) {
const std::string foo = "foo";
const sourcemeta::jsontoolkit::WeakPointer pointer{std::cref(foo)};
std::ostringstream stream;
sourcemeta::jsontoolkit::stringify(pointer, stream);
EXPECT_EQ(stream.str(), "/foo");
}

TEST(JSONWeakPointer, index) {
const sourcemeta::jsontoolkit::WeakPointer pointer{2};
std::ostringstream stream;
sourcemeta::jsontoolkit::stringify(pointer, stream);
EXPECT_EQ(stream.str(), "/2");
}

TEST(JSONWeakPointer, foo_bar_baz) {
const std::string foo = "foo";
const std::string bar = "bar";
const std::string baz = "baz";
const sourcemeta::jsontoolkit::WeakPointer pointer{
std::cref(foo), std::cref(bar), std::cref(baz)};
std::ostringstream stream;
sourcemeta::jsontoolkit::stringify(pointer, stream);
EXPECT_EQ(stream.str(), "/foo/bar/baz");
}

8 comments on commit fda77d5

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (macos/llvm)

Benchmark suite Current: fda77d5 Previous: a0aafd3 Ratio
JSONSchema_Validate_Draft4_Meta_1_No_Callback 946.2983590565789 ns/iter 926.8533505824306 ns/iter 1.02
JSONSchema_Validate_Draft4_Required_Properties 1053.8330404878843 ns/iter 1015.2996646040832 ns/iter 1.04
JSONSchema_Validate_Draft4_Optional_Properties_Minimal_Match 162.3428657042456 ns/iter 159.28553194147304 ns/iter 1.02
JSONSchema_Validate_Draft4_Items_Schema 2578.0519411539376 ns/iter 2484.2464179056924 ns/iter 1.04
JSONSchema_Validate_Draft4_Nested_Object 1574.376492774743 ns/iter 1516.95803082549 ns/iter 1.04
JSONSchema_Validate_Draft4_Properties_Triad_Optional 1366.983463271941 ns/iter 1348.7273784267347 ns/iter 1.01
JSONSchema_Validate_Draft4_Properties_Triad_Closed 1090.1006813510512 ns/iter 1044.906373190601 ns/iter 1.04
JSONSchema_Validate_Draft4_Properties_Triad_Required 1410.4085780089515 ns/iter 1373.9052232750503 ns/iter 1.03
JSONSchema_Validate_Draft4_Non_Recursive_Ref 1895.2274124462515 ns/iter 1820.834839175849 ns/iter 1.04

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (linux/llvm)

Benchmark suite Current: fda77d5 Previous: a0aafd3 Ratio
JSONSchema_Validate_Draft4_Meta_1_No_Callback 17337.484464269237 ns/iter 17502.48420420854 ns/iter 0.99
JSONSchema_Validate_Draft4_Required_Properties 7552.913341107614 ns/iter 7462.33826519149 ns/iter 1.01
JSONSchema_Validate_Draft4_Optional_Properties_Minimal_Match 1743.2160688361962 ns/iter 1761.268144933186 ns/iter 0.99
JSONSchema_Validate_Draft4_Items_Schema 104045.1590977024 ns/iter 105420.46226555988 ns/iter 0.99
JSONSchema_Validate_Draft4_Nested_Object 49987.70851185271 ns/iter 49389.85287681212 ns/iter 1.01
JSONSchema_Validate_Draft4_Properties_Triad_Optional 8468.387012516332 ns/iter 8564.221622737954 ns/iter 0.99
JSONSchema_Validate_Draft4_Properties_Triad_Closed 7885.860008098334 ns/iter 7957.354108036014 ns/iter 0.99
JSONSchema_Validate_Draft4_Properties_Triad_Required 8688.107630572824 ns/iter 8738.727052264241 ns/iter 0.99
JSONSchema_Validate_Draft4_Non_Recursive_Ref 79665.2279328284 ns/iter 79823.30895419774 ns/iter 1.00

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (linux/gcc)

Benchmark suite Current: fda77d5 Previous: a0aafd3 Ratio
JSONSchema_Validate_Draft4_Meta_1_No_Callback 1642.9057759333236 ns/iter 1655.9805021266327 ns/iter 0.99
JSONSchema_Validate_Draft4_Required_Properties 2821.2760713071884 ns/iter 2850.3504319852027 ns/iter 0.99
JSONSchema_Validate_Draft4_Optional_Properties_Minimal_Match 230.48849393806165 ns/iter 230.39985174911877 ns/iter 1.00
JSONSchema_Validate_Draft4_Items_Schema 5345.464987336565 ns/iter 5325.891787403074 ns/iter 1.00
JSONSchema_Validate_Draft4_Nested_Object 3585.561381761883 ns/iter 3530.890411654723 ns/iter 1.02
JSONSchema_Validate_Draft4_Properties_Triad_Optional 2000.9434955505915 ns/iter 1973.9151811597148 ns/iter 1.01
JSONSchema_Validate_Draft4_Properties_Triad_Closed 1704.5788233495168 ns/iter 1653.8559574946153 ns/iter 1.03
JSONSchema_Validate_Draft4_Properties_Triad_Required 2123.9767711893815 ns/iter 2088.0107960321225 ns/iter 1.02
JSONSchema_Validate_Draft4_Non_Recursive_Ref 4004.0982447053316 ns/iter 3978.9020367470953 ns/iter 1.01

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (windows/msvc)

Benchmark suite Current: fda77d5 Previous: a0aafd3 Ratio
JSONSchema_Validate_Draft4_Meta_1_No_Callback 3579.460750962788 ns/iter 3652.7730859467797 ns/iter 0.98
JSONSchema_Validate_Draft4_Required_Properties 2128.6956250001767 ns/iter 2112.004120540474 ns/iter 1.01
JSONSchema_Validate_Draft4_Optional_Properties_Minimal_Match 643.3550223212998 ns/iter 658.6141964285324 ns/iter 0.98
JSONSchema_Validate_Draft4_Items_Schema 12484.251785715676 ns/iter 12800.808928570208 ns/iter 0.98
JSONSchema_Validate_Draft4_Nested_Object 9147.319431609942 ns/iter 9038.76545194052 ns/iter 1.01
JSONSchema_Validate_Draft4_Properties_Triad_Optional 5976.888392857356 ns/iter 5977.01785714325 ns/iter 1.00
JSONSchema_Validate_Draft4_Properties_Triad_Closed 4956.316964286397 ns/iter 4944.520999999895 ns/iter 1.00
JSONSchema_Validate_Draft4_Properties_Triad_Required 6013.281249999685 ns/iter 6045.105999999123 ns/iter 0.99
JSONSchema_Validate_Draft4_Non_Recursive_Ref 8436.164062499378 ns/iter 8423.595982142628 ns/iter 1.00

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (macos/llvm)

Benchmark suite Current: fda77d5 Previous: a0aafd3 Ratio
JSONSchema_Validate_Draft4_Meta_1_No_Callback 949.8498906004144 ns/iter 926.8533505824306 ns/iter 1.02
JSONSchema_Validate_Draft4_Required_Properties 1027.0060899092912 ns/iter 1015.2996646040832 ns/iter 1.01
JSONSchema_Validate_Draft4_Optional_Properties_Minimal_Match 160.36908089293505 ns/iter 159.28553194147304 ns/iter 1.01
JSONSchema_Validate_Draft4_Items_Schema 2469.48131284882 ns/iter 2484.2464179056924 ns/iter 0.99
JSONSchema_Validate_Draft4_Nested_Object 1522.7189616700107 ns/iter 1516.95803082549 ns/iter 1.00
JSONSchema_Validate_Draft4_Properties_Triad_Optional 1367.0033442883616 ns/iter 1348.7273784267347 ns/iter 1.01
JSONSchema_Validate_Draft4_Properties_Triad_Closed 1057.8784598938598 ns/iter 1044.906373190601 ns/iter 1.01
JSONSchema_Validate_Draft4_Properties_Triad_Required 1391.7482378169502 ns/iter 1373.9052232750503 ns/iter 1.01
JSONSchema_Validate_Draft4_Non_Recursive_Ref 1863.0897346602292 ns/iter 1820.834839175849 ns/iter 1.02

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (linux/llvm)

Benchmark suite Current: fda77d5 Previous: a0aafd3 Ratio
JSONSchema_Validate_Draft4_Meta_1_No_Callback 17497.620715593188 ns/iter 17502.48420420854 ns/iter 1.00
JSONSchema_Validate_Draft4_Required_Properties 7566.318307481071 ns/iter 7462.33826519149 ns/iter 1.01
JSONSchema_Validate_Draft4_Optional_Properties_Minimal_Match 1743.5271129621674 ns/iter 1761.268144933186 ns/iter 0.99
JSONSchema_Validate_Draft4_Items_Schema 105505.21350172965 ns/iter 105420.46226555988 ns/iter 1.00
JSONSchema_Validate_Draft4_Nested_Object 49841.54288762127 ns/iter 49389.85287681212 ns/iter 1.01
JSONSchema_Validate_Draft4_Properties_Triad_Optional 8550.29814081089 ns/iter 8564.221622737954 ns/iter 1.00
JSONSchema_Validate_Draft4_Properties_Triad_Closed 7927.9046981387355 ns/iter 7957.354108036014 ns/iter 1.00
JSONSchema_Validate_Draft4_Properties_Triad_Required 8734.46924163073 ns/iter 8738.727052264241 ns/iter 1.00
JSONSchema_Validate_Draft4_Non_Recursive_Ref 80221.74138728467 ns/iter 79823.30895419774 ns/iter 1.00

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (linux/gcc)

Benchmark suite Current: fda77d5 Previous: a0aafd3 Ratio
JSONSchema_Validate_Draft4_Meta_1_No_Callback 1669.642215631809 ns/iter 1655.9805021266327 ns/iter 1.01
JSONSchema_Validate_Draft4_Required_Properties 2839.4370664224584 ns/iter 2850.3504319852027 ns/iter 1.00
JSONSchema_Validate_Draft4_Optional_Properties_Minimal_Match 231.7675867294391 ns/iter 230.39985174911877 ns/iter 1.01
JSONSchema_Validate_Draft4_Items_Schema 5313.6848810593265 ns/iter 5325.891787403074 ns/iter 1.00
JSONSchema_Validate_Draft4_Nested_Object 3622.82657783201 ns/iter 3530.890411654723 ns/iter 1.03
JSONSchema_Validate_Draft4_Properties_Triad_Optional 2006.6393028000487 ns/iter 1973.9151811597148 ns/iter 1.02
JSONSchema_Validate_Draft4_Properties_Triad_Closed 1648.8193702850047 ns/iter 1653.8559574946153 ns/iter 1.00
JSONSchema_Validate_Draft4_Properties_Triad_Required 2097.4987104037714 ns/iter 2088.0107960321225 ns/iter 1.00
JSONSchema_Validate_Draft4_Non_Recursive_Ref 4063.8544110567063 ns/iter 3978.9020367470953 ns/iter 1.02

This comment was automatically generated by workflow using github-action-benchmark.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark (windows/msvc)

Benchmark suite Current: fda77d5 Previous: a0aafd3 Ratio
JSONSchema_Validate_Draft4_Meta_1_No_Callback 3659.835428865092 ns/iter 3652.7730859467797 ns/iter 1.00
JSONSchema_Validate_Draft4_Required_Properties 2104.9194028119027 ns/iter 2112.004120540474 ns/iter 1.00
JSONSchema_Validate_Draft4_Optional_Properties_Minimal_Match 662.265513392768 ns/iter 658.6141964285324 ns/iter 1.01
JSONSchema_Validate_Draft4_Items_Schema 13012.963558197627 ns/iter 12800.808928570208 ns/iter 1.02
JSONSchema_Validate_Draft4_Nested_Object 9067.17693224746 ns/iter 9038.76545194052 ns/iter 1.00
JSONSchema_Validate_Draft4_Properties_Triad_Optional 6129.724107142108 ns/iter 5977.01785714325 ns/iter 1.03
JSONSchema_Validate_Draft4_Properties_Triad_Closed 5058.164000001852 ns/iter 4944.520999999895 ns/iter 1.02
JSONSchema_Validate_Draft4_Properties_Triad_Required 6114.036607142128 ns/iter 6045.105999999123 ns/iter 1.01
JSONSchema_Validate_Draft4_Non_Recursive_Ref 8419.865536312802 ns/iter 8423.595982142628 ns/iter 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.