diff options
Diffstat (limited to 'test/sanitizer_common/TestCases/Linux/timerfd.cc')
| -rw-r--r-- | test/sanitizer_common/TestCases/Linux/timerfd.cc | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/test/sanitizer_common/TestCases/Linux/timerfd.cc b/test/sanitizer_common/TestCases/Linux/timerfd.cc new file mode 100644 index 000000000000..e7613bb1d111 --- /dev/null +++ b/test/sanitizer_common/TestCases/Linux/timerfd.cc @@ -0,0 +1,52 @@ +// RUN: %clangxx -O0 -g %s -o %t && %run %t | FileCheck %s +#include <assert.h> +#include <stdio.h> +#include <string.h> +#include <time.h> +#include <sys/timerfd.h> +#include <unistd.h> + +int main (int argc, char** argv) +{ + int fd = timerfd_create(CLOCK_REALTIME, 0); + assert(fd >= 0); + + struct itimerspec its; + its.it_value.tv_sec = 0; + its.it_value.tv_nsec = 1000000; + its.it_interval.tv_sec = its.it_value.tv_sec; + its.it_interval.tv_nsec = its.it_value.tv_nsec; + + int res = timerfd_settime(fd, 0, &its, NULL); + assert(res != -1); + + struct itimerspec its2; + res = timerfd_settime(fd, 0, &its, &its2); + assert(res != -1); + assert(its2.it_interval.tv_sec == its.it_interval.tv_sec); + assert(its2.it_interval.tv_nsec == its.it_interval.tv_nsec); + assert(its2.it_value.tv_sec <= its.it_value.tv_sec); + assert(its2.it_value.tv_nsec <= its.it_value.tv_nsec); + + struct itimerspec its3; + res = timerfd_gettime(fd, &its3); + assert(res != -1); + assert(its3.it_interval.tv_sec == its.it_interval.tv_sec); + assert(its3.it_interval.tv_nsec == its.it_interval.tv_nsec); + assert(its3.it_value.tv_sec <= its.it_value.tv_sec); + assert(its3.it_value.tv_nsec <= its.it_value.tv_nsec); + + + unsigned long long buf; + res = read(fd, &buf, sizeof(buf)); + assert(res == 8); + assert(buf >= 1); + + res = close(fd); + assert(res != -1); + + printf("DONE\n"); + // CHECK: DONE + + return 0; +} |
