1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#!/bin/sh
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtrap 'rm $test.valgrind-errors; exit 1' INT QUIT
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgusage ()
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    cat <<EOF
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgUsage: glcpp [options...]
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgRun the test suite for mesa's GLSL pre-processor.
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgValid options include:
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	--valgrind	Run the test suite a second time under valgrind
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgEOF
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org# Parse command-line options
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgfor option; do
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    if [ "${option}" = '--help' ] ; then
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	usage
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	exit 0
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    elif [ "${option}" = '--valgrind' ] ; then
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	do_valgrind=yes
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    else
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	echo "Unrecognized option: $option" >&2
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	echo >&2
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	usage
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	exit 1
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    fi
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdone
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgtotal=0
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpass=0
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgclean=0
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgecho "====== Testing for correctness ======"
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgfor test in *.c; do
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    echo -n "Testing $test..."
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    ../glcpp < $test > $test.out 2>&1
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    total=$((total+1))
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    if cmp $test.expected $test.out >/dev/null 2>&1; then
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	echo "PASS"
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	pass=$((pass+1))
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    else
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	echo "FAIL"
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	diff -u $test.expected $test.out
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    fi
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgdone
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgecho ""
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgecho "$pass/$total tests returned correct results"
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgecho ""
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgif [ "$do_valgrind" = "yes" ]; then
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    echo "====== Testing for valgrind cleanliness ======"
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    for test in *.c; do
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	echo -n "Testing $test with valgrind..."
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	valgrind --error-exitcode=31 --log-file=$test.valgrind-errors ../glcpp < $test >/dev/null 2>&1
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	if [ "$?" = "31" ]; then
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	    echo "ERRORS"
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	    cat $test.valgrind-errors
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	else
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	    echo "CLEAN"
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	    clean=$((clean+1))
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	    rm $test.valgrind-errors
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org	fi
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    done
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    echo ""
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    echo "$pass/$total tests returned correct results"
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    echo "$clean/$total tests are valgrind-clean"
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgfi
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgif [ "$pass" = "$total" ] && [ "$do_valgrind" != "yes" ] || [ "$pass" = "$total" ]; then
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    exit 0
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgelse
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org    exit 1
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgfi
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
81