← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Wed Dec 14 15:33:55 2022
Reported on Wed Dec 14 15:40:04 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Vocabulary/Validation.pm
StatementsExecuted 804128 statements in 919ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
3564811340ms896msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_typeJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_type
9407521332ms332msJSON::Schema::Modern::Vocabulary::Validation::::keywordsJSON::Schema::Modern::Vocabulary::Validation::keywords
47951150.4ms446msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_requiredJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_required
15381117.5ms218msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_enumJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_enum
12081113.1ms273msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_constJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_const
13811112.8ms37.9msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_typeJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_type
1403118.76ms80.0msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_uniqueItemsJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_uniqueItems
1244116.51ms9.58msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_minItemsJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minItems
485113.26ms4.38msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_minPropertiesJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minProperties
276112.90ms73.9msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_requiredJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_required
262112.24ms6.07msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_patternJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_pattern
26211720µs720µsJSON::Schema::Modern::Vocabulary::Validation::::CORE:matchJSON::Schema::Modern::Vocabulary::Validation::CORE:match (opcode)
6911554µs4.33msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_patternJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_pattern
8781514µs1.60msJSON::Schema::Modern::Vocabulary::Validation::::_assert_non_negative_integerJSON::Schema::Modern::Vocabulary::Validation::_assert_non_negative_integer
7911488µs1.42msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_minimumJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minimum
6011424µs12.3msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_enumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_enum
26211423µs423µsJSON::Schema::Modern::Vocabulary::Validation::::CORE:regcompJSON::Schema::Modern::Vocabulary::Validation::CORE:regcomp (opcode)
5011185µs1.07msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minPropertiesJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minProperties
3031109µs430µsJSON::Schema::Modern::Vocabulary::Validation::::_assert_numberJSON::Schema::Modern::Vocabulary::Validation::_assert_number
9511108µs108µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_constJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_const
151186µs107µsJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_maxPropertiesJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_maxProperties
211172µs368µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minimumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minimum
141147µs265µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minItemsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minItems
11145µs60µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_dependentRequiredJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_dependentRequired
81130µs150µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maximumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maximum
81126µs222µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maxLengthJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxLength
81125µs176µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minLengthJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minLength
11125µs28µsModule::Runtime::::BEGIN@1.310 Module::Runtime::BEGIN@1.310
11120µs29µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maxItemsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxItems
21115µs66µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maxContainsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxContains
31114µs82µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maxPropertiesJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxProperties
11112µs627µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@11JSON::Schema::Modern::Vocabulary::Validation::BEGIN@11
11111µs7.67msJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@19JSON::Schema::Modern::Vocabulary::Validation::BEGIN@19
11110µs30µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@13JSON::Schema::Modern::Vocabulary::Validation::BEGIN@13
11110µs20µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@15JSON::Schema::Modern::Vocabulary::Validation::BEGIN@15
11110µs67µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@20JSON::Schema::Modern::Vocabulary::Validation::BEGIN@20
11110µs309µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@21JSON::Schema::Modern::Vocabulary::Validation::BEGIN@21
31110µs76µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_uniqueItemsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_uniqueItems
1119µs23µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@14JSON::Schema::Modern::Vocabulary::Validation::BEGIN@14
1119µs9µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@9JSON::Schema::Modern::Vocabulary::Validation::BEGIN@9
1117µs90µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@12JSON::Schema::Modern::Vocabulary::Validation::BEGIN@12
1117µs36µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@17JSON::Schema::Modern::Vocabulary::Validation::BEGIN@17
1116µs186µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@10JSON::Schema::Modern::Vocabulary::Validation::BEGIN@10
1116µs14µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@16JSON::Schema::Modern::Vocabulary::Validation::BEGIN@16
1116µs20µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@18JSON::Schema::Modern::Vocabulary::Validation::BEGIN@18
1116µs35µsModule::Runtime::::BEGIN@2.311 Module::Runtime::BEGIN@2.311
1115µs19µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_exclusiveMinimumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_exclusiveMinimum
5113µs3µsJSON::Schema::Modern::Vocabulary::Validation::::evaluation_orderJSON::Schema::Modern::Vocabulary::Validation::evaluation_order
1112µs18µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minContainsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minContains
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__[:264]JSON::Schema::Modern::Vocabulary::Validation::__ANON__[:264]
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__[:86]JSON::Schema::Modern::Vocabulary::Validation::__ANON__[:86]
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
1227µs231µs
# spent 28µs (25+3) within Module::Runtime::BEGIN@1.310 which was called: # once (25µs+3µs) by Module::Runtime::require_module at line 1
use strict;
# spent 28µs making 1 call to Module::Runtime::BEGIN@1.310 # spent 3µs making 1 call to strict::import
2233µs264µs
# spent 35µs (6+29) within Module::Runtime::BEGIN@2.311 which was called: # once (6µs+29µs) by Module::Runtime::require_module at line 2
use warnings;
# spent 35µs making 1 call to Module::Runtime::BEGIN@2.311 # spent 29µ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.552';
8
9227µs19µs
# spent 9µs within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@9 which was called: # once (9µs+0s) by Module::Runtime::require_module at line 9
use 5.020;
10218µs2366µs
# spent 186µs (6+180) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@10 which was called: # once (6µs+180µs) by Module::Runtime::require_module at line 10
use Moo;
# spent 186µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@10 # spent 180µs making 1 call to Moo::import
11325µs31.24ms
# spent 627µs (12+615) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@11 which was called: # once (12µs+615µs) by Module::Runtime::require_module at line 11
use strictures 2;
# spent 627µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@11 # spent 600µs making 1 call to strictures::import # spent 14µs making 1 call to strictures::VERSION
12231µs2173µs
# spent 90µs (7+83) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@12 which was called: # once (7µs+83µs) by Module::Runtime::require_module at line 12
use experimental qw(signatures postderef);
# spent 90µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@12 # spent 83µs making 1 call to experimental::import
13222µs233µs
# spent 30µs (10+20) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@13 which was called: # once (10µs+20µs) by Module::Runtime::require_module at line 13
use if "$]" >= 5.022, experimental => 're_strict';
# spent 30µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@13 # spent 3µs making 1 call to if::import
14218µs225µs
# spent 23µs (9+14) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@14 which was called: # once (9µs+14µs) by Module::Runtime::require_module at line 14
no if "$]" >= 5.031009, feature => 'indirect';
# spent 23µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@14 # spent 2µs making 1 call to if::unimport
15216µs221µs
# spent 20µs (10+10) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@15 which was called: # once (10µs+10µ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
16212µs214µs
# spent 14µs (6+8) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@16 which was called: # once (6µs+8µs) by Module::Runtime::require_module at line 16
no if "$]" >= 5.033006, feature => 'bareword_filehandles';
# spent 14µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@16 # spent 0s making 1 call to if::unimport
17217µs243µs
# spent 36µs (7+29) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@17 which was called: # once (7µs+29µs) by Module::Runtime::require_module at line 17
use List::Util 'any';
# spent 36µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@17 # spent 7µs making 1 call to List::Util::import
18329µs334µs
# spent 20µs (6+14) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@18 which was called: # once (6µs+14µs) by Module::Runtime::require_module at line 18
use Ref::Util 0.100 'is_plain_arrayref';
# spent 20µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@18 # spent 7µs making 1 call to Exporter::import # spent 7µs making 1 call to UNIVERSAL::VERSION
19267µs27.68ms
# spent 7.67ms (11µs+7.66) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@19 which was called: # once (11µs+7.66ms) by Module::Runtime::require_module at line 19
use if "$]" >= 5.022, POSIX => 'isinf';
# spent 7.67ms making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@19 # spent 1µs making 1 call to if::import
20228µs2124µs
# spent 67µs (10+57) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@20 which was called: # once (10µs+57µ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 67µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@20 # spent 57µs making 1 call to Exporter::import
2122.18ms2608µs
# spent 309µs (10+299) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@21 which was called: # once (10µs+299µs) by Module::Runtime::require_module at line 21
use namespace::clean;
# spent 309µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@21 # spent 299µs making 1 call to namespace::clean::import
22
2312µs1457µswith 'JSON::Schema::Modern::Vocabulary';
# spent 457µ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/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern.pm:670] at line 666 of JSON/Schema/Modern.pm
sub vocabulary {
2613µ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
3058µ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 322 of JSON/Schema/Modern/Vocabulary/Core.pm, avg 600ns/call
sub evaluation_order { 2 }
31
3228222554.5ms
# spent 332ms within JSON::Schema::Modern::Vocabulary::Validation::keywords which was called 94075 times, avg 4µs/call: # 91595 times (325ms+0s) by JSON::Schema::Modern::_eval_subschema at line 535 of JSON/Schema/Modern.pm, avg 4µs/call # 2480 times (7.89ms+0s) by JSON::Schema::Modern::_traverse_subschema at line 447 of JSON/Schema/Modern.pm, avg 3µs/call
sub keywords ($self, $spec_version) {
33 return (
3494075333ms 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
445524836µs
# spent 37.9ms (12.8+25.1) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_type which was called 1381 times, avg 27µs/call: # 1381 times (12.8ms+25.1ms) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm, avg 27µs/call
sub _traverse_keyword_type ($self, $schema, $state) {
4513812.91ms if (is_plain_arrayref($schema->{type})) {
467683µs return E($state, 'type array is empty') if not $schema->{type}->@*;
4776236µs foreach my $type ($schema->{type}->@*) {
48 return E($state, 'unrecognized type "%s"', $type//'<null>')
49692855µs158339µs if not any { ($type//'') eq $_ } qw(null boolean object array string number integer);
# spent 339µs making 158 calls to List::Util::any, avg 2µs/call
50 }
5176132µs763.15ms return E($state, '"type" values are not unique') if not is_elements_unique($schema->{type});
# spent 3.15ms making 76 calls to JSON::Schema::Modern::Utilities::is_elements_unique, avg 42µs/call
52 }
53 else {
5413051.65ms130517.9ms return if not assert_keyword_type($state, $schema, 'string');
# spent 17.9ms making 1305 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 14µs/call
55 return E($state, 'unrecognized type "%s"', $schema->{type}//'<null>')
5664347.96ms13053.73ms if not any { ($schema->{type}//'') eq $_ } qw(null boolean object array string number integer);
# spent 3.73ms making 1305 calls to List::Util::any, avg 3µs/call
57 }
5813812.11ms return 1;
59}
60
6117824034.5ms
# spent 896ms (340+556) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_type which was called 35648 times, avg 25µs/call: # 35648 times (340ms+556ms) by JSON::Schema::Modern::_eval_subschema at line 548 of JSON/Schema/Modern.pm, avg 25µs/call
sub _eval_keyword_type ($self, $data, $schema, $state) {
623564856.5ms35648186ms my $type = get_type($data);
# spent 186ms making 35648 calls to JSON::Schema::Modern::Utilities::get_type, avg 5µs/call
633564821.4ms if (is_plain_arrayref($schema->{type})) {
64 return 1 if any {
65 $type eq $_ or ($_ eq 'number' and $type eq 'integer')
6626766150ms or ($_ eq 'boolean' and $state->{scalarref_booleans} and $type eq 'reference to SCALAR')
672327493.5ms2327458.1ms } $schema->{type}->@*;
# spent 58.1ms making 23274 calls to List::Util::any, avg 2µ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')
721237427.8ms or ($schema->{type} eq 'boolean' and $state->{scalarref_booleans} and $type eq 'reference to SCALAR');
7311154.83ms1115312ms return E($state, 'got %s, not %s', $type, $schema->{type});
# spent 312ms making 1115 calls to JSON::Schema::Modern::Utilities::E, avg 280µs/call
74 }
75}
76
7724049µs
# spent 12.3ms (424µs+11.9) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_enum which was called 60 times, avg 205µs/call: # 60 times (424µs+11.9ms) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm, avg 205µs/call
sub _traverse_keyword_enum ($self, $schema, $state) {
786060µs60383µs return if not assert_keyword_type($state, $schema, 'array');
# spent 383µs making 60 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 6µs/call
7960138µs6011.5ms return E($state, '"enum" values are not unique') if not is_elements_unique($schema->{enum});
# spent 11.5ms making 60 calls to JSON::Schema::Modern::Utilities::is_elements_unique, avg 192µs/call
8060139µs return 1;
81}
82
8376902.53ms
# spent 218ms (17.5+200) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_enum which was called 1538 times, avg 141µs/call: # 1538 times (17.5ms+200ms) by JSON::Schema::Modern::_eval_subschema at line 548 of JSON/Schema/Modern.pm, avg 141µs/call
sub _eval_keyword_enum ($self, $data, $schema, $state) {
843076950µs my @s; my $idx = 0;
8515382.64ms my %s = ( scalarref_booleans => $state->{scalarref_booleans} );
86903229.8ms9032340ms return 1 if any { is_equal($data, $_, $s[$idx++] = {%s}) } $schema->{enum}->@*;
# spent 182ms making 1538 calls to List::Util::any, avg 118µs/call # spent 158ms making 7494 calls to JSON::Schema::Modern::Utilities::is_equal, avg 21µs/call
87 return E($state, 'value does not match'
88 .(!(grep $_->{path}, @s) ? ''
8966537µs6618.1ms : ' (differences start '.join(', ', map 'from item #'.$_.' at "'.$s[$_]->{path}.'"', 0..$#s).')'));
# spent 18.1ms making 66 calls to JSON::Schema::Modern::Utilities::E, avg 275µs/call
90}
91
9295214µs
# spent 108µs within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_const which was called 95 times, avg 1µs/call: # 95 times (108µs+0s) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm, avg 1µs/call
sub _traverse_keyword_const { 1 }
93
9460401.70ms
# spent 273ms (13.1+260) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_const which was called 1208 times, avg 226µs/call: # 1208 times (13.1ms+260ms) by JSON::Schema::Modern::_eval_subschema at line 548 of JSON/Schema/Modern.pm, avg 226µs/call
sub _eval_keyword_const ($self, $data, $schema, $state) {
9512081.74ms my %s = ( scalarref_booleans => $state->{scalarref_booleans} );
9612084.63ms120843.2ms return 1 if is_equal($data, $schema->{const}, my $s = { scalarref_booleans => $state->{scalarref_booleans} });
# spent 43.2ms making 1208 calls to JSON::Schema::Modern::Utilities::is_equal, avg 36µs/call
97 return E($state, 'value does not match'
987994.53ms799217ms .($s->{path} ? ' (differences start at "'.$s->{path}.'")' : ''));
# spent 217ms making 799 calls to JSON::Schema::Modern::Utilities::E, avg 271µs/call
99}
100
101sub _traverse_keyword_multipleOf ($self, $schema, $state) {
102 return if not assert_keyword_type($state, $schema, 'number');
103 return E($state, 'multipleOf value is not a positive number') if $schema->{multipleOf} <= 0;
104 return 1;
105}
106
107sub _eval_keyword_multipleOf ($self, $data, $schema, $state) {
108 return 1 if not is_type('number', $data);
109
110 # if either value is a float, use the bignum library for the calculation for an accurate remainder
111 if (ref($data) =~ /^Math::Big(?:Int|Float)$/ or ref($schema->{multipleOf}) =~ /^Math::Big(?:Int|Float)$/) {
112 $data = ref($data) =~ /^Math::Big(?:Int|Float)$/ ? $data->copy : Math::BigFloat->new($data);
113 my $divisor = ref($schema->{multipleOf}) =~ /^Math::Big(?:Int|Float)$/ ? $schema->{multipleOf} : Math::BigFloat->new($schema->{multipleOf});
114 my ($quotient, $remainder) = $data->bdiv($divisor);
115 return E($state, 'overflow while calculating quotient') if $quotient->is_inf;
116 return 1 if $remainder == 0;
117 }
118 else {
119 my $quotient = $data / $schema->{multipleOf};
120 return E($state, 'overflow while calculating quotient')
121 if "$]" >= 5.022 ? isinf($quotient) : $quotient =~ /^-?Inf$/i;
122 return 1 if int($quotient) == $quotient;
123 }
124
125 return E($state, 'value is not a multiple of %s', sprintf_num($schema->{multipleOf}));
126}
127
128849µs8120µs
# spent 150µs (30+120) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maximum which was called 8 times, avg 19µs/call: # 8 times (30µs+120µs) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm, avg 19µs/call
sub _traverse_keyword_maximum { shift->_assert_number(@_) }
# spent 120µs making 8 calls to JSON::Schema::Modern::Vocabulary::Validation::_assert_number, avg 15µs/call
129
130sub _eval_keyword_maximum ($self, $data, $schema, $state) {
131 return 1 if not is_type('number', $data);
132 return 1 if $data <= $schema->{maximum};
133 return E($state, 'value is larger than %s', sprintf_num($schema->{maximum}));
134}
135
136sub _traverse_keyword_exclusiveMaximum { shift->_assert_number(@_) }
137
138sub _eval_keyword_exclusiveMaximum ($self, $data, $schema, $state) {
139 return 1 if not is_type('number', $data);
140 return 1 if $data < $schema->{exclusiveMaximum};
141 return E($state, 'value is equal to or larger than %s', sprintf_num($schema->{exclusiveMaximum}));
142}
143
1442199µs21296µs
# spent 368µs (72+296) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minimum which was called 21 times, avg 18µs/call: # 21 times (72µs+296µs) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm, avg 18µs/call
sub _traverse_keyword_minimum { shift->_assert_number(@_) }
# spent 296µs making 21 calls to JSON::Schema::Modern::Vocabulary::Validation::_assert_number, avg 14µs/call
145
146395140µs
# spent 1.42ms (488µs+936µs) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minimum which was called 79 times, avg 18µs/call: # 79 times (488µs+936µs) by JSON::Schema::Modern::_eval_subschema at line 548 of JSON/Schema/Modern.pm, avg 18µs/call
sub _eval_keyword_minimum ($self, $data, $schema, $state) {
14779113µs79936µs return 1 if not is_type('number', $data);
# spent 936µs making 79 calls to JSON::Schema::Modern::Utilities::is_type, avg 12µs/call
14879253µs return 1 if $data >= $schema->{minimum};
149 return E($state, 'value is smaller than %s', sprintf_num($schema->{minimum}));
150}
151
15214µs114µs
# spent 19µs (5+14) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_exclusiveMinimum which was called: # once (5µs+14µs) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm
sub _traverse_keyword_exclusiveMinimum { shift->_assert_number(@_) }
153
154sub _eval_keyword_exclusiveMinimum ($self, $data, $schema, $state) {
155 return 1 if not is_type('number', $data);
156 return 1 if $data > $schema->{exclusiveMinimum};
157 return E($state, 'value is equal to or smaller than %s', sprintf_num($schema->{exclusiveMinimum}));
158}
159
160836µs8196µs
# spent 222µs (26+196) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxLength which was called 8 times, avg 28µs/call: # 8 times (26µs+196µs) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm, avg 28µs/call
sub _traverse_keyword_maxLength { shift->_assert_non_negative_integer(@_) }
161
162sub _eval_keyword_maxLength ($self, $data, $schema, $state) {
163 return 1 if not is_type('string', $data);
164 return 1 if length($data) <= $schema->{maxLength};
165 return E($state, 'length is greater than %d', $schema->{maxLength});
166}
167
168827µs8151µs
# spent 176µs (25+151) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minLength which was called 8 times, avg 22µs/call: # 8 times (25µs+151µs) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm, avg 22µs/call
sub _traverse_keyword_minLength { shift->_assert_non_negative_integer(@_) }
169
170sub _eval_keyword_minLength ($self, $data, $schema, $state) {
171
172 return 1 if not is_type('string', $data);
173 return 1 if length($data) >= $schema->{minLength};
174 return E($state, 'length is less than %d', $schema->{minLength});
175}
176
177276114µs
# spent 4.33ms (554µs+3.77) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_pattern which was called 69 times, avg 63µs/call: # 69 times (554µs+3.77ms) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm, avg 63µs/call
sub _traverse_keyword_pattern ($self, $schema, $state) {
178 return if not assert_keyword_type($state, $schema, 'string')
17969243µs1383.77ms or not assert_pattern($state, $schema->{pattern});
# spent 2.91ms making 69 calls to JSON::Schema::Modern::Utilities::assert_pattern, avg 42µs/call # spent 866µs making 69 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 13µs/call
18069148µs return 1;
181}
182
1831310279µs
# spent 6.07ms (2.24+3.82) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_pattern which was called 262 times, avg 23µs/call: # 262 times (2.24ms+3.82ms) by JSON::Schema::Modern::_eval_subschema at line 548 of JSON/Schema/Modern.pm, avg 23µs/call
sub _eval_keyword_pattern ($self, $data, $schema, $state) {
184262369µs2622.68ms return 1 if not is_type('string', $data);
# spent 2.68ms making 262 calls to JSON::Schema::Modern::Utilities::is_type, avg 10µs/call
185
1862622.57ms5241.14ms return 1 if $data =~ m/$schema->{pattern}/;
# spent 720µs making 262 calls to JSON::Schema::Modern::Vocabulary::Validation::CORE:match, avg 3µs/call # spent 423µs making 262 calls to JSON::Schema::Modern::Vocabulary::Validation::CORE:regcomp, avg 2µs/call
187 return E($state, 'pattern does not match');
188}
189
19013µs19µs
# spent 29µs (20+9) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxItems which was called: # once (20µs+9µs) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm
sub _traverse_keyword_maxItems { shift->_assert_non_negative_integer(@_) }
191
192sub _eval_keyword_maxItems ($self, $data, $schema, $state) {
193 return 1 if not is_type('array', $data);
194 return 1 if @$data <= $schema->{maxItems};
195 return E($state, 'more than %d item%s', $schema->{maxItems}, $schema->{maxItems} > 1 ? 's' : '');
196}
197
1981484µs14218µs
# spent 265µs (47+218) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minItems which was called 14 times, avg 19µs/call: # 14 times (47µs+218µs) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm, avg 19µs/call
sub _traverse_keyword_minItems { shift->_assert_non_negative_integer(@_) }
# spent 218µs making 14 calls to JSON::Schema::Modern::Vocabulary::Validation::_assert_non_negative_integer, avg 16µs/call
199
20062201.69ms
# spent 9.58ms (6.51+3.07) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minItems which was called 1244 times, avg 8µs/call: # 1244 times (6.51ms+3.07ms) by JSON::Schema::Modern::_eval_subschema at line 548 of JSON/Schema/Modern.pm, avg 8µs/call
sub _eval_keyword_minItems ($self, $data, $schema, $state) {
20112444.17ms12443.08ms return 1 if not is_type('array', $data);
# spent 3.08ms making 1244 calls to JSON::Schema::Modern::Utilities::is_type, avg 2µs/call
202129329µs return 1 if @$data >= $schema->{minItems};
203 return E($state, 'fewer than %d item%s', $schema->{minItems}, $schema->{minItems} > 1 ? 's' : '');
204}
205
206123µs
# spent 76µs (10+66) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_uniqueItems which was called 3 times, avg 25µs/call: # 3 times (10µs+66µs) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm, avg 25µs/call
sub _traverse_keyword_uniqueItems ($self, $schema, $state) {
20731µs366µs return if not assert_keyword_type($state, $schema, 'boolean');
# spent 66µs making 3 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 22µs/call
20836µs return 1;
209}
210
21170151.49ms
# spent 80.0ms (8.76+71.2) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_uniqueItems which was called 1403 times, avg 57µs/call: # 1403 times (8.76ms+71.2ms) by JSON::Schema::Modern::_eval_subschema at line 548 of JSON/Schema/Modern.pm, avg 57µs/call
sub _eval_keyword_uniqueItems ($self, $data, $schema, $state) {
21214033.62ms14032.02ms return 1 if not is_type('array', $data);
# spent 2.02ms making 1403 calls to JSON::Schema::Modern::Utilities::is_type, avg 1µs/call
2132881.12ms288793µs return 1 if not $schema->{uniqueItems};
# spent 793µs making 288 calls to JSON::PP::Boolean::__ANON__[JSON/PP/Boolean.pm:7], avg 3µs/call
2142881.23ms28868.4ms return 1 if is_elements_unique($data, my $equal_indices = []);
# spent 68.4ms making 288 calls to JSON::Schema::Modern::Utilities::is_elements_unique, avg 238µs/call
215 return E($state, 'items at indices %d and %d are not unique', @$equal_indices);
216}
217
218# Note: no effort is made to check if the 'contains' keyword has been disabled via its vocabulary.
219211µs251µs
# spent 66µs (15+51) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxContains which was called 2 times, avg 33µs/call: # 2 times (15µs+51µs) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm, avg 33µs/call
sub _traverse_keyword_maxContains { shift->_assert_non_negative_integer(@_) }
220
221sub _eval_keyword_maxContains ($self, $data, $schema, $state) {
222 return 1 if not exists $state->{_num_contains};
223 return 1 if not is_type('array', $data);
224
225 return E($state, 'contains too many matching items')
226 if $state->{_num_contains} > $schema->{maxContains};
227
228 return 1;
229}
230
23113µs116µs
# spent 18µs (2+16) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minContains which was called: # once (2µs+16µs) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm
sub _traverse_keyword_minContains { shift->_assert_non_negative_integer(@_) }
232
233sub _eval_keyword_minContains ($self, $data, $schema, $state) {
234 return 1 if not exists $state->{_num_contains};
235 return 1 if not is_type('array', $data);
236
237 return E($state, 'contains too few matching items')
238 if $state->{_num_contains} < $schema->{minContains};
239
240 return 1;
241}
242
243318µs368µs
# spent 82µs (14+68) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxProperties which was called 3 times, avg 27µs/call: # 3 times (14µs+68µs) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm, avg 27µs/call
sub _traverse_keyword_maxProperties { shift->_assert_non_negative_integer(@_) }
244
2457516µs
# spent 107µs (86+21) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_maxProperties which was called 15 times, avg 7µs/call: # 15 times (86µs+21µs) by JSON::Schema::Modern::_eval_subschema at line 548 of JSON/Schema/Modern.pm, avg 7µs/call
sub _eval_keyword_maxProperties ($self, $data, $schema, $state) {
2461516µs1521µs return 1 if not is_type('object', $data);
# spent 21µs making 15 calls to JSON::Schema::Modern::Utilities::is_type, avg 1µs/call
2471541µs return 1 if keys %$data <= $schema->{maxProperties};
248 return E($state, 'more than %d propert%s', $schema->{maxProperties},
249 $schema->{maxProperties} > 1 ? 'ies' : 'y');
250}
251
25250200µs50887µs
# spent 1.07ms (185µs+887µs) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minProperties which was called 50 times, avg 21µs/call: # 50 times (185µs+887µs) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm, avg 21µs/call
sub _traverse_keyword_minProperties { shift->_assert_non_negative_integer(@_) }
# spent 887µs making 50 calls to JSON::Schema::Modern::Vocabulary::Validation::_assert_non_negative_integer, avg 18µs/call
253
2542425620µs
# spent 4.38ms (3.26+1.12) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minProperties which was called 485 times, avg 9µs/call: # 485 times (3.26ms+1.12ms) by JSON::Schema::Modern::_eval_subschema at line 548 of JSON/Schema/Modern.pm, avg 9µs/call
sub _eval_keyword_minProperties ($self, $data, $schema, $state) {
255485684µs4851.12ms return 1 if not is_type('object', $data);
# spent 1.12ms making 485 calls to JSON::Schema::Modern::Utilities::is_type, avg 2µs/call
2564851.61ms return 1 if keys %$data >= $schema->{minProperties};
257 return E($state, 'fewer than %d propert%s', $schema->{minProperties},
258 $schema->{minProperties} > 1 ? 'ies' : 'y');
259}
260
2611104178µs
# spent 73.9ms (2.90+71.0) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_required which was called 276 times, avg 268µs/call: # 276 times (2.90ms+71.0ms) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm, avg 268µs/call
sub _traverse_keyword_required ($self, $schema, $state) {
262276248µs2761.36ms return if not assert_keyword_type($state, $schema, 'array');
# spent 1.36ms making 276 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 5µs/call
263 return E($state, '"required" element is not a string')
26410512.09ms10519.13ms if any { !is_type('string', $_) } $schema->{required}->@*;
# spent 5.29ms making 276 calls to List::Util::any, avg 19µs/call # spent 3.84ms making 775 calls to JSON::Schema::Modern::Utilities::is_type, avg 5µs/call
265276473µs27664.3ms return E($state, '"required" values are not unique') if not is_elements_unique($schema->{required});
# spent 64.3ms making 276 calls to JSON::Schema::Modern::Utilities::is_elements_unique, avg 233µs/call
266276476µs return 1;
267}
268
269239755.46ms
# spent 446ms (50.4+395) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_required which was called 4795 times, avg 93µs/call: # 4795 times (50.4ms+395ms) by JSON::Schema::Modern::_eval_subschema at line 548 of JSON/Schema/Modern.pm, avg 93µs/call
sub _eval_keyword_required ($self, $data, $schema, $state) {
27047957.00ms479512.4ms return 1 if not is_type('object', $data);
# spent 12.4ms making 4795 calls to JSON::Schema::Modern::Utilities::is_type, avg 3µs/call
271
272479517.8ms my @missing = grep !exists $data->{$_}, $schema->{required}->@*;
27347958.51ms return 1 if not @missing;
27414388.48ms1438383ms return E($state, 'missing propert%s: %s', @missing > 1 ? 'ies' : 'y', join(', ', @missing));
# spent 383ms making 1438 calls to JSON::Schema::Modern::Utilities::E, avg 266µs/call
275}
276
27748µs
# spent 60µs (45+15) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_dependentRequired which was called: # once (45µs+15µs) by JSON::Schema::Modern::_traverse_subschema at line 457 of JSON/Schema/Modern.pm
sub _traverse_keyword_dependentRequired ($self, $schema, $state) {
27812µs16µs return if not assert_keyword_type($state, $schema, 'object');
279
28012µs my $valid = 1;
281111µs10s foreach my $property (sort keys $schema->{dependentRequired}->%*) {
282 $valid = E({ %$state, _schema_path_suffix => $property }, 'value is not an array'), next
28311µs11µs if not is_type('array', $schema->{dependentRequired}{$property});
# spent 1µs making 1 call to JSON::Schema::Modern::Utilities::is_type
284
28514µs foreach my $index (0..$schema->{dependentRequired}{$property}->$#*) {
286 $valid = E({ %$state, _schema_path_suffix => [ $property, $index ] }, 'element #%d is not a string', $index)
28712µs15µs if not is_type('string', $schema->{dependentRequired}{$property}[$index]);
# spent 5µs making 1 call to JSON::Schema::Modern::Utilities::is_type
288 }
289
290 $valid = E({ %$state, _schema_path_suffix => $property }, 'elements are not unique')
29113µs13µs if not is_elements_unique($schema->{dependentRequired}{$property});
292 }
29314µs return $valid;
294}
295
296sub _eval_keyword_dependentRequired ($self, $data, $schema, $state) {
297 return 1 if not is_type('object', $data);
298
299 my $valid = 1;
300 foreach my $property (sort keys $schema->{dependentRequired}->%*) {
301 next if not exists $data->{$property};
302
303 if (my @missing = grep !exists($data->{$_}), $schema->{dependentRequired}{$property}->@*) {
304 $valid = E({ %$state, _schema_path_suffix => $property },
305 'missing propert%s: %s', @missing > 1 ? 'ies' : 'y', join(', ', @missing));
306 }
307 }
308
309 return 1 if $valid;
310 return E($state, 'not all dependencies are satisfied');
311}
312
31312032µs
# spent 430µs (109+321) within JSON::Schema::Modern::Vocabulary::Validation::_assert_number which was called 30 times, avg 14µs/call: # 21 times (79µs+217µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minimum at line 144, avg 14µs/call # 8 times (27µs+93µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maximum at line 128, avg 15µs/call # once (3µs+11µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_exclusiveMinimum at line 152
sub _assert_number ($self, $schema, $state) {
3143023µs30321µs return if not assert_keyword_type($state, $schema, 'number');
# spent 321µs making 30 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 11µs/call
3153051µs return 1;
316}
317
31834883µs
# spent 1.60ms (514µs+1.08) within JSON::Schema::Modern::Vocabulary::Validation::_assert_non_negative_integer which was called 87 times, avg 18µs/call: # 50 times (294µs+593µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minProperties at line 252, avg 18µs/call # 14 times (68µs+150µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minItems at line 198, avg 16µs/call # 8 times (74µs+122µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxLength at line 160, avg 24µs/call # 8 times (38µs+113µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minLength at line 168, avg 19µs/call # 3 times (20µs+48µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxProperties at line 243, avg 23µs/call # 2 times (14µs+37µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxContains at line 219, avg 26µs/call # once (3µs+13µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minContains at line 231 # once (3µs+6µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxItems at line 190
sub _assert_non_negative_integer ($self, $schema, $state) {
31987135µs871.08ms return if not assert_keyword_type($state, $schema, 'integer');
# spent 1.08ms making 87 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 12µs/call
320 return E($state, '%s value is not a non-negative integer', $state->{keyword})
3218777µs if $schema->{$state->{keyword}} < 0;
32287237µs return 1;
323}
324
32516µs1;
326
327131µs1391µs__END__
 
# spent 720µs within JSON::Schema::Modern::Vocabulary::Validation::CORE:match which was called 262 times, avg 3µs/call: # 262 times (720µs+0s) by JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_pattern at line 186, avg 3µs/call
sub JSON::Schema::Modern::Vocabulary::Validation::CORE:match; # opcode
# spent 423µs within JSON::Schema::Modern::Vocabulary::Validation::CORE:regcomp which was called 262 times, avg 2µs/call: # 262 times (423µs+0s) by JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_pattern at line 186, 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 281
sub JSON::Schema::Modern::Vocabulary::Validation::CORE:sort; # opcode