Implement a proper block layer with partition support.
[pintos-anon] / src / tests / Make.tests
index b7c143266b15c67fda7fad7c637b54297f9f7726..358e69724b156b15dc98c76301367015ee3b6a59 100644 (file)
@@ -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) $< $* $@