Add self-test.
[pintos-anon] / tests / Makefile
1 TESTS = threads p1-1 p1-2 p1-3 list stdlib userprog p2 vm filesys
2
3 check:
4         $(MAKE) -C .. distclean
5         for d in $(TESTS); do $(MAKE) $$d || exit 1; done
6         @echo All tests passed.
7
8 clean:
9         rm -rf $(TESTS)
10
11 define prep-threads-grading
12 endef
13
14 define prep-userprog-grading
15 $(MAKE) -C ../src/userprog -s
16 $(MAKE) -C ../grading/userprog -s
17 endef
18
19 define prep-vm-grading
20 $(MAKE) -C ../src/userprog -s
21 $(MAKE) -C ../grading/vm -s
22 endef
23
24 define prep-filesys-grading
25 $(MAKE) -C ../grading/filesys -s
26 endef
27
28 define prep-grading
29 $(prep-$(PROJECT)-grading)
30 endef
31
32 define mk-sandbox
33 rm -rf $@ && mkdir -p $@/pintos && cp -R ../src $@/pintos
34 endef
35
36 define run-tests
37 cd $@ && ../../grading/$(PROJECT)/run-tests
38 endef
39
40 define clean
41 rm -rf $@/pintos
42 endef
43
44 define apply-patch
45 (cd $@/pintos && patch -p0 -s) <
46 endef
47
48 threads: PROJECT = threads
49 threads::
50         $(mk-sandbox)
51         $(run-tests) -d alarm-single
52         $(clean)
53
54 p1-1: PROJECT = threads
55 p1-1::
56         $(mk-sandbox)
57         $(apply-patch) ../solutions/p1-1.patch
58         $(run-tests) -d alarm.*
59         $(clean)
60
61 p1-2: PROJECT = threads
62 p1-2::
63         $(mk-sandbox)
64         $(apply-patch) ../solutions/p1-2.patch
65         $(run-tests) -d join.*
66         $(clean)
67
68 p1-3: PROJECT = threads
69 p1-3::
70         $(mk-sandbox)
71         $(apply-patch) ../solutions/p1-3.patch
72         $(run-tests) -d priority.*
73         $(clean)
74
75 list: PROJECT = threads
76 list stdlib::
77         $(mk-sandbox)
78         cp ../src/tests/threads/$@.c $@/pintos/src/threads/test.c
79         $(MAKE) -C $@/pintos/src/threads -s
80         -(cd $@/pintos/src/threads/build && pintos -v run -q) | tee $@/output
81         grep -q '$@: PASS' $@/output && ! grep -q 'FAIL' $@/output
82         $(clean)
83
84 userprog: PROJECT = userprog
85 userprog::
86         $(prep-grading)
87         $(mk-sandbox)
88         $(apply-patch) ../solutions/p1-2.patch
89         echo '#define THREAD_JOIN_IMPLEMENTED 1' > $@/pintos/src/constants.h
90         $(run-tests) null
91         $(clean)
92
93 p2: PROJECT = userprog
94 p2::
95         $(prep-grading)
96         $(mk-sandbox)
97         $(apply-patch) ../solutions/p2.patch
98         $(run-tests)
99         $(clean)
100
101 vm: PROJECT = vm
102 vm::
103         $(prep-grading)
104         $(mk-sandbox)
105         $(MAKE) -C $@/pintos/src/vm -s
106         $(clean)
107
108 filesys: PROJECT = filesys
109 filesys::
110         $(prep-grading)
111         $(mk-sandbox)
112         $(MAKE) -C $@/pintos/src/filesys -s
113         $(clean)