mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-27 15:52:28 +00:00
parent
f155205eb0
commit
81ee11a16e
22 changed files with 200 additions and 138 deletions
|
@ -64,12 +64,19 @@ TEST(_timespec_frommicros, test) {
|
|||
}
|
||||
|
||||
TEST(_timespec_tomillis, test) {
|
||||
EXPECT_EQ(0, _timespec_tomillis((struct timespec){0, 0}));
|
||||
EXPECT_EQ(1, _timespec_tomillis((struct timespec){0, 1}));
|
||||
EXPECT_EQ(1, _timespec_tomillis((struct timespec){0, 999999}));
|
||||
EXPECT_EQ(1, _timespec_tomillis((struct timespec){0, 1000000}));
|
||||
EXPECT_EQ(1000, _timespec_tomillis((struct timespec){0, 999999999}));
|
||||
EXPECT_EQ(2123, _timespec_tomillis((struct timespec){2, 123000000}));
|
||||
EXPECT_EQ(INT64_MAX, _timespec_tomillis((struct timespec){INT64_MAX, 0}));
|
||||
EXPECT_EQ(INT64_MIN, _timespec_tomillis((struct timespec){INT64_MIN, 0}));
|
||||
}
|
||||
|
||||
TEST(_timespec_tomicros, test) {
|
||||
EXPECT_EQ(0, _timespec_tomicros((struct timespec){0, 0}));
|
||||
EXPECT_EQ(1, _timespec_tomicros((struct timespec){0, 1}));
|
||||
EXPECT_EQ(2000123, _timespec_tomicros((struct timespec){2, 123000}));
|
||||
EXPECT_EQ(INT64_MAX, _timespec_tomicros((struct timespec){INT64_MAX, 0}));
|
||||
EXPECT_EQ(INT64_MIN, _timespec_tomicros((struct timespec){INT64_MIN, 0}));
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "libc/calls/struct/timespec.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/intrin/describeflags.internal.h"
|
||||
#include "libc/sysv/consts/clock.h"
|
||||
#include "libc/sysv/consts/itimer.h"
|
||||
#include "libc/sysv/consts/sa.h"
|
||||
#include "libc/sysv/consts/sig.h"
|
||||
|
@ -41,11 +42,16 @@ TEST(nanosleep, testInvalid) {
|
|||
EXPECT_SYS(EINVAL, -1, nanosleep(&ts, 0));
|
||||
}
|
||||
|
||||
TEST(nanosleep, testNoSignalIsDelivered_remIsSetToZero) {
|
||||
TEST(nanosleep, testNoSignalIsDelivered) {
|
||||
struct timespec ts = {0, 1};
|
||||
ASSERT_SYS(0, 0, nanosleep(&ts, &ts));
|
||||
EXPECT_EQ(0, ts.tv_sec);
|
||||
EXPECT_EQ(0, ts.tv_nsec);
|
||||
ASSERT_SYS(0, 0, nanosleep(&ts, 0));
|
||||
}
|
||||
|
||||
TEST(clock_nanosleep, testNoSignalIsDelivered) {
|
||||
struct timespec ts = {0, 1};
|
||||
ASSERT_SYS(0, 0, clock_nanosleep(CLOCK_REALTIME, 0, &ts, &ts));
|
||||
ASSERT_SYS(0, 0, clock_nanosleep(CLOCK_REALTIME, 0, &ts, 0));
|
||||
}
|
||||
|
||||
TEST(nanosleep, testInterrupt_remIsUpdated) {
|
||||
|
|
|
@ -19,8 +19,10 @@
|
|||
#include "libc/calls/calls.h"
|
||||
#include "libc/calls/struct/stat.h"
|
||||
#include "libc/calls/struct/timespec.h"
|
||||
#include "libc/calls/struct/timeval.h"
|
||||
#include "libc/calls/syscall_support-sysv.internal.h"
|
||||
#include "libc/dce.h"
|
||||
#include "libc/errno.h"
|
||||
#include "libc/sysv/consts/at.h"
|
||||
#include "libc/sysv/consts/o.h"
|
||||
#include "libc/sysv/consts/utime.h"
|
||||
|
@ -33,6 +35,50 @@ void SetUpOnce(void) {
|
|||
ASSERT_SYS(0, 0, pledge("stdio rpath wpath cpath fattr", 0));
|
||||
}
|
||||
|
||||
TEST(utimes, test) {
|
||||
struct stat st;
|
||||
struct timeval tv[2] = {
|
||||
{1655455857, 1}, // atim: Fri Jun 17 2022 08:50:57 GMT+0000
|
||||
{827727928, 2}, // mtim: Mon Mar 25 1996 04:25:28 GMT+0000
|
||||
};
|
||||
EXPECT_SYS(0, 0, touch("boop", 0644));
|
||||
EXPECT_SYS(0, 0, utimes("boop", tv));
|
||||
EXPECT_SYS(0, 0, stat("boop", &st));
|
||||
EXPECT_EQ(1655455857, st.st_atim.tv_sec);
|
||||
EXPECT_EQ(827727928, st.st_mtim.tv_sec);
|
||||
if (IsLinux() && !__is_linux_2_6_23()) {
|
||||
// rhel5 only seems to have second granularity
|
||||
EXPECT_EQ(0, st.st_atim.tv_nsec);
|
||||
EXPECT_EQ(0, st.st_mtim.tv_nsec);
|
||||
} else {
|
||||
EXPECT_EQ(1000, st.st_atim.tv_nsec);
|
||||
EXPECT_EQ(2000, st.st_mtim.tv_nsec);
|
||||
}
|
||||
}
|
||||
|
||||
TEST(futimes, test) {
|
||||
if (IsLinux() && !__is_linux_2_6_23()) return;
|
||||
struct stat st;
|
||||
struct timeval tv[2] = {{1655455857, 1}, {827727928, 2}};
|
||||
EXPECT_SYS(0, 3, creat("boop", 0644));
|
||||
EXPECT_SYS(0, 0, futimes(3, tv));
|
||||
EXPECT_SYS(0, 0, fstat(3, &st));
|
||||
EXPECT_EQ(1655455857, st.st_atim.tv_sec);
|
||||
EXPECT_EQ(827727928, st.st_mtim.tv_sec);
|
||||
EXPECT_EQ(1000, st.st_atim.tv_nsec);
|
||||
EXPECT_EQ(2000, st.st_mtim.tv_nsec);
|
||||
EXPECT_SYS(0, 0, close(3));
|
||||
}
|
||||
|
||||
TEST(futimes, rhel5_enosys) {
|
||||
if (IsLinux() && !__is_linux_2_6_23()) {
|
||||
struct timeval tv[2] = {{1655455857}, {827727928}};
|
||||
EXPECT_SYS(0, 3, creat("boop", 0644));
|
||||
EXPECT_SYS(ENOSYS, -1, futimes(3, tv));
|
||||
EXPECT_SYS(0, 0, close(3));
|
||||
}
|
||||
}
|
||||
|
||||
TEST(utimensat, test) {
|
||||
struct stat st;
|
||||
struct timespec ts[2] = {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue