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