diff --git a/lib/std/posix/test.zig b/lib/std/posix/test.zig index 8199be65aa..55a53518d9 100644 --- a/lib/std/posix/test.zig +++ b/lib/std/posix/test.zig @@ -395,11 +395,27 @@ test "fstatat" { // now repeat but using `fstatat` instead const statat = try posix.fstatat(tmp.dir.fd, "file.txt", posix.AT.SYMLINK_NOFOLLOW); - // s390x-linux does not have nanosecond precision for fstat(), but it does for fstatat(). As a - // result, comparing the two structures is doomed to fail. - if (builtin.cpu.arch == .s390x and builtin.os.tag == .linux) return error.SkipZigTest; + try expectEqual(stat.dev, statat.dev); + try expectEqual(stat.ino, statat.ino); + try expectEqual(stat.nlink, statat.nlink); + try expectEqual(stat.mode, statat.mode); + try expectEqual(stat.uid, statat.uid); + try expectEqual(stat.gid, statat.gid); + try expectEqual(stat.rdev, statat.rdev); + try expectEqual(stat.size, statat.size); + try expectEqual(stat.blksize, statat.blksize); - try expectEqual(stat, statat); + // The stat.blocks/statat.blocks count is managed by the filesystem and may + // change if the file is stored in a journal or "inline". + // try expectEqual(stat.blocks, statat.blocks); + + // s390x-linux does not have nanosecond precision for fstat(), but it does for + // fstatat(). As a result, comparing the timestamps isn't worth the effort + if (!(builtin.cpu.arch == .s390x and builtin.os.tag == .linux)) { + try expectEqual(stat.atime(), statat.atime()); + try expectEqual(stat.mtime(), statat.mtime()); + try expectEqual(stat.ctime(), statat.ctime()); + } } test "readlinkat" {