fixed backtrace to work with -O (now conforms to
[pintos-anon] / tests / Makefile
index ce0399b2e0ca7a8cf078696e148550426ac39bea..c2f8b018d3ebec2830bc09b9281f542db64dd7e8 100644 (file)
@@ -1,4 +1,4 @@
-TESTS = threads p1 userprog p2 vm p3 filesys p4
+TESTS = examples threads p1 userprog p2 vm p3 filesys p4
 
 PATH := $(shell pwd)/../src/utils:$(PATH)
 
@@ -13,77 +13,66 @@ check:
 clean:
        rm -rf $(TESTS)
 
-SUBMAKEFLAGS = -s
-
 define mk-sandbox
 rm -rf $@ && mkdir $@ && cp -R ../src $@/src
-cd $@/src && $(MAKE) clean $(SUBMAKEFLAGS)
+cd $@/src && $(MAKE) -s clean
 endef
 
 define run-tests
-cd $@/src/$(PROJECT) && $(MAKE) check
+cd $@/src/$(PROJECT) && time $(MAKE) check
 endef
 
-define run-tests-grade
-cd $@/src/$(PROJECT) && $(MAKE) check
-cd $@/src/$(PROJECT) && $(MAKE) grade && grep -q PERFECT build/grade
+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 compile
 cd $@/src/$(PROJECT) && $(MAKE)
 endef
 
+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 $@
 endef
 
 define apply-patch
-(cd $@ && patch -p0)
+(cd $@ && patch -p0) < ../solutions/$@.patch
 endef
 
 PROJECT = $@
+p1: PROJECT = threads
+p2: PROJECT = userprog
+p3: PROJECT = vm
+p4: PROJECT = filesys
 
+# Tests that just compile the provided code.
 threads::
        $(mk-sandbox)
        $(compile)
        $(run-tests) TESTS=tests/threads/alarm-single
+       $(test-clean)
        $(clean)
-
 userprog vm filesys::
        $(mk-sandbox)
        $(compile)
+       $(test-clean)
        $(clean)
-
-FAST_SIM := $(if $(shell which qemu),--qemu)
-export PINTOSOPTS
-
-p1: PROJECT = threads
-p1::
+examples::
        $(mk-sandbox)
-       $(apply-patch) < ../solutions/p1.patch
-       $(run-tests-grade)
-       $(clean)
-
-p2: PROJECT = userprog
-p2: PINTOSOPTS = $(FAST_SIM)
-p2::
-       $(mk-sandbox)
-       $(apply-patch) < ../solutions/p2.patch
-       $(run-tests-grade)
-       $(clean)
-
-p3: PROJECT = vm
-p3: PINTOSOPTS = $(FAST_SIM)
-p3::
-       $(mk-sandbox)
-       $(apply-patch) < ../solutions/p3.patch
-       $(run-tests-grade)
+       $(compile)
        $(clean)
 
-p4: PROJECT = filesys
-p4: PINTOSOPTS = $(FAST_SIM)
-p4::
+# Tests for the reference solutions.
+p1 p2 p3 p4::
        $(mk-sandbox)
-       $(apply-patch) < ../solutions/p4.patch
-       $(run-tests-grade)
+       $(apply-patch)
+       $(run-tests)
+       $(grade-tests)
+       $(test-clean)
        $(clean)