Plan 9 from Bell Labs’s /usr/web/sources/contrib/fernan/nhc98/src/libraries/fps/tests/Makefile

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


GHC=            ghc
GHCFLAGS=       -cpp -O2 -funbox-strict-fields -no-recomp -v0
PKG=            -i..
#PKG=            -package fps

#GHC=            /usr/obj/build/compiler/stage2/ghc-inplace
#PKG=            

BIN=            run-utests run-qtests

all:  prop prop-fusion-compiled prop-compiled prop-opt units-compiled
fast: prop-fast

everything: prop hugs prop-compiled prop-fusion-compiled runbench fusionbench wc spellcheck letter_frequency linesort fuse down-fuse inline zipwith unpack groupby run-lazybuild run-lazybuildcons

# ---------------------------------------------
# Boot in-place

.PHONY: boot-in-place

boot-in-place:
	cd .. && ${GHC} ${GHCFLAGS} --make Data/*hs Data/*/*hs Data/*/*/*hs

# ---------------------------------------------
# HUnit

# compiled
.PHONY: units-compiled
units-compiled:
	@echo "Compiled, rules off"
	${GHC} ${PKG} ${GHCFLAGS} -frules-off --make Units.hs -o u -package HUnit
	time ./u

# ---------------------------------------------
# QuickCheck

# interpreted
.PHONY: prop hugs
prop:: 
	@echo "Interpreted"	
	runhaskell ${PKG} Properties.hs

hugs::
	runhugs -98 Properties.hs

# interpreted fast. Just a quick check.
.PHONY: prop-fast
prop-fast::
	runhaskell ${PKG} Properties.hs 10

# compiled
.PHONY: prop-compiled
prop-compiled: 
	@echo "Compiled, rules off"	
	${GHC} ${PKG} ${GHCFLAGS} -frules-off --make Properties.hs -o p -package QuickCheck
	time ./p

# rules-on
.PHONY: prop-opt
prop-opt: 
	@echo "Compiled, rules on"	
	${GHC} ${PKG} ${GHCFLAGS} --make Properties.hs -o p -package QuickCheck
	time ./p

#
# test rewriting is correct and working.
#
.PHONY: prop-fusion-compiled
prop-fusion-compiled:
	${GHC} ${PKG} ${GHCFLAGS} --make FusionProperties.hs -o fp -package QuickCheck
	time ./fp

# ---------------------------------------------------------
# Benchmarking

.PHONY: runbench
runbench: bench
	./bench +RTS -H64m

bench::
	@if [ ! -f "bigdata" ] ; then ln -s data bigdata ; fi
	${GHC} ${PKG} ${GHCFLAGS} --make Bench.hs -o bench

fusionbench::
	${GHC} ${PKG} ${GHCFLAGS} --make FusionBench.hs -ddump-simpl-stats -o fusionbench

# ---------------------------------------------------------
# Profiling
.PHONY: prof

prof::
	@if [ ! -f "bigdata" ] ; then ln -s data bigdata ; fi
	${GHC} ${PKG} ${GHCFLAGS} -prof -auto-all --make Bench.hs -o bench
	./bench +RTS -H64m -p

fusionprof::
	@if [ ! -f "bigdata" ] ; then ln -s data bigdata ; fi
	${GHC} ${PKG} ${GHCFLAGS} -prof -auto-all --make FusionBench.hs -o fusionbench
	./bench +RTS -H64m -p

# ---------------------------------------------------------
# Small programs

wc: wc.o
	@if [ ! -f "bigdata" ] ; then ln -s data bigdata ; fi
	time ./wc bigdata
wc.o: wc.hs
	${GHC} ${PKG} ${GHCFLAGS} -ddump-simpl-stats wc.hs -o wc

spellcheck: spellcheck.o
	time ./spellcheck < spellcheck-input.txt
spellcheck.o: spellcheck.hs
	${GHC} ${PKG} ${GHCFLAGS} $< -o spellcheck

letter_frequency: letter_frequency.o
	time ./letter_frequency < Usr.Dict.Words
letter_frequency.o: letter_frequency.hs
	${GHC} ${PKG} ${GHCFLAGS}  $< -o letter_frequency -ddump-simpl-stats

linesort: linesort.o
	time ./linesort < Usr.Dict.Words
linesort.o: linesort.hs
	${GHC} ${PKG} ${GHCFLAGS} $< -o linesort

fuse: fuse.o
	time ./fuse < Usr.Dict.Words
fuse.o: fuse.hs
	${GHC} ${PKG} ${GHCFLAGS} $< -o fuse -ddump-simpl-stats

down-fuse: down-fuse.o
	time ./down-fuse
down-fuse.o: down-fuse.hs
	${GHC} ${PKG} ${GHCFLAGS} $< -o ./down-fuse -ddump-simpl-stats

.PHONY: run-lazybuild
run-lazybuild: lazybuild
	time ./lazybuild 100000000 > /dev/null
lazybuild: lazybuild.hs
	${GHC} ${PKG} ${GHCFLAGS} --make $< -o lazybuild

.PHONY: run-lazybuildcons
run-lazybuildcons: lazybuildcons
	time ./lazybuildcons 100000000 > /dev/null
lazybuildcons: lazybuildcons.hs
	${GHC} ${PKG} ${GHCFLAGS} --make $< -o lazybuildcons

lazylines: lazylines.o
	time ./lazylines < bigdata
lazylines.o: lazylines.hs
	${GHC} ${PKG} ${GHCFLAGS} $< -o lazylines

inline: inline.o
	time ./inline
inline.o: inline.hs
	${GHC} ${PKG} ${GHCFLAGS} $< -o inline

zipwith: zipwith.o
	time ./zipwith
zipwith.o: zipwith.hs
	${GHC} ${PKG} ${GHCFLAGS} -ddump-simpl-stats $< -o zipwith

unpack: unpack.o
	time ./unpack
unpack.o: unpack.hs
	${GHC} ${PKG} ${GHCFLAGS} -ddump-simpl-stats $< -o unpack

groupby: groupby.o
	time ./groupby
groupby.o: groupby.hs
	${GHC} ${PKG} ${GHCFLAGS} $< -o groupby

# ---------------------------------------------------
# Plotting graphs

results: bench
	./bench +RTS -H64m > results

.PHONY: plot
plot:: results
	echo -e 'set terminal png          \n \
             set output "results.png"  \n \
             set yrange [0:2]          \n \
             plot "results" using ($$1):($$2) with boxes, "" using ($$1):($$3) with boxes' |\
             gnuplot ;
	xv results.png    

# ---------------------------------------------------
# Cleaning

.PHONY: clean
clean:
	rm -f *~ *.o *.hi $(BIN) bench */*.o */*.hi */*~ 
	rm -f wc letter_frequency spellcheck linesort fuse inline p u fp lazylines lazybuild lazybuildcons
	rm -f down-fuse zipwith fusionbench unpack groupby

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].