← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Wed Dec 14 16:10:05 2022
Reported on Wed Dec 14 16:12:58 2022

Filename/Users/ether/.perlbrew/libs/36.0@std/lib/perl5/JSON/Schema/Modern/Vocabulary/Validation.pm
StatementsExecuted 427780 statements in 605ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
3564811404ms1.03sJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_typeJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_type
47951155.8ms500msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_requiredJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_required
15381120.3ms241msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_enumJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_enum
12081114.5ms297msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_constJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_const
13821114.1ms40.8msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_typeJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_type
1403119.44ms85.9msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_uniqueItemsJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_uniqueItems
1244118.58ms13.0msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_minItemsJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minItems
485113.40ms4.55msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_minPropertiesJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minProperties
275113.32ms81.0msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_requiredJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_required
262112.74ms7.51msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_patternJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_pattern
26211874µs874µsJSON::Schema::Modern::Vocabulary::Validation::::CORE:matchJSON::Schema::Modern::Vocabulary::Validation::CORE:match (opcode)
7911719µs1.83msJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_minimumJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minimum
6911512µs4.37msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_patternJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_pattern
26211487µs487µsJSON::Schema::Modern::Vocabulary::Validation::::CORE:regcompJSON::Schema::Modern::Vocabulary::Validation::CORE:regcomp (opcode)
8781464µs1.76msJSON::Schema::Modern::Vocabulary::Validation::::_assert_non_negative_integerJSON::Schema::Modern::Vocabulary::Validation::_assert_non_negative_integer
5011308µs1.25msJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minPropertiesJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minProperties
6011285µs620µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_enumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_enum
9511168µs168µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_constJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_const
1511157µs198µsJSON::Schema::Modern::Vocabulary::Validation::::_eval_keyword_maxPropertiesJSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_maxProperties
3031148µs459µsJSON::Schema::Modern::Vocabulary::Validation::::_assert_numberJSON::Schema::Modern::Vocabulary::Validation::_assert_number
211186µs393µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minimumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minimum
81174µs229µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minLengthJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minLength
11155µs59µsModule::Runtime::::BEGIN@1.311 Module::Runtime::BEGIN@1.311
141154µs250µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minItemsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minItems
11141µs52µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_dependentRequiredJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_dependentRequired
81140µs317µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maxLengthJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxLength
21133µs107µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maxContainsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxContains
81130µs171µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maximumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maximum
31126µs123µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maxPropertiesJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxProperties
31126µs77µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_uniqueItemsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_uniqueItems
11121µs1.07msJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@11JSON::Schema::Modern::Vocabulary::Validation::BEGIN@11
11115µs7.67msJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@19JSON::Schema::Modern::Vocabulary::Validation::BEGIN@19
11115µs15µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@9JSON::Schema::Modern::Vocabulary::Validation::BEGIN@9
22115µs15µsJSON::Schema::Modern::Vocabulary::Validation::::keywordsJSON::Schema::Modern::Vocabulary::Validation::keywords
11114µs54µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@13JSON::Schema::Modern::Vocabulary::Validation::BEGIN@13
11112µs314µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@10JSON::Schema::Modern::Vocabulary::Validation::BEGIN@10
11112µs160µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@12JSON::Schema::Modern::Vocabulary::Validation::BEGIN@12
11112µs33µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@14JSON::Schema::Modern::Vocabulary::Validation::BEGIN@14
11112µs31µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@15JSON::Schema::Modern::Vocabulary::Validation::BEGIN@15
11112µs27µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_maxItemsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxItems
11110µs25µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@16JSON::Schema::Modern::Vocabulary::Validation::BEGIN@16
11110µs52µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@17JSON::Schema::Modern::Vocabulary::Validation::BEGIN@17
11110µs38µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@18JSON::Schema::Modern::Vocabulary::Validation::BEGIN@18
11110µs75µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@20JSON::Schema::Modern::Vocabulary::Validation::BEGIN@20
1119µs53µsModule::Runtime::::BEGIN@2.312 Module::Runtime::BEGIN@2.312
1117µs265µsJSON::Schema::Modern::Vocabulary::Validation::::BEGIN@21JSON::Schema::Modern::Vocabulary::Validation::BEGIN@21
1116µs17µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_exclusiveMinimumJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_exclusiveMinimum
1114µs15µsJSON::Schema::Modern::Vocabulary::Validation::::_traverse_keyword_minContainsJSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minContains
5113µs3µ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
1111µs1µsJSON::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
1240µs263µs
# spent 59µs (55+4) within Module::Runtime::BEGIN@1.311 which was called: # once (55µs+4µs) by Module::Runtime::require_module at line 1
use strict;
# spent 59µs making 1 call to Module::Runtime::BEGIN@1.311 # spent 4µs making 1 call to strict::import
2264µs297µs
# spent 53µs (9+44) within Module::Runtime::BEGIN@2.312 which was called: # once (9µs+44µs) by Module::Runtime::require_module at line 2
use warnings;
# spent 53µs making 1 call to Module::Runtime::BEGIN@2.312 # spent 44µ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
711µsour $VERSION = '0.558';
8
9241µs115µs
# spent 15µs within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@9 which was called: # once (15µs+0s) by Module::Runtime::require_module at line 9
use 5.020;
10239µs2616µs
# spent 314µs (12+302) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@10 which was called: # once (12µs+302µs) by Module::Runtime::require_module at line 10
use Moo;
# spent 314µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@10 # spent 302µs making 1 call to Moo::import
113102µs32.13ms
# spent 1.07ms (21µs+1.05) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@11 which was called: # once (21µs+1.05ms) by Module::Runtime::require_module at line 11
use strictures 2;
# spent 1.07ms making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@11 # spent 1.03ms making 1 call to strictures::import # spent 25µs making 1 call to strictures::VERSION
12253µs2308µs
# spent 160µs (12+148) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@12 which was called: # once (12µs+148µs) by Module::Runtime::require_module at line 12
use experimental qw(signatures postderef);
# spent 160µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@12 # spent 148µs making 1 call to experimental::import
13237µs260µs
# spent 54µs (14+40) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@13 which was called: # once (14µs+40µs) by Module::Runtime::require_module at line 13
use if "$]" >= 5.022, experimental => 're_strict';
# spent 54µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@13 # spent 6µs making 1 call to if::import
14235µs235µs
# spent 33µs (12+21) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@14 which was called: # once (12µs+21µs) by Module::Runtime::require_module at line 14
no if "$]" >= 5.031009, feature => 'indirect';
# spent 33µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@14 # spent 2µs making 1 call to if::unimport
15225µs233µs
# spent 31µs (12+19) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@15 which was called: # once (12µs+19µs) by Module::Runtime::require_module at line 15
no if "$]" >= 5.033001, feature => 'multidimensional';
# spent 31µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@15 # spent 2µs making 1 call to if::unimport
16235µs227µs
# spent 25µs (10+15) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@16 which was called: # once (10µs+15µs) by Module::Runtime::require_module at line 16
no if "$]" >= 5.033006, feature => 'bareword_filehandles';
# spent 25µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@16 # spent 2µs making 1 call to if::unimport
17227µs266µs
# spent 52µs (10+42) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@17 which was called: # once (10µs+42µs) by Module::Runtime::require_module at line 17
use List::Util 'any';
# spent 52µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@17 # spent 14µs making 1 call to List::Util::import
18345µs366µs
# spent 38µs (10+28) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@18 which was called: # once (10µs+28µs) by Module::Runtime::require_module at line 18
use Ref::Util 0.100 'is_plain_arrayref';
# spent 38µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@18 # spent 16µs making 1 call to Exporter::import # spent 12µs making 1 call to UNIVERSAL::VERSION
19266µs27.67ms
# spent 7.67ms (15µs+7.66) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@19 which was called: # once (15µ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
20229µs2140µs
# spent 75µs (10+65) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@20 which was called: # once (10µs+65µ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 75µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@20 # spent 65µs making 1 call to Exporter::import
2122.59ms2523µs
# spent 265µs (7+258) within JSON::Schema::Modern::Vocabulary::Validation::BEGIN@21 which was called: # once (7µs+258µs) by Module::Runtime::require_module at line 21
use namespace::clean;
# spent 265µs making 1 call to JSON::Schema::Modern::Vocabulary::Validation::BEGIN@21 # spent 258µs making 1 call to namespace::clean::import
22
2316µs1640µswith 'JSON::Schema::Modern::Vocabulary';
# spent 640µ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:700] at line 696 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
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 15µs within JSON::Schema::Modern::Vocabulary::Validation::keywords which was called 2 times, avg 7µs/call: # once (8µs+0s) by JSON::Schema::Modern::_traverse_subschema at line 475 of JSON/Schema/Modern.pm # once (7µs+0s) by JSON::Schema::Modern::_eval_subschema at line 563 of JSON/Schema/Modern.pm
sub keywords ($self, $spec_version) {
33 return (
34212µ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
445528866µs
# spent 40.8ms (14.1+26.7) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_type which was called 1382 times, avg 30µs/call: # 1382 times (14.1ms+26.7ms) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm, avg 30µs/call
sub _traverse_keyword_type ($self, $schema, $state) {
4513822.84ms if (is_plain_arrayref($schema->{type})) {
467636µs return E($state, 'type array is empty') if not $schema->{type}->@*;
4776121µs foreach my $type ($schema->{type}->@*) {
48 return E($state, 'unrecognized type "%s"', $type//'<null>')
49692802µs158264µs if not any { ($type//'') eq $_ } qw(null boolean object array string number integer);
# spent 264µs making 158 calls to List::Util::any, avg 2µs/call
50 }
5176119µs763.57ms return E($state, '"type" values are not unique') if not is_elements_unique($schema->{type});
# spent 3.57ms making 76 calls to JSON::Schema::Modern::Utilities::is_elements_unique, avg 47µs/call
52 }
53 else {
5413061.51ms130618.9ms return if not assert_keyword_type($state, $schema, 'string');
# spent 18.9ms making 1306 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 14µs/call
55 return E($state, 'unrecognized type "%s"', $schema->{type}//'<null>')
5664408.95ms13064.02ms if not any { ($schema->{type}//'') eq $_ } qw(null boolean object array string number integer);
# spent 4.02ms making 1306 calls to List::Util::any, avg 3µs/call
57 }
5813822.52ms return 1;
59}
60
6117824039.1ms
# spent 1.03s (404ms+623ms) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_type which was called 35648 times, avg 29µs/call: # 35648 times (404ms+623ms) by JSON::Schema::Modern::_eval_subschema at line 578 of JSON/Schema/Modern.pm, avg 29µs/call
sub _eval_keyword_type ($self, $data, $schema, $state) {
623564857.5ms35648202ms my $type = get_type($data);
# spent 202ms making 35648 calls to JSON::Schema::Modern::Utilities::get_type, avg 6µs/call
633564824.1ms if (is_plain_arrayref($schema->{type})) {
64 return 1 if any {
65 $type eq $_ or ($_ eq 'number' and $type eq 'integer')
6626766186ms or ($_ eq 'boolean' and $state->{scalarref_booleans} and $type eq 'reference to SCALAR')
6723274105ms2327468.0ms } $schema->{type}->@*;
# spent 68.0ms 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')
721237431.5ms or ($schema->{type} eq 'boolean' and $state->{scalarref_booleans} and $type eq 'reference to SCALAR');
7311155.66ms1115353ms return E($state, 'got %s, not %s', $type, $schema->{type});
# spent 353ms making 1115 calls to JSON::Schema::Modern::Utilities::E, avg 317µs/call
74 }
75}
76
7724058µs
# spent 620µs (285+335) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_enum which was called 60 times, avg 10µs/call: # 60 times (285µs+335µs) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm, avg 10µs/call
sub _traverse_keyword_enum ($self, $schema, $state) {
786079µs60335µs return if not assert_keyword_type($state, $schema, 'array');
# spent 335µs making 60 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 6µs/call
796099µs return 1;
80}
81
8276902.49ms
# spent 241ms (20.3+220) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_enum which was called 1538 times, avg 156µs/call: # 1538 times (20.3ms+220ms) by JSON::Schema::Modern::_eval_subschema at line 578 of JSON/Schema/Modern.pm, avg 156µs/call
sub _eval_keyword_enum ($self, $data, $schema, $state) {
8330761.03ms my @s; my $idx = 0;
8415382.92ms my %s = ( scalarref_booleans => $state->{scalarref_booleans} );
85903235.3ms9032373ms return 1 if any { is_equal($data, $_, $s[$idx++] = {%s}) } $schema->{enum}->@*;
# spent 200ms making 1538 calls to List::Util::any, avg 130µs/call # spent 174ms making 7494 calls to JSON::Schema::Modern::Utilities::is_equal, avg 23µs/call
86 return E($state, 'value does not match'
87 .(!(grep $_->{path}, @s) ? ''
8866673µs6620.6ms : ' (differences start '.join(', ', map 'from item #'.$_.' at "'.$s[$_]->{path}.'"', 0..$#s).')'));
# spent 20.6ms making 66 calls to JSON::Schema::Modern::Utilities::E, avg 312µs/call
89}
90
9195213µs
# spent 168µs within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_const which was called 95 times, avg 2µs/call: # 95 times (168µs+0s) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm, avg 2µs/call
sub _traverse_keyword_const { 1 }
92
9360401.90ms
# spent 297ms (14.5+283) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_const which was called 1208 times, avg 246µs/call: # 1208 times (14.5ms+283ms) by JSON::Schema::Modern::_eval_subschema at line 578 of JSON/Schema/Modern.pm, avg 246µs/call
sub _eval_keyword_const ($self, $data, $schema, $state) {
9412081.94ms my %s = ( scalarref_booleans => $state->{scalarref_booleans} );
9512085.23ms120849.2ms return 1 if is_equal($data, $schema->{const}, my $s = { scalarref_booleans => $state->{scalarref_booleans} });
# spent 49.2ms making 1208 calls to JSON::Schema::Modern::Utilities::is_equal, avg 41µs/call
96 return E($state, 'value does not match'
977994.76ms799234ms .($s->{path} ? ' (differences start at "'.$s->{path}.'")' : ''));
# spent 234ms making 799 calls to JSON::Schema::Modern::Utilities::E, avg 292µ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
127868µs8141µs
# spent 171µs (30+141) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maximum which was called 8 times, avg 21µs/call: # 8 times (30µs+141µs) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm, avg 21µs/call
sub _traverse_keyword_maximum { shift->_assert_number(@_) }
# spent 141µs making 8 calls to JSON::Schema::Modern::Vocabulary::Validation::_assert_number, avg 18µ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
1432196µs21307µs
# spent 393µs (86+307) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minimum which was called 21 times, avg 19µs/call: # 21 times (86µs+307µs) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm, avg 19µs/call
sub _traverse_keyword_minimum { shift->_assert_number(@_) }
# spent 307µs making 21 calls to JSON::Schema::Modern::Vocabulary::Validation::_assert_number, avg 15µs/call
144
14539584µs
# spent 1.83ms (719µs+1.11) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minimum which was called 79 times, avg 23µs/call: # 79 times (719µs+1.11ms) by JSON::Schema::Modern::_eval_subschema at line 578 of JSON/Schema/Modern.pm, avg 23µs/call
sub _eval_keyword_minimum ($self, $data, $schema, $state) {
14679184µs791.11ms return 1 if not is_type('number', $data);
# spent 1.11ms making 79 calls to JSON::Schema::Modern::Utilities::is_type, avg 14µs/call
14779254µ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 17µs (6+11) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_exclusiveMinimum which was called: # once (6µs+11µs) by JSON::Schema::Modern::_traverse_subschema at line 487 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µs8277µs
# spent 317µs (40+277) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxLength which was called 8 times, avg 40µs/call: # 8 times (40µs+277µs) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm, avg 40µ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
167853µs8155µs
# spent 229µs (74+155) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minLength which was called 8 times, avg 29µs/call: # 8 times (74µs+155µs) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm, avg 29µ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
17627642µs
# spent 4.37ms (512µs+3.86) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_pattern which was called 69 times, avg 63µs/call: # 69 times (512µs+3.86ms) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm, avg 63µs/call
sub _traverse_keyword_pattern ($self, $schema, $state) {
177 return if not assert_keyword_type($state, $schema, 'string')
17869250µs1383.86ms or not assert_pattern($state, $schema->{pattern});
# spent 3.01ms making 69 calls to JSON::Schema::Modern::Utilities::assert_pattern, avg 44µs/call # spent 849µs making 69 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 12µs/call
17969107µs return 1;
180}
181
1821310353µs
# spent 7.51ms (2.74+4.77) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_pattern which was called 262 times, avg 29µs/call: # 262 times (2.74ms+4.77ms) by JSON::Schema::Modern::_eval_subschema at line 578 of JSON/Schema/Modern.pm, avg 29µs/call
sub _eval_keyword_pattern ($self, $data, $schema, $state) {
183262424µs2623.41ms return 1 if not is_type('string', $data);
# spent 3.41ms making 262 calls to JSON::Schema::Modern::Utilities::is_type, avg 13µs/call
184
1852622.91ms5241.36ms return 1 if $data =~ m/$schema->{pattern}/;
# spent 874µs making 262 calls to JSON::Schema::Modern::Vocabulary::Validation::CORE:match, avg 3µs/call # spent 487µ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
18914µs115µs
# spent 27µs (12+15) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxItems which was called: # once (12µs+15µs) by JSON::Schema::Modern::_traverse_subschema at line 487 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
1971453µs14196µs
# spent 250µs (54+196) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minItems which was called 14 times, avg 18µs/call: # 14 times (54µs+196µs) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm, avg 18µs/call
sub _traverse_keyword_minItems { shift->_assert_non_negative_integer(@_) }
# spent 196µs making 14 calls to JSON::Schema::Modern::Vocabulary::Validation::_assert_non_negative_integer, avg 14µs/call
198
19962202.08ms
# spent 13.0ms (8.58+4.39) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minItems which was called 1244 times, avg 10µs/call: # 1244 times (8.58ms+4.39ms) by JSON::Schema::Modern::_eval_subschema at line 578 of JSON/Schema/Modern.pm, avg 10µs/call
sub _eval_keyword_minItems ($self, $data, $schema, $state) {
20012444.72ms12444.39ms return 1 if not is_type('array', $data);
# spent 4.39ms making 1244 calls to JSON::Schema::Modern::Utilities::is_type, avg 4µs/call
201129301µs return 1 if @$data >= $schema->{minItems};
202 return E($state, 'fewer than %d item%s', $schema->{minItems}, $schema->{minItems} > 1 ? 's' : '');
203}
204
205122µs
# spent 77µs (26+51) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_uniqueItems which was called 3 times, avg 26µs/call: # 3 times (26µs+51µs) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm, avg 26µs/call
sub _traverse_keyword_uniqueItems ($self, $schema, $state) {
20633µs351µs return if not assert_keyword_type($state, $schema, 'boolean');
# spent 51µs making 3 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 17µs/call
20737µs return 1;
208}
209
21070151.90ms
# spent 85.9ms (9.44+76.4) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_uniqueItems which was called 1403 times, avg 61µs/call: # 1403 times (9.44ms+76.4ms) by JSON::Schema::Modern::_eval_subschema at line 578 of JSON/Schema/Modern.pm, avg 61µs/call
sub _eval_keyword_uniqueItems ($self, $data, $schema, $state) {
21114034.03ms14032.05ms return 1 if not is_type('array', $data);
# spent 2.05ms making 1403 calls to JSON::Schema::Modern::Utilities::is_type, avg 1µs/call
2122881.24ms288904µs return 1 if not $schema->{uniqueItems};
# spent 904µs making 288 calls to JSON::PP::Boolean::__ANON__[JSON/PP/Boolean.pm:7], avg 3µs/call
2132881.43ms28873.5ms return 1 if is_elements_unique($data, my $equal_indices = []);
# spent 73.5ms making 288 calls to JSON::Schema::Modern::Utilities::is_elements_unique, avg 255µ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.
218213µs274µs
# spent 107µs (33+74) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxContains which was called 2 times, avg 54µs/call: # 2 times (33µs+74µs) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm, avg 54µ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µs111µs
# spent 15µs (4+11) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minContains which was called: # once (4µs+11µs) by JSON::Schema::Modern::_traverse_subschema at line 487 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
242312µs397µs
# spent 123µs (26+97) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxProperties which was called 3 times, avg 41µs/call: # 3 times (26µs+97µs) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm, avg 41µs/call
sub _traverse_keyword_maxProperties { shift->_assert_non_negative_integer(@_) }
243
2447518µs
# spent 198µs (157+41) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_maxProperties which was called 15 times, avg 13µs/call: # 15 times (157µs+41µs) by JSON::Schema::Modern::_eval_subschema at line 578 of JSON/Schema/Modern.pm, avg 13µs/call
sub _eval_keyword_maxProperties ($self, $data, $schema, $state) {
2451523µs1541µs return 1 if not is_type('object', $data);
# spent 41µs making 15 calls to JSON::Schema::Modern::Utilities::is_type, avg 3µs/call
2461571µ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
25150296µs50938µs
# spent 1.25ms (308µs+938µs) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minProperties which was called 50 times, avg 25µs/call: # 50 times (308µs+938µs) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm, avg 25µs/call
sub _traverse_keyword_minProperties { shift->_assert_non_negative_integer(@_) }
# spent 938µs making 50 calls to JSON::Schema::Modern::Vocabulary::Validation::_assert_non_negative_integer, avg 19µs/call
252
2532425670µs
# spent 4.55ms (3.40+1.16) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_minProperties which was called 485 times, avg 9µs/call: # 485 times (3.40ms+1.16ms) by JSON::Schema::Modern::_eval_subschema at line 578 of JSON/Schema/Modern.pm, avg 9µs/call
sub _eval_keyword_minProperties ($self, $data, $schema, $state) {
254485687µs4851.16ms return 1 if not is_type('object', $data);
# spent 1.16ms making 485 calls to JSON::Schema::Modern::Utilities::is_type, avg 2µs/call
2554851.66ms 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
2601100199µs
# spent 81.0ms (3.32+77.7) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_required which was called 275 times, avg 295µs/call: # 275 times (3.32ms+77.7ms) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm, avg 295µs/call
sub _traverse_keyword_required ($self, $schema, $state) {
261275358µs2751.53ms return if not assert_keyword_type($state, $schema, 'array');
# spent 1.53ms 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.40ms10499.78ms if any { !is_type('string', $_) } $schema->{required}->@*;
# spent 5.61ms making 275 calls to List::Util::any, avg 20µs/call # spent 4.17ms making 774 calls to JSON::Schema::Modern::Utilities::is_type, avg 5µs/call
264275470µs27570.6ms return E($state, '"required" values are not unique') if not is_elements_unique($schema->{required});
# spent 70.6ms making 275 calls to JSON::Schema::Modern::Utilities::is_elements_unique, avg 257µs/call
265275551µs return 1;
266}
267
268239756.25ms
# spent 500ms (55.8+444) within JSON::Schema::Modern::Vocabulary::Validation::_eval_keyword_required which was called 4795 times, avg 104µs/call: # 4795 times (55.8ms+444ms) by JSON::Schema::Modern::_eval_subschema at line 578 of JSON/Schema/Modern.pm, avg 104µs/call
sub _eval_keyword_required ($self, $data, $schema, $state) {
26947959.68ms479516.6ms return 1 if not is_type('object', $data);
# spent 16.6ms making 4795 calls to JSON::Schema::Modern::Utilities::is_type, avg 3µs/call
270
271479517.8ms my @missing = grep !exists $data->{$_}, $schema->{required}->@*;
27247957.80ms return 1 if not @missing;
27314389.03ms1438427ms return E($state, 'missing propert%s: %s', @missing > 1 ? 'ies' : 'y', join(', ', @missing));
# spent 427ms making 1438 calls to JSON::Schema::Modern::Utilities::E, avg 297µs/call
274}
275
27641µs
# spent 52µs (41+11) within JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_dependentRequired which was called: # once (41µs+11µs) by JSON::Schema::Modern::_traverse_subschema at line 487 of JSON/Schema/Modern.pm
sub _traverse_keyword_dependentRequired ($self, $schema, $state) {
27710s13µs return if not assert_keyword_type($state, $schema, 'object');
278
279113µs my $valid = 1;
280114µs11µs foreach my $property (sort keys $schema->{dependentRequired}->%*) {
281 $valid = E({ %$state, _schema_path_suffix => $property }, 'value is not an array'), next
28211µs10s if not is_type('array', $schema->{dependentRequired}{$property});
# spent 0s 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)
28610s13µs if not is_type('string', $schema->{dependentRequired}{$property}[$index]);
# spent 3µ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')
29011µs14µ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
31212031µs
# spent 459µs (148+311) within JSON::Schema::Modern::Vocabulary::Validation::_assert_number which was called 30 times, avg 15µs/call: # 21 times (87µs+220µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minimum at line 143, avg 15µs/call # 8 times (58µs+83µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maximum at line 127, avg 18µs/call # once (3µs+8µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_exclusiveMinimum at line 151
sub _assert_number ($self, $schema, $state) {
3133017µs30311µs return if not assert_keyword_type($state, $schema, 'number');
# spent 311µs making 30 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 10µs/call
3143078µs return 1;
315}
316
31734850µs
# spent 1.76ms (464µs+1.30) within JSON::Schema::Modern::Vocabulary::Validation::_assert_non_negative_integer which was called 87 times, avg 20µs/call: # 50 times (237µs+701µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minProperties at line 251, avg 19µs/call # 14 times (56µs+140µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minItems at line 197, avg 14µs/call # 8 times (47µs+230µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxLength at line 159, avg 35µs/call # 8 times (87µs+68µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minLength at line 167, avg 19µs/call # 3 times (17µs+80µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxProperties at line 242, avg 32µs/call # 2 times (13µs+61µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxContains at line 218, avg 37µs/call # once (3µs+12µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_maxItems at line 189 # once (4µs+7µs) by JSON::Schema::Modern::Vocabulary::Validation::_traverse_keyword_minContains at line 230
sub _assert_non_negative_integer ($self, $schema, $state) {
31887114µs871.30ms return if not assert_keyword_type($state, $schema, 'integer');
# spent 1.30ms making 87 calls to JSON::Schema::Modern::Utilities::assert_keyword_type, avg 15µs/call
319 return E($state, '%s value is not a non-negative integer', $state->{keyword})
3208785µs if $schema->{$state->{keyword}} < 0;
32187209µs return 1;
322}
323
32416µs1;
325
326141µs1399µs__END__
 
# spent 874µs within JSON::Schema::Modern::Vocabulary::Validation::CORE:match which was called 262 times, avg 3µs/call: # 262 times (874µ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 487µs within JSON::Schema::Modern::Vocabulary::Validation::CORE:regcomp which was called 262 times, avg 2µs/call: # 262 times (487µ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