Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e028844825
|
||
|
|
f022121436
|
||
|
|
e278307daf
|
||
|
|
4ad9e0da92
|
||
|
|
0113cf793d
|
||
|
|
1aa2b596d0
|
||
|
|
c6f30c4195
|
||
|
|
3398fc372c
|
||
|
|
28f2d44e2f
|
||
|
|
aefa87d9e5
|
||
|
|
057f5571d6
|
||
|
|
e7021e127c
|
||
|
|
417d7ca405
|
||
|
|
f7a74dc430
|
||
|
|
cabe08bca4
|
||
|
|
c97201fca9
|
||
|
|
06fc461985
|
||
|
|
0d445c71f4
|
||
|
|
d45e3410f8
|
||
|
|
452a1295e6
|
+33
-13
@@ -90,26 +90,46 @@ notice:
|
|||||||
* USE OR OTHER DEALINGS IN THE SOFTWARE.
|
* USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
When writing code, make sure lines never exceed 80 characters in width when
|
Make sure lines never exceed 80 columns in width when using four-character
|
||||||
using four-character-wide indentation steps.
|
indentation steps. This helps contributors with smaller screens, those using
|
||||||
|
side-by-side editor windows or panes, and those who have no text wrapping in
|
||||||
|
their editor or terminal.
|
||||||
|
|
||||||
For usage text and help messages, please do not implement a -h option. Just
|
For usage text and help messages, do not implement a -h option. Instead, print
|
||||||
print usage information when any erroneous option is specified. Follow the
|
usage information when any erroneous option is specified. Follow the NetBSD
|
||||||
NetBSD style guide for usage text output format [1].
|
style guide for the usage text’s output format [0].
|
||||||
|
|
||||||
If committing a new source file for a utility, format the commit message like
|
If committing a new utility, please include tests and documentation (see
|
||||||
this:
|
tests/ and docs/) for the new tool.
|
||||||
|
|
||||||
$ git commit -m 'tool(1): <information>'
|
If committing a new source file, format the commit message following these
|
||||||
|
guidelines:
|
||||||
|
|
||||||
|
$ git commit -m 'tool(1): add feature x'
|
||||||
|
|
||||||
If committing a new library or header file:
|
If committing a new library or header file:
|
||||||
|
|
||||||
$ git commit -m 'library(1): <information>'
|
$ git commit -m 'library(3): fix overflow'
|
||||||
|
$ git commit -m 'header.h(3): add header.h(3)'
|
||||||
|
|
||||||
|
If committing a new manual page:
|
||||||
|
|
||||||
|
$ git commit -m 'tool.1: add author details'
|
||||||
|
|
||||||
If modifying some other file or directory:
|
If modifying some other file or directory:
|
||||||
|
|
||||||
$ git commit -m 'README: clarification'
|
$ git commit -m 'README: clarify'
|
||||||
$ git commit -m 'tests: posix: fixed bug #47'
|
$ git commit -m 'tests/posix: fix bug #47'
|
||||||
$ git commit -m 'docs: tool(1): added author information'
|
|
||||||
|
|
||||||
etc.
|
For multiple of these:
|
||||||
|
|
||||||
|
$ git commit -m 'Makefile, tool(1): add tool(1)'
|
||||||
|
$ git commit -m 'tool(1): add tool(1); library(3), library.3: add library(3)'
|
||||||
|
$ git commit -m 'tool(1): fix #42 & add feature x'
|
||||||
|
|
||||||
|
Commit messages should be written in the present tense.
|
||||||
|
|
||||||
|
[0] <http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/share/misc/style>
|
||||||
|
--
|
||||||
|
This work © 2023–2024 by Emma Tebibyte is licensed under CC BY-SA 4.0. To view a
|
||||||
|
copy of this license, visit <http://creativecommons.org/licenses/by-sa/4.0/>
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
PREFIX=/usr/local
|
PREFIX=/usr/local
|
||||||
|
|
||||||
CC=cc
|
CC=cc
|
||||||
|
MAKE=make
|
||||||
RUSTC=rustc
|
RUSTC=rustc
|
||||||
|
|
||||||
.PHONY: all
|
.PHONY: all
|
||||||
@@ -39,8 +40,8 @@ install: dist
|
|||||||
cp -r dist/* $(PREFIX)/
|
cp -r dist/* $(PREFIX)/
|
||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test: build
|
test: all
|
||||||
tests/posix-compat.sh
|
tests/test.sh
|
||||||
$(RUSTC) --test src/getopt-rs/lib.rs -o build/test/getopt
|
$(RUSTC) --test src/getopt-rs/lib.rs -o build/test/getopt
|
||||||
|
|
||||||
build/o/libsysexits.rlib: build
|
build/o/libsysexits.rlib: build
|
||||||
|
|||||||
Executable
+27
@@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 DTB <trinity@trinity.moe>
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
. tests/bonsai/test_env
|
||||||
|
|
||||||
|
! dj -h
|
||||||
|
|
||||||
|
# This test is theoretically Linux-dependent; write(2) should return -1 on
|
||||||
|
# error.
|
||||||
|
# Right now dj(1) interprets the return value of write(2) as the amount of
|
||||||
|
# bytes written. This can decrement the stored quantity of bytes written,
|
||||||
|
# which is an int, so doesn't underflow but goes negative. dj(1) tries to
|
||||||
|
# again to write(2) if an error occurs in which no bytes are written, so in
|
||||||
|
# total two write(2)s are attempted and so the written byte quantity is -2.
|
||||||
|
# This is a bug and will change, but for now is at least documented.
|
||||||
|
dj -Hi /dev/zero -o /dev/full \
|
||||||
|
| xargs -I out "$BIN/strcmp" '1+0 > 0+0; 1024 > -2' out
|
||||||
|
|
||||||
|
# Read nothing from /dev/null, write nothing to /dev/null.
|
||||||
|
dj -Hi /dev/null -o /dev/null \
|
||||||
|
| xargs -I out "$BIN/strcmp" '0+0 > 0+0; 0 > 0' out
|
||||||
Executable
+13
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 DTB <trinity@trinity.moe>
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
. tests/bonsai/test_env
|
||||||
|
|
||||||
|
! false
|
||||||
|
! false -h
|
||||||
Executable
+21
@@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
. tests/bonsai/test_env
|
||||||
|
|
||||||
|
! fop -h
|
||||||
|
|
||||||
|
"$BIN/strcmp" "$(printf 'test0␞test1␞test2\n' | fop 1 sed 's/1/4/g')" \
|
||||||
|
'test0␞test4␞test2'
|
||||||
|
|
||||||
|
"$BIN/strcmp" "$(printf 'test0 test1 test2\n' | fop -d' ' 2 sed 's/2/4/g')" \
|
||||||
|
'test0 test1 test4'
|
||||||
|
|
||||||
|
! printf 'test\n' | fop 1 cat
|
||||||
|
! printf 'test\n' | fop 'test' cat
|
||||||
|
! printf 'test\n' | fop -d'test' cat
|
||||||
Executable
+26
@@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
. tests/bonsai/test_env
|
||||||
|
|
||||||
|
alias strcmp="$BIN/strcmp"
|
||||||
|
alias rpn="$BIN/rpn"
|
||||||
|
|
||||||
|
strcmp "$(printf '1234\n' | hru)" '1.2 kB'
|
||||||
|
strcmp "$(printf '0\n' | hru)" '0 B'
|
||||||
|
|
||||||
|
# doesn’t currently work but would be useful for testing for regressions
|
||||||
|
#n=1
|
||||||
|
#while "$BIN/true"; do
|
||||||
|
# n="$(rpn "$n" 10 ×)"
|
||||||
|
#
|
||||||
|
# printf '%s\n' "$n" | hru || break
|
||||||
|
#done
|
||||||
|
#printf 'integer limit: ~%s\n' "$(rpn "$n" 10 ÷)"
|
||||||
|
|
||||||
|
! printf '%s\n' '-1' | hru
|
||||||
Executable
+25
@@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 DTB <trinity@trinity.moe>
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
. tests/bonsai/test_env
|
||||||
|
|
||||||
|
intcmp -e 3 3 3
|
||||||
|
intcmp -g 3 2 1
|
||||||
|
intcmp -l 1 2 3
|
||||||
|
intcmp -ge 3 3 1
|
||||||
|
intcmp -le 1 3 3
|
||||||
|
intcmp -gl 1 2 3
|
||||||
|
intcmp -egl 3 1 1 2
|
||||||
|
! intcmp -e 1 2 3
|
||||||
|
! intcmp -g 1 3 3
|
||||||
|
! intcmp -l 3 3 1
|
||||||
|
! intcmp -ge 1 2 3
|
||||||
|
! intcmp -le 3 2 1
|
||||||
|
! intcmp -gl 3 3 3
|
||||||
|
! intcmp -egl foo
|
||||||
Executable
+19
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
. tests/bonsai/test_env
|
||||||
|
|
||||||
|
exec 3>&1
|
||||||
|
|
||||||
|
! mm -h
|
||||||
|
|
||||||
|
# mm(1) will error if positional arguments are given without -i or -o
|
||||||
|
! mm argument
|
||||||
|
|
||||||
|
# check if stderr is empty upon specifying -e
|
||||||
|
! "$BIN/strcmp" "$(printf 'test\n' | mm -i - -e 2>&1 1>&3)" ''
|
||||||
Executable
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 DTB <trinity@trinity.moe>
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
. tests/bonsai/test_env
|
||||||
|
|
||||||
|
strcmp equals equals
|
||||||
|
! strcmp inequals equals
|
||||||
|
strcmp - -
|
||||||
|
strcmp -h
|
||||||
|
! strcmp nocmp
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
alias "$UTIL=$BIN/$UTIL"
|
||||||
Executable
+13
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 DTB <trinity@trinity.moe>
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
. tests/bonsai/test_env
|
||||||
|
|
||||||
|
true
|
||||||
|
true -h
|
||||||
Executable
+22
@@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
# Strictly POSIX-compliant cat(1) implementation. See cat(1p)
|
||||||
|
|
||||||
|
for arg in "$@"; do
|
||||||
|
case "$arg" in
|
||||||
|
-u) args="$(printf '%s %s\n' "$args" "$arg")" ;;
|
||||||
|
*) args="$(printf -- '%s -i %s\n' "$args" "$arg")" ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# See IEEE Std 1003.1-2017 3.282
|
||||||
|
# https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_282
|
||||||
|
IFS=' '
|
||||||
|
|
||||||
|
mm $args
|
||||||
Executable
+12
@@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 DTB <trinity@trinity.moe>
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
# Strictly POSIX-compliant false(1) implementation. See false(1p)
|
||||||
|
|
||||||
|
false "$@"
|
||||||
Executable
+11
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Copyright (c) 2024 DTB <trinity@trinity.moe>
|
||||||
|
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
|
||||||
|
# SPDX-License-Identifier: FSFAP
|
||||||
|
#
|
||||||
|
# Copying and distribution of this file, with or without modification, are
|
||||||
|
# permitted in any medium without royalty provided the copyright notice and this
|
||||||
|
# notice are preserved. This file is offered as-is, without any warranty.
|
||||||
|
|
||||||
|
# Strictly POSIX-compliant true(1) implementation. See true(1p)
|
||||||
|
true "$@"
|
||||||
@@ -9,16 +9,30 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
export BIN=build/bin
|
||||||
|
|
||||||
if ! ls Makefile >/dev/null 2>&1
|
if ! ls Makefile >/dev/null 2>&1
|
||||||
then
|
then
|
||||||
printf '%s: Run this script in the root of the project.\n' "$0" 1>&2
|
printf '%s: Run this script in the root of the project.\n' "$0" 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
printf "Starting POSIX compatibility testing.\n"
|
printf "Starting Bonsai testing.\n\n"
|
||||||
|
|
||||||
for utility in tests/posix/*; do
|
for script in tests/bonsai/*.sh; do
|
||||||
printf '%s: %s: Testing utility.\n' "$0" "$utility"
|
export UTIL="$(printf '%s\n' "$script" \
|
||||||
|
| sed -e 's/\.sh//g' -e 's;tests\/bonsai\/;;g')"
|
||||||
|
|
||||||
|
printf '%s: %s: Testing utility.\n' "$0" "$UTIL"
|
||||||
|
"$script"
|
||||||
|
printf '\n'
|
||||||
|
done
|
||||||
|
|
||||||
|
printf "Starting POSIX compatibility testing.\n\n"
|
||||||
|
|
||||||
|
for test in tests/posix/*.sh; do
|
||||||
|
export PATH="$BIN:$PATH"
|
||||||
|
printf '%s: %s: Testing utility.\n' "$0" "$test"
|
||||||
"$utility"
|
"$utility"
|
||||||
printf '\n'
|
printf '\n'
|
||||||
done
|
done
|
||||||
Reference in New Issue
Block a user