GNU coreutils Test Coverage Tracking
Failing GNU tests as of 2026-01-20 | 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
[ ] date/date-debug.sh
GNU Test | Debug output for date parsing
[x] date/date-ethiopia.sh - PR #10473
GNU Test | Ethiopian calendar translation support
[x] date/date-iran.sh - PR #10473
GNU Test | Iranian/Persian calendar translation support
[x] date/date-thailand.sh - PR #10473
GNU Test | Thai calendar translation support
[ ] date/date.pl
GNU Test | Comprehensive date parsing tests
[x] fold/fold-zero-width.sh - PR #9274
GNU Test | Zero-width character handling in fold
[ ] 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/unexpand.pl - PR #9265
GNU Test | Tab unexpansion edge cases
[ ] misc/write-errors.sh
GNU Test | Write error handling and reporting
[ ] nproc/nproc-quota-systemd.sh
GNU Test | Cgroup quota and kernel scheduler handling via systemd
[ ] numfmt/numfmt.pl
GNU Test | Number formatting comprehensive tests
[ ] pr/pr-tests.pl
GNU Test | Page formatting tests
[ ] rm/one-file-system.sh - PR #7569
GNU Test | --one-file-system and --preserve-root=all implementation
[x] sort/sort-h-thousands-sep.sh - PR #9848
GNU Test | Human-readable sort with thousands separators
[ ] sort/sort-month.sh - PR #9722
GNU Test | Locale-aware month parsing (ICU), handles "janv." and Latin-1
[x] sort/sort.pl - PR #9862
GNU Test | GNU coreutils compatibility for comprehensive sort tests
[ ] tail/follow-name.sh
GNU Test | Follow renamed/recreated files
[ ] tail/inotify-rotate-resources.sh
GNU Test | Inotify resource handling during log rotation
[X] tail/symlink.sh - PR #10158
GNU Test | Symlink following behavior
[x] timeout/timeout.sh - PR #10254
GNU Test | Signal propagation to child processes and SIGPIPE handling
SKIPPED
[ ] id/gnu-zero-uids.sh
GNU Test | Handling of UID 0
[ ] tail/inotify-dir-recreate.sh
GNU Test | Directory recreation with inotify
[x] timeout/timeout-group.sh - PR #10254
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.
df/skip-duplicates.sh (LD_PRELOAD)
GNU Test | Intercepts glibc to inject duplicate mount entries
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.
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 2026-01-20 | 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[ ] date/date-debug.sh
GNU Test | Debug output for date parsing
[x] date/date-ethiopia.sh - PR #10473
GNU Test | Ethiopian calendar translation support
[x] date/date-iran.sh - PR #10473
GNU Test | Iranian/Persian calendar translation support
[x] date/date-thailand.sh - PR #10473
GNU Test | Thai calendar translation support
[ ] date/date.pl
GNU Test | Comprehensive date parsing tests
[x] fold/fold-zero-width.sh - PR #9274
GNU Test | Zero-width character handling in fold
[ ] 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/unexpand.pl - PR #9265
GNU Test | Tab unexpansion edge cases
[ ] misc/write-errors.sh
GNU Test | Write error handling and reporting
[ ] nproc/nproc-quota-systemd.sh
GNU Test | Cgroup quota and kernel scheduler handling via systemd
[ ] numfmt/numfmt.pl
GNU Test | Number formatting comprehensive tests
[ ] pr/pr-tests.pl
GNU Test | Page formatting tests
[ ] rm/one-file-system.sh - PR #7569
GNU Test |
--one-file-systemand--preserve-root=allimplementation[x] sort/sort-h-thousands-sep.sh - PR #9848
GNU Test | Human-readable sort with thousands separators
[ ] sort/sort-month.sh - PR #9722
GNU Test | Locale-aware month parsing (ICU), handles "janv." and Latin-1
[x] sort/sort.pl - PR #9862
GNU Test | GNU coreutils compatibility for comprehensive sort tests
[ ] tail/follow-name.sh
GNU Test | Follow renamed/recreated files
[ ] tail/inotify-rotate-resources.sh
GNU Test | Inotify resource handling during log rotation
[X] tail/symlink.sh - PR #10158
GNU Test | Symlink following behavior
[x] timeout/timeout.sh - PR #10254
GNU Test | Signal propagation to child processes and SIGPIPE handling
SKIPPED
[ ] id/gnu-zero-uids.sh
GNU Test | Handling of UID 0
[ ] tail/inotify-dir-recreate.sh
GNU Test | Directory recreation with inotify
[x] timeout/timeout-group.sh - PR #10254
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.
df/skip-duplicates.sh (LD_PRELOAD)
GNU Test | Intercepts glibc to inject duplicate mount entries
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.
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.