The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/libsodium/test/default/cmptest.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    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 <errno.h>
   11 #include <limits.h>
   12 #include <stdio.h>
   13 #include <stdint.h>
   14 #include <stdlib.h>
   15 #include <string.h>
   16 
   17 #include "sodium.h"
   18 #include "quirks.h"
   19 
   20 #ifdef __EMSCRIPTEN__
   21 # undef TEST_SRCDIR
   22 # define TEST_SRCDIR "/test-data"
   23 #endif
   24 #ifndef TEST_SRCDIR
   25 # define TEST_SRCDIR "."
   26 #endif
   27 
   28 #define TEST_NAME_RES TEST_NAME ".res"
   29 #define TEST_NAME_OUT TEST_SRCDIR "/" TEST_NAME ".exp"
   30 
   31 #ifdef HAVE_ARC4RANDOM
   32 # undef rand
   33 # define rand(X) arc4random(X)
   34 #endif
   35 
   36 int xmain(void);
   37 
   38 #ifdef BENCHMARKS
   39 
   40 # include <sys/time.h>
   41 
   42 # ifndef ITERATIONS
   43 #  define ITERATIONS 128
   44 # endif
   45 
   46 struct {
   47     void   *pnt;
   48     size_t  size;
   49 } mempool[1024];
   50 
   51 static size_t mempool_idx;
   52 
   53 static __attribute__((malloc)) void *mempool_alloc(size_t size)
   54 {
   55     size_t i;
   56     if (size >= (size_t) 0x80000000 - (size_t) 0x00000fff) {
   57         return NULL;
   58     }
   59     size = (size + (size_t) 0x00000fff) & ~ (size_t) 0x00000fff;
   60     for (i = 0U; i < mempool_idx; i++) {
   61         if (mempool[i].size >= (size | (size_t) 0x80000000)) {
   62             mempool[i].size &= ~ (size_t) 0x80000000;
   63             return mempool[i].pnt;
   64         }
   65     }
   66     if (mempool_idx >= sizeof mempool / sizeof mempool[0]) {
   67         return NULL;
   68     }
   69     mempool[mempool_idx].size = size;
   70     return (mempool[mempool_idx++].pnt = (void *) malloc(size));
   71 }
   72 
   73 static void mempool_free(void *pnt)
   74 {
   75     size_t i;
   76     for (i = 0U; i < mempool_idx; i++) {
   77         if (mempool[i].pnt == pnt) {
   78             if ((mempool[i].size & (size_t) 0x80000000) != (size_t) 0x0) {
   79                 break;
   80             }
   81             mempool[i].size |= (size_t) 0x80000000;
   82             return;
   83         }
   84     }
   85     abort();
   86 }
   87 
   88 static __attribute__((malloc)) void *mempool_allocarray(size_t count, size_t size)
   89 {
   90     if (count > (size_t) 0U && size >= (size_t) SIZE_MAX / count) {
   91         return NULL;
   92     }
   93     return mempool_alloc(count * size);
   94 }
   95 
   96 static int mempool_free_all(void)
   97 {
   98     size_t i;
   99     int    ret = 0;
  100 
  101     for (i = 0U; i < mempool_idx; i++) {
  102         if ((mempool[i].size & (size_t) 0x80000000) == (size_t) 0x0) {
  103             ret = -1;
  104         }
  105         free(mempool[i].pnt);
  106         mempool[i].pnt = NULL;
  107     }
  108     mempool_idx = (size_t) 0U;
  109 
  110     return ret;
  111 }
  112 
  113 #define sodium_malloc(X)        mempool_alloc(X)
  114 #define sodium_free(X)          mempool_free(X)
  115 #define sodium_allocarray(X, Y) mempool_allocarray((X), (Y))
  116 
  117 static unsigned long long now(void)
  118 {
  119     struct             timeval tp;
  120     unsigned long long now;
  121 
  122     if (gettimeofday(&tp, NULL) != 0) {
  123         abort();
  124     }
  125     now = ((unsigned long long) tp.tv_sec * 1000000ULL) +
  126         (unsigned long long) tp.tv_usec;
  127 
  128     return now;
  129 }
  130 
  131 int main(void)
  132 {
  133     unsigned long long ts_start;
  134     unsigned long long ts_end;
  135     unsigned int       i;
  136 
  137     if (sodium_init() != 0) {
  138         return 99;
  139     }
  140 
  141 #ifndef __EMSCRIPTEN__
  142     randombytes_set_implementation(&randombytes_salsa20_implementation);
  143 #endif
  144     ts_start = now();
  145     for (i = 0; i < ITERATIONS; i++) {
  146         if (xmain() != 0) {
  147             abort();
  148         }
  149     }
  150     ts_end = now();
  151     printf("%llu\n", 1000000ULL * (ts_end - ts_start) / ITERATIONS);
  152     if (mempool_free_all() != 0) {
  153         fprintf(stderr, "** memory leaks detected **\n");
  154         return 99;
  155     }
  156     return 0;
  157 }
  158 
  159 #undef  printf
  160 #define printf(...) do { } while(0)
  161 
  162 #elif !defined(BROWSER_TESTS)
  163 
  164 static FILE *fp_res;
  165 
  166 int main(void)
  167 {
  168     FILE *fp_out;
  169     int   c;
  170 
  171     if ((fp_res = fopen(TEST_NAME_RES, "w+")) == NULL) {
  172         perror("fopen(" TEST_NAME_RES ")");
  173         return 99;
  174     }
  175     if (sodium_init() != 0) {
  176         return 99;
  177     }
  178     if (xmain() != 0) {
  179         return 99;
  180     }
  181     rewind(fp_res);
  182     if ((fp_out = fopen(TEST_NAME_OUT, "r")) == NULL) {
  183         perror("fopen(" TEST_NAME_OUT ")");
  184         return 99;
  185     }
  186     do {
  187         if ((c = fgetc(fp_res)) != fgetc(fp_out)) {
  188             return 99;
  189         }
  190     } while (c != EOF);
  191 
  192     return 0;
  193 }
  194 
  195 #undef  printf
  196 #define printf(...) fprintf(fp_res, __VA_ARGS__)
  197 
  198 #else
  199 
  200 int main(void)
  201 {
  202     if (sodium_init() != 0) {
  203         return 99;
  204     }
  205     if (xmain() != 0) {
  206         return 99;
  207     }
  208     printf("--- SUCCESS ---\n");
  209 
  210     return 0;
  211 }
  212 
  213 #endif
  214 
  215 #define main xmain
  216 
  217 #endif

Cache object: 0ed02600a74d61abec350cdf29449076


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.