# Copyright (c) 2024 DTB # 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. BIN = build/bin MAKE = make -B DEFENDANTS = dj false intcmp strcmp true .PHONY: all $(DEFENDANTS) all: $(DEFENDANTS) $(BIN)/dj: $(MAKE) dj $(BIN)/false: $(MAKE) false $(BIN)/intcmp: $(MAKE) intcmp $(BIN)/strcmp $(MAKE) strcmp $(BIN)/true: $(MAKE) true dj: $(BIN)/dj $(BIN)/strcmp sh -c "! $(BIN)/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. sh -ec "\ $(BIN)/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. sh -ec "\ $(BIN)/dj -Hi /dev/null -o /dev/null \ | xargs -I out $(BIN)/strcmp '0+0 > 0+0; 0 > 0' out" false: $(BIN)/false sh -c "! $(BIN)/false" sh -c "! $(BIN)/false -h" intcmp: $(BIN)/intcmp 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 sh -c "! intcmp -e 1 2 3" sh -c "! intcmp -g 1 3 3" sh -c "! intcmp -l 3 3 1" sh -c "! intcmp -ge 1 2 3" sh -c "! intcmp -le 3 2 1" sh -c "! intcmp -gl 3 3 3" sh -c "! intcmp -egl foo" strcmp: $(BIN)/strcmp $(BIN)/strcmp equals equals sh -c "! $(BIN)/strcmp inequals equals" $(BIN)/strcmp - - sh -c "! $(BIN)/strcmp -h" sh -c "! $(BIN)/strcmp nocmp" true: $(BIN)/true $(BIN)/true -h