← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Wed Dec 14 15:57:08 2022
Reported on Wed Dec 14 16:00:37 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Vocabulary/Validation.pm
StatementsExecuted 427780 statements in 569ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
3564811401ms974msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_typeJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_type
47951152.8ms468msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_requiredJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_required
15381118.1ms248msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_enumJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_enum
13821116.9ms47.7msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_typeJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_type
12081114.2ms278msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_constJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_const
1403118.93ms86.1msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_uniqueItemsJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_uniqueItems
1244117.28ms11.1msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_minItemsJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minItems
485113.61ms4.87msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_minPropertiesJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minProperties
275113.36ms96.3msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_requiredJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_required
262112.70ms7.01msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_patternJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_pattern
26211826µs826µsJSON::Schema::Modern::Vocabulary::Validation::::CORE:matchJSON::Schema::Modern::Vocabulary::Validation::CORE:match (opcode)
6911522µs4.96msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_patternJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_pattern
8781504µs1.75msJSON::Schema::Modern::Vocabulary::Validation::::_assert_non_negative_integerJSON::Schema::Modern::Vocabulary::Validation::_assert_non_negative_integer
7911496µs1.42msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_minimumJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minimum
26211470µs470µsJSON::Schema::Modern::Vocabulary::Validation::::CORE:regcompJSON::Schema::Modern::Vocabulary::Validation::CORE:regcomp (opcode)
6011283µs601µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_enumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_enum
5011268µs1.41msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minPropertiesJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minProperties
9511147µs147µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_constJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_const
2111133µs528µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minimumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minimum
3031129µs543µsJSON::Schema::Modern::Vocabulary::Validation::::_assert_numberJSON::Schema::Modern::Vocabulary::Validation::_assert_number
1511116µs164µsJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_maxPropertiesJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_maxProperties
11155µs76µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_dependentRequiredJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_dependentRequired
141155µs256µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minItemsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minItems
11139µs132µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@20JSON::Schema::Modern::Vocabulary::Validation::BEGIN@20
11137µs73µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@17JSON::Schema::Modern::Vocabulary::Validation::BEGIN@17
81137µs183µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minLengthJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minLength
81135µs172µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maxLengthJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxLength
11133µs41µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minContainsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minContains
11133µs36µsModule::Runtime::::BEGIN@1.310 Module::Runtime::BEGIN@1.310
81131µs166µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maximumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maximum
11129µs37µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@15JSON::Schema::Modern::Vocabulary::Validation::BEGIN@15
11126µs65µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@13JSON::Schema::Modern::Vocabulary::Validation::BEGIN@13
11119µs944µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@11JSON::Schema::Modern::Vocabulary::Validation::BEGIN@11
31118µs73µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maxPropertiesJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxProperties
11116µs257µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@12JSON::Schema::Modern::Vocabulary::Validation::BEGIN@12
11116µs6.75msJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@19JSON::Schema::Modern::Vocabulary::Validation::BEGIN@19
22116µs16µsJSON::Schema::Modern::Vocabulary::Validation::::keywordsJSON::Schema::Modern::Vocabulary::Validation::keywords
21115µs62µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maxContainsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxContains
11112µs467µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@21JSON::Schema::Modern::Vocabulary::Validation::BEGIN@21
31112µs61µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_uniqueItemsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_uniqueItems
11110µs31µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@14JSON::Schema::Modern::Vocabulary::Validation::BEGIN@14
11110µs10µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@9JSON::Schema::Modern::Vocabulary::Validation::BEGIN@9
1118µs31µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@18JSON::Schema::Modern::Vocabulary::Validation::BEGIN@18
1116µs178µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@10JSON::Schema::Modern::Vocabulary::Validation::BEGIN@10
1116µs17µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@16JSON::Schema::Modern::Vocabulary::Validation::BEGIN@16
1116µs19µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_exclusiveMinimumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_exclusiveMinimum
1115µs36µsModule::Runtime::::BEGIN@2.311 Module::Runtime::BEGIN@2.311
1114µs14µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maxItemsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxItems
5113µs3µsJSON::Schema::Modern::Vocabulary::Validation::::evaluation_orderJSON::Schema::Modern::Vocabulary::Validation::evaluation_order
1111µs1µsJSON::Schema::Modern::Vocabulary::Validation::::CORE:sortJSON::Schema::Modern::Vocabulary::Validation::CORE:sort (opcode)
1111µs1µsJSON::Schema::Modern::Vocabulary::Validation::::vocabularyJSON::Schema::Modern::Vocabulary::Validation::vocabulary
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
1228µs239µs
# spent 36µs (33+3) within Module::Runtime::BEGIN@1.310 which was called: # once (33µs+3µs) by Module::Runtime::require_module at line 1
use strict;
# spent 36µs making 1 call to Module::Runtime::BEGIN@1.310 # spent 3µs making 1 call to strict::import
2245µs267µs
# spent 36µs (5+31) within Module::Runtime::BEGIN@2.311 which was called: # once (5µs+31µs) by Module::Runtime::require_module at line 2
use warnings;
# spent 36µs making 1 call to Module::Runtime::BEGIN@2.311 # spent 31µ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
712µsour $VERSION = '0.556';
8
9228µs110µs
# spent 10µs within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@9 which was called: # once (10µs+0s) by Module::Runtime::require_module at line 9
use 5.020;
10225µs2350µs
# spent 178µs (6+172) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@10 which was called: # once (6µs+172µs) by Module::Runtime::require_module at line 10
use Moo;
# spent 178µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@10 # spent 172µs making 1 call to Moo::import
11379µs31.87ms
# spent 944µs (19+925) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@11 which was called: # once (19µs+925µs) by Module::Runtime::require_module at line 11
use strictures 2;
# spent 944µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@11 # spent 913µs making 1 call to strictures::import # spent 12µs making 1 call to strictures::VERSION
12280µs2498µs
# spent 257µs (16+241) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@12 which was called: # once (16µs+241µs) by Module::Runtime::require_module at line 12
use experimental qw(signatures postderef);
# spent 257µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@12 # spent 241µs making 1 call to experimental::import
13237µs270µs
# spent 65µs (26+39) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@13 which was called: # once (26µs+39µs) by Module::Runtime::require_module at line 13
use if "$]" >= 5.022, experimental => 're_strict';
# spent 65µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@13 # spent 5µs making 1 call to if::import
14245µs234µs
# spent 31µs (10+21) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@14 which was called: # once (10µs+21µs) by Module::Runtime::require_module at line 14
no if "$]" >= 5.031009, feature => 'indirect';
# spent 31µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@14 # spent 3µs making 1 call to if::unimport
15218µs238µs
# spent 37µs (29+8) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@15 which was called: # once (29µs+8µs) by Module::Runtime::require_module at line 15
no if "$]" >= 5.033001, feature => 'multidimensional';
# spent 37µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@15 # spent 1µs making 1 call to if::unimport
16243µs218µs
# spent 17µs (6+11) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@16 which was called: # once (6µs+11µs) by Module::Runtime::require_module at line 16
no if "$]" >= 5.033006, feature => 'bareword_filehandles';
# spent 17µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@16 # spent 1µs making 1 call to if::unimport
17219µs285µs
# spent 73µs (37+36) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@17 which was called: # once (37µs+36µs) by Module::Runtime::require_module at line 17
use List::Util 'any';
# spent 73µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@17 # spent 12µs making 1 call to List::Util::import
18334µs354µs
# spent 31µs (8+23) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@18 which was called: # once (8µs+23µs) by Module::Runtime::require_module at line 18
use Ref::Util 0.100 'is_plain_arrayref';
# spent 31µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@18 # spent 13µs making 1 call to Exporter::import # spent 10µs making 1 call to UNIVERSAL::VERSION
192206µs26.76ms
# spent 6.75ms (16µs+6.74) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@19 which was called: # once (16µs+6.74ms) by Module::Runtime::require_module at line 19
use if "$]" >= 5.022, POSIX => 'isinf';
# spent 6.75ms making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@19 # spent 2µs making 1 call to if::import
20253µs2225µs
# spent 132µs (39+93) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@20 which was called: # once (39µs+93µ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 132µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@20 # spent 93µs making 1 call to Exporter::import
2123.66ms2922µs
# spent 467µs (12+455) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@21 which was called: # once (12µs+455µs) by Module::Runtime::require_module at line 21
use namespace::clean;
# spent 467µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@21 # spent 455µs making 1 call to namespace::clean::import
22
2314µs1934µswith 'JSON::Schema::Modern::Vocabulary';
# spent 934µs making 1 call to Moo::with
24
25
# spent 1µs within JSON::Schema::Modern::Vocabulary::Validation::vocabulary which was called: # once (1µs+0s) by JSON::Schema::Modern::__ANON__[/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern.pm:696] at line 692 of 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
3057µs
# spent 3µs within JSON::Schema::Modern::Vocabulary::Validation::evaluation_order which was called 5 times, avg 600ns/call: # 5 times (3µs+0s) by JSON::Schema::Modern::Vocabulary::Core::CORE:sort at line 331 of JSON/Schema/Modern/Vocabulary/Core.pm, avg 600ns/call
sub evaluation_order { 2 }
31
3264µs
# spent 16µs within JSON::Schema::Modern::Vocabulary::Validation::keywords which was called 2 times, avg 8µs/call: # once (8µs+0s) by JSON::Schema::Modern::_eval_subschema at line 559 of JSON/Schema/Modern.pm # once (8µs+0s) by JSON::Schema::Modern::_traverse_subschema at line 471 of JSON/Schema/Modern.pm
sub keywords ($self, $spec_version) {
33 return (
34221µ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
4455281.12ms
# spent 47.7ms (16.9+30.8) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_type which was called 1382 times, avg 35µs/call: # 1382 times (16.9ms+30.8ms) by JSON::Schema::Modern::_traverse_subschema at line 483 of JSON/Schema/Modern.pm, avg 35µs/call
sub _traverse_keyword_type ($self, $schema, $state) {
4513823.32ms if (is_plain_arrayref($schema->{type})) {
467658µs return E($state, 'type array is empty') if not $schema->{type}->@*;
477683µs foreach my $type ($schema->{type}->@*) {
48 return E($state, 'unrecognized type "%s"', $type//'<null>')
49692880µs158331µs if not any { ($type//'') eq $_ } qw(null boolean object array string number integer);
# spent 331µs making 158 calls to List::Util::any, avg 2µs/call
50 }
5176173µs763.58ms return E($state, '"type" values are not unique') if not is_elements_unique($schema->{type});
# spent 3.58ms making 76 calls to JSON::Schema::Modern::Utilities::is_elements_unique, avg 47µs/call
52 }
53 else {
5413061.87ms130622.3ms return if not assert_keyword_type($state, $schema, 'string');
# spent 22.3ms making 1306 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 17µs/call
55 return E($state, 'unrecognized type "%s"', $schema->{type}//'<null>')
56644010.2ms13064.60ms if not any { ($schema->{type}//'') eq $_ } qw(null boolean object array string number integer);
# spent 4.60ms making 1306 calls to List::Util::any, avg 4µs/call
57 }
5813823.69ms return 1;
59}
60
6117824044.4ms
# spent 974ms (401+573) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_type which was called 35648 times, avg 27µs/call: # 35648 times (401ms+573ms) by JSON::Schema::Modern::_eval_subschema at line 574 of JSON/Schema/Modern.pm, avg 27µs/call
sub _eval_keyword_type ($self, $data, $schema, $state) {
623564852.3ms35648185ms my $type = get_type($data);
# spent 185ms making 35648 calls to JSON::Schema::Modern::Utilities::get_type, avg 5µs/call
633564822.8ms if (is_plain_arrayref($schema->{type})) {
64 return 1 if any {
65 $type eq $_ or ($_ eq 'number' and $type eq 'integer')
6626766169ms or ($_ eq 'boolean' and $state->{scalarref_booleans} and $type eq 'reference to SCALAR')
6723274101ms2327463.1ms } $schema->{type}->@*;
# spent 63.1ms making 23274 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')
721237429.4ms or ($schema->{type} eq 'boolean' and $state->{scalarref_booleans} and $type eq 'reference to SCALAR');
7311155.32ms1115325ms return E($state, 'got %s, not %s', $type, $schema->{type});
# spent 325ms making 1115 calls to JSON::Schema::Modern::Utilities::E, avg 291µs/call
74 }
75}
76
7724045µs
# spent 601µs (283+318) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_enum which was called 60 times, avg 10µs/call: # 60 times (283µs+318µs) by JSON::Schema::Modern::_traverse_subschema at line 483 of JSON/Schema/Modern.pm, avg 10µs/call
sub _traverse_keyword_enum ($self, $schema, $state) {
786069µs60318µs return if not assert_keyword_type($state, $schema, 'array');
# spent 318µs making 60 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 5µs/call
7960117µs return 1;
80}
81
8276902.55ms
# spent 248ms (18.1+230) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_enum which was called 1538 times, avg 161µs/call: # 1538 times (18.1ms+230ms) by JSON::Schema::Modern::_eval_subschema at line 574 of JSON/Schema/Modern.pm, avg 161µs/call
sub _eval_keyword_enum ($self, $data, $schema, $state) {
833076938µs my @s; my $idx = 0;
8415382.50ms my %s = ( scalarref_booleans => $state->{scalarref_booleans} );
85903230.0ms9032397ms return 1 if any { is_equal($data, $_, $s[$idx++] = {%s}) } $schema->{enum}->@*;
# spent 210ms making 1538 calls to List::Util::any, avg 137µs/call # spent 187ms making 7494 calls to JSON::Schema::Modern::Utilities::is_equal, avg 25µs/call
86 return E($state, 'value does not match'
87 .(!(grep $_->{path}, @s) ? ''
8866535µs6619.6ms : ' (differences start '.join(', ', map 'from item #'.$_.' at "'.$s[$_]->{path}.'"', 0..$#s).')'));
# spent 19.6ms making 66 calls to JSON::Schema::Modern::Utilities::E, avg 297µs/call
89}
90
9195231µs
# spent 147µs within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_const which was called 95 times, avg 2µs/call: # 95 times (147µs+0s) by JSON::Schema::Modern::_traverse_subschema at line 483 of JSON/Schema/Modern.pm, avg 2µs/call
sub _traverse_keyword_const { 1 }
92
9360401.72ms
# spent 278ms (14.2+264) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_const which was called 1208 times, avg 230µs/call: # 1208 times (14.2ms+264ms) by JSON::Schema::Modern::_eval_subschema at line 574 of JSON/Schema/Modern.pm, avg 230µs/call
sub _eval_keyword_const ($self, $data, $schema, $state) {
9412081.76ms my %s = ( scalarref_booleans => $state->{scalarref_booleans} );
9512084.63ms120844.3ms return 1 if is_equal($data, $schema->{const}, my $s = { scalarref_booleans => $state->{scalarref_booleans} });
# spent 44.3ms making 1208 calls to JSON::Schema::Modern::Utilities::is_equal, avg 37µs/call
96 return E($state, 'value does not match'
977994.61ms799220ms .($s->{path} ? ' (differences start at "'.$s->{path}.'")' : ''));
# spent 220ms making 799 calls to JSON::Schema::Modern::Utilities::E, avg 275µ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
127837µs8135µs
# spent 166µs (31+135) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maximum which was called 8 times, avg 21µs/call: # 8 times (31µs+135µs) by JSON::Schema::Modern::_traverse_subschema at line 483 of JSON/Schema/Modern.pm, avg 21µs/call
sub _traverse_keyword_maximum { shift->_assert_number(@_) }
# spent 135µs making 8 calls to JSON::Schema::Modern::Vocabulary::Validation::_assert_number, avg 17µ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
1432192µs21395µs
# spent 528µs (133+395) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minimum which was called 21 times, avg 25µs/call: # 21 times (133µs+395µs) by JSON::Schema::Modern::_traverse_subschema at line 483 of JSON/Schema/Modern.pm, avg 25µs/call
sub _traverse_keyword_minimum { shift->_assert_number(@_) }
# spent 395µs making 21 calls to JSON::Schema::Modern::Vocabulary::Validation::_assert_number, avg 19µs/call
144
145395111µs
# spent 1.42ms (496µs+921µs) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minimum which was called 79 times, avg 18µs/call: # 79 times (496µs+921µs) by JSON::Schema::Modern::_eval_subschema at line 574 of JSON/Schema/Modern.pm, avg 18µs/call
sub _eval_keyword_minimum ($self, $data, $schema, $state) {
14679124µs79921µs return 1 if not is_type('number', $data);
# spent 921µs making 79 calls to JSON::Schema::Modern::Utilities::is_type, avg 12µs/call
14779182µs return 1 if $data >= $schema->{minimum};
148 return E($state, 'value is smaller than %s', sprintf_num($schema->{minimum}));
149}
150
15115µs113µs
# spent 19µs (6+13) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_exclusiveMinimum which was called: # once (6µs+13µs) by JSON::Schema::Modern::_traverse_subschema at line 483 of 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
159833µs8137µs
# spent 172µs (35+137) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxLength which was called 8 times, avg 22µs/call: # 8 times (35µs+137µs) by JSON::Schema::Modern::_traverse_subschema at line 483 of JSON/Schema/Modern.pm, avg 22µ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
167832µs8146µs
# spent 183µs (37+146) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minLength which was called 8 times, avg 23µs/call: # 8 times (37µs+146µs) by JSON::Schema::Modern::_traverse_subschema at line 483 of JSON/Schema/Modern.pm, avg 23µ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
17627653µs
# spent 4.96ms (522µs+4.44) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_pattern which was called 69 times, avg 72µs/call: # 69 times (522µs+4.44ms) by JSON::Schema::Modern::_traverse_subschema at line 483 of JSON/Schema/Modern.pm, avg 72µs/call
sub _traverse_keyword_pattern ($self, $schema, $state) {
177 return if not assert_keyword_type($state, $schema, 'string')
17869218µs1384.44ms or not assert_pattern($state, $schema->{pattern});
# spent 3.35ms making 69 calls to JSON::Schema::Modern::Utilities::assert_pattern, avg 49µs/call # spent 1.08ms making 69 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 16µs/call
17969154µs return 1;
180}
181
1821310403µs
# spent 7.01ms (2.70+4.31) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_pattern which was called 262 times, avg 27µs/call: # 262 times (2.70ms+4.31ms) by JSON::Schema::Modern::_eval_subschema at line 574 of JSON/Schema/Modern.pm, avg 27µs/call
sub _eval_keyword_pattern ($self, $data, $schema, $state) {
183262360µs2623.01ms return 1 if not is_type('string', $data);
# spent 3.01ms making 262 calls to JSON::Schema::Modern::Utilities::is_type, avg 12µs/call
184
1852622.88ms5241.30ms return 1 if $data =~ m/$schema->{pattern}/;
# spent 826µs making 262 calls to JSON::Schema::Modern::Vocabulary::Validation::CORE:match, avg 3µs/call # spent 470µs making 262 calls to JSON::Schema::Modern::Vocabulary::Validation::CORE:regcomp, avg 2µs/call
186 return E($state, 'pattern does not match');
187}
188
18912µs110µs
# spent 14µs (4+10) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxItems which was called: # once (4µs+10µs) by JSON::Schema::Modern::_traverse_subschema at line 483 of 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
1971458µs14201µs
# spent 256µs (55+201) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minItems which was called 14 times, avg 18µs/call: # 14 times (55µs+201µs) by JSON::Schema::Modern::_traverse_subschema at line 483 of JSON/Schema/Modern.pm, avg 18µs/call
sub _traverse_keyword_minItems { shift->_assert_non_negative_integer(@_) }
# spent 201µs making 14 calls to JSON::Schema::Modern::Vocabulary::Validation::_assert_non_negative_integer, avg 14µs/call
198
19962201.93ms
# spent 11.1ms (7.28+3.80) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minItems which was called 1244 times, avg 9µs/call: # 1244 times (7.28ms+3.80ms) by JSON::Schema::Modern::_eval_subschema at line 574 of JSON/Schema/Modern.pm, avg 9µs/call
sub _eval_keyword_minItems ($self, $data, $schema, $state) {
20012444.17ms12443.80ms return 1 if not is_type('array', $data);
# spent 3.80ms making 1244 calls to JSON::Schema::Modern::Utilities::is_type, avg 3µs/call
201129393µs return 1 if @$data >= $schema->{minItems};
202 return E($state, 'fewer than %d item%s', $schema->{minItems}, $schema->{minItems} > 1 ? 's' : '');
203}
204
205121µs
# spent 61µs (12+49) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_uniqueItems which was called 3 times, avg 20µs/call: # 3 times (12µs+49µs) by JSON::Schema::Modern::_traverse_subschema at line 483 of JSON/Schema/Modern.pm, avg 20µs/call
sub _traverse_keyword_uniqueItems ($self, $schema, $state) {
20633µs349µs return if not assert_keyword_type($state, $schema, 'boolean');
# spent 49µs making 3 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 16µs/call
20736µs return 1;
208}
209
21070151.74ms
# spent 86.1ms (8.93+77.2) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_uniqueItems which was called 1403 times, avg 61µs/call: # 1403 times (8.93ms+77.2ms) by JSON::Schema::Modern::_eval_subschema at line 574 of JSON/Schema/Modern.pm, avg 61µs/call
sub _eval_keyword_uniqueItems ($self, $data, $schema, $state) {
21114033.38ms14032.41ms return 1 if not is_type('array', $data);
# spent 2.41ms making 1403 calls to JSON::Schema::Modern::Utilities::is_type, avg 2µs/call
2122881.03ms288670µs return 1 if not $schema->{uniqueItems};
# spent 670µs making 288 calls to JSON::PP::Boolean::__ANON__[JSON/PP/Boolean.pm:7], avg 2µs/call
2132881.16ms28874.1ms return 1 if is_elements_unique($data, my $equal_indices = []);
# spent 74.1ms making 288 calls to JSON::Schema::Modern::Utilities::is_elements_unique, avg 257µ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.
218211µs247µs
# spent 62µs (15+47) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxContains which was called 2 times, avg 31µs/call: # 2 times (15µs+47µs) by JSON::Schema::Modern::_traverse_subschema at line 483 of JSON/Schema/Modern.pm, avg 31µ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
23013µs18µs
# spent 41µs (33+8) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minContains which was called: # once (33µs+8µs) by JSON::Schema::Modern::_traverse_subschema at line 483 of 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
242317µs355µs
# spent 73µs (18+55) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxProperties which was called 3 times, avg 24µs/call: # 3 times (18µs+55µs) by JSON::Schema::Modern::_traverse_subschema at line 483 of JSON/Schema/Modern.pm, avg 24µs/call
sub _traverse_keyword_maxProperties { shift->_assert_non_negative_integer(@_) }
243
2447515µs
# spent 164µs (116+48) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_maxProperties which was called 15 times, avg 11µs/call: # 15 times (116µs+48µs) by JSON::Schema::Modern::_eval_subschema at line 574 of JSON/Schema/Modern.pm, avg 11µs/call
sub _eval_keyword_maxProperties ($self, $data, $schema, $state) {
2451527µs1548µs return 1 if not is_type('object', $data);
# spent 48µs making 15 calls to JSON::Schema::Modern::Utilities::is_type, avg 3µs/call
2461574µ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
25150241µs501.15ms
# spent 1.41ms (268µs+1.15) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minProperties which was called 50 times, avg 28µs/call: # 50 times (268µs+1.15ms) by JSON::Schema::Modern::_traverse_subschema at line 483 of JSON/Schema/Modern.pm, avg 28µs/call
sub _traverse_keyword_minProperties { shift->_assert_non_negative_integer(@_) }
# spent 1.15ms making 50 calls to JSON::Schema::Modern::Vocabulary::Validation::_assert_non_negative_integer, avg 23µs/call
252
2532425594µs
# spent 4.87ms (3.61+1.26) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minProperties which was called 485 times, avg 10µs/call: # 485 times (3.61ms+1.26ms) by JSON::Schema::Modern::_eval_subschema at line 574 of JSON/Schema/Modern.pm, avg 10µs/call
sub _eval_keyword_minProperties ($self, $data, $schema, $state) {
254485826µs4851.26ms return 1 if not is_type('object', $data);
# spent 1.26ms making 485 calls to JSON::Schema::Modern::Utilities::is_type, avg 3µs/call
2554851.74ms 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
2601100256µs
# spent 96.3ms (3.36+93.0) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_required which was called 275 times, avg 350µs/call: # 275 times (3.36ms+93.0ms) by JSON::Schema::Modern::_traverse_subschema at line 483 of JSON/Schema/Modern.pm, avg 350µs/call
sub _traverse_keyword_required ($self, $schema, $state) {
261275303µs2751.70ms return if not assert_keyword_type($state, $schema, 'array');
# spent 1.70ms making 275 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 6µs/call
262 return E($state, '"required" element is not a string')
26310492.49ms104910.2ms if any { !is_type('string', $_) } $schema->{required}->@*;
# spent 6.04ms making 275 calls to List::Util::any, avg 22µs/call # spent 4.20ms making 774 calls to JSON::Schema::Modern::Utilities::is_type, avg 5µs/call
264275569µs27585.2ms return E($state, '"required" values are not unique') if not is_elements_unique($schema->{required});
# spent 85.2ms making 275 calls to JSON::Schema::Modern::Utilities::is_elements_unique, avg 310µs/call
265275814µs return 1;
266}
267
268239754.87ms
# spent 468ms (52.8+415) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_required which was called 4795 times, avg 98µs/call: # 4795 times (52.8ms+415ms) by JSON::Schema::Modern::_eval_subschema at line 574 of JSON/Schema/Modern.pm, avg 98µs/call
sub _eval_keyword_required ($self, $data, $schema, $state) {
26947958.05ms479516.1ms return 1 if not is_type('object', $data);
# spent 16.1ms making 4795 calls to JSON::Schema::Modern::Utilities::is_type, avg 3µs/call
270
271479513.1ms my @missing = grep !exists $data->{$_}, $schema->{required}->@*;
27247957.85ms return 1 if not @missing;
27314388.64ms1438399ms return E($state, 'missing propert%s: %s', @missing > 1 ? 'ies' : 'y', join(', ', @missing));
# spent 399ms making 1438 calls to JSON::Schema::Modern::Utilities::E, avg 277µs/call
274}
275
276416µs
# spent 76µs (55+21) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_dependentRequired which was called: # once (55µs+21µs) by JSON::Schema::Modern::_traverse_subschema at line 483 of JSON/Schema/Modern.pm
sub _traverse_keyword_dependentRequired ($self, $schema, $state) {
27712µs16µs return if not assert_keyword_type($state, $schema, 'object');
278
27913µs my $valid = 1;
280115µs11µs foreach my $property (sort keys $schema->{dependentRequired}->%*) {
281 $valid = E({ %$state, _schema_path_suffix => $property }, 'value is not an array'), next
28213µs13µs if not is_type('array', $schema->{dependentRequired}{$property});
# spent 3µs making 1 call to JSON::Schema::Modern::Utilities::is_type
283
28411µ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µs18µs if not is_type('string', $schema->{dependentRequired}{$property}[$index]);
# spent 8µ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 }
29219µ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
31212016µs
# spent 543µs (129+414) within JSON::Schema::Modern::Vocabulary::Validation::_assert_number which was called 30 times, avg 18µs/call: # 21 times (96µs+299µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minimum at line 143, avg 19µs/call # 8 times (29µs+106µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maximum at line 127, avg 17µs/call # once (4µs+9µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_exclusiveMinimum at line 151
sub _assert_number ($self, $schema, $state) {
3133030µs30414µs return if not assert_keyword_type($state, $schema, 'number');
# spent 414µs making 30 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 14µs/call
3143081µs return 1;
315}
316
31734892µs
# spent 1.75ms (504µs+1.25) within JSON::Schema::Modern::Vocabulary::Validation::_assert_non_negative_integer which was called 87 times, avg 20µs/call: # 50 times (330µs+816µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minProperties at line 251, avg 23µs/call # 14 times (62µs+139µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minItems at line 197, avg 14µs/call # 8 times (36µs+110µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minLength at line 167, avg 18µs/call # 8 times (42µs+95µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxLength at line 159, avg 17µs/call # 3 times (18µs+37µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxProperties at line 242, avg 18µs/call # 2 times (13µs+34µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxContains at line 218, avg 24µs/call # once (2µs+8µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxItems at line 189 # once (1µs+7µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minContains at line 230
sub _assert_non_negative_integer ($self, $schema, $state) {
3188798µs871.25ms return if not assert_keyword_type($state, $schema, 'integer');
# spent 1.25ms making 87 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 14µs/call
319 return E($state, '%s value is not a non-negative integer', $state->{keyword})
3208788µs if $schema->{$state->{keyword}} < 0;
32187201µs return 1;
322}
323
324111µs1;
325
326189µs1668µs__END__
 
# spent 826µs within JSON::Schema::Modern::Vocabulary::Validation::CORE:match which was called 262 times, avg 3µs/call: # 262 times (826µs+0s) by JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_pattern at line 185, avg 3µs/call
sub JSON::Schema::Modern::Vocabulary::Validation::CORE:match; # opcode
# spent 470µs within JSON::Schema::Modern::Vocabulary::Validation::CORE:regcomp which was called 262 times, avg 2µs/call: # 262 times (470µ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 1µs within JSON::Schema::Modern::Vocabulary::Validation::CORE:sort which was called: # once (1µs+0s) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_dependentRequired at line 280
sub JSON::Schema::Modern::Vocabulary::Validation::CORE:sort; # opcode