aboutsummaryrefslogtreecommitdiffstats
path: root/src/tests/Make.tests
diff options
context:
space:
mode:
authorklaar36 <klas.arvidsson@liu.se>2015-03-20 17:30:24 +0100
committerklaar36 <klas.arvidsson@liu.se>2015-03-20 17:30:24 +0100
commite7bc50ca8ffcaa6ed68ebd2315f78b0f5a7d10ad (patch)
tree4de97af7207676b69cb6a9aba8cb443cc134855d /src/tests/Make.tests
parentb0418a24e709f0632d2ede5b0f327c422931939b (diff)
downloadpintos-rs-e7bc50ca8ffcaa6ed68ebd2315f78b0f5a7d10ad.tar.gz
Initial Pintos
Diffstat (limited to 'src/tests/Make.tests')
-rw-r--r--src/tests/Make.tests98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/tests/Make.tests b/src/tests/Make.tests
new file mode 100644
index 0000000..6880fdf
--- /dev/null
+++ b/src/tests/Make.tests
@@ -0,0 +1,98 @@
+# -*- makefile -*-
+
+include $(patsubst %,$(SRCDIR)/%/Make.tests,$(TEST_SUBDIRS))
+
+PROGS = $(foreach subdir,$(TEST_SUBDIRS),$($(subdir)_PROGS))
+TESTS = $(foreach subdir,$(TEST_SUBDIRS),$($(subdir)_TESTS))
+EXTRA_GRADES = $(foreach subdir,$(TEST_SUBDIRS),$($(subdir)_EXTRA_GRADES))
+
+ALLPUTS = $(addsuffix .allput,$(TESTS) $(EXTRA_GRADES))
+OUTPUTS = $(addsuffix .output,$(TESTS) $(EXTRA_GRADES))
+ERRORS = $(addsuffix .errors,$(TESTS) $(EXTRA_GRADES))
+RESULTS = $(addsuffix .result,$(TESTS) $(EXTRA_GRADES))
+
+ifdef PROGS
+include ../../Makefile.userprog
+endif
+
+TIMEOUT = 60
+
+clean::
+ rm -f $(OUTPUTS) $(ERRORS) $(RESULTS) $(ALLPUTS)
+
+grade:: results
+ $(SRCDIR)/tests/make-grade $(SRCDIR) $< $(GRADING_FILE) | tee $@
+
+# klaar@ida 2011-01-12: new rule to re-run only failed tests
+# use with care, it will mess with the file dates
+recheck:: os.dsk
+# @echo "Cleaning all tests that failed on last run:";
+ @for d in $(TESTS) $(EXTRA_GRADES); do \
+ if echo PASS | cmp -s $$d.result -; then \
+# echo "TOUCH $$d"; \
+ touch $$d.??????; \
+ else \
+# echo "CLEAN $$d"; \
+ rm -f $$d.??????; \
+ fi; \
+ done
+ @$(MAKE) check
+ @touch os.dsk
+ @echo "WARNING: Only failed tests was rerun on new version."
+
+check:: results
+ @cat results
+ @COUNT="`egrep '^(pass|FAIL) ' $< | wc -l | sed 's/[ ]//g;'`"; \
+ FAILURES="`egrep '^FAIL ' $< | wc -l | sed 's/[ ]//g;'`"; \
+ if [ $$FAILURES = 0 ]; then \
+ echo "All $$COUNT tests passed."; \
+ else \
+ echo "$$FAILURES of $$COUNT tests failed."; \
+ exit 1; \
+ fi
+
+results: $(RESULTS)
+ @for d in $(TESTS) $(EXTRA_GRADES); do \
+ if echo PASS | cmp -s $$d.result -; then \
+ echo "pass $$d"; \
+ else \
+ echo "FAIL $$d"; \
+ fi; \
+ done > $@
+
+outputs:: $(OUTPUTS)
+
+$(foreach prog,$(PROGS),$(eval $(prog).output: $(prog)))
+$(foreach test,$(TESTS),$(eval $(test).output: $($(test)_PUTFILES)))
+$(foreach test,$(TESTS),$(eval $(test).output: TEST = $(test)))
+
+# Prevent an environment variable VERBOSE from surprising us.
+VERBOSE =
+
+TESTCMD = pintos -v -k -T $(TIMEOUT)
+TESTCMD += $(SIMULATOR)
+TESTCMD += $(PINTOSOPTS)
+ifeq ($(filter userprog, $(KERNEL_SUBDIRS)), userprog)
+TESTCMD += --fs-disk=$(FSDISK)
+TESTCMD += $(foreach file,$(PUTFILES),-p $(file) -a $(notdir $(file)))
+endif
+ifeq ($(filter vm, $(KERNEL_SUBDIRS)), vm)
+TESTCMD += --swap-disk=4
+endif
+TESTCMD += -- -q
+TESTCMD += $(KERNELFLAGS)
+ifeq ($(filter userprog, $(KERNEL_SUBDIRS)), userprog)
+TESTCMD += -f
+endif
+TESTCMD += $(if $($(TEST)_ARGS),run '$(*F) $($(TEST)_ARGS)',run $(*F))
+TESTCMD += < /dev/null
+TESTCMD += 2> $(TEST).errors $(if $(VERBOSE),|tee,>) $(TEST).allput
+
+# klaar@ida 2011-01-12: added "allput" to be able to strip debug
+# messages before checking
+%.output: os.dsk
+ $(TESTCMD)
+ @grep -v '^# .*$$' $(TEST).allput > $(TEST).output
+
+%.result: %.ck %.output
+ perl -I$(SRCDIR) $< $* $@