minix/test/select/test01.c
Ben Gras ed2a024d47 Select test-set imported from the minix contributions, with permission
to modify and distribute from Jose Manuel Gomez, the author
(jmgomez@linuxmail.org).
2005-06-17 13:45:40 +00:00

72 lines
2.2 KiB
C

/*
* Test name: test01.c
*
* Objective: The purpose of this test is to make sure that the timeout mechanisms
* work without errors.
*
* Description: Executes a select as if it was a sleep and compares the time it
* has been actually sleeping against the specified time in the select call.
* Three cases are tested: first, a timeout specified in seconds, second, a timeout in
* microseconds, and third, a timeout with more precision than seconds.
*
* Jose M. Gomez
*/
#include <sys/types.h>
#include <sys/select.h>
#include <time.h>
#include <stdio.h>
#include <errno.h>
#define SECONDS 3
#define USECONDS 3000000L
int main(void) {
int r;
time_t start, end; /* variables for timing */
struct timeval timeout; /* timeout structure */
/* Set timeout for 3 seconds */
timeout.tv_sec = SECONDS;
timeout.tv_usec = 0;
printf("Sleeping now for %d seconds...\n", SECONDS);
/* Record time before starting */
start = time(NULL);
r = select(0, NULL, NULL, NULL, &timeout);
printf("select return code: %d error: %s\n",
r, strerror(errno));
end = time(NULL);
printf("For a timeout with select of %d seconds, it took %d actual seconds\n",
SECONDS, end-start);
/* Set timeout for 3 seconds , but specified in microseconds */
timeout.tv_sec = 0;
timeout.tv_usec = USECONDS;
printf("\n***************************\n");
printf("Sleeping now for %ld microseconds...\n", USECONDS);
/* Record time before starting */
start = time(NULL);
r = select(0, NULL, NULL, NULL, &timeout);
printf("select return code: %d error: %s\n",
r, strerror(errno));
end = time(NULL);
printf("For a timeout with select of %ld useconds, it took %d actual seconds\n",
USECONDS, end-start);
/* Set timeout for 1.5 seconds, but specified in microseconds */
timeout.tv_sec = 0;
timeout.tv_usec = USECONDS/2;
printf("\n***************************\n");
printf("Sleeping now for %ld microseconds...\n", USECONDS/2);
/* Record time before starting */
start = time(NULL);
r = select(0, NULL, NULL, NULL, &timeout);
printf("select return code: %d error: %s\n",
r, strerror(errno));
end = time(NULL);
printf("For a timeout with select of %ld useconds, it took %d actual seconds\n",
USECONDS/2, end-start);
return 0;
}