Add timeouts.
[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 include ../../Makefile.userprog
9
10 TIMEOUT = 60
11 PINTOSFLAGS += -v -T $(TIMEOUT)                                         \
12         $(foreach file,$(PUTFILES),-p $(file) -a $(notdir $(file)))
13 KERNELFLAGS += -q
14
15 PINTOS = pintos $(PINTOSOPTS) $(PINTOSFLAGS) -- $(KERNELFLAGS)
16
17 OUTPUTS = $(addsuffix .output,$(TESTS))
18 ERRORS = $(addsuffix .errors,$(TESTS))
19 RESULTS = $(addsuffix .result,$(TESTS))
20
21 clean::
22         rm -f $(OUTPUTS) $(ERRORS) $(RESULTS) 
23
24 grade:: results
25         $(SRCDIR)/tests/make-grade $(SRCDIR) $< $(GRADING_FILE) | tee $@
26
27 check:: results
28         @cat $<
29         @COUNT="`egrep '^(pass|FAIL) ' $< | wc -l`";            \
30         FAILURES="`egrep '^FAIL ' $< | wc -l`";                 \
31         if [ "$$FAILURES" = 0 ]; then                           \
32                 echo "All $$COUNT tests passed.";               \
33         else                                                    \
34                 echo "$$FAILURES of $$COUNT tests failed.";     \
35                 exit 1;                                         \
36         fi
37
38 results: $(RESULTS)
39         @for d in $(TESTS); do                                  \
40                 if echo PASS | cmp -s $$d.result -; then        \
41                         echo "pass $$d";                        \
42                 else                                            \
43                         echo "FAIL $$d";                        \
44                 fi;                                             \
45         done > $@
46
47 outputs:: $(OUTPUTS)
48
49 $(foreach prog,$(PROGS),$(eval $(prog).output: $(prog)))
50 $(foreach test,$(TESTS),$(eval $(test).output: $($(test)_PUTFILES)))
51 tests/%.output: RUNCMD = $(if $($*_ARGS),run '$(*F) $($*_ARGS)',run $(*F))
52 tests/%.output: RUNREDIR = 2>$*.errors $(if $(VERBOSE),|tee,>) $*.output
53 tests/%.output: RUNTEST = $(PINTOS) $(RUNCMD) $(RUNREDIR)
54 %.output: os.dsk
55         $(RUNTEST)
56
57 %.result: %.ck %.output
58         perl -I$(SRCDIR) $< $* $@