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 35int xmain(void); 36 37#ifdef BENCHMARKS 38 39# include <sys/time.h> 40 41# ifndef ITERATIONS 42# define ITERATIONS 128 43# endif 44 45static 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 59int 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 85FILE *fp_res; 86 87int 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 121int 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