Branch Coverage

sieve.c
Criterion Covered Total %
branch 269 340 79.1


line true false branch
21 11 1859 if ( (startp > UVCONST( 100000000000000) && range < 40000) ||
0 11 if ( (startp > UVCONST( 100000000000000) && range < 40000) ||
0 1859 if ( (startp > UVCONST( 100000000000000) && range < 40000) ||
22 0 0 (startp > UVCONST( 1000000000000000) && range < 150000) ||
0 1859 (startp > UVCONST( 1000000000000000) && range < 150000) ||
23 0 0 (startp > UVCONST( 10000000000000000) && range < 600000) ||
0 1859 (startp > UVCONST( 10000000000000000) && range < 600000) ||
24 0 0 (startp > UVCONST( 100000000000000000) && range < 2500000) ||
0 1859 (startp > UVCONST( 100000000000000000) && range < 2500000) ||
25 0 0 (startp > UVCONST( 1000000000000000000) && range < 10000000) ||
0 1859 (startp > UVCONST( 1000000000000000000) && range < 10000000) ||
26 0 0 (startp > UVCONST(10000000000000000000) && range < 40000000) )
123 1092 141 if (to < from)
125 0 1233 if (dst != src)
127 606 1233 while (from < to) {
128 141 465 size_t bytes = (2*from > to) ? to-from : from;
138 1999 0 MPUassert( (mem != 0) && (endd >= startd), "sieve_prefill bad arguments");
0 1999 MPUassert( (mem != 0) && (endd >= startd), "sieve_prefill bad arguments");
140 824 1175 if (startd != 0) {
143 766 58 if (tailbytes > nbytes) tailbytes = nbytes;
148 1233 766 if (nbytes > 0) {
151 1175 58 if (startd == 0) mem[0] = 0x01; /* Correct first byte */
200 14435 4221180 if (startp == 0) {
205 4218232 2948 if (p2 < startp) {
221 4098770 145863 if (w->offset >= bytes) {
228 1594 8708 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
2927 8343 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
2347 8106 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
1530 7946 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
2398 7585 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
1613 7406 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
2203 7303 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
2991 7018 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
534276 7018 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
229 1587 7145 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
2980 8654 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
2586 8141 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
1481 8071 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
2258 8058 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
1583 7932 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
2436 7666 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
3026 7323 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
563829 7323 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
230 1530 7311 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
3159 6886 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
2493 8240 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
1571 8048 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
2537 7656 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
1401 7711 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
2349 7443 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
2759 7366 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
534544 7366 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
231 1634 7063 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
2996 6675 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
2310 6442 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
1587 7992 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
2273 7798 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
1555 7693 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
2344 7596 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
3083 7220 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
515612 7220 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
232 1716 8099 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
3214 7641 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
2510 7348 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
1656 7115 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
2407 9846 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
1630 9719 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
2785 9079 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
3348 8331 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
784293 8331 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
233 1517 7583 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
2900 7292 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
2525 6850 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
1635 6599 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
2367 6402 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
1724 8662 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
2486 8316 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
3226 7734 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
648619 7734 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
234 1550 7965 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
3279 7419 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
2516 6953 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
1589 6799 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
2585 6544 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
1652 6396 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
2428 8725 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
3336 8101 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
699072 8101 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
235 1569 7598 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
3352 7017 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
2391 6715 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
1556 6652 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
2405 6371 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
1561 6198 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
2359 5918 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
2968 7726 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
613789 7726 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
256 10461 98 for ( ; prime <= limit; prime = next_prime_in_sieve(mem,prime,end)) {
269 269 0 UV endp = (endd >= (UV_MAX/30)) ? UV_MAX-2 : 30*endd+29;
270 269 0 MPUassert( (mem != 0) && (endd >= startd) && (endp >= startp),
269 0 MPUassert( (mem != 0) && (endd >= startd) && (endp >= startp),
0 269 MPUassert( (mem != 0) && (endd >= startd) && (endp >= startp),
275 246 23 if (sieve_size >= endp) {
285 0 23 if (limit > max_sieve_prime) limit = max_sieve_prime;
287 0 23 if (do_partial_sieve(startp, endp))
288 0 0 slimit >>= ((startp < (UV)1e16) ? 8 : 10);
290 0 23 if (slimit > sieve_size) {
295 77228 0 START_DO_FOR_EACH_SIEVE_PRIME(sieve, 0, start_base_prime, slimit) {
23 77205 START_DO_FOR_EACH_SIEVE_PRIME(sieve, 0, start_base_prime, slimit) {
77136 69 START_DO_FOR_EACH_SIEVE_PRIME(sieve, 0, start_base_prime, slimit) {
77228 3685 START_DO_FOR_EACH_SIEVE_PRIME(sieve, 0, start_base_prime, slimit) {
3708 23 START_DO_FOR_EACH_SIEVE_PRIME(sieve, 0, start_base_prime, slimit) {
301 0 23 if (limit > slimit) { /* We've sieved out most composites, but not all. */
302 0 0 START_DO_FOR_EACH_SIEVE_PRIME(mem, 0, 0, endp-startp) {
0 0 START_DO_FOR_EACH_SIEVE_PRIME(mem, 0, 0, endp-startp) {
0 0 START_DO_FOR_EACH_SIEVE_PRIME(mem, 0, 0, endp-startp) {
0 0 START_DO_FOR_EACH_SIEVE_PRIME(mem, 0, 0, endp-startp) {
0 0 START_DO_FOR_EACH_SIEVE_PRIME(mem, 0, 0, endp-startp) {
303 0 0 if (!BPSW(startp + p)) /* If the candidate is not prime, */
315 1878 0 UV endp = (endd >= (UV_MAX/30)) ? UV_MAX-2 : 30*endd+29;
316 1878 0 MPUassert( (mem != 0) && (endd >= startd) && (endp >= startp),
1878 0 MPUassert( (mem != 0) && (endd >= startd) && (endp >= startp),
0 1878 MPUassert( (mem != 0) && (endd >= startd) && (endp >= startp),
323 12673 239 while (i < wsize && warray[i].prime < start_base_prime)
11034 1639 while (i < wsize && warray[i].prime < start_base_prime)
327 0 1878 if (limit > max_sieve_prime) limit = max_sieve_prime;
329 4158664 250 while (i < wsize && warray[i].prime <= limit) {
4157036 1628 while (i < wsize && warray[i].prime <= limit) {
330 4148018 9018 if (warray[i].index >= 64)
335 11 1867 if (limit > warray[wsize-1].prime && warray[wsize-1].prime < max_sieve_prime) {
11 0 if (limit > warray[wsize-1].prime && warray[wsize-1].prime < max_sieve_prime) {
336 6882 0 START_DO_FOR_EACH_SIEVE_PRIME(mem, 0, 0, endp-startp) {
11 6871 START_DO_FOR_EACH_SIEVE_PRIME(mem, 0, 0, endp-startp) {
6871 0 START_DO_FOR_EACH_SIEVE_PRIME(mem, 0, 0, endp-startp) {
6882 594 START_DO_FOR_EACH_SIEVE_PRIME(mem, 0, 0, endp-startp) {
605 11 START_DO_FOR_EACH_SIEVE_PRIME(mem, 0, 0, endp-startp) {
337 2789 4082 if (!BPSW(startp + p)) /* If the candidate is not prime, */
382 0 1847 MPUassert( high >= low, "start_segment_primes bad arguments");
388 1847 0 ctx->endp = (ctx->hid >= (UV_MAX/30)) ? UV_MAX-2 : 30*ctx->hid+29;
392 26 1821 if (high > 1e10 && range > 32*1024-16) {
0 26 if (high > 1e10 && range > 32*1024-16) {
396 0 0 if (size < 128*1024) size = 128*1024;
399 0 0 size = (div <= 1) ? range : (range+div-1)/div;
408 0 1847 if (_XS_get_verbose() >= 2)
424 11 1836 if (do_partial_sieve(low, high))
425 5 6 limit >>= ((low < (UV)1e16) ? 8 : 10);
426 1847 0 if (limit <= maxsieve) {
431 0 1847 if (_XS_get_verbose() >= 4)
433 0 1847 New(0, warray, nprimes, wheel_t);
434 0 1847 START_DO_FOR_EACH_PRIME(0,limit) {
5541 4156769 START_DO_FOR_EACH_PRIME(0,limit) {
3694 1847 START_DO_FOR_EACH_PRIME(0,limit) {
1847 1847 START_DO_FOR_EACH_PRIME(0,limit) {
1818296 2338473 START_DO_FOR_EACH_PRIME(0,limit) {
516 1972667 START_DO_FOR_EACH_PRIME(0,limit) {
154887 1817780 START_DO_FOR_EACH_PRIME(0,limit) {
516 1817780 START_DO_FOR_EACH_PRIME(0,limit) {
0 4156253 START_DO_FOR_EACH_PRIME(0,limit) {
1331 4160463 START_DO_FOR_EACH_PRIME(0,limit) {
435 0 4160463 if (wsize >= nprimes) croak("segment bad upper count");
453 1774 1878 if (ctx->lod > ctx->hid) return 0;
457 1847 31 : (ctx->lod + ctx->segment_size - 1);
460 1847 31 *high = (seghigh_d == ctx->hid) ? ctx->high : (seghigh_d*30 + 29);
463 0 1878 MPUassert( seghigh_d >= ctx->lod, "next_segment_primes: highd < lowd");
464 0 1878 MPUassert( range_d <= ctx->segment_size, "next_segment_primes: range > segment size");
466 1878 0 if (ctx->warray != 0)
480 0 1847 MPUassert(ctx != 0, "end_segment_primes given a null pointer");
481 1847 0 if (ctx->segment != 0) {
485 0 1847 if (ctx->base != 0) {
489 1847 0 if (ctx->warray != 0) {