Branch Coverage

MinPerfHashTwoLevel.xs
Criterion Covered Total %
branch 245 424 57.7


line true false branch
26 2111676 0 if (ofs) {
28 2108358 3318 if (utf8_default) {
40 18 2111658 if (is_utf8 > 1) {
44 3540 2108118 if (is_utf8) {
48 2108118 0 if (ptr) {
60 270 905004 if (index >= mph->num_buckets) {
65 0 905004 if (val_sv) {
69 905004 0 if (key_sv) {
92 1992 1204680 if (SvUTF8(key_sv)) {
97 1206672 0 key_pv= SvPV(key_sv,key_len);
103 0 1206672 if (!bucket->xor_val)
107 443624 763048 if ( bucket->index < 0 ) {
114 1206672 0 if (bucket->key_len == key_len && memEQ(key_pv,got_key_pv,key_len)) {
1206672 0 if (bucket->key_len == key_len && memEQ(key_pv,got_key_pv,key_len)) {
115 1206672 0 if (val_sv) {
133 366 0 if (error)
135 0 366 if (fd < 0) {
136 0 0 if (error)
140 0 366 if (fstat(fd,&st)==-1) {
141 0 0 if (error)
145 0 366 if (st.st_size < sizeof(struct mph_header)) {
146 0 0 if (error)
152 0 366 if (ptr == MAP_FAILED) {
153 0 0 if (error)
160 5 361 if (head->magic_num != MAGIC_DECIMAL) {
161 0 5 if (head->magic_num == MAGIC_BIG_ENDIAN_DECIMAL) {
162 0 0 if (error)
165 5 0 if (error)
169 0 361 if (head->variant < MIN_VARIANT) {
170 0 0 if (error)
174 4 357 if (head->variant > MAX_VARIANT) {
175 4 0 if (error)
181 0 357 if (st.st_size % alignment) {
182 0 0 if (error)
186 354 3 if (
187 350 4 head->table_ofs < head->state_ofs ||
188 346 4 head->key_flags_ofs < head->table_ofs ||
189 342 4 head->val_flags_ofs < head->key_flags_ofs ||
190 3 339 head->str_buf_ofs < head->val_flags_ofs ||
193 18 0 if (error)
197 249 90 if (flags & MPH_F_VALIDATE) {
205 158 91 if (have_file_checksum != want_file_checksum) {
206 158 0 if (error)
223 1 603401 if (SvROK(sv)) {
227 0 603401 if (SvOK(sv)) {
0 0 if (SvOK(sv)) {
0 0 if (SvOK(sv)) {
229 553225 50176 char *pv= SvPV(sv,pv_len);
230 1 603400 if (pv_len > 0xFFFF)
232 1030 602370 if (SvUTF8(sv)) {
233 506 524 if (downgrade)
235 1021 9 if (SvUTF8(normalized_sv)) {
252 246 300 if (r) {
278 301701 93 while (he= hv_iternext(source_hv)) {
291 0 301701 if (!val_sv) croak("panic: no sv for value?");
292 0 301701 if (!SvOK(val_sv) && (compute_flags & MPH_F_FILTER_UNDEF)) continue;
0 0 if (!SvOK(val_sv) && (compute_flags & MPH_F_FILTER_UNDEF)) continue;
0 0 if (!SvOK(val_sv) && (compute_flags & MPH_F_FILTER_UNDEF)) continue;
0 0 if (!SvOK(val_sv) && (compute_flags & MPH_F_FILTER_UNDEF)) continue;
315 301699 0 key_pv= (U8 *)SvPV(key_normalized_sv,key_len);
320 93 0 if (buf_length_sv)
331 301697 93 for (i=0; i
342 301697 0 if (!got_psv || !SvROK(*got_psv)) croak("panic: bad item in keys_av");
0 301697 if (!got_psv || !SvROK(*got_psv)) croak("panic: bad item in keys_av");
345 0 301697 if (!h0_he) croak("panic: no h0_he?");
347 150572 151125 h0= SvUV(h0_sv);
353 0 301697 if (!got_psv)
355 190715 110982 if (!SvPOK(*got_psv))
360 0 301697 if (!got_psv)
363 190715 110982 if (!SvROK(*got_psv)) {
381 301644 93 for( i = 0 ; i < keybuckets_count ; i++ ) {
387 110929 190715 if (!got) continue;
390 0 190715 if (len<1) continue;
393 190396 319 if (SvPOK(*got)) {
410 0 190715 if (!buckets_rvp) croak("panic: out of memory in buckets_av lvalue fetch");
411 84805 105910 if (!SvROK(*buckets_rvp)) {
413 0 84805 if (!idx1_hv) croak("panic: out of memory creating new hash in buckets_av idx %u",idx1);
421 190715 0 hv_setuv_with_keysv(idx1_hv,MPH_KEYSV_XOR_VAL,xor_val);
422 190715 0 hv_setuv_with_keysv(idx1_hv,MPH_KEYSV_H1_KEYS,keys_in_bucket_count);
425 301697 190715 for (i= 0, idx2= idx_start; i < keys_in_bucket_count; i++,idx2++) {
433 0 301697 if (!keys_rvp) croak("panic: no key_info in bucket %d", i);
437 0 301697 if (!buckets_rvp) croak("panic: out of memory in lvalue fetch to buckets_av");
439 216892 84805 if (!SvROK(*buckets_rvp)) {
444 84805 0 hv_copy_with_keysv(idx2_hv,keys_hv,MPH_KEYSV_XOR_VAL);
445 84805 0 hv_copy_with_keysv(idx2_hv,keys_hv,MPH_KEYSV_H1_KEYS);
453 301697 0 hv_setuv_with_keysv(keys_hv,MPH_KEYSV_IDX,*idx2);
462 226 0 U32 *idx1_start= (U32 *)SvPV(idx1_packed_sv,idx1_packed_sv_len);
466 79795 226 for (idx1_ptr= idx1_start; idx1_ptr < idx1_end; idx1_ptr++) {
478 0 79795 if (!got)
483 0 79795 if (!got)
487 79795 0 h2_start= (U32 *)SvPV(h2_sv,h2_strlen);
495 0 244616 if (xor_val == max_xor_val) {
497 0 0 while (h2_ptr < h2_end)
503 418752 79795 while (h2_ptr < h2_end) {
507 164775 253977 if (is_used[idx2])
509 155533 253931 for (check_idx= idx2_start; check_idx < idx2_ptr; check_idx++) {
510 46 155487 if (*check_idx == idx2)
527 93 0 U32 *idx1_start= (U32 *)SvPV(idx1_packed_sv,idx1_packed_sv_len);
533 110920 93 for (idx1_ptr= idx1_start; idx1_ptr < idx1_end; idx1_ptr++) {
539 412354 0 while (singleton_pos < bucket_count && is_used[singleton_pos]) {
301434 110920 while (singleton_pos < bucket_count && is_used[singleton_pos]) {
542 0 110920 if (singleton_pos == bucket_count) {
549 0 110920 if (!got)
572 0 93 Newxz(idx2_start, av_top_index(by_length_av)+1, U32);
576 339 93 for (len_idx= av_top_index(by_length_av); len_idx > 0 && !bad_idx; len_idx--) {
339 0 for (len_idx= av_top_index(by_length_av); len_idx > 0 && !bad_idx; len_idx--) {
581 319 20 if (!idx1_packed_sv || !SvPOK(*idx1_packed_sv))
0 319 if (!idx1_packed_sv || !SvPOK(*idx1_packed_sv))
584 93 226 if (len_idx == 1) {
658 3 0 U8 *str_pv= (U8 *)SvPV(str_sv,str_len);
659 3 0 state_pv= (U8 *)SvPV(state_sv,state_len);
660 0 3 if (state_len != MPH_STATE_BYTES) {
680 0 96 if (!SvOK(base_seed_sv))
0 0 if (!SvOK(base_seed_sv))
0 0 if (!SvOK(base_seed_sv))
682 0 96 if (SvROK(base_seed_sv))
685 96 0 seed_pv= (U8 *)SvPV(seed_sv,seed_len);
687 0 96 if (seed_len != MPH_SEED_BYTES) {
688 0 0 if (SvREADONLY(base_seed_sv)) {
689 0 0 if (seed_len < MPH_SEED_BYTES) {
693 0 0 else if (seed_len > MPH_SEED_BYTES) {
699 0 0 if (seed_len < MPH_SEED_BYTES) {
701 0 0 while (seed_len < MPH_SEED_BYTES) {
707 0 0 seed_pv= (U8 *)SvPV(seed_sv,seed_len);
715 96 0 state_pv= (U8 *)SvPV(RETVAL,state_len);
758 95 0 if (he) {
759 0 95 variant= SvUV(HeVAL(he));
765 95 0 if (he) {
766 0 95 compute_flags= SvUV(HeVAL(he));
772 95 0 if (he) {
774 95 0 state_pv= (U8 *)SvPV(state_sv,state_len);
775 0 95 if (state_len != MPH_STATE_BYTES) {
783 95 0 if (he) {
790 95 0 if (he) {
797 95 0 if (he) {
799 0 95 if (SvROK(rv)) {
820 46 47 if (compute_flags & MPH_F_DETERMINISTIC)
863 0 91 U32 buf_length= SvUV(buf_length_sv);
867 91 0 char *state_pv= SvPV(state_sv, state_len);
874 0 91 U32 str_rlen= _roundup( buf_length
876 0 0 + ( SvOK(comment_sv) ? sv_len(comment_sv) + 1 : 1 )
0 0 + ( SvOK(comment_sv) ? sv_len(comment_sv) + 1 : 1 )
902 301673 91 for (i= 0; i < bucket_count; i++) {
907 0 301673 key_is_utf8_count[SvUV(HeVAL(key_is_utf8_he))]++;
908 0 301673 val_is_utf8_count[SvUV(HeVAL(val_is_utf8_he))]++;
911 73 18 if (key_is_utf8_count[0]) { the_flag= 0; used_flags++; }
912 42 49 if (key_is_utf8_count[1]) { the_flag= 1; used_flags++; }
913 6 85 if (key_is_utf8_count[2]) { the_flag= 2; used_flags++; }
914 67 24 if (used_flags == 1) {
919 73 18 if (val_is_utf8_count[0]) { the_flag= 0; used_flags++; }
920 42 49 if (val_is_utf8_count[1]) { the_flag= 1; used_flags++; }
921 67 24 if (used_flags == 1) {
951 67 24 if (val_is_utf8_generic >= 0)
953 67 24 if (key_is_utf8_generic >= 0)
965 91 0 pv= SvPV(comment_sv,pv_len);
969 301673 91 for (i= 0; i < bucket_count; i++) {
976 190698 110975 if (xor_val_he) {
977 0 190698 table[i].xor_val= SvUV(HeVAL(xor_val_he));
981 301673 0 SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
0 301673 SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
0 0 SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
0 0 SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
0 301673 SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
301673 0 SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
0 301673 SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
301673 0 SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
301673 0 SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
301673 0 SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
0 301673 SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
0 0 SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
301673 0 SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
301673 0 SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
0 301673 SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
301673 0 SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
982 301673 0 SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
0 301673 SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
0 0 SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
0 0 SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
0 301673 SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
301673 0 SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
0 301673 SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
301673 0 SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
485 301188 SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
485 0 SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
0 485 SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
0 301188 SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
485 0 SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
485 0 SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
0 485 SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
485 0 SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv);
983 474 301199 if ( key_is_utf8_generic < 0) {
985 474 0 if (key_is_utf8_he) {
986 0 474 UV u= SvUV(HeVAL(key_is_utf8_he));
992 474 301199 if ( val_is_utf8_generic < 0 ) {
994 474 0 if (val_is_utf8_he) {
995 0 474 UV u= SvUV(HeVAL(val_is_utf8_he));
1006 88 3 if (r) {
1030 366 0 char *file_pv= SvPV(file_sv,file_len);
1032 185 181 if (mmap_status < 0) {
1049 181 0 struct mph_obj *obj= (struct mph_obj *)SvPV_nolen(mount_sv);
1051 0 181 SvOK_off(mount_sv);
1062 905274 0 struct mph_obj *obj= (struct mph_obj *)SvPV_nolen(mount_sv);
1063 905274 0 SV* key_sv= items > 2 ? ST(2) : NULL;
1064 0 905274 SV* val_sv= items > 3 ? ST(3) : NULL;
1065 0 905274 if (items > 4)
1080 1206672 0 SV* val_sv= items > 2 ? ST(2) : NULL;
1081 1206672 0 struct mph_obj *obj= (struct mph_obj *)SvPV_nolen(mount_sv);
1082 0 1206672 if (items > 3)
1115 0 1440 if (!got)
1118 1440 0 if (!mount_sv || !SvPOK(mount_sv))
0 1440 if (!mount_sv || !SvPOK(mount_sv))
1120 1440 0 obj= (struct mph_obj *)SvPV_nolen(mount_sv);