cmptest.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #ifndef __CMPTEST_H__
  2. #define __CMPTEST_H__
  3. #include <assert.h>
  4. #include <stdio.h>
  5. #include <stdint.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <errno.h>
  9. #include "sodium.h"
  10. #include "quirks.h"
  11. #ifdef __EMSCRIPTEN__
  12. # undef TEST_SRCDIR
  13. # define TEST_SRCDIR "/test-data"
  14. #endif
  15. #ifndef TEST_SRCDIR
  16. # define TEST_SRCDIR "."
  17. #endif
  18. #define TEST_NAME_RES TEST_NAME ".res"
  19. #define TEST_NAME_OUT TEST_SRCDIR "/" TEST_NAME ".exp"
  20. #ifdef HAVE_ARC4RANDOM
  21. # undef rand
  22. # define rand(X) arc4random(X)
  23. #endif
  24. int xmain(void);
  25. #ifdef BENCHMARKS
  26. # include <sys/time.h>
  27. # ifndef ITERATIONS
  28. # define ITERATIONS 128
  29. # endif
  30. static unsigned long long now(void)
  31. {
  32. struct timeval tp;
  33. unsigned long long now;
  34. if (gettimeofday(&tp, NULL) != 0) {
  35. abort();
  36. }
  37. now = ((unsigned long long) tp.tv_sec * 1000000ULL) +
  38. (unsigned long long) tp.tv_usec;
  39. return now;
  40. }
  41. int main(void)
  42. {
  43. unsigned long long ts_start;
  44. unsigned long long ts_end;
  45. unsigned int i;
  46. if (sodium_init() != 0) {
  47. return 99;
  48. }
  49. randombytes_set_implementation(&randombytes_salsa20_implementation);
  50. ts_start = now();
  51. for (i = 0; i < ITERATIONS; i++) {
  52. if (xmain() != 0) {
  53. abort();
  54. }
  55. }
  56. ts_end = now();
  57. printf("%llu\n", 1000000ULL * (ts_end - ts_start) / ITERATIONS);
  58. return 0;
  59. }
  60. #define printf(...) do { } while(0)
  61. #elif !defined(BROWSER_TESTS)
  62. FILE *fp_res;
  63. int main(void)
  64. {
  65. FILE *fp_out;
  66. int c;
  67. if ((fp_res = fopen(TEST_NAME_RES, "w+")) == NULL) {
  68. perror("fopen(" TEST_NAME_RES ")");
  69. return 99;
  70. }
  71. if (sodium_init() != 0) {
  72. return 99;
  73. }
  74. if (xmain() != 0) {
  75. return 99;
  76. }
  77. rewind(fp_res);
  78. if ((fp_out = fopen(TEST_NAME_OUT, "r")) == NULL) {
  79. perror("fopen(" TEST_NAME_OUT ")");
  80. return 99;
  81. }
  82. do {
  83. if ((c = fgetc(fp_res)) != fgetc(fp_out)) {
  84. return 99;
  85. }
  86. } while (c != EOF);
  87. return 0;
  88. }
  89. #undef printf
  90. #define printf(...) fprintf(fp_res, __VA_ARGS__)
  91. #else
  92. int main(void)
  93. {
  94. if (sodium_init() != 0) {
  95. return 99;
  96. }
  97. if (xmain() != 0) {
  98. return 99;
  99. }
  100. printf("--- SUCCESS ---\n");
  101. return 0;
  102. }
  103. #endif
  104. #define main xmain
  105. #endif