← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Thu Dec 15 15:23:56 2022
Reported on Thu Dec 15 15:27:04 2022

Filename/Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/Validation.pm
StatementsExecuted 423865 statements in 449ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
3527911290ms781msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_typeJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_type
47811142.1ms395msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_requiredJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_required
15271115.9ms197msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_enumJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_enum
13721112.1ms51.9msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_typeJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_type
12031111.3ms239msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_constJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_const
1388118.70ms74.5msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_uniqueItemsJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_uniqueItems
1232116.50ms9.43msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_minItemsJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minItems
270112.84ms67.0msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_requiredJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_required
485112.71ms3.54msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_minPropertiesJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minProperties
261111.92ms4.98msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_patternJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_pattern
2111738µs1.04msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minimumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minimum
26111627µs627µsJSON::Schema::Modern::Vocabulary::Validation::::CORE:matchJSON::Schema::Modern::Vocabulary::Validation::CORE:match (opcode)
8781446µs1.44msJSON::Schema::Modern::Vocabulary::Validation::::_assert_non_negative_integerJSON::Schema::Modern::Vocabulary::Validation::_assert_non_negative_integer
7911430µs1.31msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_minimumJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minimum
26111413µs413µsJSON::Schema::Modern::Vocabulary::Validation::::CORE:regcompJSON::Schema::Modern::Vocabulary::Validation::CORE:regcomp (opcode)
6911406µs3.78msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_patternJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_pattern
5911312µs637µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_enumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_enum
5011250µs1.10msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minPropertiesJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minProperties
3031115µs422µsJSON::Schema::Modern::Vocabulary::Validation::::_assert_numberJSON::Schema::Modern::Vocabulary::Validation::_assert_number
9211113µs113µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_constJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_const
151193µs123µsJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_maxPropertiesJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_maxProperties
11183µs99µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_dependentRequiredJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_dependentRequired
141163µs288µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minItemsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minItems
81142µs152µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maximumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maximum
81141µs185µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maxLengthJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxLength
31134µs94µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_uniqueItemsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_uniqueItems
81130µs140µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minLengthJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minLength
11128µs33µsModule::Runtime::::BEGIN@1.311 Module::Runtime::BEGIN@1.311
11121µs47µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@13JSON::Schema::Modern::Vocabulary::Validation::BEGIN@13
11118µs866µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@11JSON::Schema::Modern::Vocabulary::Validation::BEGIN@11
31117µs76µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maxPropertiesJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxProperties
21116µs51µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maxContainsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxContains
11112µs46µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@17JSON::Schema::Modern::Vocabulary::Validation::BEGIN@17
11111µs11µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@9JSON::Schema::Modern::Vocabulary::Validation::BEGIN@9
22110µs10µsJSON::Schema::Modern::Vocabulary::Validation::::keywordsJSON::Schema::Modern::Vocabulary::Validation::keywords
1119µs20µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@15JSON::Schema::Modern::Vocabulary::Validation::BEGIN@15
1119µs29µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@18JSON::Schema::Modern::Vocabulary::Validation::BEGIN@18
1118µs107µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@12JSON::Schema::Modern::Vocabulary::Validation::BEGIN@12
1118µs25µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@14JSON::Schema::Modern::Vocabulary::Validation::BEGIN@14
1118µs15µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@16JSON::Schema::Modern::Vocabulary::Validation::BEGIN@16
1118µs8.61msJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@19JSON::Schema::Modern::Vocabulary::Validation::BEGIN@19
1118µs49µsModule::Runtime::::BEGIN@2.312 Module::Runtime::BEGIN@2.312
1117µs45µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@20JSON::Schema::Modern::Vocabulary::Validation::BEGIN@20
1116µs389µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@10JSON::Schema::Modern::Vocabulary::Validation::BEGIN@10
1116µs222µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@21JSON::Schema::Modern::Vocabulary::Validation::BEGIN@21
1114µs13µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maxItemsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxItems
1113µs14µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_exclusiveMinimumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_exclusiveMinimum
1112µs10µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minContainsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minContains
5112µs2µsJSON::Schema::Modern::Vocabulary::Validation::::evaluation_orderJSON::Schema::Modern::Vocabulary::Validation::evaluation_order
1112µs2µsJSON::Schema::Modern::Vocabulary::Validation::::vocabularyJSON::Schema::Modern::Vocabulary::Validation::vocabulary
1110s0sJSON::Schema::Modern::Vocabulary::Validation::::CORE:sortJSON::Schema::Modern::Vocabulary::Validation::CORE:sort (opcode)
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::__ANON__[:263]JSON::Schema::Modern::Vocabulary::Validation::__ANON__[:263]
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::__ANON__[:49]JSON::Schema::Modern::Vocabulary::Validation::__ANON__[:49]
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::__ANON__[:56]JSON::Schema::Modern::Vocabulary::Validation::__ANON__[:56]
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::__ANON__[:67]JSON::Schema::Modern::Vocabulary::Validation::__ANON__[:67]
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::__ANON__[:85]JSON::Schema::Modern::Vocabulary::Validation::__ANON__[:85]
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_dependentRequiredJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_dependentRequired
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_exclusiveMaximumJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_exclusiveMaximum
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_exclusiveMinimumJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_exclusiveMinimum
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_maxContainsJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_maxContains
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_maxItemsJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_maxItems
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_maxLengthJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_maxLength
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_maximumJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_maximum
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_minContainsJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minContains
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_minLengthJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minLength
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_multipleOfJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_multipleOf
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_exclusiveMaximumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_exclusiveMaximum
0000s0sJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_multipleOfJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_multipleOf
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1236µs238µs
# spent 33µs (28+5) within Module::Runtime::BEGIN@1.311 which was called: # once (28µs+5µs) by Module::Runtime::require_module at line 1
use strict;
# spent 33µs making 1 call to Module::Runtime::BEGIN@1.311 # spent 5µs making 1 call to strict::import
2265µs290µs
# spent 49µs (8+41) within Module::Runtime::BEGIN@2.312 which was called: # once (8µs+41µs) by Module::Runtime::require_module at line 2
use warnings;
# spent 49µs making 1 call to Module::Runtime::BEGIN@2.312 # spent 41µs making 1 call to warnings::import
3package JSON::Schema::Modern::Vocabulary::Validation;
4# vim: set ts=8 sts=2 sw=2 tw=100 et :
5# ABSTRACT: Implementation of the JSON Schema Validation vocabulary
6
710sour $VERSION = '0.559';
8
9231µs111µs
# spent 11µs within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@9 which was called: # once (11µs+0s) by Module::Runtime::require_module at line 9
use 5.020;
10234µs2772µs
# spent 389µs (6+383) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@10 which was called: # once (6µs+383µs) by Module::Runtime::require_module at line 10
use Moo;
# spent 389µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@10 # spent 383µs making 1 call to Moo::import
11352µs31.71ms
# spent 866µs (18+848) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@11 which was called: # once (18µs+848µs) by Module::Runtime::require_module at line 11
use strictures 2;
# spent 866µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@11 # spent 832µs making 1 call to strictures::import # spent 16µs making 1 call to strictures::VERSION
12254µs2206µs
# spent 107µs (8+99) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@12 which was called: # once (8µs+99µs) by Module::Runtime::require_module at line 12
use experimental qw(signatures postderef);
# spent 107µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@12 # spent 99µs making 1 call to experimental::import
13232µs250µs
# spent 47µs (21+26) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@13 which was called: # once (21µs+26µs) by Module::Runtime::require_module at line 13
use if "$]" >= 5.022, experimental => 're_strict';
# spent 47µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@13 # spent 3µs making 1 call to if::import
14220µs227µs
# spent 25µs (8+17) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@14 which was called: # once (8µs+17µs) by Module::Runtime::require_module at line 14
no if "$]" >= 5.031009, feature => 'indirect';
# spent 25µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@14 # spent 2µs making 1 call to if::unimport
15219µs221µs
# spent 20µs (9+11) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@15 which was called: # once (9µs+11µs) by Module::Runtime::require_module at line 15
no if "$]" >= 5.033001, feature => 'multidimensional';
# spent 20µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@15 # spent 1µs making 1 call to if::unimport
16214µs215µs
# spent 15µs (8+7) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@16 which was called: # once (8µs+7µs) by Module::Runtime::require_module at line 16
no if "$]" >= 5.033006, feature => 'bareword_filehandles';
# spent 15µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@16 # spent 0s making 1 call to if::unimport
17222µs257µs
# spent 46µs (12+34) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@17 which was called: # once (12µs+34µs) by Module::Runtime::require_module at line 17
use List::Util 'any';
# spent 46µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@17 # spent 11µs making 1 call to List::Util::import
18336µs349µs
# spent 29µs (9+20) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@18 which was called: # once (9µs+20µs) by Module::Runtime::require_module at line 18
use Ref::Util 0.100 'is_plain_arrayref';
# spent 29µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@18 # spent 12µs making 1 call to Exporter::import # spent 8µs making 1 call to UNIVERSAL::VERSION
19245µs28.61ms
# spent 8.61ms (8µs+8.60) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@19 which was called: # once (8µs+8.60ms) by Module::Runtime::require_module at line 19
use if "$]" >= 5.022, POSIX => 'isinf';
# spent 8.61ms making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@19 # spent 1µs making 1 call to if::import
20219µs283µs
# spent 45µs (7+38) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@20 which was called: # once (7µs+38µs) by Module::Runtime::require_module at line 20
use JSON::Schema::Modern::Utilities qw(is_type get_type is_equal is_elements_unique E assert_keyword_type assert_pattern jsonp sprintf_num);
# spent 45µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@20 # spent 38µs making 1 call to Exporter::import
2122.41ms2438µs
# spent 222µs (6+216) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@21 which was called: # once (6µs+216µs) by Module::Runtime::require_module at line 21
use namespace::clean;
# spent 222µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@21 # spent 216µs making 1 call to namespace::clean::import
22
23118µs1586µswith 'JSON::Schema::Modern::Vocabulary';
# spent 586µs making 1 call to Moo::with
24
25
# spent 2µs within JSON::Schema::Modern::Vocabulary::Validation::vocabulary which was called: # once (2µs+0s) by JSON::Schema::Modern::__ANON__[/Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm:709] at line 705 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm
sub vocabulary {
2612µs 'https://json-schema.org/draft/2019-09/vocab/validation' => 'draft2019-09',
27 'https://json-schema.org/draft/2020-12/vocab/validation' => 'draft2020-12';
28}
29
3055µs
# spent 2µs within JSON::Schema::Modern::Vocabulary::Validation::evaluation_order which was called 5 times, avg 400ns/call: # 5 times (2µs+0s) by JSON::Schema::Modern::Vocabulary::Core::CORE:sort at line 337 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern/Vocabulary/Core.pm, avg 400ns/call
sub evaluation_order { 2 }
31
3262µs
# spent 10µs within JSON::Schema::Modern::Vocabulary::Validation::keywords which was called 2 times, avg 5µs/call: # once (7µs+0s) by JSON::Schema::Modern::_eval_subschema at line 572 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm # once (3µs+0s) by JSON::Schema::Modern::_traverse_subschema at line 480 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm
sub keywords ($self, $spec_version) {
33 return (
34210µs qw(type enum const
35 multipleOf maximum exclusiveMaximum minimum exclusiveMinimum
36 maxLength minLength pattern
37 maxItems minItems uniqueItems),
38 $spec_version ne 'draft7' ? qw(maxContains minContains) : (),
39 qw(maxProperties minProperties required),
40 $spec_version ne 'draft7' ? 'dependentRequired' : (),
41 );
42}
43
445488973µs
# spent 51.9ms (12.1+39.7) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_type which was called 1372 times, avg 38µs/call: # 1372 times (12.1ms+39.7ms) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 38µs/call
sub _traverse_keyword_type ($self, $schema, $state) {
4513722.34ms if (is_plain_arrayref($schema->{type})) {
467648µs return E($state, 'type array is empty') if not $schema->{type}->@*;
477662µs foreach my $type ($schema->{type}->@*) {
48 return E($state, 'unrecognized type "%s"', $type//'<null>')
49692656µs158222µs if not any { ($type//'') eq $_ } qw(null boolean object array string number integer);
# spent 222µs making 158 calls to List::Util::any, avg 1µs/call
50 }
517695µs762.65ms return E($state, '"type" values are not unique') if not is_elements_unique($schema->{type});
# spent 2.65ms making 76 calls to JSON::Schema::Modern::Utilities::is_elements_unique, avg 35µs/call
52 }
53 else {
5412961.41ms129633.5ms return if not assert_keyword_type($state, $schema, 'string');
# spent 33.5ms making 1296 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 26µs/call
55 return E($state, 'unrecognized type "%s"', $schema->{type}//'<null>')
5663937.69ms12963.38ms if not any { ($schema->{type}//'') eq $_ } qw(null boolean object array string number integer);
# spent 3.38ms making 1296 calls to List::Util::any, avg 3µs/call
57 }
5813722.04ms return 1;
59}
60
6117639528.8ms
# spent 781ms (290+491) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_type which was called 35279 times, avg 22µs/call: # 35279 times (290ms+491ms) by JSON::Schema::Modern::_eval_subschema at line 587 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 22µs/call
sub _eval_keyword_type ($self, $data, $schema, $state) {
623527939.7ms35279150ms my $type = get_type($data);
# spent 150ms making 35279 calls to JSON::Schema::Modern::Utilities::get_type, avg 4µs/call
633527916.6ms if (is_plain_arrayref($schema->{type})) {
64 return 1 if any {
65 $type eq $_ or ($_ eq 'number' and $type eq 'integer')
6626478151ms or ($_ eq 'boolean' and $state->{scalarref_booleans} and $type eq 'reference to SCALAR')
672300465.1ms2300468.6ms } $schema->{type}->@*;
# spent 68.6ms making 23004 calls to List::Util::any, avg 3µs/call
68 return E($state, 'got %s, not one of %s', $type, join(', ', $schema->{type}->@*));
69 }
70 else {
71 return 1 if $type eq $schema->{type} or ($schema->{type} eq 'number' and $type eq 'integer')
721227523.8ms or ($schema->{type} eq 'boolean' and $state->{scalarref_booleans} and $type eq 'reference to SCALAR');
7311054.15ms1105272ms return E($state, 'got %s, not %s', $type, $schema->{type});
# spent 272ms making 1105 calls to JSON::Schema::Modern::Utilities::E, avg 247µs/call
74 }
75}
76
7723639µs
# spent 637µs (312+325) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_enum which was called 59 times, avg 11µs/call: # 59 times (312µs+325µs) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 11µs/call
sub _traverse_keyword_enum ($self, $schema, $state) {
785980µs59325µs return if not assert_keyword_type($state, $schema, 'array');
# spent 325µs making 59 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 6µs/call
795999µs return 1;
80}
81
8276352.27ms
# spent 197ms (15.9+181) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_enum which was called 1527 times, avg 129µs/call: # 1527 times (15.9ms+181ms) by JSON::Schema::Modern::_eval_subschema at line 587 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 129µs/call
sub _eval_keyword_enum ($self, $data, $schema, $state) {
833054834µs my @s; my $idx = 0;
8415271.96ms my %s = ( scalarref_booleans => $state->{scalarref_booleans} );
85898325.7ms8983309ms return 1 if any { is_equal($data, $_, $s[$idx++] = {%s}) } $schema->{enum}->@*;
# spent 165ms making 1527 calls to List::Util::any, avg 108µs/call # spent 144ms making 7456 calls to JSON::Schema::Modern::Utilities::is_equal, avg 19µs/call
86 return E($state, 'value does not match'
87 .(!(grep $_->{path}, @s) ? ''
8866494µs6616.5ms : ' (differences start '.join(', ', map 'from item #'.$_.' at "'.$s[$_]->{path}.'"', 0..$#s).')'));
# spent 16.5ms making 66 calls to JSON::Schema::Modern::Utilities::E, avg 250µs/call
89}
90
9192135µs
# spent 113µs within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_const which was called 92 times, avg 1µs/call: # 92 times (113µs+0s) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 1µs/call
sub _traverse_keyword_const { 1 }
92
9360151.29ms
# spent 239ms (11.3+228) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_const which was called 1203 times, avg 199µs/call: # 1203 times (11.3ms+228ms) by JSON::Schema::Modern::_eval_subschema at line 587 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 199µs/call
sub _eval_keyword_const ($self, $data, $schema, $state) {
9412031.31ms my %s = ( scalarref_booleans => $state->{scalarref_booleans} );
9512033.81ms120337.4ms return 1 if is_equal($data, $schema->{const}, my $s = { scalarref_booleans => $state->{scalarref_booleans} });
# spent 37.4ms making 1203 calls to JSON::Schema::Modern::Utilities::is_equal, avg 31µs/call
96 return E($state, 'value does not match'
977953.65ms795191ms .($s->{path} ? ' (differences start at "'.$s->{path}.'")' : ''));
# spent 191ms making 795 calls to JSON::Schema::Modern::Utilities::E, avg 240µs/call
98}
99
100sub _traverse_keyword_multipleOf ($self, $schema, $state) {
101 return if not assert_keyword_type($state, $schema, 'number');
102 return E($state, 'multipleOf value is not a positive number') if $schema->{multipleOf} <= 0;
103 return 1;
104}
105
106sub _eval_keyword_multipleOf ($self, $data, $schema, $state) {
107 return 1 if not is_type('number', $data);
108
109 # if either value is a float, use the bignum library for the calculation for an accurate remainder
110 if (ref($data) =~ /^Math::Big(?:Int|Float)$/ or ref($schema->{multipleOf}) =~ /^Math::Big(?:Int|Float)$/) {
111 $data = ref($data) =~ /^Math::Big(?:Int|Float)$/ ? $data->copy : Math::BigFloat->new($data);
112 my $divisor = ref($schema->{multipleOf}) =~ /^Math::Big(?:Int|Float)$/ ? $schema->{multipleOf} : Math::BigFloat->new($schema->{multipleOf});
113 my ($quotient, $remainder) = $data->bdiv($divisor);
114 return E($state, 'overflow while calculating quotient') if $quotient->is_inf;
115 return 1 if $remainder == 0;
116 }
117 else {
118 my $quotient = $data / $schema->{multipleOf};
119 return E($state, 'overflow while calculating quotient')
120 if "$]" >= 5.022 ? isinf($quotient) : $quotient =~ /^-?Inf$/i;
121 return 1 if int($quotient) == $quotient;
122 }
123
124 return E($state, 'value is not a multiple of %s', sprintf_num($schema->{multipleOf}));
125}
126
127829µs8110µs
# spent 152µs (42+110) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maximum which was called 8 times, avg 19µs/call: # 8 times (42µs+110µs) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 19µs/call
sub _traverse_keyword_maximum { shift->_assert_number(@_) }
# spent 110µs making 8 calls to JSON::Schema::Modern::Vocabulary::Validation::_assert_number, avg 14µs/call
128
129sub _eval_keyword_maximum ($self, $data, $schema, $state) {
130 return 1 if not is_type('number', $data);
131 return 1 if $data <= $schema->{maximum};
132 return E($state, 'value is larger than %s', sprintf_num($schema->{maximum}));
133}
134
135sub _traverse_keyword_exclusiveMaximum { shift->_assert_number(@_) }
136
137sub _eval_keyword_exclusiveMaximum ($self, $data, $schema, $state) {
138 return 1 if not is_type('number', $data);
139 return 1 if $data < $schema->{exclusiveMaximum};
140 return E($state, 'value is equal to or larger than %s', sprintf_num($schema->{exclusiveMaximum}));
141}
142
14321734µs21301µs
# spent 1.04ms (738µs+301µs) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minimum which was called 21 times, avg 49µs/call: # 21 times (738µs+301µs) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 49µs/call
sub _traverse_keyword_minimum { shift->_assert_number(@_) }
# spent 301µs making 21 calls to JSON::Schema::Modern::Vocabulary::Validation::_assert_number, avg 14µs/call
144
14539567µs
# spent 1.31ms (430µs+878µs) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minimum which was called 79 times, avg 17µs/call: # 79 times (430µs+878µs) by JSON::Schema::Modern::_eval_subschema at line 587 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 17µs/call
sub _eval_keyword_minimum ($self, $data, $schema, $state) {
14679159µs79878µs return 1 if not is_type('number', $data);
# spent 878µs making 79 calls to JSON::Schema::Modern::Utilities::is_type, avg 11µs/call
14779205µs return 1 if $data >= $schema->{minimum};
148 return E($state, 'value is smaller than %s', sprintf_num($schema->{minimum}));
149}
150
15115µs111µs
# spent 14µs (3+11) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_exclusiveMinimum which was called: # once (3µs+11µs) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm
sub _traverse_keyword_exclusiveMinimum { shift->_assert_number(@_) }
152
153sub _eval_keyword_exclusiveMinimum ($self, $data, $schema, $state) {
154 return 1 if not is_type('number', $data);
155 return 1 if $data > $schema->{exclusiveMinimum};
156 return E($state, 'value is equal to or smaller than %s', sprintf_num($schema->{exclusiveMinimum}));
157}
158
159849µs8144µs
# spent 185µs (41+144) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxLength which was called 8 times, avg 23µs/call: # 8 times (41µs+144µs) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 23µs/call
sub _traverse_keyword_maxLength { shift->_assert_non_negative_integer(@_) }
160
161sub _eval_keyword_maxLength ($self, $data, $schema, $state) {
162 return 1 if not is_type('string', $data);
163 return 1 if length($data) <= $schema->{maxLength};
164 return E($state, 'length is greater than %d', $schema->{maxLength});
165}
166
167847µs8110µs
# spent 140µs (30+110) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minLength which was called 8 times, avg 18µs/call: # 8 times (30µs+110µs) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 18µs/call
sub _traverse_keyword_minLength { shift->_assert_non_negative_integer(@_) }
168
169sub _eval_keyword_minLength ($self, $data, $schema, $state) {
170
171 return 1 if not is_type('string', $data);
172 return 1 if length($data) >= $schema->{minLength};
173 return E($state, 'length is less than %d', $schema->{minLength});
174}
175
17627647µs
# spent 3.78ms (406µs+3.37) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_pattern which was called 69 times, avg 55µs/call: # 69 times (406µs+3.37ms) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 55µs/call
sub _traverse_keyword_pattern ($self, $schema, $state) {
177 return if not assert_keyword_type($state, $schema, 'string')
17869161µs1383.37ms or not assert_pattern($state, $schema->{pattern});
# spent 2.57ms making 69 calls to JSON::Schema::Modern::Utilities::assert_pattern, avg 37µs/call # spent 799µs making 69 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 12µs/call
17969108µs return 1;
180}
181
1821305256µs
# spent 4.98ms (1.92+3.06) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_pattern which was called 261 times, avg 19µs/call: # 261 times (1.92ms+3.06ms) by JSON::Schema::Modern::_eval_subschema at line 587 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 19µs/call
sub _eval_keyword_pattern ($self, $data, $schema, $state) {
183261285µs2612.01ms return 1 if not is_type('string', $data);
# spent 2.01ms making 261 calls to JSON::Schema::Modern::Utilities::is_type, avg 8µs/call
184
1852612.24ms5221.04ms return 1 if $data =~ m/$schema->{pattern}/;
# spent 627µs making 261 calls to JSON::Schema::Modern::Vocabulary::Validation::CORE:match, avg 2µs/call # spent 413µs making 261 calls to JSON::Schema::Modern::Vocabulary::Validation::CORE:regcomp, avg 2µs/call
186 return E($state, 'pattern does not match');
187}
188
18914µs19µs
# spent 13µs (4+9) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxItems which was called: # once (4µs+9µs) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm
sub _traverse_keyword_maxItems { shift->_assert_non_negative_integer(@_) }
190
191sub _eval_keyword_maxItems ($self, $data, $schema, $state) {
192 return 1 if not is_type('array', $data);
193 return 1 if @$data <= $schema->{maxItems};
194 return E($state, 'more than %d item%s', $schema->{maxItems}, $schema->{maxItems} > 1 ? 's' : '');
195}
196
1971448µs14225µs
# spent 288µs (63+225) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minItems which was called 14 times, avg 21µs/call: # 14 times (63µs+225µs) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 21µs/call
sub _traverse_keyword_minItems { shift->_assert_non_negative_integer(@_) }
# spent 225µs making 14 calls to JSON::Schema::Modern::Vocabulary::Validation::_assert_non_negative_integer, avg 16µs/call
198
19961601.63ms
# spent 9.43ms (6.50+2.94) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minItems which was called 1232 times, avg 8µs/call: # 1232 times (6.50ms+2.94ms) by JSON::Schema::Modern::_eval_subschema at line 587 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 8µs/call
sub _eval_keyword_minItems ($self, $data, $schema, $state) {
20012323.37ms12322.94ms return 1 if not is_type('array', $data);
# spent 2.94ms making 1232 calls to JSON::Schema::Modern::Utilities::is_type, avg 2µs/call
201127255µs return 1 if @$data >= $schema->{minItems};
202 return E($state, 'fewer than %d item%s', $schema->{minItems}, $schema->{minItems} > 1 ? 's' : '');
203}
204
205124µs
# spent 94µs (34+60) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_uniqueItems which was called 3 times, avg 31µs/call: # 3 times (34µs+60µs) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 31µs/call
sub _traverse_keyword_uniqueItems ($self, $schema, $state) {
206310µs360µs return if not assert_keyword_type($state, $schema, 'boolean');
# spent 60µs making 3 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 20µs/call
20735µs return 1;
208}
209
21069401.93ms
# spent 74.5ms (8.70+65.8) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_uniqueItems which was called 1388 times, avg 54µs/call: # 1388 times (8.70ms+65.8ms) by JSON::Schema::Modern::_eval_subschema at line 587 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 54µs/call
sub _eval_keyword_uniqueItems ($self, $data, $schema, $state) {
21113883.21ms13881.90ms return 1 if not is_type('array', $data);
# spent 1.90ms making 1388 calls to JSON::Schema::Modern::Utilities::is_type, avg 1µs/call
2122831.03ms283775µs return 1 if not $schema->{uniqueItems};
# spent 775µs making 283 calls to JSON::PP::Boolean::__ANON__[JSON/PP/Boolean.pm:8], avg 3µs/call
2132831.06ms28363.1ms return 1 if is_elements_unique($data, my $equal_indices = []);
# spent 63.1ms making 283 calls to JSON::Schema::Modern::Utilities::is_elements_unique, avg 223µs/call
214 return E($state, 'items at indices %d and %d are not unique', @$equal_indices);
215}
216
217# Note: no effort is made to check if the 'contains' keyword has been disabled via its vocabulary.
218210µs235µs
# spent 51µs (16+35) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxContains which was called 2 times, avg 26µs/call: # 2 times (16µs+35µs) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 26µs/call
sub _traverse_keyword_maxContains { shift->_assert_non_negative_integer(@_) }
219
220sub _eval_keyword_maxContains ($self, $data, $schema, $state) {
221 return 1 if not exists $state->{_num_contains};
222 return 1 if not is_type('array', $data);
223
224 return E($state, 'contains too many matching items')
225 if $state->{_num_contains} > $schema->{maxContains};
226
227 return 1;
228}
229
23012µs18µs
# spent 10µs (2+8) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minContains which was called: # once (2µs+8µs) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm
sub _traverse_keyword_minContains { shift->_assert_non_negative_integer(@_) }
231
232sub _eval_keyword_minContains ($self, $data, $schema, $state) {
233 return 1 if not exists $state->{_num_contains};
234 return 1 if not is_type('array', $data);
235
236 return E($state, 'contains too few matching items')
237 if $state->{_num_contains} < $schema->{minContains};
238
239 return 1;
240}
241
242315µs359µs
# spent 76µs (17+59) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxProperties which was called 3 times, avg 25µs/call: # 3 times (17µs+59µs) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 25µs/call
sub _traverse_keyword_maxProperties { shift->_assert_non_negative_integer(@_) }
243
2447521µs
# spent 123µs (93+30) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_maxProperties which was called 15 times, avg 8µs/call: # 15 times (93µs+30µs) by JSON::Schema::Modern::_eval_subschema at line 587 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 8µs/call
sub _eval_keyword_maxProperties ($self, $data, $schema, $state) {
2451523µs1530µs return 1 if not is_type('object', $data);
# spent 30µs making 15 calls to JSON::Schema::Modern::Utilities::is_type, avg 2µs/call
2461549µs return 1 if keys %$data <= $schema->{maxProperties};
247 return E($state, 'more than %d propert%s', $schema->{maxProperties},
248 $schema->{maxProperties} > 1 ? 'ies' : 'y');
249}
250
25150191µs50846µs
# spent 1.10ms (250µs+846µs) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minProperties which was called 50 times, avg 22µs/call: # 50 times (250µs+846µs) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 22µs/call
sub _traverse_keyword_minProperties { shift->_assert_non_negative_integer(@_) }
# spent 846µs making 50 calls to JSON::Schema::Modern::Vocabulary::Validation::_assert_non_negative_integer, avg 17µs/call
252
2532425534µs
# spent 3.54ms (2.71+829µs) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minProperties which was called 485 times, avg 7µs/call: # 485 times (2.71ms+829µs) by JSON::Schema::Modern::_eval_subschema at line 587 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 7µs/call
sub _eval_keyword_minProperties ($self, $data, $schema, $state) {
254485573µs485829µs return 1 if not is_type('object', $data);
# spent 829µs making 485 calls to JSON::Schema::Modern::Utilities::is_type, avg 2µs/call
2554851.41ms return 1 if keys %$data >= $schema->{minProperties};
256 return E($state, 'fewer than %d propert%s', $schema->{minProperties},
257 $schema->{minProperties} > 1 ? 'ies' : 'y');
258}
259
2601080222µs
# spent 67.0ms (2.84+64.2) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_required which was called 270 times, avg 248µs/call: # 270 times (2.84ms+64.2ms) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 248µs/call
sub _traverse_keyword_required ($self, $schema, $state) {
261270299µs2701.40ms return if not assert_keyword_type($state, $schema, 'array');
# spent 1.40ms making 270 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 5µs/call
262 return E($state, '"required" element is not a string')
26310171.94ms10177.79ms if any { !is_type('string', $_) } $schema->{required}->@*;
# spent 4.55ms making 270 calls to List::Util::any, avg 17µs/call # spent 3.23ms making 747 calls to JSON::Schema::Modern::Utilities::is_type, avg 4µs/call
264270348µs27058.2ms return E($state, '"required" values are not unique') if not is_elements_unique($schema->{required});
# spent 58.2ms making 270 calls to JSON::Schema::Modern::Utilities::is_elements_unique, avg 216µs/call
265270496µs return 1;
266}
267
268239054.35ms
# spent 395ms (42.1+353) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_required which was called 4781 times, avg 83µs/call: # 4781 times (42.1ms+353ms) by JSON::Schema::Modern::_eval_subschema at line 587 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm, avg 83µs/call
sub _eval_keyword_required ($self, $data, $schema, $state) {
26947816.67ms478110.7ms return 1 if not is_type('object', $data);
# spent 10.7ms making 4781 calls to JSON::Schema::Modern::Utilities::is_type, avg 2µs/call
270
271478111.9ms my @missing = grep !exists $data->{$_}, $schema->{required}->@*;
27247816.93ms return 1 if not @missing;
27314356.71ms1435343ms return E($state, 'missing propert%s: %s', @missing > 1 ? 'ies' : 'y', join(', ', @missing));
# spent 343ms making 1435 calls to JSON::Schema::Modern::Utilities::E, avg 239µs/call
274}
275
27640s
# spent 99µs (83+16) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_dependentRequired which was called: # once (83µs+16µs) by JSON::Schema::Modern::_traverse_subschema at line 492 of /Users/ether/git/JSON-Schema-Modern/lib/JSON/Schema/Modern.pm
sub _traverse_keyword_dependentRequired ($self, $schema, $state) {
27711µs14µs return if not assert_keyword_type($state, $schema, 'object');
278
279114µs my $valid = 1;
280117µs10s foreach my $property (sort keys $schema->{dependentRequired}->%*) {
281 $valid = E({ %$state, _schema_path_suffix => $property }, 'value is not an array'), next
28211µs13µs if not is_type('array', $schema->{dependentRequired}{$property});
# spent 3µs making 1 call to JSON::Schema::Modern::Utilities::is_type
283
28412µs foreach my $index (0..$schema->{dependentRequired}{$property}->$#*) {
285 $valid = E({ %$state, _schema_path_suffix => [ $property, $index ] }, 'element #%d is not a string', $index)
28612µs16µs if not is_type('string', $schema->{dependentRequired}{$property}[$index]);
# spent 6µs making 1 call to JSON::Schema::Modern::Utilities::is_type
287 }
288
289 $valid = E({ %$state, _schema_path_suffix => $property }, 'elements are not unique')
29013µs13µs if not is_elements_unique($schema->{dependentRequired}{$property});
291 }
29214µs return $valid;
293}
294
295sub _eval_keyword_dependentRequired ($self, $data, $schema, $state) {
296 return 1 if not is_type('object', $data);
297
298 my $valid = 1;
299 foreach my $property (sort keys $schema->{dependentRequired}->%*) {
300 next if not exists $data->{$property};
301
302 if (my @missing = grep !exists($data->{$_}), $schema->{dependentRequired}{$property}->@*) {
303 $valid = E({ %$state, _schema_path_suffix => $property },
304 'missing propert%s: %s', @missing > 1 ? 'ies' : 'y', join(', ', @missing));
305 }
306 }
307
308 return 1 if $valid;
309 return E($state, 'not all dependencies are satisfied');
310}
311
31212020µs
# spent 422µs (115+307) within JSON::Schema::Modern::Vocabulary::Validation::_assert_number which was called 30 times, avg 14µs/call: # 21 times (80µs+221µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minimum at line 143, avg 14µs/call # 8 times (31µs+79µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maximum at line 127, avg 14µs/call # once (4µs+7µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_exclusiveMinimum at line 151
sub _assert_number ($self, $schema, $state) {
3133037µs30307µs return if not assert_keyword_type($state, $schema, 'number');
# spent 307µs making 30 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 10µs/call
3143051µs return 1;
315}
316
31734866µs
# spent 1.44ms (446µs+990µs) within JSON::Schema::Modern::Vocabulary::Validation::_assert_non_negative_integer which was called 87 times, avg 17µs/call: # 50 times (248µs+598µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minProperties at line 251, avg 17µs/call # 14 times (63µs+162µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minItems at line 197, avg 16µs/call # 8 times (67µs+77µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxLength at line 159, avg 18µs/call # 8 times (34µs+76µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minLength at line 167, avg 14µs/call # 3 times (18µs+41µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxProperties at line 242, avg 20µs/call # 2 times (10µs+25µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxContains at line 218, avg 18µs/call # once (3µs+6µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxItems at line 189 # once (3µs+5µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minContains at line 230
sub _assert_non_negative_integer ($self, $schema, $state) {
3188798µs87990µs return if not assert_keyword_type($state, $schema, 'integer');
# spent 990µs making 87 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 11µs/call
319 return E($state, '%s value is not a non-negative integer', $state->{keyword})
3208780µs if $schema->{$state->{keyword}} < 0;
32187235µs return 1;
322}
323
32418µs1;
325149µs1565µs__END__
 
# spent 627µs within JSON::Schema::Modern::Vocabulary::Validation::CORE:match which was called 261 times, avg 2µs/call: # 261 times (627µs+0s) by JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_pattern at line 185, avg 2µs/call
sub JSON::Schema::Modern::Vocabulary::Validation::CORE:match; # opcode
# spent 413µs within JSON::Schema::Modern::Vocabulary::Validation::CORE:regcomp which was called 261 times, avg 2µs/call: # 261 times (413µs+0s) by JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_pattern at line 185, avg 2µs/call
sub JSON::Schema::Modern::Vocabulary::Validation::CORE:regcomp; # opcode
# spent 0s within JSON::Schema::Modern::Vocabulary::Validation::CORE:sort which was called: # once (0s+0s) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_dependentRequired at line 280
sub JSON::Schema::Modern::Vocabulary::Validation::CORE:sort; # opcode