95 lines
3.4 KiB
Makefile
Executable File
95 lines
3.4 KiB
Makefile
Executable File
#!/bin/sh
|
||
# Copyright (c) 2024 DTB <trinity@trinity.moe>
|
||
# Copyright (c) 2024–2025 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.
|
||
|
||
.PRAGMA: command_comment
|
||
|
||
.PHONY: npc_tests
|
||
npc_tests: npc_help npc_args npc_ascii
|
||
|
||
.PHONY: npc_help
|
||
npc_help: $(BIN)/npc
|
||
! $(BIN)/npc -h
|
||
|
||
.PHONY: npc_args
|
||
# arg parsing
|
||
npc_args:
|
||
$(BIN)/npc -e </dev/null
|
||
$(BIN)/npc -t </dev/null
|
||
$(BIN)/npc -et </dev/null
|
||
! $(BIN)/npc -et 5 </dev/null
|
||
|
||
.PHONY: npc_ascii
|
||
# Test 0x00 to 0x7f in input; in other words, the full 7b ASCII range.
|
||
npc_ascii: npc_ascii_controls npc_ascii_uppers # npc_ascii_symbols \
|
||
# npc_ascii_lowers
|
||
|
||
.PHONY: npc_ascii_controls
|
||
# (control characters)
|
||
npc_ascii_controls:
|
||
# The following test prints the bytes 0x00 (inclusive) through 0x20
|
||
# (exclusive) and pipes them through npc(1). npc(1) should then replace all
|
||
# non-printing, non-space (in the isspace(3p) sense) characters with their
|
||
# graphical carat-char counterparts (see the npc(1) man page). The head(1p)
|
||
# invocation then strips off everything past the first line (or past the
|
||
# first newline byte, 0x0A) and xargs(1p) is used to test(1p) the output
|
||
# against the known good answer.
|
||
|
||
# Immediately before that newline, 0x09 is printed - in ASCII, the
|
||
# horizontal tab. If xargs' -I option is used, tr(1p) should used to delete
|
||
# that tab. If the tab is left as part of input, OpenBSD's xargs(1)
|
||
# implementation has been observed to strip it along with the other
|
||
# trailing whitespace (the newline), but Busybox's and GNU's xargs(1)
|
||
# implementations have been observed to leave the tab in. All three
|
||
# implementations strip off the trailing tab if `-I` is not used. The POSIX
|
||
# specification for `-I` is ambiguous as to which behavior is correct.
|
||
# This comment is the result of much bewilderment and debugging.
|
||
|
||
# ASCII 0x00 to 0x0a (before the newline, due to xargs(1p) issues)
|
||
awk 'BEGIN{ for (i = 0; i < 32; ++i) printf("%c", i); }' \
|
||
| $(BIN)/npc \
|
||
| head -n 1 \
|
||
| xargs test "^@^A^B^C^D^E^F^G^H" =
|
||
|
||
# ASCII 0x0a (otherwise the head|tail sequence won't work) to 0x1f
|
||
awk 'BEGIN{ for (i = 0; i < 32; ++i) printf("%c", i); print }' \
|
||
| $(BIN)/npc \
|
||
| head -n 2 \
|
||
| tail -n 1 \
|
||
| xargs -I out test "^K^L^M^N^O^P^Q^R^S^T^U^V^W^X^Y^Z^[^\^]^^^_"
|
||
|
||
# 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)
|
||
npc_ascii_uppers:
|
||
awk 'BEGIN{ for (i = 64; i < 96; ++i) printf("%c", i); print }' \
|
||
| $(BIN)/npc \
|
||
| sed 's/\\/\\\\/' \
|
||
| xargs -I out test @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_ = out
|
||
|
||
# This test is broken and will need closer inspection along with the npc(1)
|
||
# source.
|
||
# .PHONY: npc_ascii_lowers
|
||
# # ASCII 0x60 to 0x7f (lowercases)
|
||
# npc_ascii_lowers:
|
||
# awk 'BEGIN{ for (i = 96; i < 128; ++i) printf("%c", i); print }' \
|
||
# | $(BIN)/npc \
|
||
# | xargs -I out test "\`abcdefghijklmnopqrstuvwxyz{|}~^?" = out
|