Home | History | Annotate | Line # | Download | only in default
      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 
     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 
     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 
     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 
    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