summaryrefslogtreecommitdiff
path: root/TestMakefile
blob: 5c468567be0171b4810c271afb533ea5eb28f09f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
with-defines-subsets = $(if $2,$(call with-defines-subsets,$1,$(call dropfirst,$2)) $(call with-defines-subsets,$1.$(firstword $2),$(call dropfirst,$2)),$1)
dropfirst = $(wordlist 2,$(words $1),$1)

source = $(dir $*)$(firstword $(subst ., ,$(notdir $*)))
flags = $(call dropfirst,$(subst ., -D,$(notdir $*))) $(CPPFLAGS)
predep = $(patsubst $(source)=%,%,$(filter $(source)=%,$(PREDEPS)))

TESTS := \
	$(call with-defines-subsets,datastructures/test/segmentTree,SEGTREE_MUL SEGTREE_INIT_DEFAULT SEGTREE_RANGE_UPDATE) \
	$(call with-defines-subsets,datastructures/test/segmentTree.SEGTREE_FIRST_NEG,SEGTREE_INIT_DEFAULT) \
	$(call with-defines-subsets,datastructures/test/lazyPropagation,SEGTREE_FIRST_NEG SEGTREE_INIT_DEFAULT) \
	$(call with-defines-subsets,datastructures/test/lazyPropagation.SEGTREE_MAX,SEGTREE_INIT_DEFAULT) \
	datastructures/test/fenwickTree \
	datastructures/test/fenwickTree2 \
	datastructures/test/monotonicConvexHull \
	datastructures/test/persistent \
	datastructures/test/sparseTable \
	datastructures/test/sparseTableDisjoint \
	graph/test/binary_lifting \
	graph/test/LCA_sparse \
	math/test/binomial0

# Dependencies which must be present before generating the .d file.
PREDEPS := \
	datastructures/test/segmentTree=datastructures/test/segmentTree.tmp.cpp \
	datastructures/test/lazyPropagation=datastructures/test/lazyPropagation.tmp.cpp

CPPFLAGS := -include test.h -std=gnu++20 -Wall -Wextra \
	-Werror -fsanitize=address,undefined -fno-sanitize-recover -g

test: $(TESTS:=.ok)

cleantest:
	rm -f $(TESTS:=.test) $(TESTS:=.ok) $(TESTS:=.d) \
		datastructures/test/segmentTree.tmp.cpp

%.ok: %.test
	timeout -v 2 ./$<
	@touch $@

.SECONDEXPANSION:
%.test: $$(source).cpp
	g++ $(flags) -o $@ $<

%.d: $$(source).cpp $$(predep)
	g++ -MM -MT '$*.test $*.d' -MF '$@' $(flags) $<

datastructures/test/segmentTree.tmp.cpp: datastructures/segmentTree.cpp \
	datastructures/test/segmentTree.awk
	awk -f datastructures/test/segmentTree.awk $< > $@
datastructures/test/lazyPropagation.tmp.cpp: \
	datastructures/lazyPropagation.cpp datastructures/test/lazyPropagation.awk
	awk -f datastructures/test/lazyPropagation.awk $< > $@

.PHONY: test cleantest
.SECONDARY: $(TESTS:=.test)

include $(TESTS:=.d)