X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2FMakefile;h=c2f8b018d3ebec2830bc09b9281f542db64dd7e8;hb=09fa5c11aff62bd728d4fe8de28a7abaf252fed3;hp=456e083c81b17623978c9b9e15d94994d7479643;hpb=d69dae5ba3dd631654503f32886acc805b54315f;p=pintos-anon diff --git a/tests/Makefile b/tests/Makefile index 456e083..c2f8b01 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,4 +1,4 @@ -TESTS = threads p1-1 p1-2 list stdlib stdio userprog p2 vm filesys +TESTS = examples threads p1 userprog p2 vm p3 filesys p4 PATH := $(shell pwd)/../src/utils:$(PATH) @@ -13,101 +13,66 @@ check: clean: rm -rf $(TESTS) -SUBMAKEFLAGS = -s - -define prep-threads-grading -endef - -define prep-userprog-grading -$(MAKE) -C ../src/userprog $(SUBMAKEFLAGS) -$(MAKE) -C ../grading/userprog $(SUBMAKEFLAGS) +define mk-sandbox +rm -rf $@ && mkdir $@ && cp -R ../src $@/src +cd $@/src && $(MAKE) -s clean endef -define prep-vm-grading -$(MAKE) -C ../src/userprog $(SUBMAKEFLAGS) -$(MAKE) -C ../grading/vm $(SUBMAKEFLAGS) +define run-tests +cd $@/src/$(PROJECT) && time $(MAKE) check endef -define prep-filesys-grading -$(MAKE) -C ../grading/filesys $(SUBMAKEFLAGS) +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 -cd $@/pintos/src && $(MAKE) clean $(SUBMAKEFLAGS) -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) +(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) +PROJECT = $@ +p1: PROJECT = threads +p2: PROJECT = userprog +p3: PROJECT = vm +p4: PROJECT = filesys -p1-2: PROJECT = threads -p1-2:: +# Tests that just compile the provided code. +threads:: $(mk-sandbox) - $(apply-patch) < ../solutions/p1-2.patch - $(run-tests) -d priority.* + $(compile) + $(run-tests) TESTS=tests/threads/alarm-single + $(test-clean) $(clean) - -list: PROJECT = threads -list stdlib stdio:: +userprog vm filesys:: $(mk-sandbox) - cp ../src/tests/threads/$@.c $@/pintos/src/threads/test.c - $(MAKE) -C $@/pintos/src/threads $(SUBMAKEFLAGS) - -(cd $@/pintos/src/threads/build && pintos -v run -q) | tee $@/output - grep -q '$@: PASS' $@/output + $(compile) + $(test-clean) $(clean) - -userprog: PROJECT = userprog -userprog:: - $(prep-grading) null.dsk +examples:: $(mk-sandbox) - $(apply-patch) < ../solutions/p2-null.patch - $(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 $(SUBMAKEFLAGS) - $(clean) - -filesys: PROJECT = filesys -filesys:: - $(prep-grading) - $(mk-sandbox) - $(MAKE) -C $@/pintos/src/filesys $(SUBMAKEFLAGS) + $(grade-tests) + $(test-clean) $(clean)