From d7f8a0d50d3a8cf438645609a751298a51bbaf19 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Wed, 8 Mar 2023 10:14:00 +0100 Subject: [PATCH] gettimeofday tests: Enhance test. * tests/test-gettimeofday.c: Include and macros.h. (test_clobber): New function, extracted from main. (test_consistency): New function, based on tests/test-timespec_get.c. (main): Invoke both functions. * modules/gettimeofday-tests (Files): Add macros.h. --- ChangeLog | 9 +++++++ modules/gettimeofday-tests | 3 ++- tests/test-gettimeofday.c | 48 ++++++++++++++++++++++++++++++++++---- 3 files changed, 55 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index c49a0f5b46..cec18435b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2023-03-08 Bruno Haible + + gettimeofday tests: Enhance test. + * tests/test-gettimeofday.c: Include and macros.h. + (test_clobber): New function, extracted from main. + (test_consistency): New function, based on tests/test-timespec_get.c. + (main): Invoke both functions. + * modules/gettimeofday-tests (Files): Add macros.h. + 2023-03-05 Paul Eggert stdio: suppress macOS 13 sprintf warnings diff --git a/modules/gettimeofday-tests b/modules/gettimeofday-tests index 996df8e716..83c7c4b363 100644 --- a/modules/gettimeofday-tests +++ b/modules/gettimeofday-tests @@ -1,6 +1,7 @@ Files: -tests/signature.h tests/test-gettimeofday.c +tests/signature.h +tests/macros.h Depends-on: diff --git a/tests/test-gettimeofday.c b/tests/test-gettimeofday.c index ac133e3695..6daf069339 100644 --- a/tests/test-gettimeofday.c +++ b/tests/test-gettimeofday.c @@ -1,6 +1,5 @@ /* * Copyright (C) 2005, 2007, 2009-2023 Free Software Foundation, Inc. - * Written by Jim Meyering. * * 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 @@ -15,6 +14,8 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ +/* Written by Jim Meyering and Bruno Haible. */ + #include #include @@ -26,10 +27,13 @@ SIGNATURE_CHECK (gettimeofday, int, #include #include +#include #include -int -main (void) +#include "macros.h" + +static void +test_clobber () { time_t t = 0; struct tm *lt; @@ -41,7 +45,43 @@ main (void) if (memcmp (lt, &saved_lt, sizeof (struct tm)) != 0) { fprintf (stderr, "gettimeofday still clobbers the localtime buffer!\n"); - return 1; + exit (1); } +} + +static void +test_consistency () +{ + struct timeval tv1; + time_t tt2; + struct timeval tv3; + time_t tt4; + + ASSERT (gettimeofday (&tv1, NULL) == 0); + tt2 = time (NULL); + ASSERT (gettimeofday (&tv3, NULL) == 0); + tt4 = time (NULL); + + /* Verify monotonicity of gettimeofday(). */ + ASSERT (tv1.tv_sec < tv3.tv_sec + || (tv1.tv_sec == tv3.tv_sec && tv1.tv_usec <= tv3.tv_usec)); + + /* Verify monotonicity of time(). */ + ASSERT (tt2 <= tt4); + + /* Verify that the tv_sec field of the result is the same as time(NULL). */ + /* Note: This assertion sometimes fails on glibc systems, see + https://sourceware.org/bugzilla/show_bug.cgi?id=30200 */ + ASSERT (tv1.tv_sec <= tt2); + ASSERT (tt2 <= tv3.tv_sec); + ASSERT (tv3.tv_sec <= tt4); +} + +int +main (void) +{ + test_clobber (); + test_consistency (); + return 0; } -- 2.39.5