| line | true | false | branch | 
 
| 50 | 460 | 117 | if ($self->eval($data, $schema->{'allOf'}[$idx], {%$state, 'schema_path', $state->{'schema_path'} . '/allOf/' . $idx, 'annotations', \@annotations})) { } | 
 
| 56 | 40 | 77 | if $state->{'short_circuit'} | 
 
| 60 | 125 | 104 | if (@invalid == 0) | 
 
| 66 | 10 | 94 | $pl ? : | 
 
|  | 10 | 94 | $pl ? : | 
 
| 78 | 386 | 225 | unless $self->eval($data, $schema->{'anyOf'}[$idx], {%$state, 'errors', \@errors, 'schema_path', $state->{'schema_path'} . '/anyOf/' . $idx}) | 
 
| 80 | 92 | 133 | if $state->{'short_circuit'} | 
 
| 83 | 212 | 124 | if $valid | 
 
| 100 | 72 | 86 | unless $self->eval($data, $schema->{'oneOf'}[$idx], {%$state, 'errors', \@errors, 'annotations', \@annotations, 'schema_path', $state->{'schema_path'} . '/oneOf/' . $idx}) | 
 
| 103 | 9 | 12 | if @valid > 1 and $state->{'short_circuit'} | 
 
| 106 | 45 | 41 | if (@valid == 1) | 
 
| 110 | 21 | 20 | if (not @valid) { } | 
 
| 127 | 18 | 41 | unless $self->eval($data, $schema->{'not'}, {%$state, 'schema_path', $state->{'schema_path'} . '/not', 'short_circuit', $state->{'short_circuit'} || !$state->{'collect_annotations'}, 'errors', [], 'annotations', [@{$state->{'annotations'};}]}) | 
 
| 140 | 8 | 0 | unless exists $schema->{'then'} or exists $schema->{'else'} or $state->{'collect_annotations'} | 
 
| 144 | 35 | 37 | $self->eval($data, $schema->{'if'}, {%$state, 'schema_path', $state->{'schema_path'} . '/if', 'short_circuit', $state->{'short_circuit'} || !$state->{'collect_annotations'}, 'errors', []}) ? : | 
 
| 148 | 6 | 66 | unless exists $schema->{$keyword} | 
 
| 150 | 40 | 26 | if $self->eval($data, $schema->{$keyword}, {%$state, 'schema_path', $state->{'schema_path'} . '/' . $keyword}) | 
 
| 159 | 56 | 86 | unless is_type('object', $data) | 
 
| 165 | 46 | 53 | unless exists $data->{$property} | 
 
| 168 | 9 | 44 | if ($self->eval($data, $schema->{'dependentSchemas'}{$property}, {%$state, 'annotations', \@annotations, 'schema_path', jsonp($state->{'schema_path'}, 'dependentSchemas', $property)})) | 
 
| 176 | 22 | 22 | if $state->{'short_circuit'} | 
 
| 179 | 44 | 42 | unless $valid | 
 
| 187 | 395 | 105 | if XXX | 
 
| 194 | 406 | 152 | if XXX | 
 
| 205 | 10 | 92 | unless exists $state->{'_last_items_index'} | 
 
| 213 | 75 | 331 | unless is_type('array', $data) | 
 
| 220 | 111 | 479 | if $idx > $#{$$schema{$state->{'keyword'}};} | 
 
| 224 | 123 | 356 | if (is_type('boolean', $$schema{$state->{'keyword'}}[$idx])) { } | 
 
|  | 332 | 24 | elsif ($self->eval($data->[$idx], $$schema{$state->{'keyword'}}[$idx], {%$state, 'annotations', \@annotations, 'data_path', $state->{'data_path'} . '/' . $idx, 'schema_path', $state->{'schema_path'} . '/' . $state->{'keyword'} . '/' . $idx})) { } | 
 
| 225 | 84 | 39 | if $$schema{$state->{'keyword'}}[$idx] | 
 
| 238 | 26 | 37 | if $state->{'short_circuit'} and not exists $schema->{'additionalItems'} | 
 
| 241 | 62 | 269 | unless $valid | 
 
| 250 | 29 | 215 | unless is_type('array', $data) | 
 
| 251 | 67 | 148 | if $state->{'_last_items_index'} == $#{$data;} | 
 
| 258 | 28 | 203 | if (is_type('boolean', $$schema{$state->{'keyword'}})) { } | 
 
| 259 | 12 | 16 | if $$schema{$state->{'keyword'}} | 
 
| 261 | 11 | 5 | $state->{'keyword'} eq 'additionalItems' ? : | 
 
| 265 | 136 | 62 | if ($self->eval($data->[$idx], $$schema{$state->{'keyword'}}, {%$state, 'annotations', \@annotations, 'data_path', $state->{'data_path'} . '/' . $idx, 'schema_path', $state->{'schema_path'} . '/' . $state->{'keyword'}})) | 
 
| 275 | 29 | 49 | if $state->{'short_circuit'} | 
 
| 281 | 19 | 48 | $state->{'keyword'} eq 'additionalItems' ? : | 
 
|  | 67 | 76 | unless $valid | 
 
| 299 | 3 | 222 | unless $state->{'collect_annotations'} | 
 
| 302 | 104 | 118 | if $state->{'short_circuit'} | 
 
| 304 | 36 | 82 | unless is_type('array', $data) | 
 
| 313 | 5 | 49 | if is_type('boolean', $_->annotation) | 
 
| 314 | 5 | 77 | if &any(sub { | 
 
| 318 | 38 | 39 | if $last_index == $#{$data;} | 
 
| 324 | 38 | 5 | if (is_type('boolean', $schema->{'unevaluatedItems'})) { } | 
 
| 325 | 5 | 33 | if $schema->{'unevaluatedItems'} | 
 
| 331 | 3 | 2 | if ($self->eval($data->[$idx], $schema->{'unevaluatedItems'}, {%$state, 'annotations', \@annotations, 'data_path', $state->{'data_path'} . '/' . $idx, 'schema_path', $state->{'schema_path'} . '/unevaluatedItems'})) | 
 
| 341 | 0 | 35 | if $state->{'short_circuit'} | 
 
| 344 | 34 | 5 | unless $valid | 
 
| 354 | 75 | 161 | unless is_type('array', $data) | 
 
| 361 | 129 | 58 | if ($self->eval($data->[$idx], $schema->{'contains'}, {%$state, 'errors', \@errors, 'annotations', \@annotations, 'data_path', $state->{'data_path'} . '/' . $idx, 'schema_path', $state->{'schema_path'} . '/contains'})) | 
 
| 370 | 36 | 24 | if $state->{'short_circuit'} and !exists $schema->{'maxContains'} || $state->{'_num_contains'} > $schema->{'maxContains'} and $state->{'_num_contains'} >= ($schema->{'minContains'} // 1) | 
 
| 375 | 65 | 96 | if (not $state->{'_num_contains'} and ($schema->{'minContains'} // 1) > 0) | 
 
| 389 | 81 | 1035 | unless is_type('object', $data) | 
 
| 395 | 3410 | 706 | unless exists $data->{$property} | 
 
| 397 | 83 | 623 | if (is_type('boolean', $schema->{'properties'}{$property})) { } | 
 
| 398 | 41 | 42 | if ($schema->{'properties'}{$property}) | 
 
| 408 | 441 | 176 | if ($self->eval($data->{$property}, $schema->{'properties'}{$property}, {%$state, 'annotations', \@annotations, 'data_path', jsonp($state->{'data_path'}, $property), 'schema_path', jsonp($state->{'schema_path'}, 'properties', $property)})) | 
 
| 419 | 90 | 128 | if $state->{'short_circuit'} | 
 
| 422 | 206 | 823 | unless $valid | 
 
| 430 | 0 | 221 | unless assert_keyword_type($state, $schema, 'object') | 
 
| 433 | 2 | 380 | unless assert_pattern({%$state, '_schema_path_suffix', $property}, $property) | 
 
| 441 | 66 | 149 | unless is_type('object', $data) | 
 
| 448 | 78 | 87 | if (is_type('boolean', $schema->{'patternProperties'}{$property_pattern})) { } | 
 
| 449 | 38 | 40 | if ($schema->{'patternProperties'}{$property_pattern}) | 
 
| 459 | 51 | 36 | if ($self->eval($data->{$property}, $schema->{'patternProperties'}{$property_pattern}, {%$state, 'annotations', \@annotations, 'data_path', jsonp($state->{'data_path'}, $property), 'schema_path', jsonp($state->{'schema_path'}, 'patternProperties', $property_pattern)})) | 
 
| 470 | 31 | 45 | if $state->{'short_circuit'} | 
 
| 474 | 64 | 85 | unless $valid | 
 
| 484 | 122 | 270 | unless is_type('object', $data) | 
 
| 490 | 56 | 33 | if exists $schema->{'properties'} and exists $schema->{'properties'}{$property} | 
 
| 492 | 8 | 209 | if exists $schema->{'patternProperties'} and &any(sub { | 
 
| 494 | 55 | 154 | if (is_type('boolean', $schema->{'additionalProperties'})) { } | 
 
| 495 | 8 | 47 | if ($schema->{'additionalProperties'}) | 
 
| 505 | 79 | 75 | if ($self->eval($data->{$property}, $schema->{'additionalProperties'}, {%$state, 'annotations', \@annotations, 'data_path', jsonp($state->{'data_path'}, $property), 'schema_path', $state->{'schema_path'} . '/additionalProperties'})) | 
 
| 516 | 53 | 69 | if $state->{'short_circuit'} | 
 
| 519 | 121 | 149 | unless $valid | 
 
| 537 | 2 | 252 | unless $state->{'collect_annotations'} | 
 
| 540 | 112 | 140 | if $state->{'short_circuit'} | 
 
| 542 | 28 | 112 | unless is_type('object', $data) | 
 
| 547 | 89 | 0 | grep(($keyword eq $_), ('properties', 'additionalProperties', 'patternProperties', 'unevaluatedProperties')) ? : | 
 
| 554 | 79 | 69 | if &any(sub { | 
 
| 556 | 64 | 5 | if (is_type('boolean', $schema->{'unevaluatedProperties'})) { } | 
 
| 557 | 15 | 49 | if ($schema->{'unevaluatedProperties'}) | 
 
| 567 | 3 | 2 | if ($self->eval($data->{$property}, $schema->{'unevaluatedProperties'}, {%$state, 'annotations', \@annotations, 'data_path', jsonp($state->{'data_path'}, $property), 'schema_path', $state->{'schema_path'} . '/unevaluatedProperties'})) | 
 
| 578 | 0 | 51 | if $state->{'short_circuit'} | 
 
| 581 | 44 | 68 | unless $valid | 
 
| 591 | 60 | 79 | unless is_type('object', $data) | 
 
| 598 | 17 | 37 | if ($self->eval($property, $schema->{'propertyNames'}, {%$state, 'annotations', \@annotations, 'data_path', jsonp($state->{'data_path'}, $property), 'schema_path', $state->{'schema_path'} . '/propertyNames'})) | 
 
| 607 | 20 | 17 | if $state->{'short_circuit'} | 
 
| 610 | 37 | 42 | unless $valid |