From 00893e79fc62966067af1a106567db96bd170338 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Sun, 3 Mar 2024 19:11:32 +0100 Subject: New upstream version 1.2 --- tests/test-gettimeofday.c | 51 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 5 deletions(-) (limited to 'tests/test-gettimeofday.c') diff --git a/tests/test-gettimeofday.c b/tests/test-gettimeofday.c index 47a5b58f..ea810bd5 100644 --- a/tests/test-gettimeofday.c +++ b/tests/test-gettimeofday.c @@ -1,6 +1,5 @@ /* - * Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc. - * Written by Jim Meyering. + * Copyright (C) 2005, 2007, 2009-2024 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 @@ -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,44 @@ 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: It's here that the dependency to the 'time' module is needed. + Without it, this assertion would sometimes fail 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; } -- cgit v1.2.3