10 Commits

26 changed files with 76 additions and 114 deletions

View File

@@ -62,7 +62,12 @@ dist: all docs
install: dist
cp -r $(DESTDIR)/* /
include tests/tests.mk
TESTFILES != for file in tests/*.mk; do printf '%s ' "$$file"; done
TESTS != printf '%s\n' "$(TESTFILES)" | xargs -n1 basename \
| sed 's/\.mk/_tests/g'
include $(TESTFILES)
.PHONY: test
test: all $(TESTS) /tmp/getopt
@@ -114,7 +119,7 @@ build/bin/false: src/false.c build
.PHONY: fileis
fileis: build/bin/fileis
build/bin/fileis: src/fileis.rs build
build/bin/fileis: src/fileis.rs build rustlibs
$(RUSTC) $(RUSTFLAGS) $(RUSTLIBS) -o $@ src/fileis.rs
.PHONY: fop

View File

@@ -4,7 +4,12 @@
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\"
.TH DJ 1 2024-07-14 "Harakit X.X.X"
.TH DJ 1 2024-10-02 "Harakit X.X.X"
.SH PROLOGUE
\(lqSpin that track, catboy.\(rq
\(en DTB
.\"
.SH NAME
dj \(en disk jockey
.\"

View File

@@ -4,7 +4,15 @@
.\" This work is licensed under CC BY-SA 4.0. To see a copy of this license,
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\"
.TH FALSE 1 2024-06-06 "Harakit X.X.X"
.TH FALSE 1 2024-10-02 "Harakit X.X.X"
.SH PROLOGUE
\(lqA monk asked Joshu, a Chinese Zen master: \(oqHas a dog Buddha-nature or
not?\(cq
Joshu answered: \(oqMu.\(cq\(rq
\(en Mumon, The Gateless Gate, trans. Nyogen Senzaki & Paul Reps
.\"
.SH NAME
false \(en do nothing, unsuccessfully
.\"
@@ -15,7 +23,7 @@ always be returned.
.\"
.SH RATIONALE
In POSIX.1-2017,
In POSIX.1-2024,
.BR false (1p)
exists for the construction of control flow and loops based on a failure. This
implementation functions as described in that standard.

View File

@@ -5,6 +5,10 @@
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\"
.TH FOP 1 2024-06-17 "Harakit X.X.X"
.SH PROLOGUE
\(lqTwist it! Pull it! [Fop] it!\(rq
\(en \fIBop It\fP
.SH NAME
fop \(en field operator
.\"

View File

@@ -4,6 +4,13 @@
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\"
.TH HRU 1 2024-06-17 "Harakit X.X.X"
.SH PROLOGUE
\(lq\(oqHuman rights.\(cq Even the name is racist. The Federation is basically a
\fIhomo sapiens\fP-only club...\(rq
\(en Azetbur, daughter of Chancellor Gorkon, \fIStar Trek VI: The Undiscovered
Country\fP
.\"
.SH NAME
hru \(en human readable units
.\"

View File

@@ -5,6 +5,11 @@
.\" visit <http://creativecommons.org/licenses/by-sa/4.0/>.
.\"
.TH TRUE 1 2024-06-06 "Harakit X.X.X"
.SH PROLOGUE
\(lqThe truth is one, there is no second about which a person who knows it would
argue with one who knows.\(rq
\(en The Buddha, Sutta Nip\[u0101]ta, trans. \[u1E6C]h\[u0101]nissaro Bhikkhu
.SH NAME
true \(en do nothing, successfully
.\"
@@ -15,7 +20,7 @@ always be returned.
.\"
.SH RATIONALE
In \fIPOSIX.1-2017\fP,
In \fIPOSIX.1-2024\fP,
.BR true (1p)
exists for the construction of control flow and loops based on a success. This
implementation functions as described in that standard.

View File

@@ -1,24 +1,13 @@
The testing suite contains two trees: the Bonsai tree and the POSIX tree:
Tests
=====
.
├── README
├── bonsai/
│   ├── dj.mk
│   ├── false.mk
│   ├── fop.mk
│   └── ...
├── posix/
└── tests.mk
The Harakit testing suite verifies the functionality of Harakit utilities
and checks for regressions and other issues relating to compliance to our
standards of practice.
The Bonsai tree tests the functionality of Harakit utilities for regressions and
other issues relating to compliance to our standards of practice.
The POSIX tests are currently a work-in-progress. Their status in this
repository is uncertain.
Both sets of tests also inherit the environment set by the top-level Makefile,
which sets the BIN variable to the build/bin directory at the root of the
project; therefore, each binary is located at $(BIN)/tool for idiomatic access.
Tests inherit the environment set by the top-level Makefile, which sets the BIN
variable to the build/bin directory at the root of the project; therefore, each
binary is located at $(BIN)/tool for idiomatic access.
Each test contains a set of PHONY targets which are prefixed with the name of
the tool being tested and an underscore. The first target is tests, which
@@ -27,10 +16,10 @@ included in the top Makefile, so they can be called from the root of the
repository. This also means that BIN can be set manually so that tests can be
run using make(1) inside of the tests directory:
$ make -f tests.mk BIN=../build/bin dj_tests
$ make -f dj.mk BIN=../build/bin dj_tests
--
Copyright © 2024 Emma Tebibyte <emma@tebibyte.media>
Copyright © 20242025 Emma Tebibyte <emma@tebibyte.media>
This work is licensed under CC BY-SA 4.0. To view a copy of this license, visit
<http://creativecommons.org/licenses/by-sa/4.0/>.

View File

@@ -8,20 +8,20 @@
.PRAGMA: command_comment
.PHONY: scrut_tests
scrut_tests: scrut_help scrut_options
.PHONY: fileis_tests
fileis_tests: fileis_help fileis_options
.PHONY: scrut_help
scrut_help: $(BIN)/scrut
! $(BIN)/scrut -h
.PHONY: fileis_help
fileis_help: $(BIN)/fileis
! $(BIN)/fileis -h
.PHONY: scrut_options
# scrut tests file attributes, but files of a certain attribute aren't
.PHONY: fileis_options
# fileis tests file attributes, but files of a certain attribute aren't
# guaranteed to be present on a system. This test checks all of the files in
# harakit and, if test(1p) says a file matches a certain attribute, then checks
# scrut.
# fileis.
# opts are space-delimited (for command splitting), sel is not
scrut_options: $(BIN)/scrut
fileis_options: $(BIN)/fileis
set -e; \
opts="b c d e f g k p r s u w x L S"; \
sel=; \
@@ -30,12 +30,12 @@ scrut_options: $(BIN)/scrut
for opt in $$opts; \
do if ! printf "%s\n" $$sel | grep $$opt >/dev/null; then \
if test -$$opt "$$f"; then \
if ! $(BIN)/scrut -$$opt "$$f"; \
then printf "[!!] scrut -%s failed on %s.\n" \
if ! $(BIN)/fileis -$$opt "$$f"; \
then printf "[!!] fileis -%s failed on %s.\n" \
$$opt "$$f"; \
fi; \
sel="$$sel$$opt"; \
printf "[OK] Tested scrut -%s using %s\n" \
printf "[OK] Tested fileis -%s using %s\n" \
$$opt "$$f"; \
fi; \
fi; \

View File

@@ -1,6 +1,6 @@
#!/bin/sh
# Copyright (c) 2024 DTB <trinity@trinity.moe>
# Copyright (c) 2024 Emma Tebibyte <emma@tebibyte.media>
# Copyright (c) 20242025 Emma Tebibyte <emma@tebibyte.media>
# SPDX-License-Identifier: FSFAP
#
# Copying and distribution of this file, with or without modification, are
@@ -26,7 +26,7 @@ npc_args:
.PHONY: npc_ascii
# Test 0x00 to 0x7f in input; in other words, the full 7b ASCII range.
npc_ascii: npc_ascii_controls npc_ascii_symbols npc_ascii_uppers # \
npc_ascii: npc_ascii_controls npc_ascii_uppers # npc_ascii_symbols \
# npc_ascii_lowers
.PHONY: npc_ascii_controls
@@ -63,14 +63,18 @@ npc_ascii_controls:
| tail -n 1 \
| xargs -I out test "^K^L^M^N^O^P^Q^R^S^T^U^V^W^X^Y^Z^[^\^]^^^_"
.PHONY: npc_ascii_symbols
# ASCII 0x1f to 0x3f (^_ and symbols)
npc_ascii_symbols:
# shell quoting olympics
awk 'BEGIN{ for (i = 31; i < 64; ++i) printf("%c", i); print }' \
| $(BIN)/npc \
| sed -e s"/\'/\\\'/g" -e 's/"/\\"/g' \
| xargs -I out test "^_ !\"#$$%&'()*+,-./0123456789:;<=>?" = out
# This test is broken on Linux and will need closer inspection along with GNU
# xargs(1).
# .PHONY: npc_ascii_symbols
# # ASCII 0x1f to 0x3f (^_ and symbols)
# npc_ascii_symbols:
# # shell quoting olympics
# c="$(awk 'BEGIN{ for (i = 31; i < 64; ++i) printf("%c", i); print }')"
#
# printf '%s\n' "$c" | $(BIN)/npc \
# | sed -e s"/\'/\\\'/g" -e 's/"/\\"/g' \
# | tr -d '\n' \
# | xargs -I out test "^_ !\"#$$%&\'()*+,-./0123456789:;<=>?" = out
.PHONY: npc_ascii_uppers
# ASCII 0x40 to 0x5f (uppercases)

View File

@@ -1,22 +0,0 @@
#!/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

View File

@@ -1,12 +0,0 @@
#!/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 "$@"

View File

@@ -1,11 +0,0 @@
#!/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 "$@"

View File

@@ -1,5 +0,0 @@
#!/bin/sh
set -ex
PATH="$PWD/bin:$PATH"

View File

@@ -1,15 +0,0 @@
# 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.
#TESTFILES != for file in tests/bonsai/*.mk tests/posix/*.mk; do printf '%s ' "$$file"; done;
TESTFILES != for file in tests/bonsai/*.mk; do printf '%s ' "$$file"; done;
TESTS != printf '%s\n' "$(TESTFILES)" | xargs -n1 basename \
| sed 's/\.mk/_tests/g'
include $(TESTFILES)