This patch moves generic benchmarking code into a separate file, to make it easy to reuse it in new benchmarks.
2023-07-11 Bruno Haible <br...@clisp.org> tests: Create new file bench.h. * tests/bench.h: New file, extracted from tests/bench-digest.h. * tests/bench-digest.h: Include it. * modules/crypto/md5-buffer-tests (Files): Add tests/bench.h. * modules/crypto/sha1-buffer-tests (Files): Likewise. * modules/crypto/sha256-buffer-tests (Files): Likewise. * modules/crypto/sha512-buffer-tests (Files): Likewise. diff --git a/modules/crypto/md5-buffer-tests b/modules/crypto/md5-buffer-tests index cc07337f08..312fc4a399 100644 --- a/modules/crypto/md5-buffer-tests +++ b/modules/crypto/md5-buffer-tests @@ -2,6 +2,7 @@ Files: tests/test-md5-buffer.c tests/bench-md5.c tests/bench-digest.h +tests/bench.h Depends-on: c99 diff --git a/modules/crypto/sha1-buffer-tests b/modules/crypto/sha1-buffer-tests index 7420378c82..ec2144f095 100644 --- a/modules/crypto/sha1-buffer-tests +++ b/modules/crypto/sha1-buffer-tests @@ -2,6 +2,7 @@ Files: tests/test-sha1-buffer.c tests/bench-sha1.c tests/bench-digest.h +tests/bench.h Depends-on: c99 diff --git a/modules/crypto/sha256-buffer-tests b/modules/crypto/sha256-buffer-tests index 53924b4a03..8e16fd9c83 100644 --- a/modules/crypto/sha256-buffer-tests +++ b/modules/crypto/sha256-buffer-tests @@ -2,6 +2,7 @@ Files: tests/bench-sha224.c tests/bench-sha256.c tests/bench-digest.h +tests/bench.h Depends-on: c99 diff --git a/modules/crypto/sha512-buffer-tests b/modules/crypto/sha512-buffer-tests index 0b61ec444b..042046a4f8 100644 --- a/modules/crypto/sha512-buffer-tests +++ b/modules/crypto/sha512-buffer-tests @@ -2,6 +2,7 @@ Files: tests/bench-sha384.c tests/bench-sha512.c tests/bench-digest.h +tests/bench.h Depends-on: c99 diff --git a/tests/bench-digest.h b/tests/bench-digest.h index 38c4f03dc8..95d7300d6e 100644 --- a/tests/bench-digest.h +++ b/tests/bench-digest.h @@ -16,58 +16,8 @@ #include <stdio.h> #include <stdlib.h> -#include <sys/resource.h> -#include <sys/time.h> -struct timings_state -{ - /* Filled when the timings start. */ - struct timeval real_start; - struct timeval user_start; - struct timeval sys_start; - /* Filled when the timings end. */ - long real_usec; - long user_usec; - long sys_usec; -}; - -static void -timing_start (struct timings_state *ts) -{ - struct rusage usage; - - getrusage (RUSAGE_SELF, &usage); - ts->user_start = usage.ru_utime; - ts->sys_start = usage.ru_stime; - - gettimeofday (&ts->real_start, NULL); -} - -static void -timing_end (struct timings_state *ts) -{ - struct timeval real_end; - struct rusage usage; - - gettimeofday (&real_end, NULL); - - getrusage (RUSAGE_SELF, &usage); - - ts->real_usec = (real_end.tv_sec - ts->real_start.tv_sec) * 1000000 - + real_end.tv_usec - ts->real_start.tv_usec; - ts->user_usec = (usage.ru_utime.tv_sec - ts->user_start.tv_sec) * 1000000 - + usage.ru_utime.tv_usec - ts->user_start.tv_usec; - ts->sys_usec = (usage.ru_stime.tv_sec - ts->sys_start.tv_sec) * 1000000 - + usage.ru_stime.tv_usec - ts->sys_start.tv_usec; -} - -static void -timing_output (const struct timings_state *ts) -{ - printf ("real %10.6f\n", (double)ts->real_usec / 1000000.0); - printf ("user %7.3f\n", (double)ts->user_usec / 1000000.0); - printf ("sys %7.3f\n", (double)ts->sys_usec / 1000000.0); -} +#include "bench.h" int main (int argc, char *argv[]) diff --git a/tests/bench.h b/tests/bench.h new file mode 100644 index 0000000000..4bfdbd4ec1 --- /dev/null +++ b/tests/bench.h @@ -0,0 +1,69 @@ +/* Utilities for benchmarks. + Copyright (C) 2018-2023 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#include <stdio.h> +#include <sys/resource.h> +#include <sys/time.h> + +struct timings_state +{ + /* Filled when the timings start. */ + struct timeval real_start; + struct timeval user_start; + struct timeval sys_start; + /* Filled when the timings end. */ + long real_usec; + long user_usec; + long sys_usec; +}; + +static void +timing_start (struct timings_state *ts) +{ + struct rusage usage; + + getrusage (RUSAGE_SELF, &usage); + ts->user_start = usage.ru_utime; + ts->sys_start = usage.ru_stime; + + gettimeofday (&ts->real_start, NULL); +} + +static void +timing_end (struct timings_state *ts) +{ + struct timeval real_end; + struct rusage usage; + + gettimeofday (&real_end, NULL); + + getrusage (RUSAGE_SELF, &usage); + + ts->real_usec = (real_end.tv_sec - ts->real_start.tv_sec) * 1000000 + + real_end.tv_usec - ts->real_start.tv_usec; + ts->user_usec = (usage.ru_utime.tv_sec - ts->user_start.tv_sec) * 1000000 + + usage.ru_utime.tv_usec - ts->user_start.tv_usec; + ts->sys_usec = (usage.ru_stime.tv_sec - ts->sys_start.tv_sec) * 1000000 + + usage.ru_stime.tv_usec - ts->sys_start.tv_usec; +} + +static void +timing_output (const struct timings_state *ts) +{ + printf ("real %10.6f\n", (double)ts->real_usec / 1000000.0); + printf ("user %7.3f\n", (double)ts->user_usec / 1000000.0); + printf ("sys %7.3f\n", (double)ts->sys_usec / 1000000.0); +}