Branch Coverage

blib/lib/Math/Formula/Type.pm
Criterion Covered Total %
branch 252 324 77.7


line true false branch
30 4 3 if $to eq "MF::STRING"
67 29 1 if ($op eq "." and $right->isa("MF::NAME"))
68 29 0 if (my $attr = $self->attribute($right->token))
69 29 0 ref $attr eq 'CODE' ? :
74 1 0 if $op eq "~"
92 56 50 $value ? :
106 50 unless defined $token
98 6 0 if ($op eq "not")
108 19 4 $right->isa('MF::BOOLEAN') ? :
23 0 if (my $r = $right->isa("MF::BOOLEAN") ? $right : $right->cast("MF::BOOLEAN", $context))
109 6 0 $op eq 'xor' ? :
7 6 $op eq 'or' ? :
10 13 $op eq 'and' ? :
114 23 0 if defined $v
120 47 45 $_[1] ? :
135 3 145 if ref $token eq "SCALAR"
144 5 0 substr($token, 0, 1) eq q['] ? :
83 5 substr($token, 0, 1) eq '"' ? :
152 11 0 ref $self eq 'MF::STRING' && $to eq 'MF::PATTERN' ? :
5 11 ref $self eq 'MF::STRING' && $to eq 'MF::REGEXP' ? :
161 5 45 if ($op eq '~') { }
4 41 elsif ($op eq '=~' or $op eq '!~') { }
12 29 elsif ($op eq 'like' or $op eq 'unlike') { }
21 8 elsif ($op eq 'cmp') { }
162 4 1 $right->isa('MF::STRING') ? :
163 5 0 if $r
166 0 4 $right->isa('MF::REGEXP') ? :
167 2 2 $op eq '=~' ? :
0 4 !$r ? :
169 4 0 if $r
173 2 10 $right->isa('MF::PATTERN') || $right->isa('MF::REGEXP') ? :
174 6 6 $op eq 'like' ? :
0 12 !$r ? :
176 12 0 if $r
179 21 0 $right->isa('MF::STRING') ? :
192 0 8 unless $string_attrs{$_[1]}
204 4 8 $_[0]->value == 0 ? :
1 3 $to eq 'MF::FLOAT' ? :
12 4 $to eq 'MF::BOOLEAN' ? :
211 5 0 $op eq '-' ? :
4 5 $op eq '+' ? :
220 3 46 if $op eq "and" or $op eq "or" or $op eq "xor"
223 42 4 if ($right->isa("MF::INTEGER") or $right->isa("MF::FLOAT"))
224 2 25 $op eq '%' ? :
3 27 $op eq '*' ? :
4 30 $op eq '-' ? :
8 34 $op eq '+' ? :
229 17 25 if defined $v
231 24 1 if $op eq "<=>"
234 1 0 if $op eq "/"
238 1 3 if $op eq "*" and $right->isa("MF::DURATION")
256 0 116 unless my($v, $m) = $_[1] =~ /^ ( [0-9]+ (?: _[0-9][0-9][0-9] )* ) ($multipliers)? $/ux
259 3 113 $2 ? :
265 0 2 unless $int_attrs{$_[1]}
277 4 19 $t =~ /[e.]/u ? :
281 1 1 $to eq 'MF::INTEGER' ? :
287 5 0 $op eq '-' ? :
4 5 $op eq '+' ? :
296 0 16 if $op eq "and" or $op eq "or" or $op eq "xor"
299 16 0 if ($right->isa("MF::FLOAT") or $right->isa("MF::INTEGER"))
301 2 6 $op eq '/' ? :
2 8 $op eq '%' ? :
2 10 $op eq '*' ? :
2 12 $op eq '-' ? :
2 14 $op eq '+' ? :
307 10 6 if defined $v
309 6 0 if $op eq "<=>"
338 0 37 unless $token =~ /^
358 1 0 $to eq 'MF::DATE' ? :
1 1 $to eq 'MF::TIME' ? :
367 3 18 if ($op eq "+" or $op eq "-")
369 2 1 if ($right->isa("MF::DURATION"))
370 1 1 $op eq '+' ? :
373 1 0 if ($op eq "-")
374 1 0 $right->isa('MF::DATETIME') ? :
379 8 10 if ($op eq "<=>")
380 5 3 if $right->isa("MF::DATETIME")
383 3 0 if ($right->isa("MF::DATE"))
386 0 3 $date =~ /\+/u ? :
387 1 2 if "DateTime"->compare($begin, $self->value) > 0
389 0 2 $date =~ /\+/u ? :
390 1 1 'DateTime'->compare($self->value, $end) > 0 ? :
407 0 10 unless $dt_attrs{$_[1]} or $MF::DATE::date_attrs{$_[1]}
428 0 11 unless $token =~ /^
442 2 1 if ($to eq "MF::INTEGER")
449 1 0 if ($to eq "MF::DATETIME")
451 1 0 $t =~ /\+/u ? :
462 1 11 if ($op eq "+" and $right->isa("MF::TIME"))
472 1 10 if ($op eq "-" and $right->isa("MF::DATE"))
476 2 8 if ($op eq "+" or $op eq "-")
477 2 0 $right->isa('MF::DURATION') ? :
478 0 2 if $r and $r->token =~ /T.*[1-9]/u
483 1 1 $op eq '+' ? :
487 4 4 if ($op eq "<=>")
488 4 0 $right->isa('MF::DATE') ? :
493 1 3 unless $ld ne $rd or ($ltz // "") eq ($rtz // "")
509 0 4 unless $date_attrs{$_[1]}
524 2 5 $ns ? :
530 0 23 unless $token =~ /^ ([01][0-9]|2[0-3]) \: ([0-5][0-9]) \: ([0-5][0-9]) (?:(\.[0-9]+))? $/ux
543 0 10 unless $time_attrs{$_[1]}
547 1 7 if ($ns < 0) { }
0 7 elsif ($ns > 1000000000) { }
560 8 5 if ($op eq "+" or $op eq "-")
565 3 5 $right->isa('MF::TIME') ? :
5 3 if (my $r = $right->isa("MF::TIME") ? $right : $right->cast("MF::TIME", $context))
569 2 3 $diff->{'nanosecond'} ? :
574 3 0 $right->isa('MF::DURATION') ? :
3 0 if (my $r = $right->isa("MF::DURATION") ? $right : $right->cast("MF::DURATION", $context))
579 2 1 $op eq '+' ? :
580 2 1 $op eq '+' ? :
604 2 7 $_[1]->is_negative ? :
610 2 21 $negative ? :
615 1 0 $op eq '-' ? :
1 1 $op eq '+' ? :
624 2 5 if ($op eq '+' or $op eq '-') { }
2 3 elsif ($op eq '*') { }
3 0 elsif ($op eq '<=>') { }
625 2 0 $right->isa('MF::DURATION') ? :
627 1 1 $op eq '+' ? :
0 2 !$r ? :
628 2 0 if $r
631 2 0 $right->isa('MF::INTEGER') ? :
632 2 0 if $r
635 3 0 $right->isa('MF::DURATION') ? :
636 3 0 if $r
643 0 0 unless $dur_attrs{$_[1]}
662 0 0 unless $name =~ qr/^$pattern$/ou
672 0 2 if ($type->isa("MF::FRAGMENT"))
673 0 0 $self->token eq '' ? :
674 0 0 if $frag
683 4 0 if $op eq "exists"
694 4 17 if ($op eq ".")
695 1 3 $name eq '' ? :
696 4 0 if $left
699 7 10 if ($op eq "#")
700 7 0 $name eq '' ? :
701 7 0 if $left
704 5 5 if ($op eq "//")
705 1 4 defined $context->formula($name) ? :
711 5 0 $left ? :
739 2 104 if (length $char == 2)
740 6 57 $in_range ? :
63 41 if (not $char =~ /^[\[\]*?{},!]$/u) { }
12 29 elsif ($char eq '*') { }
1 28 elsif ($char eq '?') { }
3 25 elsif ($char eq '[') { }
3 22 elsif ($char eq ']') { }
2 20 elsif ($char eq '!') { }
5 15 elsif ($char eq '{') { }
5 10 elsif ($char eq '}') { }
10 0 elsif ($char eq ',') { }
745 1 1 $in_range && $regexp[-1] eq '[' ? :
746 1 4 $in_range ? :
4 1 unless $in_range
747 1 4 $in_range ? :
4 1 unless $in_range
748 8 2 $in_alts ? :
772 2 6 if defined $self->[2]
793 7 8 if ($op eq "#" and $right->isa("MF::NAME"))
794 0 7 unless my $fragment = $self->context->fragment($name)
801 8 0 if ($op eq "." and $right->isa("MF::NAME"))
803 8 0 if $result