]>
git.saurik.com Git - apple/xnu.git/blob - tools/tests/darwintests/gettimeofday.c
3 #include <mach/mach_time.h>
5 #include <darwintest.h>
7 extern int __gettimeofday(struct timeval
*, struct timezone
*);
9 T_DECL(gettimeofday
, "gettimeofday()",
10 T_META_CHECK_LEAKS(false), T_META_ALL_VALID_ARCHS(true), T_META_LTEPHASE(LTE_POSTINIT
))
12 struct timeval tv_a
, tv_b
, tv_c
;
14 T_ASSERT_POSIX_ZERO(gettimeofday(&tv_a
, NULL
), NULL
);
15 T_ASSERT_GT(tv_a
.tv_sec
, 0L, NULL
);
19 T_ASSERT_POSIX_ZERO(__gettimeofday(&tv_b
, NULL
), NULL
);
20 T_ASSERT_GE(tv_b
.tv_sec
, tv_a
.tv_sec
, NULL
);
24 T_ASSERT_POSIX_ZERO(gettimeofday(&tv_c
, NULL
), NULL
);
25 T_ASSERT_GE(tv_c
.tv_sec
, tv_b
.tv_sec
, NULL
);
28 #if 0 // This symbol isn't exported so we can't test with stock libsyscall
29 extern int __gettimeofday_with_mach(struct timeval
*, struct timezone
*, uint64_t *mach_time
);
31 T_DECL(gettimeofday_with_mach
, "gettimeofday_with_mach()",
32 T_META_CHECK_LEAKS(false), T_META_ALL_VALID_ARCHS(true))
34 struct timeval gtod_ts
;
36 uint64_t mach_time_before
, mach_time
, mach_time_after
;
38 mach_time_before
= mach_absolute_time();
40 T_ASSERT_POSIX_ZERO(__gettimeofday_with_mach(>od_ts
, NULL
, &mach_time
), NULL
);
41 T_ASSERT_GT(gtod_ts
.tv_sec
, 0L, NULL
);
43 mach_time_after
= mach_absolute_time();
45 T_LOG("%llx > %llx > %llx", mach_time_before
, mach_time
, mach_time_after
);
47 T_ASSERT_LT(mach_time_before
, mach_time
, NULL
);
48 T_ASSERT_GT(mach_time_after
, mach_time
, NULL
);