Branch Coverage

lmo.c
Criterion Covered Total %
branch 170 204 83.3


line true false branch
159 85703 2387 for (i = 2, p = 3; p*p < start + (16*PREV_SIEVE_SIZE); p = primes[++i])
160 17894 67809 for (j = (start == 0) ? p*p/2 : (p-1) - ((start+(p-1))/2) % p;
161 13073251 85703 j < (8*PREV_SIEVE_SIZE); j += p)
169 0 1552313 if (n <= 3) return (n == 3) ? 2 : 0;
0 0 if (n <= 3) return (n == 3) ? 2 : 0;
170 0 1552313 if (n > sieve_max) croak("ps overflow\n");
179 2387 1551409 if (sieve_start != *segment_start) { /* Fill sieve if necessary */
184 1552313 5777203 if (sieve[bit_offset / 8] & (1u << (bit_offset % 8)))
186 5775720 1483 } while (bit_offset-- > 0);
217 668537 788 for (i = 1; i < tableSize; ++i)
221 668537 788 for (i = 1; i < tableSize; ++i) {
224 466476 202061 if (factor_table[i] != 65535) /* Already marked. */
226 202061 0 if (p < 65535) /* p is a small prime, so set the number. */
228 122743 79318 if (p >= max_prime) /* No multiples will be in the table */
233 1025779 79318 for (factor = 3; factor < max_factor; factor += 2) {
235 466476 559303 if (factor_table[index] == 65535) /* p is smallest factor */
237 442181 117122 else if (factor_table[index] > 0) /* Change number of factors */
242 132794 79318 for (factor = p; factor < max_factor; factor += 2*p)
276 37373704 90613 for (i = 0, bc = 0; i+7 < words; i += 8) {
288 343234 90613 for (; i < words; i++)
327 102592 90613 for ( ;index <= last_index; index++) {
328 89924 12668 if (index >= s->first_prime && index <= s->last_prime) {
89924 0 if (index >= s->first_prime && index <= s->last_prime) {
332 73357 29235 if (index <= s->last_prime_to_remove) {
334 73357 0 if (b < size) {
339 14578 6181250 sieve_case_zero(0, 3, b, p, size, mult, sieve, word_count);
340 9912 6181223 sieve_case_zero(1, 2, b, p, size, mult, sieve, word_count);
341 4919 6185401 sieve_case_zero(2, 1, b, p, size, mult, sieve, word_count);
342 9772 6185180 sieve_case_zero(3, 2, b, p, size, mult, sieve, word_count);
343 4967 6189903 sieve_case_zero(4, 1, b, p, size, mult, sieve, word_count);
344 9819 6188011 sieve_case_zero(5, 2, b, p, size, mult, sieve, word_count);
345 14631 6183005 sieve_case_zero(6, 3, b, p, size, mult, sieve, word_count);
346 4759 6187821 sieve_case_zero(7, 1, b, p, size, mult, sieve, word_count);
358 8883 3224 while (from < to) {
359 2967 5916 uint32 words = (2*from > to) ? to-from : from;
374 788 18 if (segment_start == 0) {
379 93864 806 while (s->last_prime < sieve_last) {
381 0 93864 if (p >= segment_start + size)
385 72655 0 while (s->last_prime_to_remove < sieve_last) {
388 806 71849 if (p2 >= segment_start + size)
396 806 0 if (start_prime_index >= 3) /* Remove multiples of 3. */
397 51584 806 for (i = 3/2; i < 3 * SWORD_BITS; i += 3)
401 806 0 if (start_prime_index >= 3) /* Remove multiples of 5. */
402 154752 806 for (i = 5/2; i < 15 * SWORD_BITS; i += 5)
406 806 0 if (start_prime_index >= 4) /* Remove multiples of 7. */
407 773760 806 for (i = 7/2; i < 105 * SWORD_BITS; i += 7)
411 806 0 if (start_prime_index >= 5) /* Remove multiples of 11. */
412 5416320 806 for (i = 11/2; i < 1155 * SWORD_BITS; i += 11)
419 774 32 if (size % SWORD_BITS)
424 1815439 806 for (i = 0; i < words; i++)
452 788 2553 if (n < _MPU_LMO_CROSSOVER || n < 10000) return segment_prime_count(2, n);
0 788 if (n < _MPU_LMO_CROSSOVER || n < 10000) return segment_prime_count(2, n);
473 458 330 M = (N3 > 500) ? M_FACTOR(N3) : N3+N3/2;
474 0 788 if (M >= N2) M = N2 - 1; /* M must be smaller than N^1/2 */
475 0 788 if (M < N3) M = N3; /* M must be at least N^1/3 */
485 0 788 New(0, ss.totals, K3+2, UV);
486 0 788 New(0, ss.prime_index, K3+2, uint32);
487 0 788 New(0, ss.first_bit_index, K3+2, uint32);
490 788 0 if (ss.sieve == 0 || ss.word_count == 0 || ss.word_count_sum == 0 ||
788 0 if (ss.sieve == 0 || ss.word_count == 0 || ss.word_count_sum == 0 ||
788 0 if (ss.sieve == 0 || ss.word_count == 0 || ss.word_count_sum == 0 ||
491 788 0 ss.totals == 0 || ss.prime_index == 0 || ss.first_bit_index == 0 ||
788 0 ss.totals == 0 || ss.prime_index == 0 || ss.first_bit_index == 0 ||
788 0 ss.totals == 0 || ss.prime_index == 0 || ss.first_bit_index == 0 ||
492 0 788 ss.multiplier == 0)
503 884 788 for (j = (M+1)/2; factor_table[j] <= primes[c]; j++) /* */;
509 0 788 if (piM < c) croak("N too small for LMO\n");
513 3537 788 for (KM = c; primes[KM+1] * primes[KM+2] <= M && KM < piM; KM++) /* */;
3537 0 for (KM = c; primes[KM+1] * primes[KM+2] <= M && KM < piM; KM++) /* */;
514 0 788 if (K3 < KM) K3 = KM; /* Ensure K3 >= KM */
522 788 0 prime = prev_sieve_prime( (N2 >= ps_start) ? ps_start : N2+1 );
528 537037 788 for (j = 0; j < end; j++) {
530 200965 336072 if (lpf > primes[c]) {
532 161541 39424 if (lpf & 0x01) sum2 += phi_value; else sum1 += phi_value;
538 788 0 if (c < piM) {
540 505466 788 for (j = (1+M/pc_1)/2; j < end; j++) {
542 178019 327447 if (lpf > pc_1) {
544 150068 27951 if (lpf & 0x01) sum1 += phi_value; else sum2 += phi_value;
549 94652 788 for (k = 0; k <= K3; k++) ss.totals[k] = 0;
550 8265 788 for (k = 0; k < KM; k++) ss.prime_index[k] = end;
556 85599 788 for (k = KM; k < K3; k++) {
558 156525 265 while (last_prime > k+1 && pk * pk * primes[last_prime] > n)
71191 85334 while (last_prime > k+1 && pk * pk * primes[last_prime] > n)
565 806 788 for (sieve_start = 0; sieve_start < last_phi_sieve; sieve_start = sieve_end) {
576 3219 806 for (k = c+1; k < KM; k++) {
578 3219 0 uint32 start = (least_divisor >= pk * U32_CONST(0xFFFFFFFE))
582 3840279 3219 for (j = ss.prime_index[k] - 1; j >= start; j--) {
584 1099957 2740322 if (lpf > pk) {
586 1016671 83286 if (lpf & 0x01) sum1 += phi_value; else sum2 += phi_value;
589 3202 17 if (start < ss.prime_index[k])
594 85782 806 for (; k < step7_max; k++) {
597 85517 265 if (j >= k+2) {
600 2234064 0 while (endj > 7 && endj-7 >= k+2 && pk*primes[endj-7] > least_divisor) endj -= 8;
2148705 85359 while (endj > 7 && endj-7 >= k+2 && pk*primes[endj-7] > least_divisor) endj -= 8;
2148547 158 while (endj > 7 && endj-7 >= k+2 && pk*primes[endj-7] > least_divisor) endj -= 8;
601 299427 85334 while ( endj >= k+2 && pk*primes[endj ] > least_divisor) endj--;
299244 183 while ( endj >= k+2 && pk*primes[endj ] > least_divisor) endj--;
603 17487620 85517 for ( ; j > endj; j--)
609 85616 789 while (step7_max > KM && ss.prime_index[step7_max-1] < (step7_max-1)+2)
85599 17 while (step7_max > KM && ss.prime_index[step7_max-1] < (step7_max-1)+2)
615 1551525 806 while (prime > least_divisor && prime_index >= piM) {
1551525 0 while (prime > least_divisor && prime_index >= piM) {