Skip to content

Commit 02a671e

Browse files
committed
Added last test
1 parent 9e53946 commit 02a671e

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

demo/test.c

+67
Original file line numberDiff line numberDiff line change
@@ -1577,8 +1577,75 @@ static int test_mp_is_small_prime(void)
15771577

15781578
static int test_mp_next_small_prime(void)
15791579
{
1580+
mp_sieve sieve;
1581+
mp_sieve_prime ret = 0lu, p;
1582+
mp_int primesum, t;
1583+
mp_err e;
1584+
int i, test_size;
1585+
1586+
/* Jumping wildly to and fro */
1587+
const mp_sieve_prime to_test[] = {
1588+
52, 137, 153, 179, 6, 153, 53, 132, 150, 65,
1589+
27414, 36339, 36155, 11067, 52060, 5741,
1590+
29755, 2698, 52572, 13053, 9375, 47241,
1591+
39626, 207423, 128857, 37419, 141696, 189465,
1592+
41503, 127370, 91673, 8473, 479142414, 465566339,
1593+
961126169, 1057886067, 1222702060, 1017450741,
1594+
1019879755, 72282698, 2048787577, 2058368053
1595+
};
1596+
const mp_sieve_prime tested[] = {
1597+
53, 137, 157, 179, 7, 157, 53, 137, 151, 67,
1598+
27427, 36341, 36161, 11069, 52067, 5741,
1599+
29759, 2699, 52579, 13063, 9377, 47251,
1600+
39631, 207433, 128857, 37423, 141697, 189467,
1601+
41507, 127373, 91673, 8501, 479142427, 465566393,
1602+
961126169, 1057886083, 1222702081, 1017450823,
1603+
1019879761, 72282701, 2048787577, 2058368113
1604+
};
1605+
const char *primesum_32 = "202259606268580";
1606+
1607+
mp_sieve_init(&sieve);
1608+
1609+
test_size = (int)(sizeof(to_test)/sizeof(mp_sieve_prime));
15801610

1611+
for (i = 0; i < test_size; i++) {
1612+
if ((e = mp_next_small_prime(to_test[i], &ret, &sieve)) != MP_OKAY) {
1613+
fprintf(stderr,"mp_next_small_prime failed with \"%s\" at index %d\n",
1614+
mp_error_to_string(e), i);
1615+
goto LBL_ERR;
1616+
}
1617+
if (ret != tested[i]) {
1618+
fprintf(stderr,"mp_next_small_prime failed for %lu. Said %lu but is %lu \n",
1619+
(unsigned long)to_test[i], (unsigned long)ret, (unsigned long)tested[i]);
1620+
goto LBL_ERR;
1621+
}
1622+
}
1623+
1624+
DOR(mp_init_multi(&primesum, &t, NULL));
1625+
1626+
for (p = 4293918720lu; ret < (mp_sieve_prime)MP_SIEVE_BIGGEST_PRIME;) {
1627+
DO(mp_next_small_prime(p, &ret, &sieve));
1628+
p = ret + 1u;
1629+
#ifdef MP_64BIT
1630+
mp_set_u64(&t, ret);
1631+
#else
1632+
mp_set_u32(&t, ret);
1633+
#endif
1634+
DO(mp_add(&primesum, &t, &primesum));
1635+
}
1636+
printf("Primesum computed: ");
1637+
DO(mp_fwrite(&primesum, 10, stdout));
1638+
puts("");
1639+
DO(mp_read_radix(&t, primesum_32, 10));
1640+
EXPECT(mp_cmp(&primesum, &t) == MP_EQ);
1641+
1642+
mp_sieve_clear(&sieve);
1643+
mp_clear_multi(&primesum, &t, NULL);
15811644
return EXIT_SUCCESS;
1645+
LBL_ERR:
1646+
mp_clear_multi(&primesum, &t, NULL);
1647+
mp_sieve_clear(&sieve);
1648+
return EXIT_FAILURE;
15821649
}
15831650

15841651
static int test_mp_prec_small_prime(void)

0 commit comments

Comments
 (0)