blob: a5d7c71132990edf5461c2fb4809cfacf9de4882 [file] [log] [blame]
/*
* Copyright (c) 2002, Intel Corporation. All rights reserved.
* Created by: julie.n.fleischer REMOVE-THIS AT intel DOT com
* This file is licensed under the GPL license. For the full content
* of this license, see the COPYING file at the top level of this
* source tree.
*
* Test that the clock time can be set to 0, a large number, Y2K
* critical dates, and times around daylight savings.
*
* Test for CLOCK_REALTIME. (N/A for CLOCK_MONOTONIC as that clock
* cannot be set.)
*/
#include <stdio.h>
#include <time.h>
#include <stdint.h>
#include "posixtest.h"
#define NUMTESTS 6
#define ACCEPTABLESECDELTA 0
#define ACCEPTABLENSECDELTA 5000
static int testtimes[NUMTESTS][2] = {
{0, 0}, // zero
{INT32_MAX, 999999999}, // large number
{946713600, 999999999}, // Y2K - Jan 1, 2000
{951811200, 999999999}, // Y2K - Feb 29, 2000
{1078041600, 999999999}, // Y2K - Feb 29, 2004
{1049623200, 999999999}, // daylight savings 2003
};
int main(int argc, char *argv[])
{
struct timespec tpset, tpget, tsreset;
int secdelta, nsecdelta;
int failure = 0;
int i;
if (clock_gettime(CLOCK_REALTIME, &tsreset) != 0) {
perror("clock_gettime() did not return success\n");
return PTS_UNRESOLVED;
}
for (i=0; i<NUMTESTS; i++) {
tpset.tv_sec = testtimes[i][0];
tpset.tv_nsec = testtimes[i][1];
#ifdef DEBUG
printf("Test: %ds %dns\n", testtimes[i][0], testtimes[i][1]);
#endif
if (clock_settime(CLOCK_REALTIME, &tpset) == 0) {
if (clock_gettime(CLOCK_REALTIME, &tpget) == -1) {
printf("Error in clock_gettime()\n");
return PTS_UNRESOLVED;
}
secdelta = tpget.tv_sec-tpset.tv_sec;
nsecdelta = tpget.tv_nsec-tpset.tv_nsec;
if (nsecdelta < 0) {
nsecdelta = nsecdelta+1000000000;
secdelta = secdelta-1;
}
#ifdef DEBUG
printf("Delta: %ds %dns\n", secdelta, nsecdelta);
#endif
if ((secdelta > ACCEPTABLESECDELTA) ||
(secdelta < 0)) {
printf("clock does not appear to be set\n");
failure = 1;
}
if ((nsecdelta > ACCEPTABLENSECDELTA) ||
(nsecdelta < 0)) {
printf("clock does not appear to be set\n");
failure = 1;
}
} else {
printf("clock_settime() failed\n");
return PTS_UNRESOLVED;
}
if (clock_settime(CLOCK_REALTIME, &tsreset) != 0) {
perror("clock_settime() did not return success\n");
return PTS_UNRESOLVED;
}
}
if (clock_settime(CLOCK_REALTIME, &tsreset) != 0) {
perror("clock_settime() did not return success\n");
return PTS_UNRESOLVED;
}
if (failure) {
printf("At least one test FAILED\n");
return PTS_FAIL;
}
printf("All tests PASSED\n");
return PTS_PASS;
}