diff options
author | "Steven J. Hill" <sjhill@realitydiluted.com> | 2006-08-18 03:46:56 +0000 |
---|---|---|
committer | "Steven J. Hill" <sjhill@realitydiluted.com> | 2006-08-18 03:46:56 +0000 |
commit | c7fc697dcf05e3a596292635945b51d1bb1a5b51 (patch) | |
tree | af31d085d2e481c8ae7c5ab379c88b603e8bd3d3 /test/nptl/tst-cputimer1.c | |
parent | 778809e5888b4b824b83c2ed7646dc225ce529b2 (diff) | |
download | uClibc-alpine-c7fc697dcf05e3a596292635945b51d1bb1a5b51.tar.bz2 uClibc-alpine-c7fc697dcf05e3a596292635945b51d1bb1a5b51.tar.xz |
Add new tests for POSIX timers and message queues.
Diffstat (limited to 'test/nptl/tst-cputimer1.c')
-rw-r--r-- | test/nptl/tst-cputimer1.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/test/nptl/tst-cputimer1.c b/test/nptl/tst-cputimer1.c new file mode 100644 index 000000000..8f5dd76cf --- /dev/null +++ b/test/nptl/tst-cputimer1.c @@ -0,0 +1,68 @@ +/* Tests for POSIX timer implementation using process CPU clock. */ + +#include <unistd.h> + +#if _POSIX_THREADS && defined _POSIX_CPUTIME + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <time.h> +#include <pthread.h> + +#define TEST_CLOCK CLOCK_PROCESS_CPUTIME_ID +#define TEST_CLOCK_MISSING(clock) \ + (setup_test () ? "process CPU clock timer support" : NULL) + +/* This function is intended to rack up both user and system time. */ +static void * +chew_cpu (void *arg) +{ + while (1) + { + static volatile char buf[4096]; + for (int i = 0; i < 100; ++i) + for (size_t j = 0; j < sizeof buf; ++j) + buf[j] = 0xaa; + int nullfd = open ("/dev/null", O_WRONLY); + for (int i = 0; i < 100; ++i) + for (size_t j = 0; j < sizeof buf; ++j) + buf[j] = 0xbb; + write (nullfd, (char *) buf, sizeof buf); + close (nullfd); + } + + return NULL; +} + +static int +setup_test (void) +{ + /* Test timers on our own process CPU clock by having a worker thread + eating CPU. First make sure we can make such timers at all. */ + + timer_t t; + if (timer_create (TEST_CLOCK, NULL, &t) != 0) + { + printf ("timer_create: %m\n"); + return 1; + } + timer_delete (t); + + pthread_t th; + int e = pthread_create (&th, NULL, chew_cpu, NULL); + if (e != 0) + { + printf ("pthread_create: %s\n", strerror (e)); + exit (1); + } + + return 0; +} + +#else +# define TEST_CLOCK_MISSING(clock) "process clocks" +#endif + +#include "tst-timer4.c" |