exp_bench.c 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include "config.h"
  2. #include <assert.h>
  3. #include <stdio.h>
  4. #include <gmp.h>
  5. #include "entropy.h"
  6. #include "fbase.h"
  7. #include "group.h"
  8. #include "timeit.h"
  9. int main()
  10. {
  11. mpz_entropy_init();
  12. group_init();
  13. mpz_t test, expected, base;
  14. uint64_t exp;
  15. mpz_inits(test, expected, base, NULL);
  16. mpz_t expected_mod;
  17. mpz_inits(expected_mod, NULL);
  18. mpz_urandomm(base, _rstate, p);
  19. mpz_powm_ui(expected_mod, base, 2, p);
  20. mpz_pow_ui(test, base, 2);
  21. remp(test);
  22. assert(!mpz_cmp(test, expected_mod));
  23. mpz_clear(expected_mod);
  24. mpz_urandomm(base, _rstate, p);
  25. fbase_ptr pbase = fb_init();
  26. fb_set(pbase, base);
  27. for (int i = 0; i < (int) 1e4; i++) {
  28. INIT_TIMEIT(CLOCK_PROCESS_CPUTIME_ID);
  29. getrandom(&exp, 8, GRND_NONBLOCK);
  30. mpz_powm_ui(expected, base, exp, p);
  31. START_TIMEIT();
  32. fb_powmp_ui(test, pbase, exp);
  33. END_TIMEIT();
  34. assert(!mpz_cmp(test, expected));
  35. printf("%d" SEP TIMEIT_FORMAT "\n", FB_BASE, GET_TIMEIT());
  36. }
  37. fb_clear(pbase);
  38. mpz_clears(test, expected, base, NULL);
  39. }