Skip to content

Commit 2592299

Browse files
committed
chore(specs): update 009-implementation-status with sort/uniq flags and accurate test counts
Document all sort flags (-f/-n/-r/-u/-V/-t/-k/-s/-c/-h/-M/-m/-z/-o) and uniq flags (-c/-d/-u/-i/-f) in the sortuniq.test.sh entry. Update bash spec test count from 1034 to 1305 and total from 1452 to 1723. Add missing test file entries and correct stale case counts across the breakdown table. Fix JQ skip count (5) and Python skip count (8). Closes #315
1 parent 3cca974 commit 2592299

1 file changed

Lines changed: 51 additions & 33 deletions

File tree

specs/009-implementation-status.md

Lines changed: 51 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -103,77 +103,95 @@ Bashkit implements IEEE 1003.1-2024 Shell Command Language. See
103103

104104
## Spec Test Coverage
105105

106-
**Total spec test cases:** 1452 (1447 pass, 5 skip)
106+
**Total spec test cases:** 1723 (1586 pass, 137 skip)
107107

108108
| Category | Cases | In CI | Pass | Skip | Notes |
109109
|----------|-------|-------|------|------|-------|
110-
| Bash (core) | 1034 | Yes | 1029 | 5 | `bash_spec_tests` in CI |
110+
| Bash (core) | 1305 | Yes | 1181 | 124 | `bash_spec_tests` in CI |
111111
| AWK | 96 | Yes | 96 | 0 | loops, arrays, -v, ternary, field assign, getline, %.6g |
112112
| Grep | 76 | Yes | 76 | 0 | -z, -r, -a, -b, -H, -h, -f, -P, --include, --exclude, binary detect |
113113
| Sed | 75 | Yes | 75 | 0 | hold space, change, regex ranges, -E |
114-
| JQ | 114 | Yes | 114 | 0 | reduce, walk, regex funcs, --arg/--argjson, combined flags, input/inputs, env |
115-
| Python | 57 | Yes | 57 | 0 | embedded Python (Monty) |
116-
| **Total** | **1452** | **Yes** | **1447** | **5** | |
114+
| JQ | 114 | Yes | 109 | 5 | reduce, walk, regex funcs, --arg/--argjson, combined flags, input/inputs, env |
115+
| Python | 57 | Yes | 49 | 8 | embedded Python (Monty) |
116+
| **Total** | **1723** | **Yes** | **1586** | **137** | |
117117

118118
### Bash Spec Tests Breakdown
119119

120120
| File | Cases | Notes |
121121
|------|-------|-------|
122+
| alias.test.sh | 15 | alias expansion (15 skipped) |
123+
| arith-dynamic.test.sh | 14 | dynamic arithmetic contexts (5 skipped) |
122124
| arithmetic.test.sh | 68 | includes logical, bitwise, compound assign, increment/decrement, `let` builtin, `declare -i` arithmetic |
125+
| array-slicing.test.sh | 8 | array slice operations |
123126
| arrays.test.sh | 27 | indices, `${arr[@]}` / `${arr[*]}`, negative indexing `${arr[-1]}` |
124-
| background.test.sh | 4 | |
125-
| bash-command.test.sh | 34 | bash/sh re-invocation |
127+
| assoc-arrays.test.sh | 15 | associative arrays `declare -A` |
128+
| background.test.sh | 2 | background job handling |
129+
| bash-command.test.sh | 25 | bash/sh re-invocation |
126130
| bash-flags.test.sh | 13 | bash `-e`, `-x`, `-u`, `-f`, `-o option` flags |
127-
| brace-expansion.test.sh | 21 | {a,b,c}, {1..5}, for-loop brace expansion |
128-
| column.test.sh | 10 | column alignment |
131+
| brace-expansion.test.sh | 20 | {a,b,c}, {1..5}, for-loop brace expansion |
132+
| checksum.test.sh | 10 | md5sum, sha256sum, sha1sum |
133+
| chown-kill.test.sh | 7 | chown, kill builtins |
134+
| column.test.sh | 5 | column alignment |
129135
| command.test.sh | 9 | `command -v`, `-V`, function bypass |
130-
| command-not-found.test.sh | 17 | unknown command handling |
136+
| command-not-found.test.sh | 9 | unknown command handling |
137+
| command-subst.test.sh | 22 | includes backtick substitution, nested quotes in `$()` |
131138
| conditional.test.sh | 24 | `[[ ]]` conditionals, `=~` regex, BASH_REMATCH, glob `==`/`!=` |
132-
| command-subst.test.sh | 22 | includes backtick substitution, nested quotes in `$()` (1 skipped) |
133139
| control-flow.test.sh | 58 | if/elif/else, for, while, case `;;`/`;&`/`;;&`, select, trap ERR, `[[ =~ ]]` BASH_REMATCH, compound input redirects |
134140
| cuttr.test.sh | 32 | cut and tr commands, `-z` zero-terminated |
135-
| date.test.sh | 38 | format specifiers, `-d` relative/compound/epoch, `-R`, `-I`, `%N` (2 skipped) |
141+
| date.test.sh | 37 | format specifiers, `-d` relative/compound/epoch, `-R`, `-I`, `%N` (2 skipped) |
142+
| declare.test.sh | 23 | `declare`/`typeset`, `-i`, `-r`, `-x`, `-a`, `-p`, `-n` nameref, `-l`/`-u` case conversion |
136143
| diff.test.sh | 4 | line diffs |
144+
| dirstack.test.sh | 12 | `pushd`, `popd`, `dirs` directory stack operations |
137145
| echo.test.sh | 24 | escape sequences |
146+
| empty-bodies.test.sh | 8 | empty loop/function bodies (5 skipped) |
138147
| errexit.test.sh | 8 | set -e tests |
148+
| eval-bugs.test.sh | 4 | regression tests for eval/script bugs |
149+
| exit-status.test.sh | 18 | exit code propagation |
150+
| expr.test.sh | 13 | `expr` arithmetic, string ops, pattern matching, exit codes |
151+
| extglob.test.sh | 15 | `@()`, `?()`, `*()`, `+()`, `!()` extended globs |
139152
| fileops.test.sh | 28 | `mktemp`, `-d`, `-p`, template |
140-
| find.test.sh | 10 | file search |
153+
| find.test.sh | 8 | file search |
141154
| functions.test.sh | 26 | local dynamic scoping, nested writes, FUNCNAME call stack, `caller` builtin |
142155
| getopts.test.sh | 9 | POSIX option parsing, combined flags, silent mode |
143156
| glob-options.test.sh | 13 | dotglob, nocaseglob, failglob, nullglob, noglob, globstar |
144-
| globs.test.sh | 12 | for-loop glob expansion, recursive `**` |
157+
| globs.test.sh | 9 | for-loop glob expansion, recursive `**` |
145158
| headtail.test.sh | 14 | |
146-
| herestring.test.sh | 8 | 1 skipped |
147-
| hextools.test.sh | 5 | od/xxd/hexdump (3 skipped) |
159+
| heredoc.test.sh | 10 | heredoc variable expansion, quoted delimiters, file redirects, `<<-` tab strip |
160+
| heredoc-edge.test.sh | 15 | heredoc edge cases (6 skipped) |
161+
| herestring.test.sh | 8 | here-string `<<<` |
162+
| hextools.test.sh | 4 | od/xxd/hexdump (3 skipped) |
163+
| ln.test.sh | 5 | `ln -s`, `-f`, symlink creation |
164+
| nameref.test.sh | 14 | nameref variables (14 skipped) |
148165
| negative-tests.test.sh | 13 | error conditions |
149166
| nl.test.sh | 14 | line numbering |
150167
| nounset.test.sh | 7 | `set -u` unbound variable checks, `${var:-default}` nounset-aware |
168+
| parse-errors.test.sh | 18 | syntax error detection (13 skipped) |
151169
| paste.test.sh | 4 | line merging with `-s` serial and `-d` delimiter |
152170
| path.test.sh | 18 | basename, dirname, `realpath` canonical path resolution |
153171
| pipes-redirects.test.sh | 19 | includes stderr redirects |
154172
| printf.test.sh | 32 | format specifiers, array expansion, `-v` variable assignment, `%q` shell quoting |
155173
| procsub.test.sh | 6 | |
174+
| quote.test.sh | 35 | quoting edge cases (2 skipped) |
175+
| read-builtin.test.sh | 10 | `read` builtin, IFS splitting, `-r`, `-a` (array), `-n` (nchars), here-string |
176+
| script-exec.test.sh | 10 | script execution by path, $PATH search, exit codes |
177+
| seq.test.sh | 12 | `seq` numeric sequences, `-w`, `-s`, decrement, negative |
178+
| shell-grammar.test.sh | 23 | shell grammar edge cases |
156179
| sleep.test.sh | 6 | |
157-
| sortuniq.test.sh | 32 | sort and uniq, `-z` zero-terminated, `-m` merge |
158-
| source.test.sh | 21 | source/., function loading, PATH search, positional params |
180+
| sortuniq.test.sh | 32 | sort `-f`/`-n`/`-r`/`-u`/`-V`/`-t`/`-k`/`-s`/`-c`/`-h`/`-M`/`-m`/`-z`/`-o`, uniq `-c`/`-d`/`-u`/`-i`/`-f` |
181+
| source.test.sh | 19 | source/., function loading, PATH search, positional params |
182+
| string-ops.test.sh | 14 | string replacement (prefix/suffix anchored), `${var:?}`, case conversion |
183+
| subshell.test.sh | 13 | subshell execution (4 skipped) |
184+
| temp-binding.test.sh | 10 | temporary variable bindings `VAR=val cmd` |
159185
| test-operators.test.sh | 27 | file/string tests, `-nt`/`-ot`/`-ef` file comparisons |
186+
| textrev.test.sh | 14 | `tac` reverse line order, `rev` reverse characters, `yes` repeated output |
160187
| time.test.sh | 11 | Wall-clock only (user/sys always 0) |
161-
| timeout.test.sh | 17 | |
162-
| variables.test.sh | 97 | includes special vars, prefix env, PIPESTATUS, trap EXIT, `${var@Q}`, `\<newline>` line continuation, PWD/HOME/USER/HOSTNAME/BASH_VERSION/SECONDS, `set -x` xtrace, `shopt` builtin, nullglob, `set -o`/`set +o` display, `trap -p` |
163-
| wc.test.sh | 35 | word count (5 skipped) |
188+
| timeout.test.sh | 16 | |
164189
| type.test.sh | 15 | `type`, `which`, `hash` builtins |
165-
| declare.test.sh | 23 | `declare`/`typeset`, `-i`, `-r`, `-x`, `-a`, `-p`, `-n` nameref, `-l`/`-u` case conversion |
166-
| ln.test.sh | 5 | `ln -s`, `-f`, symlink creation |
167-
| eval-bugs.test.sh | 4 | regression tests for eval/script bugs |
168-
| script-exec.test.sh | 10 | script execution by path, $PATH search, exit codes |
169-
| seq.test.sh | 12 | `seq` numeric sequences, `-w`, `-s`, decrement, negative |
170-
| textrev.test.sh | 14 | `tac` reverse line order, `rev` reverse characters, `yes` repeated output |
171-
| heredoc.test.sh | 10 | heredoc variable expansion, quoted delimiters, file redirects, `<<-` tab strip |
172-
| string-ops.test.sh | 14 | string replacement (prefix/suffix anchored), `${var:?}`, case conversion |
173-
| read-builtin.test.sh | 10 | `read` builtin, IFS splitting, `-r`, `-a` (array), `-n` (nchars), here-string |
174-
| expr.test.sh | 13 | `expr` arithmetic, string ops, pattern matching, exit codes |
175-
| extglob.test.sh | 15 | `@()`, `?()`, `*()`, `+()`, `!()` extended globs |
176-
| dirstack.test.sh | 12 | `pushd`, `popd`, `dirs` directory stack operations |
190+
| unicode.test.sh | 17 | unicode handling (3 skipped) |
191+
| var-op-test.test.sh | 21 | variable operations (16 skipped) |
192+
| variables.test.sh | 97 | includes special vars, prefix env, PIPESTATUS, trap EXIT, `${var@Q}`, `\<newline>` line continuation, PWD/HOME/USER/HOSTNAME/BASH_VERSION/SECONDS, `set -x` xtrace, `shopt` builtin, nullglob, `set -o`/`set +o` display, `trap -p` |
193+
| wc.test.sh | 20 | word count |
194+
| word-split.test.sh | 39 | IFS word splitting (36 skipped) |
177195

178196
## Shell Features
179197

0 commit comments

Comments
 (0)