Branch Coverage

Int64.xs
Criterion Covered Total %
branch 330 612 53.9


line true false branch
110 58 0 return (hint && SvTRUE(hint));
30 28 return (hint && SvTRUE(hint));
116 16 0 return (hint && SvTRUE(hint));
16 0 return (hint && SvTRUE(hint));
139 30 28 if (check_die_on_overflow_hint(aTHX))
185 0 0 if (SvROK(sv)) {
187 0 0 return (si64 && (SvTYPE(si64) >= SVt_I64) && sv_isa(sv, "Math::Int64"));
0 0 return (si64 && (SvTYPE(si64) >= SVt_I64) && sv_isa(sv, "Math::Int64"));
0 0 return (si64 && (SvTYPE(si64) >= SVt_I64) && sv_isa(sv, "Math::Int64"));
194 0 0 if (SvROK(sv)) {
196 0 0 return (su64 && (SvTYPE(su64) >= SVt_I64) && sv_isa(sv, "Math::UInt64"));
0 0 return (su64 && (SvTYPE(su64) >= SVt_I64) && sv_isa(sv, "Math::UInt64"));
0 0 return (su64 && (SvTYPE(su64) >= SVt_I64) && sv_isa(sv, "Math::UInt64"));
205 1674 0 SvUPGRADE(si64, SVt_I64);
218 2046 0 SvUPGRADE(su64, SVt_I64);
232 3179 0 if (SvROK(sv)) {
234 3179 0 if (si64 && (SvTYPE(si64) >= SVt_I64))
3179 0 if (si64 && (SvTYPE(si64) >= SVt_I64))
243 3213 0 if (SvROK(sv)) {
245 3213 0 if (su64 && (SvTYPE(su64) >= SVt_I64))
3213 0 if (su64 && (SvTYPE(su64) >= SVt_I64))
257 1119 675 if (SvROK(sv)) {
259 1119 0 if (si64 && SvOBJECT(si64)) {
1119 0 if (si64 && SvOBJECT(si64)) {
262 1119 0 char const * classname = HvNAME_get(stash);
1119 0 char const * classname = HvNAME_get(stash);
0 1119 char const * classname = HvNAME_get(stash);
0 0 char const * classname = HvNAME_get(stash);
1119 0 char const * classname = HvNAME_get(stash);
0 1119 char const * classname = HvNAME_get(stash);
263 1117 2 if (memcmp(classname, "Math::", 6) == 0) {
265 4 1113 if (classname[6] == 'U') {
273 1117 0 if (memcmp(classname, "Int64", 6) == 0) {
274 0 1117 if (SvTYPE(si64) < SVt_I64)
275 0 0 Perl_croak(aTHX_ "Wrong internal representation for %s object", HvNAME_get(stash));
0 0 Perl_croak(aTHX_ "Wrong internal representation for %s object", HvNAME_get(stash));
0 0 Perl_croak(aTHX_ "Wrong internal representation for %s object", HvNAME_get(stash));
0 0 Perl_croak(aTHX_ "Wrong internal representation for %s object", HvNAME_get(stash));
0 0 Perl_croak(aTHX_ "Wrong internal representation for %s object", HvNAME_get(stash));
0 0 Perl_croak(aTHX_ "Wrong internal representation for %s object", HvNAME_get(stash));
276 4 1113 if (u) {
278 3 1 if (may_die_on_overflow && (u > INT64_MAX)) overflow(aTHX_ out_of_bounds_error_s);
2 1 if (may_die_on_overflow && (u > INT64_MAX)) overflow(aTHX_ out_of_bounds_error_s);
287 2 0 if (method) {
294 0 2 PUSHMARK(SP);
295 0 2 XPUSHs(sv);
299 0 2 if (count != 1)
305 2 0 FREETMPS;
313 587 88 if (SvIOK(sv)) {
314 0 587 if (SvIOK_UV(sv)) {
316 0 0 if (may_die_on_overflow &&
317 0 0 (uv > INT64_MAX)) overflow(aTHX_ out_of_bounds_error_s);
322 16 72 if (SvNOK(sv)) {
324 13 3 if ( may_die_on_overflow &&
7 6 if ( may_die_on_overflow &&
325 4 3 ((nv >= NV_0x1p63) || (nv < -NV_0x1p63)) ) overflow(aTHX_ out_of_bounds_error_s);
334 1028 1626 if (SvROK(sv)) {
336 1028 0 if (su64 && SvOBJECT(su64)) {
1028 0 if (su64 && SvOBJECT(su64)) {
339 1028 0 char const * classname = HvNAME_get(stash);
1028 0 char const * classname = HvNAME_get(stash);
0 1028 char const * classname = HvNAME_get(stash);
0 0 char const * classname = HvNAME_get(stash);
1028 0 char const * classname = HvNAME_get(stash);
0 1028 char const * classname = HvNAME_get(stash);
340 1026 2 if (memcmp(classname, "Math::", 6) == 0) {
342 1025 1 if (classname[6] == 'U') {
350 1026 0 if (memcmp(classname, "Int64", 6) == 0) {
351 0 1026 if (SvTYPE(su64) < SVt_I64)
352 0 0 Perl_croak(aTHX_ "Wrong internal representation for %s object", HvNAME_get(stash));
0 0 Perl_croak(aTHX_ "Wrong internal representation for %s object", HvNAME_get(stash));
0 0 Perl_croak(aTHX_ "Wrong internal representation for %s object", HvNAME_get(stash));
0 0 Perl_croak(aTHX_ "Wrong internal representation for %s object", HvNAME_get(stash));
0 0 Perl_croak(aTHX_ "Wrong internal representation for %s object", HvNAME_get(stash));
0 0 Perl_croak(aTHX_ "Wrong internal representation for %s object", HvNAME_get(stash));
353 1025 1 if (u) {
358 0 1 if (may_die_on_overflow && (i < 0)) overflow(aTHX_ out_of_bounds_error_u);
0 0 if (may_die_on_overflow && (i < 0)) overflow(aTHX_ out_of_bounds_error_u);
364 2 0 if (method) {
371 0 2 PUSHMARK(SP);
372 0 2 XPUSHs(sv);
376 0 2 if (count != 1)
382 2 0 FREETMPS;
390 1558 68 if (SvIOK(sv)) {
391 3 1555 if (SvIOK_UV(sv)) {
396 35 1520 if (may_die_on_overflow &&
2 33 if (may_die_on_overflow &&
401 5 63 if (SvNOK(sv)) {
403 5 0 if (may_die_on_overflow &&
5 0 if (may_die_on_overflow &&
404 4 1 ( (nv < 0) || (nv >= NV_0x1p64)) ) overflow(aTHX_ out_of_bounds_error_u);
414 0 1 if (i64 < 0) {
416 0 0 if (iv == i64)
421 1 0 if (uv == i64)
431 2 0 if (uv == u64)
442 4437 0 if ((base > 36) || (base < 2))
0 4437 if ((base > 36) || (base < 2))
444 70018 4437 while (u64) {
447 3965 66053 str[len++] = c + (c > 9 ? 'A' - 10 : '0');
449 4432 5 if (len) {
456 645 3787 if (sign) *(pv++) = '-';
457 70018 4432 for (i = len; i--;) *(pv++) = str[i];
468 645 1661 if (i64 < 0) {
482 3 5 if (a < b) {
486 2 6 if (b > UINT32_MAX) overflow(aTHX_ error_str);
491 3 3 if (rh > UINT32_MAX) overflow(aTHX_ error_str);
499 16 542 if (b == 0) return 1;
500 13 529 if (b == 1) return a;
501 14 515 if (b == 2) {
502 0 14 if (mdoo && (a > UINT32_MAX)) overflow(aTHX_ pow_error);
0 0 if (mdoo && (a > UINT32_MAX)) overflow(aTHX_ pow_error);
505 2 513 if (a == 0) return 0;
506 4 509 if (a == 1) return 1;
507 442 67 if (a == 2) {
508 2 440 if (b > 63) {
509 1 1 if (mdoo) overflow(aTHX_ pow_error);
514 2 65 if (mdoo) {
515 2 0 r = ((b & 1) ? a : 1);
516 2 1 while ((b >>= 1)) {
517 0 2 if (a > UINT32_MAX) overflow(aTHX_ pow_error);
519 2 0 if (b & 1) {
527 331 65 while (b) {
528 232 99 if (b & 1) r *= a;
542 3037 359 while ((a >>= 7)) {
551 93 115 return uint64_to_BER(aTHX_
563 3378 0 for (i = 0, a = 0; i < len; i++) {
564 0 3378 if (may_die_on_overflow && (a > (((uint64_t)1) << (63 - 7))))
0 0 if (may_die_on_overflow && (a > (((uint64_t)1) << (63 - 7))))
567 357 3021 if ((pv[i] & 0x80) == 0) {
568 0 357 if (i + 1 != len) croak_string(aTHX_ invalid_BER_error);
580 93 114 return (a & 1 ? ~b : b);
588 998 0 for (i = 0; i < len; i++) {
589 106 892 if ((pv[i] & 0x80) == 0) return i + 1;
631 4 0 RETVAL = (use_native
633 4 245 : newSVi64(aTHX_ SvI64(aTHX_ value)));
641 3 0 RETVAL = (use_native
643 3 277 : newSVu64(aTHX_ SvU64(aTHX_ value)));
671 0 58 if (len != 8) croak_string(aTHX_ invalid_length_error_s);
680 3 0 RETVAL = ( use_native
682 3 55 : newSVi64(aTHX_ i64) );
694 0 56 if (len != 8)
704 0 0 RETVAL = ( use_native
706 0 56 : newSVu64(aTHX_ u64) );
718 0 1 if (len != 8) croak_string(aTHX_ invalid_length_error_s);
727 0 0 RETVAL = ( use_native
729 0 1 : newSVi64(aTHX_ i64) );
741 0 0 if (len != 8)
751 0 0 RETVAL = ( use_native
753 0 0 : newSVu64(aTHX_ u64) );
770 456 57 for (i = 7; i >= 0; i--, i64 >>= 8)
788 448 56 for (i = 7; i >= 0; i--, u64 >>= 8)
806 16 2 for (i = 0; i <= 7; i++, i64 >>= 8)
824 0 0 for (i = 0; i <= 7; i++, u64 >>= 8)
868 0 62 if (len != 8)
870 6 56 if (use_native) {
6 0 if (use_native) {
888 106 0 RETVAL = (len < 0 ? &PL_sv_undef : newSViv(len));
899 0 56 if (len != 8)
901 0 56 if (use_native) {
0 0 if (use_native) {
984 0 0 RETVAL = ( use_native
986 0 344 : newSVi64(aTHX_ strtoint64(aTHX_ str, base, 1)) );
995 0 0 RETVAL = ( use_native
997 0 315 : newSVu64(aTHX_ strtoint64(aTHX_ str, base, 0)) );
1005 0 0 RETVAL = ( use_native
1007 0 53 : newSVi64(aTHX_ strtoint64(aTHX_ str, 16, 1)) );
1015 0 0 RETVAL = ( use_native
1017 0 50 : newSVu64(aTHX_ strtoint64(aTHX_ str, 16, 0)) );
1028 0 0 RETVAL = ( use_native
1030 0 150 : newSVi64(aTHX_ i64) );
1040 0 0 RETVAL = ( use_native
1042 0 150 : newSVu64(aTHX_ u64) );
1054 0 0 if (SvOK(seed) && SvCUR(seed)) {
0 0 if (SvOK(seed) && SvCUR(seed)) {
1059 0 0 if (len > sizeof(is->randrsl)) len = sizeof(is->randrsl);
1064 0 0 for (i = 0; i < RANDSIZ; i++) {
1083 2 0 if (may_die_on_overflow && (SvI64x(self) == INT64_MAX)) overflow(aTHX_ inc_error);
2 0 if (may_die_on_overflow && (SvI64x(self) == INT64_MAX)) overflow(aTHX_ inc_error);
1096 2 0 if (may_die_on_overflow && (SvI64x(self) == INT64_MIN)) overflow(aTHX_ dec_error);
2 0 if (may_die_on_overflow && (SvI64x(self) == INT64_MIN)) overflow(aTHX_ dec_error);
1112 2 11 if ( may_die_on_overflow &&
2 0 if ( may_die_on_overflow &&
2 0 if ( may_die_on_overflow &&
1114 2 0 ? ( (b > 0) && (INT64_MAX - a < b) )
2 0 ? ( (b > 0) && (INT64_MAX - a < b) )
1115 0 0 : ( (b < 0) && (INT64_MIN - a > b) ) ) ) overflow(aTHX_ add_error);
0 0 : ( (b < 0) && (INT64_MIN - a > b) ) ) ) overflow(aTHX_ add_error);
1116 11 1 if (SvOK(rev))
1135 0 10 if (SvTRUE(rev)) {
1139 2 8 if ( may_die_on_overflow &&
0 2 if ( may_die_on_overflow &&
2 0 if ( may_die_on_overflow &&
1141 0 0 ? ( ( b < 0) && (a - INT64_MAX > b) )
0 0 ? ( ( b < 0) && (a - INT64_MAX > b) )
1142 2 0 : ( ( b > 0) && (a - INT64_MIN < b) ) ) ) overflow(aTHX_ sub_error);
2 0 : ( ( b > 0) && (a - INT64_MIN < b) ) ) ) overflow(aTHX_ sub_error);
1143 8 1 if (SvOK(rev))
1162 0 13 if (may_die_on_overflow) {
1165 0 0 if (a1 < 0) {
1170 0 0 if (b1 < 0) {
1176 0 0 if (a * b > (neg ? (~(uint64_t)INT64_MIN + 1) : INT64_MAX)) overflow(aTHX_ mul_error);
0 0 if (a * b > (neg ? (~(uint64_t)INT64_MIN + 1) : INT64_MAX)) overflow(aTHX_ mul_error);
1178 12 1 if (SvOK(rev))
1197 127 0 if (SvOK(rev)) {
1198 0 127 if (SvTRUE(rev)) {
1206 0 127 if (!down)
1212 0 0 if (!down)
1230 2 1 if (SvOK(rev)) {
1231 0 2 if (SvTRUE(rev)) {
1239 0 2 if (!down)
1245 0 1 if (!down)
1263 0 235 if (SvTRUE(rev)) {
1271 229 6 r = (b > 63 ? 0 : a << b);
1272 170 65 if (SvOK(rev))
1289 0 134 if (SvTRUE(rev)) {
1297 8 126 r = (b > 63 ? (a < 0 ? -1 : 0) : a >> b);
4 4 r = (b > 63 ? (a < 0 ? -1 : 0) : a >> b);
1298 68 66 if (SvOK(rev))
1317 0 264 if (SvTRUE(rev)) {
1325 18 246 if (a < 0) {
1326 9 9 sign = ((b & 1) ? -1 : 1);
1330 10 254 if (b < 0) {
1331 1 9 if (a == 0) croak_string(aTHX_ div_by_0_error);
1332 4 5 else if (a == 1) r = sign;
1337 1 253 if (may_die_on_overflow && (u > ((sign < 0) ? (~(uint64_t)INT64_MIN + 1) : INT64_MAX))) overflow(aTHX_ pow_error);
0 1 if (may_die_on_overflow && (u > ((sign < 0) ? (~(uint64_t)INT64_MIN + 1) : INT64_MAX))) overflow(aTHX_ pow_error);
1 0 if (may_die_on_overflow && (u > ((sign < 0) ? (~(uint64_t)INT64_MIN + 1) : INT64_MAX))) overflow(aTHX_ pow_error);
1338 6 247 r = ((sign > 0) ? u : -u);
1340 262 0 if (SvOK(rev))
1359 0 4 if (SvTRUE(rev)) {
1367 3 1 RETVAL = (left < right ? -1 : left > right ? 1 : 0);
0 4 RETVAL = (left < right ? -1 : left > right ? 1 : 0);
1379 336 0 : &PL_sv_no );
1391 1 0 : &PL_sv_no );
1401 0 2 if (SvTRUE(rev))
1402 0 0 RETVAL = SvI64x(self) < SvI64(aTHX_ other) ? &PL_sv_yes : &PL_sv_no;
1404 1 1 RETVAL = SvI64x(self) > SvI64(aTHX_ other) ? &PL_sv_yes : &PL_sv_no;
1414 0 2 if (SvTRUE(rev))
1415 0 0 RETVAL = SvI64x(self) > SvI64(aTHX_ other) ? &PL_sv_yes : &PL_sv_no;
1417 1 1 RETVAL = SvI64x(self) < SvI64(aTHX_ other) ? &PL_sv_yes : &PL_sv_no;
1427 0 3 if (SvTRUE(rev))
1428 0 0 RETVAL = SvI64x(self) <= SvI64(aTHX_ other) ? &PL_sv_yes : &PL_sv_no;
1430 2 1 RETVAL = SvI64x(self) >= SvI64(aTHX_ other) ? &PL_sv_yes : &PL_sv_no;
1440 0 3 if (SvTRUE(rev))
1441 0 0 RETVAL = SvI64x(self) >= SvI64(aTHX_ other) ? &PL_sv_yes : &PL_sv_no;
1443 2 1 RETVAL = SvI64x(self) <= SvI64(aTHX_ other) ? &PL_sv_yes : &PL_sv_no;
1453 5 0 if (SvOK(rev))
1469 1 0 if (SvOK(rev))
1485 0 0 if (SvOK(rev))
1501 0 0 RETVAL = SvI64x(self) ? &PL_sv_no : &PL_sv_yes;
1531 0 0 RETVAL = SvI64x(self) ? &PL_sv_yes : &PL_sv_no;
1571 100 0 if (SvROK(self) && sv_isa(self, "Math::Int64")) {
100 0 if (SvROK(self) && sv_isa(self, "Math::Int64")) {
1598 2 0 if (may_die_on_overflow && (SvU64x(self) == UINT64_MAX)) overflow(aTHX_ inc_error);
2 0 if (may_die_on_overflow && (SvU64x(self) == UINT64_MAX)) overflow(aTHX_ inc_error);
1610 2 0 if (may_die_on_overflow && (SvU64x(self) == 0)) overflow(aTHX_ dec_error);
2 0 if (may_die_on_overflow && (SvU64x(self) == 0)) overflow(aTHX_ dec_error);
1626 2 72 if (may_die_on_overflow && (UINT64_MAX - a < b)) overflow(aTHX_ add_error);
2 0 if (may_die_on_overflow && (UINT64_MAX - a < b)) overflow(aTHX_ add_error);
1627 72 1 if (SvOK(rev))
1645 0 73 if (SvTRUE(rev)) {
1653 3 70 if (may_die_on_overflow && (b > a)) overflow(aTHX_ sub_error);
2 1 if (may_die_on_overflow && (b > a)) overflow(aTHX_ sub_error);
1654 71 1 if (SvOK(rev))
1673 6 77 if (may_die_on_overflow) mul_check_overflow(aTHX_ a, b, mul_error);
1674 80 1 if (SvOK(rev))
1691 129 0 if (SvOK(rev)) {
1692 0 129 if (SvTRUE(rev)) {
1700 0 129 if (!down)
1706 0 0 if (!down)
1724 2 1 if (SvOK(rev)) {
1725 0 2 if (SvTRUE(rev)) {
1733 0 2 if (!down)
1739 0 1 if (!down)
1755 0 236 if (SvTRUE(rev)) {
1763 234 2 r = (b > 63 ? 0 : a << b);
1764 172 64 if (SvOK(rev))
1780 0 127 if (SvTRUE(rev)) {
1788 127 0 r = (b > 63 ? 0 : a >> b);
1789 64 63 if (SvOK(rev))
1807 0 304 if (SvTRUE(rev)) {
1816 302 0 if (SvOK(rev))
1835 0 4 if (SvTRUE(rev)) {
1843 3 1 RETVAL = (left < right ? -1 : left > right ? 1 : 0);
0 4 RETVAL = (left < right ? -1 : left > right ? 1 : 0);
1855 296 0 : &PL_sv_no );
1867 0 0 : &PL_sv_no );
1877 0 2 if (SvTRUE(rev))
1878 0 0 RETVAL = SvU64x(self) < SvU64(aTHX_ other) ? &PL_sv_yes : &PL_sv_no;
1880 1 1 RETVAL = SvU64x(self) > SvU64(aTHX_ other) ? &PL_sv_yes : &PL_sv_no;
1890 0 2 if (SvTRUE(rev))
1891 0 0 RETVAL = SvU64x(self) > SvU64(aTHX_ other) ? &PL_sv_yes : &PL_sv_no;
1893 1 1 RETVAL = SvU64x(self) < SvU64(aTHX_ other) ? &PL_sv_yes : &PL_sv_no;
1903 0 3 if (SvTRUE(rev))
1904 0 0 RETVAL = SvU64x(self) <= SvU64(aTHX_ other) ? &PL_sv_yes : &PL_sv_no;
1906 2 1 RETVAL = SvU64x(self) >= SvU64(aTHX_ other) ? &PL_sv_yes : &PL_sv_no;
1916 0 3 if (SvTRUE(rev))
1917 0 0 RETVAL = SvU64x(self) >= SvU64(aTHX_ other) ? &PL_sv_yes : &PL_sv_no;
1919 2 1 RETVAL = SvU64x(self) <= SvU64(aTHX_ other) ? &PL_sv_yes : &PL_sv_no;
1929 2 0 if (SvOK(rev))
1945 0 0 if (SvOK(rev))
1961 0 0 if (SvOK(rev))
1977 0 0 RETVAL = SvU64x(self) ? &PL_sv_no : &PL_sv_yes;
2007 0 0 RETVAL = SvU64x(self) ? &PL_sv_yes : &PL_sv_no;
2047 100 0 if (SvROK(self) && sv_isa(self, "Math::UInt64")) {
100 0 if (SvROK(self) && sv_isa(self, "Math::UInt64")) {