fixed backtrace to work with -O (now conforms to
[pintos-anon] / tests / Makefile
index b084e95bae2e72ef954c763a4ae968701472f100..c2f8b018d3ebec2830bc09b9281f542db64dd7e8 100644 (file)
@@ -1,4 +1,9 @@
-TESTS = threads p1-1 p1-2 p1-3 list stdlib userprog p2 vm filesys
+TESTS = examples threads p1 userprog p2 vm p3 filesys p4
+
+PATH := $(shell pwd)/../src/utils:$(PATH)
+
+all:
+       @echo "This Makefile has only \`check' targets."
 
 check:
        $(MAKE) -C .. distclean
@@ -8,106 +13,66 @@ check:
 clean:
        rm -rf $(TESTS)
 
-define prep-threads-grading
-endef
-
-define prep-userprog-grading
-$(MAKE) -C ../src/userprog -s
-$(MAKE) -C ../grading/userprog -s
+define mk-sandbox
+rm -rf $@ && mkdir $@ && cp -R ../src $@/src
+cd $@/src && $(MAKE) -s clean
 endef
 
-define prep-vm-grading
-$(MAKE) -C ../src/userprog -s
-$(MAKE) -C ../grading/vm -s
+define run-tests
+cd $@/src/$(PROJECT) && time $(MAKE) check
 endef
 
-define prep-filesys-grading
-$(MAKE) -C ../grading/filesys -s
+define grade-tests
+cd $@/src/$(PROJECT) && $(MAKE) grade
+cd $@/src/$(PROJECT) && grep -q PERFECT build/grade
+cd $@/src/$(PROJECT) && grep -qv warning build/grade
 endef
 
-define prep-grading
-$(prep-$(PROJECT)-grading)
+define compile
+cd $@/src/$(PROJECT) && $(MAKE)
 endef
 
-define mk-sandbox
-rm -rf $@ && mkdir -p $@/pintos && cp -R ../src $@/pintos
-endef
-
-define run-tests
-cd $@ && ../../grading/$(PROJECT)/run-tests
+define test-clean
+cd $@/src/$(PROJECT)/build && $(MAKE) clean
+cd $@/src/$(PROJECT)/build && set `find -type f` > /dev/null && test $$# = 1
 endef
 
 define clean
-rm -rf $@/pintos
+rm -rf $@
 endef
 
 define apply-patch
-(cd $@/pintos && patch -p0 -s) <
+(cd $@ && patch -p0) < ../solutions/$@.patch
 endef
 
-threads: PROJECT = threads
-threads::
-       $(mk-sandbox)
-       $(run-tests) -d alarm-single
-       $(clean)
-
-p1-1: PROJECT = threads
-p1-1::
-       $(mk-sandbox)
-       $(apply-patch) ../solutions/p1-1.patch
-       $(run-tests) -d alarm.*
-       $(clean)
-
-p1-2: PROJECT = threads
-p1-2::
-       $(mk-sandbox)
-       $(apply-patch) ../solutions/p1-2.patch
-       $(run-tests) -d join.*
-       $(clean)
+PROJECT = $@
+p1: PROJECT = threads
+p2: PROJECT = userprog
+p3: PROJECT = vm
+p4: PROJECT = filesys
 
-p1-3: PROJECT = threads
-p1-3::
+# Tests that just compile the provided code.
+threads::
        $(mk-sandbox)
-       $(apply-patch) ../solutions/p1-3.patch
-       $(run-tests) -d priority.*
+       $(compile)
+       $(run-tests) TESTS=tests/threads/alarm-single
+       $(test-clean)
        $(clean)
-
-list: PROJECT = threads
-list stdlib::
+userprog vm filesys::
        $(mk-sandbox)
-       cp ../src/tests/threads/$@.c $@/pintos/src/threads/test.c
-       $(MAKE) -C $@/pintos/src/threads -s
-       -(cd $@/pintos/src/threads/build && pintos -v run -q) | tee $@/output
-       grep -q '$@: PASS' $@/output && ! grep -q 'FAIL' $@/output
+       $(compile)
+       $(test-clean)
        $(clean)
-
-userprog: PROJECT = userprog
-userprog::
-       $(prep-grading)
+examples::
        $(mk-sandbox)
-       $(apply-patch) ../solutions/p1-2.patch
-       echo '#define THREAD_JOIN_IMPLEMENTED 1' > $@/pintos/src/constants.h
-       $(run-tests) null
+       $(compile)
        $(clean)
 
-p2: PROJECT = userprog
-p2::
-       $(prep-grading)
+# Tests for the reference solutions.
+p1 p2 p3 p4::
        $(mk-sandbox)
-       $(apply-patch) ../solutions/p2.patch
+       $(apply-patch)
        $(run-tests)
-       $(clean)
-
-vm: PROJECT = vm
-vm::
-       $(prep-grading)
-       $(mk-sandbox)
-       $(MAKE) -C $@/pintos/src/vm -s
-       $(clean)
-
-filesys: PROJECT = filesys
-filesys::
-       $(prep-grading)
-       $(mk-sandbox)
-       $(MAKE) -C $@/pintos/src/filesys -s
+       $(grade-tests)
+       $(test-clean)
        $(clean)