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