Branch Coverage

MinPerfHashTwoLevel.xs
Criterion Covered Total %
branch 247 424 58.2


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 444320 762352 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)
151 0 366 if (ptr == MAP_FAILED) {
152 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 1 360 if (head->variant < MIN_VARIANT) {
170 1 0 if (error)
174 3 357 if (head->variant > MAX_VARIANT) {
175 3 0 if (error)
181 0 357 if (st.st_size % alignment) {
182 0 0 if (error)
186 353 4 if (
187 350 3 head->table_ofs < head->state_ofs ||
188 346 4 head->key_flags_ofs < head->table_ofs ||
189 343 3 head->val_flags_ofs < head->key_flags_ofs ||
190 4 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)
224 1 603401 if (SvROK(sv)) {
228 0 603401 if (SvOK(sv)) {
0 0 if (SvOK(sv)) {
0 0 if (SvOK(sv)) {
230 553225 50176 char *pv= SvPV(sv,pv_len);
231 1 603400 if (pv_len > 0xFFFF)
233 1030 602370 if (SvUTF8(sv)) {
234 506 524 if (downgrade)
236 1021 9 if (SvUTF8(normalized_sv)) {
253 246 300 if (r) {
279 301701 93 while (he= hv_iternext(source_hv)) {
292 0 301701 if (!val_sv) croak("panic: no sv for value?");
293 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;
316 301699 0 key_pv= (U8 *)SvPV(key_normalized_sv,key_len);
321 93 0 if (buf_length_sv)
332 301697 93 for (i=0; i
343 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");
346 0 301697 if (!h0_he) croak("panic: no h0_he?");
348 150610 151087 h0= SvUV(h0_sv);
354 0 301697 if (!got_psv)
356 190769 110928 if (!SvPOK(*got_psv))
361 0 301697 if (!got_psv)
364 190769 110928 if (!SvROK(*got_psv)) {
382 301650 93 for( i = 0 ; i < keybuckets_count ; i++ ) {
388 110881 190769 if (!got) continue;
391 0 190769 if (len<1) continue;
394 190462 307 if (SvPOK(*got)) {
411 0 190769 if (!buckets_rvp) croak("panic: out of memory in buckets_av lvalue fetch");
412 80961 109808 if (!SvROK(*buckets_rvp)) {
414 0 80961 if (!idx1_hv) croak("panic: out of memory creating new hash in buckets_av idx %u",idx1);
422 190769 0 hv_setuv_with_keysv(idx1_hv,MPH_KEYSV_XOR_VAL,xor_val);
423 190769 0 hv_setuv_with_keysv(idx1_hv,MPH_KEYSV_H1_KEYS,keys_in_bucket_count);
426 301697 190769 for (i= 0, idx2= idx_start; i < keys_in_bucket_count; i++,idx2++) {
434 0 301697 if (!keys_rvp) croak("panic: no key_info in bucket %d", i);
438 0 301697 if (!buckets_rvp) croak("panic: out of memory in lvalue fetch to buckets_av");
440 220736 80961 if (!SvROK(*buckets_rvp)) {
445 80961 0 hv_copy_with_keysv(idx2_hv,keys_hv,MPH_KEYSV_XOR_VAL);
446 80961 0 hv_copy_with_keysv(idx2_hv,keys_hv,MPH_KEYSV_H1_KEYS);
454 301697 0 hv_setuv_with_keysv(keys_hv,MPH_KEYSV_IDX,*idx2);
463 214 0 U32 *idx1_start= (U32 *)SvPV(idx1_packed_sv,idx1_packed_sv_len);
467 79675 214 for (idx1_ptr= idx1_start; idx1_ptr < idx1_end; idx1_ptr++) {
479 0 79675 if (!got)
484 0 79675 if (!got)
488 79675 0 h2_start= (U32 *)SvPV(h2_sv,h2_strlen);
496 0 245058 if (xor_val == max_xor_val) {
498 0 0 while (h2_ptr < h2_end)
504 418989 79675 while (h2_ptr < h2_end) {
508 165319 253670 if (is_used[idx2])
510 155795 253606 for (check_idx= idx2_start; check_idx < idx2_ptr; check_idx++) {
511 64 155731 if (*check_idx == idx2)
528 93 0 U32 *idx1_start= (U32 *)SvPV(idx1_packed_sv,idx1_packed_sv_len);
534 111094 93 for (idx1_ptr= idx1_start; idx1_ptr < idx1_end; idx1_ptr++) {
540 412524 0 while (singleton_pos < bucket_count && is_used[singleton_pos]) {
301430 111094 while (singleton_pos < bucket_count && is_used[singleton_pos]) {
543 0 111094 if (singleton_pos == bucket_count) {
550 0 111094 if (!got)
573 0 93 Newxz(idx2_start, av_top_index(by_length_av)+1, U32);
577 325 93 for (len_idx= av_top_index(by_length_av); len_idx > 0 && !bad_idx; len_idx--) {
325 0 for (len_idx= av_top_index(by_length_av); len_idx > 0 && !bad_idx; len_idx--) {
582 307 18 if (!idx1_packed_sv || !SvPOK(*idx1_packed_sv))
0 307 if (!idx1_packed_sv || !SvPOK(*idx1_packed_sv))
585 93 214 if (len_idx == 1) {
659 3 0 U8 *str_pv= (U8 *)SvPV(str_sv,str_len);
660 3 0 state_pv= (U8 *)SvPV(state_sv,state_len);
661 0 3 if (state_len != MPH_STATE_BYTES) {
681 0 96 if (!SvOK(base_seed_sv))
0 0 if (!SvOK(base_seed_sv))
0 0 if (!SvOK(base_seed_sv))
683 0 96 if (SvROK(base_seed_sv))
686 96 0 seed_pv= (U8 *)SvPV(seed_sv,seed_len);
688 0 96 if (seed_len != MPH_SEED_BYTES) {
689 0 0 if (SvREADONLY(base_seed_sv)) {
690 0 0 if (seed_len < MPH_SEED_BYTES) {
694 0 0 else if (seed_len > MPH_SEED_BYTES) {
700 0 0 if (seed_len < MPH_SEED_BYTES) {
702 0 0 while (seed_len < MPH_SEED_BYTES) {
708 0 0 seed_pv= (U8 *)SvPV(seed_sv,seed_len);
716 96 0 state_pv= (U8 *)SvPV(RETVAL,state_len);
759 95 0 if (he) {
760 0 95 variant= SvUV(HeVAL(he));
766 95 0 if (he) {
767 0 95 compute_flags= SvUV(HeVAL(he));
773 95 0 if (he) {
775 95 0 state_pv= (U8 *)SvPV(state_sv,state_len);
776 0 95 if (state_len != MPH_STATE_BYTES) {
784 95 0 if (he) {
791 95 0 if (he) {
798 95 0 if (he) {
800 0 95 if (SvROK(rv)) {
821 46 47 if (compute_flags & MPH_F_DETERMINISTIC)
864 0 91 U32 buf_length= SvUV(buf_length_sv);
868 91 0 char *state_pv= SvPV(state_sv, state_len);
875 0 91 U32 str_rlen= _roundup( buf_length
877 0 0 + ( SvOK(comment_sv) ? sv_len(comment_sv) + 1 : 1 )
0 0 + ( SvOK(comment_sv) ? sv_len(comment_sv) + 1 : 1 )
903 301673 91 for (i= 0; i < bucket_count; i++) {
908 0 301673 key_is_utf8_count[SvUV(HeVAL(key_is_utf8_he))]++;
909 0 301673 val_is_utf8_count[SvUV(HeVAL(val_is_utf8_he))]++;
912 73 18 if (key_is_utf8_count[0]) { the_flag= 0; used_flags++; }
913 42 49 if (key_is_utf8_count[1]) { the_flag= 1; used_flags++; }
914 6 85 if (key_is_utf8_count[2]) { the_flag= 2; used_flags++; }
915 67 24 if (used_flags == 1) {
920 73 18 if (val_is_utf8_count[0]) { the_flag= 0; used_flags++; }
921 42 49 if (val_is_utf8_count[1]) { the_flag= 1; used_flags++; }
922 67 24 if (used_flags == 1) {
952 67 24 if (val_is_utf8_generic >= 0)
954 67 24 if (key_is_utf8_generic >= 0)
966 91 0 pv= SvPV(comment_sv,pv_len);
970 301673 91 for (i= 0; i < bucket_count; i++) {
977 190752 110921 if (xor_val_he) {
978 0 190752 table[i].xor_val= SvUV(HeVAL(xor_val_he));
982 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);
983 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);
984 474 301199 if ( key_is_utf8_generic < 0) {
986 474 0 if (key_is_utf8_he) {
987 0 474 UV u= SvUV(HeVAL(key_is_utf8_he));
993 474 301199 if ( val_is_utf8_generic < 0 ) {
995 474 0 if (val_is_utf8_he) {
996 0 474 UV u= SvUV(HeVAL(val_is_utf8_he));
1007 88 3 if (r) {
1031 366 0 char *file_pv= SvPV(file_sv,file_len);
1033 185 181 if (mmap_status < 0) {
1050 181 0 struct mph_obj *obj= (struct mph_obj *)SvPV_nolen(mount_sv);
1052 0 181 SvOK_off(mount_sv);
1063 905274 0 struct mph_obj *obj= (struct mph_obj *)SvPV_nolen(mount_sv);
1064 905274 0 SV* key_sv= items > 2 ? ST(2) : NULL;
1065 0 905274 SV* val_sv= items > 3 ? ST(3) : NULL;
1066 0 905274 if (items > 4)
1081 1206672 0 SV* val_sv= items > 2 ? ST(2) : NULL;
1082 1206672 0 struct mph_obj *obj= (struct mph_obj *)SvPV_nolen(mount_sv);
1083 0 1206672 if (items > 3)
1116 0 1440 if (!got)
1119 1440 0 if (!mount_sv || !SvPOK(mount_sv))
0 1440 if (!mount_sv || !SvPOK(mount_sv))
1121 1440 0 obj= (struct mph_obj *)SvPV_nolen(mount_sv);