Branch Coverage

sieve.c
Criterion Covered Total %
branch 311 394 78.9


line true false branch
21 11 6311 if ( (startp > UVCONST( 100000000000000) && range < 40000) ||
0 11 if ( (startp > UVCONST( 100000000000000) && range < 40000) ||
0 6311 if ( (startp > UVCONST( 100000000000000) && range < 40000) ||
22 0 0 (startp > UVCONST( 1000000000000000) && range < 150000) ||
0 6311 (startp > UVCONST( 1000000000000000) && range < 150000) ||
23 0 0 (startp > UVCONST( 10000000000000000) && range < 600000) ||
0 6311 (startp > UVCONST( 10000000000000000) && range < 600000) ||
24 0 0 (startp > UVCONST( 100000000000000000) && range < 2500000) ||
0 6311 (startp > UVCONST( 100000000000000000) && range < 2500000) ||
25 0 0 (startp > UVCONST( 1000000000000000000) && range < 10000000) ||
0 6311 (startp > UVCONST( 1000000000000000000) && range < 10000000) ||
26 0 0 (startp > UVCONST(10000000000000000000) && range < 40000000) )
123 5252 643 if (to < from)
125 0 5895 if (dst != src)
127 3488 5895 while (from < to) {
128 643 2845 size_t bytes = (2*from > to) ? to-from : from;
138 6793 0 MPUassert( (mem != 0) && (endd >= startd), "sieve_prefill bad arguments");
0 6793 MPUassert( (mem != 0) && (endd >= startd), "sieve_prefill bad arguments");
140 1422 5371 if (startd != 0) {
143 898 524 if (tailbytes > nbytes) tailbytes = nbytes;
148 5895 898 if (nbytes > 0) {
151 5371 524 if (startd == 0) mem[0] = 0x01; /* Correct first byte */
200 27102 4692527 if (startp == 0) {
205 4684883 7644 if (p2 < startp) {
221 4427081 2904438 if (w->offset >= bytes) {
228 24561 329053 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
71443 328117 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
47877 327318 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
24538 327127 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
48017 326634 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
24640 326263 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
47366 325922 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
71007 325224 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
4552145 325224 CROSS_INDEX( 0, 0,1,2,3,4,5,6,7, 0,0,0,0,0,0,0,1, 1); break;
229 24918 329682 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
71706 332593 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
48675 331741 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
24733 331597 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
48640 331448 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
24793 331156 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
48540 330661 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
72082 329920 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
4780152 329920 CROSS_INDEX( 8, 1,5,4,0,7,3,2,6, 1,1,1,0,1,1,1,1, 7); break;
230 25021 329908 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
72107 329211 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
48535 332031 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
24795 331635 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
48663 330755 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
24319 330626 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
48537 330248 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
71509 330009 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
4583831 330009 CROSS_INDEX(16, 2,4,0,6,1,7,3,5, 2,2,0,2,0,2,2,1, 11); break;
231 24769 328312 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
71519 327443 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
48181 327024 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
24677 330191 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
47935 329886 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
24839 329620 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
48074 329306 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
72373 328636 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
4460185 328636 CROSS_INDEX(24, 3,0,6,5,2,1,7,4, 3,1,1,2,1,1,3,1, 13); break;
232 24942 330677 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
72119 329770 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
48873 329021 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
24794 328549 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
48613 333751 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
24743 333572 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
48981 332462 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
72219 331129 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
6217737 331129 CROSS_INDEX(32, 4,7,1,2,5,6,0,3, 3,3,1,2,1,3,3,1, 17); break;
233 24358 325151 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
70890 324400 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
47788 323751 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
24480 323200 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
47631 322860 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
24732 327281 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
48204 326437 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
70412 325420 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
5292762 325420 CROSS_INDEX(40, 5,3,7,1,6,0,4,2, 4,2,2,2,2,2,4,1, 19); break;
234 24836 332541 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
72772 331337 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
49038 330740 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
24908 330515 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
49589 329851 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
24840 329567 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
48705 333864 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
72202 332798 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
5654559 332798 CROSS_INDEX(48, 6,2,3,7,0,4,5,1, 5,3,1,4,1,3,5,1, 23); break;
235 24633 330488 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
72108 329419 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
48431 328821 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
24690 328526 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
48317 327996 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
24873 327746 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
48979 327251 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
72349 330732 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
5103879 330732 CROSS_INDEX(56, 7,6,5,4,3,2,1,0, 6,4,2,4,2,4,6,1, 29); break;
256 16826 195 for ( ; prime <= limit; prime = next_prime_in_sieve(mem,prime,end)) {
264 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) {
265 2789 4082 if (!BPSW(startp + p)) /* If the candidate is not prime, */
272 69982 0 START_DO_FOR_EACH_SIEVE_PRIME(sieve, 0, start_base_prime, limit) { /* Sieve */
20 69962 START_DO_FOR_EACH_SIEVE_PRIME(sieve, 0, start_base_prime, limit) { /* Sieve */
69902 60 START_DO_FOR_EACH_SIEVE_PRIME(sieve, 0, start_base_prime, limit) { /* Sieve */
69982 3411 START_DO_FOR_EACH_SIEVE_PRIME(sieve, 0, start_base_prime, limit) { /* Sieve */
3431 20 START_DO_FOR_EACH_SIEVE_PRIME(sieve, 0, start_base_prime, limit) { /* Sieve */
281 0 0 UV startp = 30*startd, endp = (endd >= (UV_MAX/30)) ? UV_MAX-2 : 30*endd+29;
283 0 0 MPUassert(mem != 0 && endd >= startd && endp >= startp && depth >= 13,
0 0 MPUassert(mem != 0 && endd >= startd && endp >= startp && depth >= 13,
0 0 MPUassert(mem != 0 && endd >= startd && endp >= startp && depth >= 13,
0 0 MPUassert(mem != 0 && endd >= startd && endp >= startp && depth >= 13,
286 0 0 if (limit > max_sieve_prime) limit = max_sieve_prime;
287 0 0 if (limit > depth) limit = depth;
298 163 0 UV startp = 30*startd, endp = (endd >= (UV_MAX/30)) ? UV_MAX-2 : 30*endd+29;
301 163 0 MPUassert(mem != 0 && endd >= startd && endp >= startp,
163 0 MPUassert(mem != 0 && endd >= startd && endp >= startp,
0 163 MPUassert(mem != 0 && endd >= startd && endp >= startp,
306 143 20 if (sieve_size >= endp) {
312 20 0 } else if (!do_partial && sieve_size >= limit) {
20 0 } else if (!do_partial && sieve_size >= limit) {
321 0 0 if (do_partial)
322 0 0 limit >>= ((startp < (UV)1e16) ? 8 : 10);
329 0 0 if (do_partial)
341 6578 0 UV endp = (endd >= (UV_MAX/30)) ? UV_MAX-2 : 30*endd+29;
342 6578 0 MPUassert(mem != 0 && endd >= startd && endp >= startp,
6578 0 MPUassert(mem != 0 && endd >= startd && endp >= startp,
0 6578 MPUassert(mem != 0 && endd >= startd && endp >= startp,
349 38678 3465 while (i < wsize && warray[i].prime < start_base_prime)
35565 3113 while (i < wsize && warray[i].prime < start_base_prime)
353 0 6578 if (limit > max_sieve_prime) limit = max_sieve_prime;
355 7247893 3476 while (i < wsize && warray[i].prime <= limit) {
7244791 3102 while (i < wsize && warray[i].prime <= limit) {
356 4632901 2611890 if (warray[i].index >= 64)
361 11 6567 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)
404 0 6159 MPUassert( high >= low, "start_segment_primes bad arguments");
410 6159 0 ctx->endp = (ctx->hid >= (UV_MAX/30)) ? UV_MAX-2 : 30*ctx->hid+29;
414 31 6128 if (high > 1e10 && range > 32*1024-16) {
3 28 if (high > 1e10 && range > 32*1024-16) {
418 3 0 if (size < 128*1024) size = 128*1024;
421 3 0 size = (div <= 1) ? range : (range+div-1)/div;
430 0 6159 MPUverbose(3, "segment sieve: byte range %lu split into %lu segments of size %lu\n", (unsigned long)range, (unsigned long)nsegments, (unsigned long)ctx->segment_size);
445 11 6148 if (do_partial_sieve(low, high))
446 5 6 limit >>= ((low < (UV)1e16) ? 8 : 10);
447 6159 0 if (limit <= maxsieve) {
452 0 6159 MPUverbose(4, "segment sieve %lu - %lu, primes to %lu (max %lu)\n", (unsigned long)low, (unsigned long)high, (unsigned long)limit, (unsigned long)nprimes);
453 0 6159 New(0, warray, nprimes, wheel_t);
454 0 6159 START_DO_FOR_EACH_PRIME(0,limit) {
0 0 START_DO_FOR_EACH_PRIME(0,limit) {
18477 4656317 START_DO_FOR_EACH_PRIME(0,limit) {
12318 6159 START_DO_FOR_EACH_PRIME(0,limit) {
6159 6159 START_DO_FOR_EACH_PRIME(0,limit) {
1997908 2658409 START_DO_FOR_EACH_PRIME(0,limit) {
604 2161644 START_DO_FOR_EACH_PRIME(0,limit) {
164340 1997304 START_DO_FOR_EACH_PRIME(0,limit) {
604 1997304 START_DO_FOR_EACH_PRIME(0,limit) {
0 4655713 START_DO_FOR_EACH_PRIME(0,limit) {
5555 4668635 START_DO_FOR_EACH_PRIME(0,limit) {
455 0 4668635 if (wsize >= nprimes) croak("segment bad upper count");
473 6086 6578 if (ctx->lod > ctx->hid) return 0;
477 6159 419 : (ctx->lod + ctx->segment_size - 1);
480 6159 419 *high = (seghigh_d == ctx->hid) ? ctx->high : (seghigh_d*30 + 29);
483 0 6578 MPUassert( seghigh_d >= ctx->lod, "next_segment_primes: highd < lowd");
484 0 6578 MPUassert( range_d <= ctx->segment_size, "next_segment_primes: range > segment size");
486 6578 0 if (ctx->warray != 0)
500 0 6159 MPUassert(ctx != 0, "end_segment_primes given a null pointer");
501 6159 0 if (ctx->segment != 0) {
505 0 6159 if (ctx->base != 0) {
509 6159 0 if (ctx->warray != 0) {
519 0 69 if (hi < lo) { *list = 0; return 0; }
521 0 69 New(0, P, Psize, UV);
522 4 65 if (lo <= 2 && hi >= 2) P[i++] = 2;
4 0 if (lo <= 2 && hi >= 2) P[i++] = 2;
523 4 65 if (lo <= 3 && hi >= 3) P[i++] = 3;
4 0 if (lo <= 3 && hi >= 3) P[i++] = 3;
524 4 65 if (lo <= 5 && hi >= 5) P[i++] = 5;
3 1 if (lo <= 5 && hi >= 5) P[i++] = 5;
529 235 69 while (next_segment_primes(ctx, &seg_base, &seg_low, &seg_high)) {
530 10519036 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
69 10518967 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
10518946 21 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
10519036 710101 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
710170 235 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
544 0 1670 if (n < 2) { *list = 0; return 0; }
545 0 1670 New(0, P, max_nprimes(n) + offset + 3, uint32_t); /* Allocate list */
546 796 874 if (offset > 0) memset(P, 0, offset * sizeof(uint32_t)); /* Zero to offset */
549 1542 128 if (n >= 7) {
553 1542 1542 while (next_segment_primes(ctx, &seg_base, &seg_low, &seg_high)) {
554 236529 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
1507 235022 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
235022 0 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
236529 5985 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
7492 1542 START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high )
560 100 1670 while (P[i-1] > n) i--; /* Truncate the count if necesssary. */