X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Feratosthenes%2Ftest%2Frun.c;fp=ccan%2Feratosthenes%2Ftest%2Frun.c;h=a40b32ba228eeab7ae4494009b337a211081ac1b;hb=c5e84ef2b5687fc35cdffa4768da13674afb8977;hp=0000000000000000000000000000000000000000;hpb=f591ef48f887f6c1608cdd89d78eebacd27e8552;p=ccan diff --git a/ccan/eratosthenes/test/run.c b/ccan/eratosthenes/test/run.c new file mode 100644 index 00000000..a40b32ba --- /dev/null +++ b/ccan/eratosthenes/test/run.c @@ -0,0 +1,57 @@ +#include +#include + +#include + +#define LIMIT 500 + +#define ok_eq(a, b) \ + ok((a) == (b), "%s [%u] == %s [%u]", \ + #a, (unsigned)(a), #b, (unsigned)(b)) + +static bool test_isprime(unsigned long n) +{ + int i; + + if (n < 2) + return false; + + for (i = 2; i < n; i++) + if ((n % i) == 0) + return false; + + return true; +} + +static unsigned long test_nextprime(struct eratosthenes *s, unsigned long n) +{ + unsigned long i = n + 1; + + while ((i < LIMIT) && !eratosthenes_isprime(s, i)) + i++; + + return (i >= LIMIT) ? 0 : i; +} + +int main(void) +{ + struct eratosthenes s; + unsigned long n; + + /* This is how many tests you plan to run */ + plan_tests(2 * LIMIT); + + eratosthenes_init(&s); + + eratosthenes_sieve(&s, LIMIT); + + for (n = 0; n < LIMIT; n++) { + ok_eq(eratosthenes_isprime(&s, n), test_isprime(n)); + ok_eq(eratosthenes_nextprime(&s, n), test_nextprime(&s, n)); + } + + eratosthenes_reset(&s); + + /* This exits depending on whether all tests passed */ + return exit_status(); +}