Branch Coverage

src/xs/lib/cmp.cc
Criterion Covered Total %
branch 107 160 66.8


line true false branch
7 493 113 if (f == s) return true;
9 54 59 if (SvROK(f) | SvROK(s)) { /* unroll references */
10 79 46 while (SvROK(f) & SvROK(s)) {
13 2 77 if (SvOBJECT(fval) ^ SvOBJECT(sval)) return false;
14 12 65 if (SvOBJECT(fval)) {
15 1 11 if (fval == sval) return true;
16 2 9 if (SvSTASH(fval) != SvSTASH(sval)) return false;
17 4 5 if (HvAMAGIC(SvSTASH(fval))) { // class has operator overloadings
19 3 1 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
3 0 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
0 3 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
0 0 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
0 3 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
0 0 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
0 0 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
3 0 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
3 0 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
3 0 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
2 1 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
2 0 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
0 0 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
0 0 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
0 0 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
0 0 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
0 0 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
0 0 if (tmpsv) return SvTRUE(tmpsv); // class has '==' operator overloading
26 4 42 if (SvROK(f) | SvROK(s)) return false; /* asymmetric references */
27 2 40 if (f == s) return true;
38 3 61 if (SvOK(f) && SvOK(s)) { // both are not undefs
3 0 if (SvOK(f) && SvOK(s)) { // both are not undefs
0 3 if (SvOK(f) && SvOK(s)) { // both are not undefs
3 58 if (SvOK(f) && SvOK(s)) { // both are not undefs
3 0 if (SvOK(f) && SvOK(s)) { // both are not undefs
0 3 if (SvOK(f) && SvOK(s)) { // both are not undefs
39 0 58 if (SvTYPE(s) > SVt_PVMG) return false; // wrong type
40 14 44 if (SvPOK(f) | SvPOK(s)) return strEQ(SvPV_nolen(f), SvPV_nolen(s)); // both strings
12 2 if (SvPOK(f) | SvPOK(s)) return strEQ(SvPV_nolen(f), SvPV_nolen(s)); // both strings
8 6 if (SvPOK(f) | SvPOK(s)) return strEQ(SvPV_nolen(f), SvPV_nolen(s)); // both strings
41 4 40 if (SvNOK(f) | SvNOK(s)) return SvNV(f) == SvNV(s); // natural values
3 1 if (SvNOK(f) | SvNOK(s)) return SvNV(f) == SvNV(s); // natural values
2 2 if (SvNOK(f) | SvNOK(s)) return SvNV(f) == SvNV(s); // natural values
44 3 3 return !(SvOK(f) || SvOK(s));
3 0 return !(SvOK(f) || SvOK(s));
3 0 return !(SvOK(f) || SvOK(s));
1 2 return !(SvOK(f) || SvOK(s));
1 0 return !(SvOK(f) || SvOK(s));
1 0 return !(SvOK(f) || SvOK(s));
46 19 0 return SvTYPE(s) == SVt_PVHV && hv_compare(aTHX_ (HV*)f, (HV*)s);
12 7 return SvTYPE(s) == SVt_PVHV && hv_compare(aTHX_ (HV*)f, (HV*)s);
48 10 0 return SvTYPE(s) == SVt_PVAV && av_compare(aTHX_ (AV*)f, (AV*)s);
7 3 return SvTYPE(s) == SVt_PVAV && av_compare(aTHX_ (AV*)f, (AV*)s);
50 1 0 return SvTYPE(s) == SVt_PVIO && PerlIO_fileno(IoIFP(f)) == PerlIO_fileno(IoIFP(s));
0 1 return SvTYPE(s) == SVt_PVIO && PerlIO_fileno(IoIFP(f)) == PerlIO_fileno(IoIFP(s));
52 3 0 return SvTYPE(s) == SVt_REGEXP && strEQ(SvPV_nolen(f), SvPV_nolen(s));
0 3 return SvTYPE(s) == SVt_REGEXP && strEQ(SvPV_nolen(f), SvPV_nolen(s));
0 3 return SvTYPE(s) == SVt_REGEXP && strEQ(SvPV_nolen(f), SvPV_nolen(s));
1 2 return SvTYPE(s) == SVt_REGEXP && strEQ(SvPV_nolen(f), SvPV_nolen(s));
62 0 57 if ((bool)f ^ (bool)s) return false;
67 0 19 if (f == s) return true;
68 19 0 if (!f || !s) return false;
0 19 if (!f || !s) return false;
69 0 19 if (HvUSEDKEYS(f) != HvUSEDKEYS(s)) return false;
0 19 if (HvUSEDKEYS(f) != HvUSEDKEYS(s)) return false;
1 18 if (HvUSEDKEYS(f) != HvUSEDKEYS(s)) return false;
72 1 17 if (!farr) return true; // both are empty
76 121 5 for (STRLEN i = 0; res && i <= fmax; ++i) {
110 11 for (STRLEN i = 0; res && i <= fmax; ++i) {
78 135 5 for (entry = farr[i]; res && entry; entry = HeNEXT(entry)) {
31 104 for (entry = farr[i]; res && entry; entry = HeNEXT(entry)) {
81 1 30 if (!sref) return false;
90 0 10 if (f == s) return true;
91 10 0 if (!f || !s) return true;
0 10 if (!f || !s) return true;
94 0 10 if (lasti != AvFILLp(s)) return false;
99 527 2 while (res && lasti-- >= 0) {
520 7 while (res && lasti-- >= 0) {
520 9 while (res && lasti-- >= 0) {
100 1 519 if ((bool)*fl ^ (bool)*sl) return false; // one is null while another is not.
106 11 0 }}
11 0 }}