xref: /isa-l_crypto/include/test.h (revision 96f24e8cb9f660eefdbbe57b3dfda60b6b34b96e)
16df3ef80SGreg Tucker /**********************************************************************
26df3ef80SGreg Tucker   Copyright(c) 2011-2016 Intel Corporation All rights reserved.
36df3ef80SGreg Tucker 
46df3ef80SGreg Tucker   Redistribution and use in source and binary forms, with or without
56df3ef80SGreg Tucker   modification, are permitted provided that the following conditions
66df3ef80SGreg Tucker   are met:
76df3ef80SGreg Tucker     * Redistributions of source code must retain the above copyright
86df3ef80SGreg Tucker       notice, this list of conditions and the following disclaimer.
96df3ef80SGreg Tucker     * Redistributions in binary form must reproduce the above copyright
106df3ef80SGreg Tucker       notice, this list of conditions and the following disclaimer in
116df3ef80SGreg Tucker       the documentation and/or other materials provided with the
126df3ef80SGreg Tucker       distribution.
136df3ef80SGreg Tucker     * Neither the name of Intel Corporation nor the names of its
146df3ef80SGreg Tucker       contributors may be used to endorse or promote products derived
156df3ef80SGreg Tucker       from this software without specific prior written permission.
166df3ef80SGreg Tucker 
176df3ef80SGreg Tucker   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
186df3ef80SGreg Tucker   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
196df3ef80SGreg Tucker   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
206df3ef80SGreg Tucker   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
216df3ef80SGreg Tucker   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
226df3ef80SGreg Tucker   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
236df3ef80SGreg Tucker   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
246df3ef80SGreg Tucker   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
256df3ef80SGreg Tucker   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
266df3ef80SGreg Tucker   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
276df3ef80SGreg Tucker   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
286df3ef80SGreg Tucker **********************************************************************/
296df3ef80SGreg Tucker 
306df3ef80SGreg Tucker #ifndef _TEST_H
316df3ef80SGreg Tucker #define _TEST_H
326df3ef80SGreg Tucker 
336df3ef80SGreg Tucker #ifdef __cplusplus
346df3ef80SGreg Tucker extern "C" {
356df3ef80SGreg Tucker #endif
366df3ef80SGreg Tucker 
3792aa5aa4SGreg Tucker #include "endian_helper.h"
3892aa5aa4SGreg Tucker 
397080fff2SMarcel Cornu #define DIM(_x) (sizeof(_x) / sizeof(_x[0]))
407080fff2SMarcel Cornu 
411de5344dSMarcel Cornu #define CHECK_RETURN_GOTO(state, expected, func, label)                                            \
421de5344dSMarcel Cornu         do {                                                                                       \
4378d8d8a4SMarcel Cornu                 if ((state) != (expected)) {                                                       \
4478d8d8a4SMarcel Cornu                         printf("test: %s() - expected return "                                     \
451de5344dSMarcel Cornu                                "value %d, got %d\n",                                               \
461de5344dSMarcel Cornu                                func, expected, state);                                             \
4778d8d8a4SMarcel Cornu                         goto label;                                                                \
4878d8d8a4SMarcel Cornu                 }                                                                                  \
4978d8d8a4SMarcel Cornu         } while (0)
5078d8d8a4SMarcel Cornu 
516df3ef80SGreg Tucker // Use sys/time.h functions for time
52*96f24e8cSPablo de Lara #if defined(__unix__) || (__MINGW32__)
536df3ef80SGreg Tucker #include <sys/time.h>
54d6f5620fSHailiang Wang #endif
556df3ef80SGreg Tucker 
5646a2c9ffSGreg Tucker #ifdef _MSC_VER
5746a2c9ffSGreg Tucker #define inline __inline
5846a2c9ffSGreg Tucker #include <time.h>
5946a2c9ffSGreg Tucker #include <Windows.h>
6046a2c9ffSGreg Tucker #endif
6146a2c9ffSGreg Tucker 
6246a2c9ffSGreg Tucker #include <stdio.h>
6346a2c9ffSGreg Tucker #include <stdint.h>
6446a2c9ffSGreg Tucker 
656df3ef80SGreg Tucker struct perf {
666df3ef80SGreg Tucker         struct timeval tv;
676df3ef80SGreg Tucker };
686df3ef80SGreg Tucker 
69*96f24e8cSPablo de Lara #if defined(__unix__) || (__MINGW32__)
701de5344dSMarcel Cornu static inline int
perf_start(struct perf * p)711de5344dSMarcel Cornu perf_start(struct perf *p)
726df3ef80SGreg Tucker {
736df3ef80SGreg Tucker         return gettimeofday(&(p->tv), 0);
746df3ef80SGreg Tucker }
751de5344dSMarcel Cornu static inline int
perf_stop(struct perf * p)761de5344dSMarcel Cornu perf_stop(struct perf *p)
776df3ef80SGreg Tucker {
786df3ef80SGreg Tucker         return gettimeofday(&(p->tv), 0);
796df3ef80SGreg Tucker }
806df3ef80SGreg Tucker 
811de5344dSMarcel Cornu static inline void
perf_print(struct perf stop,struct perf start,long long dsize)821de5344dSMarcel Cornu perf_print(struct perf stop, struct perf start, long long dsize)
836df3ef80SGreg Tucker {
846df3ef80SGreg Tucker         long long secs = stop.tv.tv_sec - start.tv.tv_sec;
856df3ef80SGreg Tucker         long long usecs = secs * 1000000 + stop.tv.tv_usec - start.tv.tv_usec;
866df3ef80SGreg Tucker 
876df3ef80SGreg Tucker         printf("runtime = %10lld usecs", usecs);
886df3ef80SGreg Tucker         if (dsize != 0) {
896df3ef80SGreg Tucker #if 1 // not bug in printf for 32-bit
906df3ef80SGreg Tucker                 printf(", bandwidth %lld MB in %.4f sec = %.2f MB/s\n", dsize / (1024 * 1024),
916df3ef80SGreg Tucker                        ((double) usecs) / 1000000, ((double) dsize) / (double) usecs);
926df3ef80SGreg Tucker #else
936df3ef80SGreg Tucker                 printf(", bandwidth %lld MB ", dsize / (1024 * 1024));
946df3ef80SGreg Tucker                 printf("in %.4f sec ", (double) usecs / 1000000);
956df3ef80SGreg Tucker                 printf("= %.2f MB/s\n", (double) dsize / usecs);
966df3ef80SGreg Tucker #endif
971de5344dSMarcel Cornu         } else
986df3ef80SGreg Tucker                 printf("\n");
996df3ef80SGreg Tucker }
100d6f5620fSHailiang Wang #endif
1016df3ef80SGreg Tucker 
1021de5344dSMarcel Cornu static inline uint64_t
get_filesize(FILE * fp)1031de5344dSMarcel Cornu get_filesize(FILE *fp)
104d6f5620fSHailiang Wang {
105d6f5620fSHailiang Wang         uint64_t file_size;
106d6f5620fSHailiang Wang         fpos_t pos, pos_curr;
107d6f5620fSHailiang Wang 
108d6f5620fSHailiang Wang         fgetpos(fp, &pos_curr); /* Save current position */
10946a2c9ffSGreg Tucker #if defined(_WIN32) || defined(_WIN64)
11046a2c9ffSGreg Tucker         _fseeki64(fp, 0, SEEK_END);
11146a2c9ffSGreg Tucker #else
112d6f5620fSHailiang Wang         fseeko(fp, 0, SEEK_END);
11346a2c9ffSGreg Tucker #endif
114d6f5620fSHailiang Wang         fgetpos(fp, &pos);
115d6f5620fSHailiang Wang         file_size = *(uint64_t *) &pos;
116d6f5620fSHailiang Wang         fsetpos(fp, &pos_curr); /* Restore position */
117d6f5620fSHailiang Wang 
118d6f5620fSHailiang Wang         return file_size;
119d6f5620fSHailiang Wang }
1206df3ef80SGreg Tucker 
1216df3ef80SGreg Tucker #ifdef __cplusplus
1226df3ef80SGreg Tucker }
1236df3ef80SGreg Tucker #endif
1246df3ef80SGreg Tucker 
1256df3ef80SGreg Tucker #endif // _TEST_H
126