Relocate the clock time getter to tests_common.h to make it easily reusable across test programs. This will be useful for the upcoming unit test framework. Context - why not placing it inside testutil.h?: The bench program links against the production-compiled library, not its own compiled version. Therefore, `gettime_i64()` cannot be moved to testutil.h, because testutil.h calls `secp256k1_pubkey_save()`, which exists only in the internal secp256k1.c and not in the public API.
43 lines
1.4 KiB
C
43 lines
1.4 KiB
C
/***********************************************************************
|
|
* Distributed under the MIT software license, see the accompanying *
|
|
* file COPYING or https://www.opensource.org/licenses/mit-license.php.*
|
|
***********************************************************************/
|
|
|
|
#ifndef SECP256K1_TESTS_COMMON_H
|
|
#define SECP256K1_TESTS_COMMON_H
|
|
|
|
/***********************************************************************
|
|
* Test Support Utilities
|
|
*
|
|
* This file provides general-purpose functions for tests and benchmark
|
|
* programs. Unlike testutil.h, this file is not linked to the library,
|
|
* allowing each program to choose whether to run against the production
|
|
* API or access library internals directly.
|
|
***********************************************************************/
|
|
|
|
#include <stdint.h>
|
|
|
|
#if (defined(_MSC_VER) && _MSC_VER >= 1900)
|
|
# include <time.h>
|
|
#else
|
|
# include <sys/time.h>
|
|
#endif
|
|
|
|
static int64_t gettime_i64(void) {
|
|
#if (defined(_MSC_VER) && _MSC_VER >= 1900)
|
|
/* C11 way to get wallclock time */
|
|
struct timespec tv;
|
|
if (!timespec_get(&tv, TIME_UTC)) {
|
|
fputs("timespec_get failed!", stderr);
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
return (int64_t)tv.tv_nsec / 1000 + (int64_t)tv.tv_sec * 1000000LL;
|
|
#else
|
|
struct timeval tv;
|
|
gettimeofday(&tv, NULL);
|
|
return (int64_t)tv.tv_usec + (int64_t)tv.tv_sec * 1000000LL;
|
|
#endif
|
|
}
|
|
|
|
#endif /* SECP256K1_TESTS_COMMON_H */
|