diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-01-04 14:24:24 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-01-04 14:24:24 +0000 |
commit | dc1565216a5d20ae0d75872151523252309a1292 (patch) | |
tree | d57454ba9a40386552179eddf60d28bd1e8f3d54 /nss/lib/freebl/mpi/tests/mptest-5a.c | |
parent | 26c046fbc57d53136b4fb3b5e0d18298318125d4 (diff) | |
download | nss-dc1565216a5d20ae0d75872151523252309a1292.tar.gz |
nss-3.28.1nss-3.28.1
Diffstat (limited to 'nss/lib/freebl/mpi/tests/mptest-5a.c')
-rw-r--r-- | nss/lib/freebl/mpi/tests/mptest-5a.c | 207 |
1 files changed, 111 insertions, 96 deletions
diff --git a/nss/lib/freebl/mpi/tests/mptest-5a.c b/nss/lib/freebl/mpi/tests/mptest-5a.c index c7b29f7..c410a6a 100644 --- a/nss/lib/freebl/mpi/tests/mptest-5a.c +++ b/nss/lib/freebl/mpi/tests/mptest-5a.c @@ -20,113 +20,128 @@ #include "mpprime.h" typedef struct { - unsigned int sec; - unsigned int usec; + unsigned int sec; + unsigned int usec; } instant_t; -instant_t now(void) +instant_t +now(void) { - struct timeval clk; - instant_t res; + struct timeval clk; + instant_t res; - res.sec = res.usec = 0; + res.sec = res.usec = 0; - if(gettimeofday(&clk, NULL) != 0) - return res; + if (gettimeofday(&clk, NULL) != 0) + return res; - res.sec = clk.tv_sec; - res.usec = clk.tv_usec; + res.sec = clk.tv_sec; + res.usec = clk.tv_usec; - return res; + return res; } #define PRECISION 16 -int main(int argc, char *argv[]) +int +main(int argc, char *argv[]) { - int ix, num, prec = PRECISION; - mp_int a, b, c, d; - instant_t start, finish; - time_t seed; - unsigned int d1, d2; - - seed = time(NULL); - - if(argc < 2) { - fprintf(stderr, "Usage: %s <num-tests>\n", argv[0]); - return 1; - } - - if((num = atoi(argv[1])) < 0) - num = -num; - - printf("Test 5a: Euclid vs. Binary, a GCD speed test\n\n" - "Number of tests: %d\n" - "Precision: %d digits\n\n", num, prec); - - mp_init_size(&a, prec); - mp_init_size(&b, prec); - mp_init(&c); - mp_init(&d); - - printf("Verifying accuracy ... \n"); - srand((unsigned int)seed); - for(ix = 0; ix < num; ix++) { - mpp_random_size(&a, prec); - mpp_random_size(&b, prec); - - mp_gcd(&a, &b, &c); - mp_bgcd(&a, &b, &d); - - if(mp_cmp(&c, &d) != 0) { - printf("Error! Results not accurate:\n"); - printf("a = "); mp_print(&a, stdout); fputc('\n', stdout); - printf("b = "); mp_print(&b, stdout); fputc('\n', stdout); - printf("c = "); mp_print(&c, stdout); fputc('\n', stdout); - printf("d = "); mp_print(&d, stdout); fputc('\n', stdout); - - mp_clear(&a); mp_clear(&b); mp_clear(&c); mp_clear(&d); - return 1; + int ix, num, prec = PRECISION; + mp_int a, b, c, d; + instant_t start, finish; + time_t seed; + unsigned int d1, d2; + + seed = time(NULL); + + if (argc < 2) { + fprintf(stderr, "Usage: %s <num-tests>\n", argv[0]); + return 1; + } + + if ((num = atoi(argv[1])) < 0) + num = -num; + + printf("Test 5a: Euclid vs. Binary, a GCD speed test\n\n" + "Number of tests: %d\n" + "Precision: %d digits\n\n", + num, prec); + + mp_init_size(&a, prec); + mp_init_size(&b, prec); + mp_init(&c); + mp_init(&d); + + printf("Verifying accuracy ... \n"); + srand((unsigned int)seed); + for (ix = 0; ix < num; ix++) { + mpp_random_size(&a, prec); + mpp_random_size(&b, prec); + + mp_gcd(&a, &b, &c); + mp_bgcd(&a, &b, &d); + + if (mp_cmp(&c, &d) != 0) { + printf("Error! Results not accurate:\n"); + printf("a = "); + mp_print(&a, stdout); + fputc('\n', stdout); + printf("b = "); + mp_print(&b, stdout); + fputc('\n', stdout); + printf("c = "); + mp_print(&c, stdout); + fputc('\n', stdout); + printf("d = "); + mp_print(&d, stdout); + fputc('\n', stdout); + + mp_clear(&a); + mp_clear(&b); + mp_clear(&c); + mp_clear(&d); + return 1; + } } - } - mp_clear(&d); - printf("Accuracy confirmed for the %d test samples\n", num); - - printf("Testing Euclid ... \n"); - srand((unsigned int)seed); - start = now(); - for(ix = 0; ix < num; ix++) { - mpp_random_size(&a, prec); - mpp_random_size(&b, prec); - mp_gcd(&a, &b, &c); - - } - finish = now(); - - d1 = (finish.sec - start.sec) * 1000000; - d1 -= start.usec; d1 += finish.usec; - - printf("Testing binary ... \n"); - srand((unsigned int)seed); - start = now(); - for(ix = 0; ix < num; ix++) { - mpp_random_size(&a, prec); - mpp_random_size(&b, prec); - mp_bgcd(&a, &b, &c); - } - finish = now(); - - d2 = (finish.sec - start.sec) * 1000000; - d2 -= start.usec; d2 += finish.usec; - - printf("Euclidean algorithm time: %u usec\n", d1); - printf("Binary algorithm time: %u usec\n", d2); - printf("Improvement: %.2f%%\n", - (1.0 - ((double)d2 / (double)d1)) * 100.0); - - mp_clear(&c); - mp_clear(&b); - mp_clear(&a); - - return 0; + mp_clear(&d); + printf("Accuracy confirmed for the %d test samples\n", num); + + printf("Testing Euclid ... \n"); + srand((unsigned int)seed); + start = now(); + for (ix = 0; ix < num; ix++) { + mpp_random_size(&a, prec); + mpp_random_size(&b, prec); + mp_gcd(&a, &b, &c); + } + finish = now(); + + d1 = (finish.sec - start.sec) * 1000000; + d1 -= start.usec; + d1 += finish.usec; + + printf("Testing binary ... \n"); + srand((unsigned int)seed); + start = now(); + for (ix = 0; ix < num; ix++) { + mpp_random_size(&a, prec); + mpp_random_size(&b, prec); + mp_bgcd(&a, &b, &c); + } + finish = now(); + + d2 = (finish.sec - start.sec) * 1000000; + d2 -= start.usec; + d2 += finish.usec; + + printf("Euclidean algorithm time: %u usec\n", d1); + printf("Binary algorithm time: %u usec\n", d2); + printf("Improvement: %.2f%%\n", + (1.0 - ((double)d2 / (double)d1)) * 100.0); + + mp_clear(&c); + mp_clear(&b); + mp_clear(&a); + + return 0; } |