1b8a62b91Sopenharmony_ci#[cfg(not(any(target_os = "redox", target_os = "wasi")))]
2b8a62b91Sopenharmony_ci#[test]
3b8a62b91Sopenharmony_cifn test_futimens() {
4b8a62b91Sopenharmony_ci    use rustix::fs::{cwd, fstat, futimens, openat, Mode, OFlags, Timespec, Timestamps};
5b8a62b91Sopenharmony_ci
6b8a62b91Sopenharmony_ci    let tmp = tempfile::tempdir().unwrap();
7b8a62b91Sopenharmony_ci    let dir = openat(cwd(), tmp.path(), OFlags::RDONLY, Mode::empty()).unwrap();
8b8a62b91Sopenharmony_ci
9b8a62b91Sopenharmony_ci    let foo = openat(
10b8a62b91Sopenharmony_ci        &dir,
11b8a62b91Sopenharmony_ci        "foo",
12b8a62b91Sopenharmony_ci        OFlags::CREATE | OFlags::WRONLY | OFlags::CLOEXEC,
13b8a62b91Sopenharmony_ci        Mode::empty(),
14b8a62b91Sopenharmony_ci    )
15b8a62b91Sopenharmony_ci    .unwrap();
16b8a62b91Sopenharmony_ci
17b8a62b91Sopenharmony_ci    let times = Timestamps {
18b8a62b91Sopenharmony_ci        last_access: Timespec {
19b8a62b91Sopenharmony_ci            tv_sec: 44000,
20b8a62b91Sopenharmony_ci            tv_nsec: 45000,
21b8a62b91Sopenharmony_ci        },
22b8a62b91Sopenharmony_ci        last_modification: Timespec {
23b8a62b91Sopenharmony_ci            tv_sec: 46000,
24b8a62b91Sopenharmony_ci            tv_nsec: 47000,
25b8a62b91Sopenharmony_ci        },
26b8a62b91Sopenharmony_ci    };
27b8a62b91Sopenharmony_ci    futimens(&foo, &times).unwrap();
28b8a62b91Sopenharmony_ci
29b8a62b91Sopenharmony_ci    let after = fstat(&foo).unwrap();
30b8a62b91Sopenharmony_ci
31b8a62b91Sopenharmony_ci    assert_eq!(times.last_modification.tv_sec as u64, after.st_mtime as u64);
32b8a62b91Sopenharmony_ci    #[cfg(not(target_os = "netbsd"))]
33b8a62b91Sopenharmony_ci    assert_eq!(
34b8a62b91Sopenharmony_ci        times.last_modification.tv_nsec as u64,
35b8a62b91Sopenharmony_ci        after.st_mtime_nsec as u64
36b8a62b91Sopenharmony_ci    );
37b8a62b91Sopenharmony_ci    #[cfg(target_os = "netbsd")]
38b8a62b91Sopenharmony_ci    assert_eq!(
39b8a62b91Sopenharmony_ci        times.last_modification.tv_nsec as u64,
40b8a62b91Sopenharmony_ci        after.st_mtimensec as u64
41b8a62b91Sopenharmony_ci    );
42b8a62b91Sopenharmony_ci}
43