--- /dev/null
+RM ?= rm -f
+
+results_dir := $(test_dir)/test-results
+trash_dir := $(test_dir)/trashes
+
+test_options := --executables-dir $(shell pwd)
+test_options += --results-dir $(results_dir)
+test_options += --trash-dir $(trash_dir)
+test_options += --executables "$(executables)"
+test_options += --objects "$(basename $(notdir $(all_objs)))"
+
+ifdef V
+ ifeq ("$(origin V)", "command line")
+ test_options += --verbose=$(V)
+ endif
+endif
+
+tests := $(wildcard $(test_dir)/t[0-9][0-9][0-9][0-9]-*.sh)
+
+test: $(tests)
+
+$(tests): all
+ $(Q) $@ $(test_options)
+
+test-help:
+ $(Q) for t in $(tests); do $$t $(test_options) -h; done
+
+test-clean:
+ $(RM) -r $(results_dir)
+ $(RM) -r $(trash_dir)
+
+.PHONY: $(tests) test-help