GNU coreutils Test Coverage Tracking
Failing GNU tests as of 2025-12-19 | Test Coverage Dashboard
Overview
With the number of failing tests now small enough to track individually, this document provides detailed descriptions of each remaining test failure and the next steps needed to achieve full GNU compatibility. Theres a bunch of duplicate PR's for the same tests in the PR queue now and I'm hoping this will allow us to consolidate our efforts.
I am also hoping to separate the tests that are incompatible because they either intercept glibc calls or call gdb on specific lines of source code since we are unable to fix those tests and it wouldn't be good to track compatibility of those tests.
FAILED
[ ] cp/cp-a-selinux.sh - PR #10207
GNU Test | Fix cp -a SELinux xattr handling and -z flag for folders
[x] cp/link-heap.sh - PR #9805 ✓
GNU Test | Reduce memory usage for cp -al by skipping unnecessary tracking - MERGED
[x] cp/preserve-gid.sh - PR #9803 ✓
GNU Test | Fix preserve-gid when canonicalize fails due to inaccessible parent dirs - MERGED
[ ] date/date-debug.sh
GNU Test | Debug output for date parsing
[ ] date/date-ethiopia.sh
GNU Test | Ethiopian calendar translation support
Note: PR #9661 was an attempt but has been closed.
[ ] date/date-iran.sh
GNU Test | Iranian/Persian calendar translation support
Note: PR #9661 was an attempt but has been closed.
[x] date/date-locale-hour.sh - PR #9654 ✓
GNU Test | Locale-aware 12h vs 24h format detection via nl_langinfo() - MERGED
[ ] date/date-thailand.sh
GNU Test | Thai calendar translation support
Note: PR #9661 was an attempt but has been closed.
[ ] date/date.pl
GNU Test | Comprehensive date parsing tests
[x] dd/no-allocate.sh - PR #9806 ✓
GNU Test | Use ibs/obs-sized buffer for skip/seek on non-seekable files (ulimit -v tests) - MERGED
[x] dd/nocache_eof.sh - PR #9818 ✓
GNU Test | Fix nocache flag handling at EOF (use len=0 for posix_fadvise) - MERGED
[x] dd/nocache_fail.sh - PR #9820 ✓
GNU Test | Use actual filename in nocache error messages - MERGED
[x] dd/skip-seek-past-file.sh - PR #9821 ✓
GNU Test | Use seek for stdin skip when possible - MERGED
[ ] dd/stderr.sh - PR #9664
GNU Test | Detect closed stdin before Rust sanitizes to /dev/null
[x] env/env-signal-handler.sh - PR #9465 ✓
GNU Test | --default-signal, --block-signal, --list-signal-handling flags - MERGED
[x] fmt/non-space.sh - PR #9329 ✓
GNU Test | Handle invalid UTF-8 input by replacing malformed sequences - MERGED
[ ] fold/fold-zero-width.sh - PR #9274
GNU Test | Zero-width character handling in fold
[x] ls/ls-misc.pl - PR #9262 ✓
GNU Test | Align symlink coloring with GNU semantics (or=, mi=, ln=target) - MERGED
[ ] ls/stat-free-symlinks.sh - PR #8728
GNU Test | Iterative loop for ls recursive directory search (prevents stack overflow)
[ ] misc/close-stdout.sh
GNU Test | Proper handling of closed stdout
[ ] misc/stdbuf.sh
GNU Test | Line/block buffering with fifos
[x] misc/tsort.pl - PR #9289 ✓
GNU Test | Topological sort tests - MERGED
[ ] misc/unexpand.pl - PR #9265
GNU Test | Tab unexpansion edge cases
[ ] misc/write-errors.sh
GNU Test | Write error handling and reporting
[x] mv/i-3.sh - PR #9599 ✓
GNU Test | TTY prompting for non-writable destination files - MERGED
[ ] numfmt/numfmt.pl
GNU Test | Number formatting comprehensive tests
[ ] numfmt/mb-non-utf8.sh - PR #10079
GNU Test | Support non-UTF8 delimiters for locales like GB18030 (test enabled by PR #9807 ✓)
[ ] ptx/ptx-overrun.sh - PR #9816, PR #9823
GNU Test | Fix overflow panic with long references + handle duplicate input files
[x] ptx/ptx.pl - PR #9681, PR #9682 ✓
GNU Test | Permuted index generation tests - MERGED (column width/padding + -S flag)
[ ] rm/one-file-system.sh - PR #7569
GNU Test | --one-file-system and --preserve-root=all implementation
[x] rm/rm1.sh - PR #9011
GNU Test | Fix error reporting for rm -r on Linux
[x] runcon/runcon-no-reorder.sh - PR #9607 ✓
GNU Test | SELinux context argument ordering - MERGED (was passing incorrectly due to false symlinks)
[x] runcon/runcon-compute.sh - PR #10088 ✓
GNU Test | Fix PATH handling for runcon -c (don't search PATH for relative commands) - MERGED
[x] seq/seq-epipe.sh - PR #9657 ✓
GNU Test | SIGPIPE handling macro for proper exit codes - MERGED
[x] shred/shred-passes.sh - PR #9317 ✓
GNU Test | Deterministic pass sequence + stop on write errors - MERGED
[x] sort/sort-continue.sh - PR #9107 ✓
GNU Test | Respect soft fd limit for merge batch sizes - MERGED
[x] sort/sort-debug-keys.sh - PR #9468 ✓
GNU Test | Debug key annotation alignment - MERGED
[x] sort/sort-debug-warn.sh - PR #9900 ✓
GNU Test | Warning messages for obsolescent keys (+field -field) and options - MERGED
[ ] sort/sort-float.sh - PR #9839
GNU Test | Floating point number sorting
[ ] sort/sort-h-thousands-sep.sh - PR #9848
GNU Test | Human-readable sort with thousands separators
[ ] sort/sort-merge-fdlimit.sh - PR #9849
GNU Test | Merge sort file descriptor limits
[ ] sort/sort-month.sh - PR #9722
GNU Test | Locale-aware month parsing (ICU), handles "janv." and Latin-1
[ ] sort/sort.pl - PR #9862
GNU Test | GNU coreutils compatibility for comprehensive sort tests
[x] stty/stty-row-col.sh - PR #9516 ✓
GNU Test | Hex/octal parsing for rows and columns - MERGED
[x] stty/stty.sh - PR #9490 ✓
GNU Test | COLUMNS env support - MERGED
[ ] tac/tac-2-non-seekable.sh - PR #9664
GNU Test | Detect closed stdin before Rust sanitizes to /dev/null
[ ] tail/follow-name.sh
GNU Test | Follow renamed/recreated files
[ ] tail/follow-stdin.sh - PR #9664
GNU Test | Detect closed stdin before Rust sanitizes to /dev/null
[ ] tail/inotify-rotate-resources.sh
GNU Test | Inotify resource handling during log rotation
[x] tail/pid-pipe.sh - PR #9663 ✓
GNU Test | --pid with FIFO using non-blocking open - MERGED
[x] tail/pipe-f.sh - PR #10156 ✓
GNU Test | Detect broken stdout pipe and don't follow stdin - MERGED
[ ] tail/symlink.sh - PR #10158
GNU Test | Symlink following behavior
[x] tail/tail.pl - PR #10155 ✓
GNU Test | Fix big number handling (saturating_mul) and error message quoting - MERGED
[x] wc/wc-cpu.sh - PR #9144 ✓
GNU Test | Respect GLIBC_TUNABLES to disable AVX/AVX512 SIMD - MERGED
SKIPPED
[x] cp/cp-mv-enotsup-xattr.sh - PR #9530 ✓
GNU Test | xattr ENOTSUP handling - TEST ENABLED
[x] df/skip-rootfs.sh - PR #10159 ✓
GNU Test | Add rootfs to is_dummy_filesystem - MERGED
[ ] id/gnu-zero-uids.sh
GNU Test | Handling of UID 0
[x] id/smack.sh - PR #9910 ✓
GNU Test | SMACK security labels - adds --context flag and SMACK label display - MERGED
[x] mkdir/smack-no-root.sh - PR #9910 ✓
GNU Test | SMACK labels without root - adds --context flag for setting SMACK labels - MERGED
[x] mkdir/smack-root.sh - PR #9910 ✓
GNU Test | SMACK labels with root - adds --context flag for setting SMACK labels - MERGED
[x] mkdir/writable-under-readonly.sh - PR #9530 ✓
GNU Test | Creating writable dir under readonly parent - TEST ENABLED
[ ] pr/pr-tests.pl
GNU Test | Page formatting tests
[x] rm/fail-eperm.xpl - PR #9525, PR #9531 ✓
GNU Test | EPERM error on files not owned by user - MERGED/FIXED
[x] tac/tac-continue.sh - PR #10094 ✓
GNU Test | Use temp file for stdin (like GNU) instead of buffering in RAM; detect write errors and continue to next file - MERGED
[ ] tail/inotify-dir-recreate.sh
GNU Test | Directory recreation with inotify
[ ] timeout/timeout-group.sh
GNU Test | sigtimedwait() instead of 100ms polling (100ms → 1ms)
INCOMPATIBLE
Tests that use LD_PRELOAD to intercept glibc calls or gdb breakpoints. If we don't use the same internal calls, we will have to patch these tests.
cp/nfs-removal-race.sh (LD_PRELOAD) - PR #10086
GNU Test | Use FileInformation without dereference for symlink destination check
GNU test updated (commit 1afe410) to support both glibc < 2.33 and >= 2.33. PR uses FileInformation helpers to match how GNU fetches file metadata.
[x] csplit/csplit-io-err.sh - PR #9855 ✓
GNU Test | I/O error handling
PR #9855 detects and reports write errors - MERGED. GNU test updated (commit 1b46778) to use /dev/full instead of LD_PRELOAD. No GNU patch needed after rebase.
df/no-mtab-status.sh (LD_PRELOAD) - PR #9759 (test enabled)
GNU Test | Intercepts glibc to simulate missing mtab
PR #9759 enabled this test (detects #9760).
df/skip-duplicates.sh (LD_PRELOAD)
GNU Test | Intercepts glibc to inject duplicate mount entries
nproc/nproc-quota.sh (LD_PRELOAD)
GNU Test | Intercepts glibc to simulate CPU quota
rm/r-root.sh (LD_PRELOAD + gdb)
GNU Test | Uses gdb breakpoints and LD_PRELOAD for safety net
rm/rm-readdir-fail.sh (LD_PRELOAD) - PR #9604
GNU Test | Intercepts readdir to simulate failures
PR #9604 wraps libc calls to handle LD_PRELOAD tests.
stty/bad-speed.sh (LD_PRELOAD) - PR #9517
GNU Test | Intercepts cfsetispeed to simulate failures
PR #9517 implements input/output baud rate setting so cfsetispeed is called.
tail/inotify-race.sh (gdb) - PR #9908
GNU Test | Uses gdb breakpoints to trigger race conditions
PR #9908 patches the test to use Rust gdb breakpoints (breaking on watcher_rx.watch_with_parent in watch.rs).
tail/inotify-race2.sh (gdb) - PR #9908
GNU Test | Uses gdb breakpoints to trigger race conditions
PR #9908 patches the test to use Rust gdb breakpoints (breaking on watcher_rx.watch_with_parent in watch.rs).
ERROR
[ ] misc/usage_vs_getopt.sh - PR #9869
GNU Test | Usage message consistency with getopt
The coreutils multicall binary doesn't use clap for argument parsing, so unrecognized options like --unknown were outputting "function/utility not found" instead of "unrecognized option". PR #9869 fixes this by detecting option-like arguments.
GNU coreutils Test Coverage Tracking
Failing GNU tests as of 2025-12-19 | Test Coverage Dashboard
Overview
With the number of failing tests now small enough to track individually, this document provides detailed descriptions of each remaining test failure and the next steps needed to achieve full GNU compatibility. Theres a bunch of duplicate PR's for the same tests in the PR queue now and I'm hoping this will allow us to consolidate our efforts.
I am also hoping to separate the tests that are incompatible because they either intercept glibc calls or call gdb on specific lines of source code since we are unable to fix those tests and it wouldn't be good to track compatibility of those tests.
FAILED
[ ] cp/cp-a-selinux.sh - PR #10207
GNU Test | Fix
cp -aSELinux xattr handling and-zflag for folders[x] cp/link-heap.sh - PR #9805 ✓
GNU Test | Reduce memory usage for cp -al by skipping unnecessary tracking - MERGED
[x] cp/preserve-gid.sh - PR #9803 ✓
GNU Test | Fix preserve-gid when canonicalize fails due to inaccessible parent dirs - MERGED
[ ] date/date-debug.sh
GNU Test | Debug output for date parsing
[ ] date/date-ethiopia.sh
GNU Test | Ethiopian calendar translation support
Note: PR #9661 was an attempt but has been closed.
[ ] date/date-iran.sh
GNU Test | Iranian/Persian calendar translation support
Note: PR #9661 was an attempt but has been closed.
[x] date/date-locale-hour.sh - PR #9654 ✓
GNU Test | Locale-aware 12h vs 24h format detection via nl_langinfo() - MERGED
[ ] date/date-thailand.sh
GNU Test | Thai calendar translation support
Note: PR #9661 was an attempt but has been closed.
[ ] date/date.pl
GNU Test | Comprehensive date parsing tests
[x] dd/no-allocate.sh - PR #9806 ✓
GNU Test | Use ibs/obs-sized buffer for skip/seek on non-seekable files (ulimit -v tests) - MERGED
[x] dd/nocache_eof.sh - PR #9818 ✓
GNU Test | Fix nocache flag handling at EOF (use len=0 for posix_fadvise) - MERGED
[x] dd/nocache_fail.sh - PR #9820 ✓
GNU Test | Use actual filename in nocache error messages - MERGED
[x] dd/skip-seek-past-file.sh - PR #9821 ✓
GNU Test | Use seek for stdin skip when possible - MERGED
[ ] dd/stderr.sh - PR #9664
GNU Test | Detect closed stdin before Rust sanitizes to /dev/null
[x] env/env-signal-handler.sh - PR #9465 ✓
GNU Test |
--default-signal,--block-signal,--list-signal-handlingflags - MERGED[x] fmt/non-space.sh - PR #9329 ✓
GNU Test | Handle invalid UTF-8 input by replacing malformed sequences - MERGED
[ ] fold/fold-zero-width.sh - PR #9274
GNU Test | Zero-width character handling in fold
[x] ls/ls-misc.pl - PR #9262 ✓
GNU Test | Align symlink coloring with GNU semantics (or=, mi=, ln=target) - MERGED
[ ] ls/stat-free-symlinks.sh - PR #8728
GNU Test | Iterative loop for ls recursive directory search (prevents stack overflow)
[ ] misc/close-stdout.sh
GNU Test | Proper handling of closed stdout
[ ] misc/stdbuf.sh
GNU Test | Line/block buffering with fifos
[x] misc/tsort.pl - PR #9289 ✓
GNU Test | Topological sort tests - MERGED
[ ] misc/unexpand.pl - PR #9265
GNU Test | Tab unexpansion edge cases
[ ] misc/write-errors.sh
GNU Test | Write error handling and reporting
[x] mv/i-3.sh - PR #9599 ✓
GNU Test | TTY prompting for non-writable destination files - MERGED
[ ] numfmt/numfmt.pl
GNU Test | Number formatting comprehensive tests
[ ] numfmt/mb-non-utf8.sh - PR #10079
GNU Test | Support non-UTF8 delimiters for locales like GB18030 (test enabled by PR #9807 ✓)
[ ] ptx/ptx-overrun.sh - PR #9816, PR #9823
GNU Test | Fix overflow panic with long references + handle duplicate input files
[x] ptx/ptx.pl - PR #9681, PR #9682 ✓
GNU Test | Permuted index generation tests - MERGED (column width/padding +
-Sflag)[ ] rm/one-file-system.sh - PR #7569
GNU Test |
--one-file-systemand--preserve-root=allimplementation[x] rm/rm1.sh - PR #9011
GNU Test | Fix error reporting for
rm -ron Linux[x] runcon/runcon-no-reorder.sh - PR #9607 ✓
GNU Test | SELinux context argument ordering - MERGED (was passing incorrectly due to
falsesymlinks)[x] runcon/runcon-compute.sh - PR #10088 ✓
GNU Test | Fix PATH handling for
runcon -c(don't search PATH for relative commands) - MERGED[x] seq/seq-epipe.sh - PR #9657 ✓
GNU Test | SIGPIPE handling macro for proper exit codes - MERGED
[x] shred/shred-passes.sh - PR #9317 ✓
GNU Test | Deterministic pass sequence + stop on write errors - MERGED
[x] sort/sort-continue.sh - PR #9107 ✓
GNU Test | Respect soft fd limit for merge batch sizes - MERGED
[x] sort/sort-debug-keys.sh - PR #9468 ✓
GNU Test | Debug key annotation alignment - MERGED
[x] sort/sort-debug-warn.sh - PR #9900 ✓
GNU Test | Warning messages for obsolescent keys (+field -field) and options - MERGED
[ ] sort/sort-float.sh - PR #9839
GNU Test | Floating point number sorting
[ ] sort/sort-h-thousands-sep.sh - PR #9848
GNU Test | Human-readable sort with thousands separators
[ ] sort/sort-merge-fdlimit.sh - PR #9849
GNU Test | Merge sort file descriptor limits
[ ] sort/sort-month.sh - PR #9722
GNU Test | Locale-aware month parsing (ICU), handles "janv." and Latin-1
[ ] sort/sort.pl - PR #9862
GNU Test | GNU coreutils compatibility for comprehensive sort tests
[x] stty/stty-row-col.sh - PR #9516 ✓
GNU Test | Hex/octal parsing for rows and columns - MERGED
[x] stty/stty.sh - PR #9490 ✓
GNU Test | COLUMNS env support - MERGED
[ ] tac/tac-2-non-seekable.sh - PR #9664
GNU Test | Detect closed stdin before Rust sanitizes to /dev/null
[ ] tail/follow-name.sh
GNU Test | Follow renamed/recreated files
[ ] tail/follow-stdin.sh - PR #9664
GNU Test | Detect closed stdin before Rust sanitizes to /dev/null
[ ] tail/inotify-rotate-resources.sh
GNU Test | Inotify resource handling during log rotation
[x] tail/pid-pipe.sh - PR #9663 ✓
GNU Test |
--pidwith FIFO using non-blocking open - MERGED[x] tail/pipe-f.sh - PR #10156 ✓
GNU Test | Detect broken stdout pipe and don't follow stdin - MERGED
[ ] tail/symlink.sh - PR #10158
GNU Test | Symlink following behavior
[x] tail/tail.pl - PR #10155 ✓
GNU Test | Fix big number handling (saturating_mul) and error message quoting - MERGED
[x] wc/wc-cpu.sh - PR #9144 ✓
GNU Test | Respect GLIBC_TUNABLES to disable AVX/AVX512 SIMD - MERGED
SKIPPED
[x] cp/cp-mv-enotsup-xattr.sh - PR #9530 ✓
GNU Test | xattr ENOTSUP handling - TEST ENABLED
[x] df/skip-rootfs.sh - PR #10159 ✓
GNU Test | Add rootfs to is_dummy_filesystem - MERGED
[ ] id/gnu-zero-uids.sh
GNU Test | Handling of UID 0
[x] id/smack.sh - PR #9910 ✓
GNU Test | SMACK security labels - adds
--contextflag and SMACK label display - MERGED[x] mkdir/smack-no-root.sh - PR #9910 ✓
GNU Test | SMACK labels without root - adds
--contextflag for setting SMACK labels - MERGED[x] mkdir/smack-root.sh - PR #9910 ✓
GNU Test | SMACK labels with root - adds
--contextflag for setting SMACK labels - MERGED[x] mkdir/writable-under-readonly.sh - PR #9530 ✓
GNU Test | Creating writable dir under readonly parent - TEST ENABLED
[ ] pr/pr-tests.pl
GNU Test | Page formatting tests
[x] rm/fail-eperm.xpl - PR #9525, PR #9531 ✓
GNU Test | EPERM error on files not owned by user - MERGED/FIXED
[x] tac/tac-continue.sh - PR #10094 ✓
GNU Test | Use temp file for stdin (like GNU) instead of buffering in RAM; detect write errors and continue to next file - MERGED
[ ] tail/inotify-dir-recreate.sh
GNU Test | Directory recreation with inotify
[ ] timeout/timeout-group.sh
GNU Test | sigtimedwait() instead of 100ms polling (100ms → 1ms)
INCOMPATIBLE
Tests that use LD_PRELOAD to intercept glibc calls or gdb breakpoints. If we don't use the same internal calls, we will have to patch these tests.
cp/nfs-removal-race.sh (LD_PRELOAD) - PR #10086
GNU Test | Use FileInformation without dereference for symlink destination check
GNU test updated (commit 1afe410) to support both glibc < 2.33 and >= 2.33. PR uses
FileInformationhelpers to match how GNU fetches file metadata.[x] csplit/csplit-io-err.sh - PR #9855 ✓
GNU Test | I/O error handling
PR #9855 detects and reports write errors - MERGED. GNU test updated (commit 1b46778) to use
/dev/fullinstead of LD_PRELOAD. No GNU patch needed after rebase.df/no-mtab-status.sh (LD_PRELOAD) - PR #9759 (test enabled)
GNU Test | Intercepts glibc to simulate missing mtab
PR #9759 enabled this test (detects #9760).
df/skip-duplicates.sh (LD_PRELOAD)
GNU Test | Intercepts glibc to inject duplicate mount entries
nproc/nproc-quota.sh (LD_PRELOAD)
GNU Test | Intercepts glibc to simulate CPU quota
rm/r-root.sh (LD_PRELOAD + gdb)
GNU Test | Uses gdb breakpoints and LD_PRELOAD for safety net
rm/rm-readdir-fail.sh (LD_PRELOAD) - PR #9604
GNU Test | Intercepts readdir to simulate failures
PR #9604 wraps libc calls to handle LD_PRELOAD tests.
stty/bad-speed.sh (LD_PRELOAD) - PR #9517
GNU Test | Intercepts cfsetispeed to simulate failures
PR #9517 implements input/output baud rate setting so cfsetispeed is called.
tail/inotify-race.sh (gdb) - PR #9908
GNU Test | Uses gdb breakpoints to trigger race conditions
PR #9908 patches the test to use Rust gdb breakpoints (breaking on
watcher_rx.watch_with_parentin watch.rs).tail/inotify-race2.sh (gdb) - PR #9908
GNU Test | Uses gdb breakpoints to trigger race conditions
PR #9908 patches the test to use Rust gdb breakpoints (breaking on
watcher_rx.watch_with_parentin watch.rs).ERROR
[ ] misc/usage_vs_getopt.sh - PR #9869
GNU Test | Usage message consistency with getopt
The coreutils multicall binary doesn't use clap for argument parsing, so unrecognized options like
--unknownwere outputting "function/utility not found" instead of "unrecognized option". PR #9869 fixes this by detecting option-like arguments.