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
60
61
|
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/waveletTree \
datastructures/test/fenwickTree \
datastructures/test/fenwickTree2 \
datastructures/test/treap2 \
datastructures/test/sparseTable \
datastructures/test/sparseTableDisjoint \
datastructures/test/monotonicConvexHull \
datastructures/test/persistent \
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)
|