6595b468eeb7c04d90def8f781396b89a650f8ee
[pintos-anon] / src / tests / Make.tests
1 # -*- makefile -*-
2
3 include $(patsubst %,$(SRCDIR)/%/Make.tests,$(TEST_SUBDIRS))
4
5 PROGS = $(foreach subdir,$(TEST_SUBDIRS),$($(subdir)_PROGS))
6 TESTS = $(foreach subdir,$(TEST_SUBDIRS),$($(subdir)_TESTS))
7
8 OUTPUTS = $(addsuffix .output,$(TESTS))
9 ERRORS = $(addsuffix .errors,$(TESTS))
10 RESULTS = $(addsuffix .result,$(TESTS))
11
12 ifdef PROGS
13 include ../../Makefile.userprog
14 endif
15
16 TIMEOUT = 60
17
18 clean::
19         rm -f $(OUTPUTS) $(ERRORS) $(RESULTS) 
20
21 grade:: results
22         $(SRCDIR)/tests/make-grade $(SRCDIR) $< $(GRADING_FILE) | tee $@
23
24 check:: results
25         @cat $<
26         @COUNT="`egrep '^(pass|FAIL) ' $< | wc -l | sed 's/[    ]//g;'`"; \
27         FAILURES="`egrep '^FAIL ' $< | wc -l | sed 's/[         ]//g;'`"; \
28         if [ $$FAILURES = 0 ]; then                                       \
29                 echo "All $$COUNT tests passed.";                         \
30         else                                                              \
31                 echo "$$FAILURES of $$COUNT tests failed.";               \
32                 exit 1;                                                   \
33         fi
34
35 results: $(RESULTS)
36         @for d in $(TESTS); do                                  \
37                 if echo PASS | cmp -s $$d.result -; then        \
38                         echo "pass $$d";                        \
39                 else                                            \
40                         echo "FAIL $$d";                        \
41                 fi;                                             \
42         done > $@
43
44 outputs:: $(OUTPUTS)
45
46 $(foreach prog,$(PROGS),$(eval $(prog).output: $(prog)))
47 $(foreach test,$(TESTS),$(eval $(test).output: $($(test)_PUTFILES)))
48 $(foreach test,$(TESTS),$(eval $(test).output: TEST = $(test)))
49
50 TESTCMD = pintos -v -k -T $(TIMEOUT)
51 TESTCMD += $(SIMULATOR)
52 TESTCMD += $(PINTOSOPTS)
53 ifeq ($(filter userprog, $(KERNEL_SUBDIRS)), userprog)
54 TESTCMD += --fs-disk=$(FSDISK)
55 TESTCMD += $(foreach file,$(PUTFILES),-p $(file) -a $(notdir $(file)))
56 endif
57 ifeq ($(filter vm, $(KERNEL_SUBDIRS)), vm)
58 TESTCMD += --swap-disk=4
59 endif
60 TESTCMD += -- -q 
61 TESTCMD += $(KERNELFLAGS)
62 ifeq ($(filter userprog, $(KERNEL_SUBDIRS)), userprog)
63 TESTCMD += -f
64 endif
65 TESTCMD += $(if $($(TEST)_ARGS),run '$(*F) $($(TEST)_ARGS)',run $(*F))
66 TESTCMD += < /dev/null
67 TESTCMD += 2> $(TEST).errors $(if $(VERBOSE),|tee,>) $(TEST).output
68 %.output: os.dsk
69         $(TESTCMD)
70
71 %.result: %.ck %.output
72         perl -I$(SRCDIR) $< $* $@