Skip to content

Commit

Permalink
Pull in another microbenchmark that can be improved later.
Browse files Browse the repository at this point in the history
  • Loading branch information
Julian committed Jul 25, 2023
1 parent b1f6973 commit 7a2da6b
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 0 deletions.
42 changes: 42 additions & 0 deletions jsonschema/benchmarks/subcomponents.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
"""
A benchmark which tries to compare the possible slow subparts of validation.
"""
from referencing import Registry
from referencing.jsonschema import DRAFT202012
from rpds import HashTrieMap, HashTrieSet

from jsonschema import Draft202012Validator

schema = {
"type": "array",
"minLength": 1,
"maxLength": 1,
"items": {"type": "integer"}
}

hmap = HashTrieMap()
hset = HashTrieSet()

registry = Registry()

v = Draft202012Validator(schema)


def registry_data_structures():
return hmap.insert("foo", "bar"), hset.insert("foo")


def registry_add():
resource = DRAFT202012.create_resource(schema)
return registry.with_resource(uri="urn:example", resource=resource)


if __name__ == "__main__":
from pyperf import Runner
runner = Runner()

runner.bench_func("HashMap/HashSet insertion", registry_data_structures)
runner.bench_func("Registry insertion", registry_add)
runner.bench_func("Success", lambda: v.is_valid([1]))
runner.bench_func("Failure", lambda: v.is_valid(["foo"]))
runner.bench_func("Metaschema validation", lambda: v.check_schema(schema))
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,7 @@ multi_line_output = 3
[tool.mypy]
ignore_missing_imports = true
show_error_codes = true
exclude = ["jsonschema/benchmarks/*"]

[tool.ruff]
line-length = 79
Expand Down

0 comments on commit 7a2da6b

Please sign in to comment.