Branch Coverage

Permute.xs
Criterion Covered Total %
branch 81 104 77.8


line true false branch
96 23 58 if (n <= 1) /* termination condition */
114 31 27 if (loc[n] < n) {
121 31 27 for (i = n - 1; i >= 1; i--)
145 0 46314 Copy(array, copy, len, SV*);
147 40375 5939 if (calling)
151 363146 46309 if (calling) {
158 363141 46312 if (index != 0) {
163 363141 46312 } while (index-- > 0);
184 30 5 for (x = c->len; x >= 0; x--) free(c->tmparea[x]);
186 1 4 if (c->copy) {
187 5 1 for (x = 0; x < c->len; x++) SvREFCNT_dec(c->copy[x]);
201 1 5 if ((n = av_len(av) + 1) == 0)
206 0 5 if (c == NULL) {
234 0 4 if (RETVAL == NULL) {
240 0 4 if ((n = av_len(av) + 1) == 0)
247 3 1 if (items > 2) {
248 0 3 r = SvUV(ST(2));
249 0 3 if (r > n) {
253 3 0 if (r < n) {
262 0 4 if ((RETVAL->items = (SV**) safemalloc(sizeof(SV*) * (num + 1))) == NULL)
277 0 4 if (RETVAL->p == NULL)
280 0 4 if (RETVAL->loc == NULL)
285 9 4 for (i = 1; i <= num; i++) {
286 6 3 if (has_combination) {
309 3 1 if (has_combination) {
310 0 3 if(!reset_combination(RETVAL, av, r)) {
327 5 54 if (self->is_done) { /* done permutation for all combination */
328 3 2 if (self->c) {
335 0 54 EXTEND(sp, self->num);
345 120 54 for (i = 1; i <= self->num; i++) {
352 23 31 if (self->is_done && self->c) { /* permutation done */
21 2 if (self->is_done && self->c) { /* permutation done */
365 42 21 for (i = 1; i <= self->num; i++) {
398 9 4 for (i = 1; i <= self->num; i++) { /* leakproof! */
415 1 13 if (self->is_done)
417 0 13 EXTEND(sp, self->num);
425 27 13 for (i = 1; i <= self->num; i++)
453 7 3 for (i = 1; i <= self->num; i++) {
477 6 0 if (!SvROK(callback_sv) || SvTYPE(SvRV(callback_sv)) != SVt_PVCV)
0 6 if (!SvROK(callback_sv) || SvTYPE(SvRV(callback_sv)) != SVt_PVCV)
479 6 0 if (!SvROK(array_sv) || SvTYPE(SvRV(array_sv)) != SVt_PVAV)
0 6 if (!SvROK(array_sv) || SvTYPE(SvRV(array_sv)) != SVt_PVAV)
490 0 6 if (SvREADONLY(c->array))
493 1 5 if (c->len == 0) {
504 1 4 if (SvRMAGICAL(c->array)) {
506 5 1 for (x = 0; x < c->len; x++) {
508 5 0 c->copy[x] = (svp) ? SvREFCNT_inc(*svp) : &PL_sv_undef;
521 30 5 for (x = c->len; x >= 0; x--)
526 0 5 PUSH_MULTICALL(callback);
0 5 PUSH_MULTICALL(callback);
530 4 0 POP_MULTICALL;
0 4 POP_MULTICALL;