| """ |
| 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)) |
|
|