aboutsummaryrefslogtreecommitdiffstats
path: root/gen_tests.sh
blob: bccad2c2850a60cf863ec1b5b38758c5a54b8ac7 (plain) (blame)
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
62
63
64
65
66
67
#!/bin/sh
# The road to hell is paved with Makefile generators.

TEST_TARGETS=""
GENERATED_OBJS=""

gen_test() {
	local NAME COLLECTOR TEST_IMPL DEPS OBJDEPS

	NAME=$1
	COLLECTOR=$2
	TEST_IMPL="$NAME.c"
	DEPS="$1.o uns.o $3"
	OBJDEPS="include/uns.h $1.c $4"

	printf '%s.o: %s\n' "$NAME" "$OBJDEPS"
	printf '%s_%s.test: %s\n' "$NAME" "$COLLECTOR" "$DEPS"
	printf '\t${CC} ${LDFLAGS} %s -o %s_%s.test\n' \
		"$DEPS" "$NAME" "$COLLECTOR"
	printf '\tvalgrind ./%s_%s.test\n' "$NAME" "$COLLECTOR"

	TEST_TARGETS=$(printf "%s %s_%s.test" "$TEST_TARGETS" "$NAME" "$COLLECTOR")
	GENERATED_OBJS="$GENERATED_OBJS $NAME.o"
}

gen_string_test() {
	local COLLECTOR DEPS OBJDEPS

	COLLECTOR=$1
	DEPS="$2 examples/test_$COLLECTOR.o examples/string/uns_string.o"
	OBJDEPS="examples/string/uns_string.h"

	gen_test 'examples/string/test_small' "$COLLECTOR" \
	         "$DEPS" "$OBJDEPS"

	gen_test 'examples/string/test_large' "$COLLECTOR" \
	         "$DEPS" "$OBJDEPS"

	gen_test 'examples/string/test_inefficient' "$COLLECTOR" \
	         "$DEPS" "$OBJDEPS"
}

gen_hashtable_test() {
	local COLLECTOR DEPS OBJDEPS

	COLLECTOR=$1
	DEPS="$2 examples/test_$COLLECTOR.o examples/hashtable/uns_hashtable.o"
	OBJDEPS="examples/hashtable/uns_hashtable.h examples/hashtable/testnames.h"

	gen_test 'examples/hashtable/test_insert' "$COLLECTOR" \
	         "$DEPS" "$OBJDEPS"

	gen_test 'examples/hashtable/test_insert_delete' "$COLLECTOR" \
	         "$DEPS" "$OBJDEPS"
}

gen_tests() {
	echo "examples/test_$1.o: include/uns.h $2"
	GENERATED_OBJS="$GENERATED_OBJS examples/test_$1.o"
	gen_string_test "$1" '${CHENEY_C89_OBJS}'
	gen_hashtable_test "$1" '${CHENEY_C89_OBJS}'
}

gen_tests cheney_c89 "include/cheney_c89.h"

printf "tests: %s\n" "$TEST_TARGETS"
printf 'clean_tests:\n\t${RM} -f %s %s\n' "$TEST_TARGETS" "$GENERATED_OBJS"