X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pintos-anon;a=blobdiff_plain;f=src%2Ftests%2FMake.tests;h=358e69724b156b15dc98c76301367015ee3b6a59;hp=b7c143266b15c67fda7fad7c637b54297f9f7726;hb=a03618133f7df0954802a470a4bee7674f7aed45;hpb=615bf3b3d2a8573ed6fb9ddc0055745e163ac999 diff --git a/src/tests/Make.tests b/src/tests/Make.tests index b7c1432..358e697 100644 --- a/src/tests/Make.tests +++ b/src/tests/Make.tests @@ -4,59 +4,73 @@ 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)) -include ../../Makefile.userprog +OUTPUTS = $(addsuffix .output,$(TESTS) $(EXTRA_GRADES)) +ERRORS = $(addsuffix .errors,$(TESTS) $(EXTRA_GRADES)) +RESULTS = $(addsuffix .result,$(TESTS) $(EXTRA_GRADES)) -PINTOSFLAGS += -v $(foreach file,$(PUTFILES),-p $(file) -a $(notdir $(file))) -KERNELFLAGS += -q -PINTOS = pintos $(PINTOSOPTS) $(PINTOSFLAGS) -- $(KERNELFLAGS) +ifdef PROGS +include ../../Makefile.userprog +endif -OUTPUTS = $(addsuffix .output,$(TESTS)) -ERRORS = $(addsuffix .errors,$(TESTS)) -RESULTS = $(addsuffix .result,$(TESTS)) +TIMEOUT = 60 clean:: rm -f $(OUTPUTS) $(ERRORS) $(RESULTS) -grade:: ../rubric.txt results - @pass=; \ - for d in $(TESTS); do \ - if echo PASS | cmp -s $$d.result -; then \ - pass="$$pass $$d"; \ - fi \ - done; \ - $(SRCDIR)/tests/make-grade $< $$pass +grade:: results + $(SRCDIR)/tests/make-grade $(SRCDIR) $< $(GRADING_FILE) | tee $@ check:: results - @f=0; \ - n=0; \ - echo "Test summary:"; \ - for d in $(TESTS); do \ + @cat $< + @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"; \ - f=`expr $$f + 1`; \ fi; \ - n=`expr $$n + 1`; \ - done; \ - if [ $$f = 0 ]; then \ - echo "All $$n tests passed."; \ - else \ - echo "$$f of $$n tests failed."; \ - exit 1; \ - fi + done > $@ -results:: $(RESULTS) outputs:: $(OUTPUTS) $(foreach prog,$(PROGS),$(eval $(prog).output: $(prog))) $(foreach test,$(TESTS),$(eval $(test).output: $($(test)_PUTFILES))) -tests/%.output: RUNCMD = $(if $($*_ARGS),run '$(*F) $($*_ARGS)',run $(*F)) -tests/%.output: RUNREDIR = 2>$*.errors $(if $(VERBOSE),|tee,>) $*.output -tests/%.output: RUNTEST = $(PINTOS) $(RUNCMD) $(RUNREDIR) -%.output: os.dsk - $(RUNTEST) +$(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 += $(FILESYSSOURCE) +TESTCMD += $(foreach file,$(PUTFILES),-p $(file) -a $(notdir $(file))) +endif +ifeq ($(filter vm, $(KERNEL_SUBDIRS)), vm) +TESTCMD += --swap-size=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).output +%.output: kernel.bin loader.bin + $(TESTCMD) %.result: %.ck %.output perl -I$(SRCDIR) $< $* $@