xref: /freebsd/contrib/libdiff/test/verify_all.sh (revision 59c8e88e)
1*59c8e88eSDag-Erling Smørgrav#!/bin/sh
2*59c8e88eSDag-Erling Smørgrav
3*59c8e88eSDag-Erling Smørgravdiff_prog="../diff/obj/diff"
4*59c8e88eSDag-Erling Smørgravif [ ! -x $diff_prog ]; then
5*59c8e88eSDag-Erling Smørgrav	diff_prog="../diff/diff"
6*59c8e88eSDag-Erling Smørgravfi
7*59c8e88eSDag-Erling Smørgrav
8*59c8e88eSDag-Erling Smørgrav# At present, test015 only passes with GNU patch.
9*59c8e88eSDag-Erling Smørgrav# Larry's patch has a bug with empty files in combination with -R...
10*59c8e88eSDag-Erling Smørgravif command -v gpatch >/dev/null 2>&1; then
11*59c8e88eSDag-Erling Smørgrav	patch_prog="gpatch"
12*59c8e88eSDag-Erling Smørgravelse
13*59c8e88eSDag-Erling Smørgrav	patch_prog="patch"
14*59c8e88eSDag-Erling Smørgravfi
15*59c8e88eSDag-Erling Smørgrav
16*59c8e88eSDag-Erling Smørgravdiff_type=unidiff
17*59c8e88eSDag-Erling Smørgrav
18*59c8e88eSDag-Erling Smørgravrm -f errors
19*59c8e88eSDag-Erling Smørgrav
20*59c8e88eSDag-Erling Smørgravverify_diff_script() {
21*59c8e88eSDag-Erling Smørgrav	orig_left="$1"
22*59c8e88eSDag-Erling Smørgrav	orig_right="$2"
23*59c8e88eSDag-Erling Smørgrav	the_diff="$3"
24*59c8e88eSDag-Erling Smørgrav	expected_diff="$4"
25*59c8e88eSDag-Erling Smørgrav	diff_opts="$5"
26*59c8e88eSDag-Erling Smørgrav
27*59c8e88eSDag-Erling Smørgrav	if echo -- $diff_opts | grep -q -- 'w'; then
28*59c8e88eSDag-Erling Smørgrav		ignore_whitespace="true"
29*59c8e88eSDag-Erling Smørgrav	else
30*59c8e88eSDag-Erling Smørgrav		ignore_whitespace=""
31*59c8e88eSDag-Erling Smørgrav	fi
32*59c8e88eSDag-Erling Smørgrav
33*59c8e88eSDag-Erling Smørgrav	if echo -- $diff_opts | grep -q -- 'e'; then
34*59c8e88eSDag-Erling Smørgrav		is_edscript="true"
35*59c8e88eSDag-Erling Smørgrav	else
36*59c8e88eSDag-Erling Smørgrav		is_edscript=""
37*59c8e88eSDag-Erling Smørgrav	fi
38*59c8e88eSDag-Erling Smørgrav
39*59c8e88eSDag-Erling Smørgrav	verify_left="verify.$orig_left"
40*59c8e88eSDag-Erling Smørgrav	verify_right="verify.$orig_right"
41*59c8e88eSDag-Erling Smørgrav
42*59c8e88eSDag-Erling Smørgrav        if [ -e "$expected_diff" ]; then
43*59c8e88eSDag-Erling Smørgrav		echo cmp "$got_diff" "$expected_diff"
44*59c8e88eSDag-Erling Smørgrav                if ! cmp "$got_diff" "$expected_diff" ; then
45*59c8e88eSDag-Erling Smørgrav                        echo "FAIL: $got_diff != $expected_diff" | tee -a errors
46*59c8e88eSDag-Erling Smørgrav                        return 1
47*59c8e88eSDag-Erling Smørgrav                fi
48*59c8e88eSDag-Erling Smørgrav	fi
49*59c8e88eSDag-Erling Smørgrav        if [ -z "$ignore_whitespace" -a -z "$is_edscript" -a "x$diff_type" = "xunidiff" ]; then
50*59c8e88eSDag-Erling Smørgrav                cp "$orig_left" "$verify_right"
51*59c8e88eSDag-Erling Smørgrav                $patch_prog --quiet -u "$verify_right" "$the_diff"
52*59c8e88eSDag-Erling Smørgrav                if ! cmp "$orig_right" "$verify_right" ; then
53*59c8e88eSDag-Erling Smørgrav                        echo "FAIL: $orig_right != $verify_right" | tee -a errors
54*59c8e88eSDag-Erling Smørgrav                        return 1
55*59c8e88eSDag-Erling Smørgrav                fi
56*59c8e88eSDag-Erling Smørgrav
57*59c8e88eSDag-Erling Smørgrav                cp "$orig_right" "$verify_left"
58*59c8e88eSDag-Erling Smørgrav                $patch_prog --quiet -u -R "$verify_left" "$the_diff"
59*59c8e88eSDag-Erling Smørgrav                if ! cmp "$orig_left" "$verify_left" ; then
60*59c8e88eSDag-Erling Smørgrav                        echo "FAIL: $orig_left != $verify_left" | tee -a errors
61*59c8e88eSDag-Erling Smørgrav                        return 1
62*59c8e88eSDag-Erling Smørgrav                fi
63*59c8e88eSDag-Erling Smørgrav        elif [ -z "$ignore_whitespace" -a -z "$is_edscript" ]; then
64*59c8e88eSDag-Erling Smørgrav                tail -n +3 "$the_diff" | grep -v "^+" | sed 's/^.//' > "$verify_left"
65*59c8e88eSDag-Erling Smørgrav                tail -n +3 "$the_diff" | grep -v "^-" | sed 's/^.//' > "$verify_right"
66*59c8e88eSDag-Erling Smørgrav
67*59c8e88eSDag-Erling Smørgrav                if ! cmp "$orig_left" "$verify_left" ; then
68*59c8e88eSDag-Erling Smørgrav                        echo "FAIL: $orig_left != $verify_left" | tee -a errors
69*59c8e88eSDag-Erling Smørgrav                        return 1
70*59c8e88eSDag-Erling Smørgrav                fi
71*59c8e88eSDag-Erling Smørgrav                if ! cmp "$orig_right" "$verify_right" ; then
72*59c8e88eSDag-Erling Smørgrav                        echo "FAIL: $orig_right != $verify_right" | tee -a errors
73*59c8e88eSDag-Erling Smørgrav                        return 1
74*59c8e88eSDag-Erling Smørgrav                fi
75*59c8e88eSDag-Erling Smørgrav        fi
76*59c8e88eSDag-Erling Smørgrav        echo "OK: $diff_prog $orig_left $orig_right"
77*59c8e88eSDag-Erling Smørgrav        return 0
78*59c8e88eSDag-Erling Smørgrav}
79*59c8e88eSDag-Erling Smørgrav
80*59c8e88eSDag-Erling Smørgravfor left in test*.left* ; do
81*59c8e88eSDag-Erling Smørgrav        right="$(echo "$left" | sed 's/\.left/\.right/')"
82*59c8e88eSDag-Erling Smørgrav        diff_opts="$(echo "$left" | sed 's/test[0-9]*\.left\([-a-zA-Z0-9]*\).txt/\1/')"
83*59c8e88eSDag-Erling Smørgrav        expected_diff="$(echo "$left" | sed 's/test\([-0-9a-zA-Z]*\)\..*/expect\1.diff/')"
84*59c8e88eSDag-Erling Smørgrav        got_diff="verify.$expected_diff"
85*59c8e88eSDag-Erling Smørgrav
86*59c8e88eSDag-Erling Smørgrav        "$diff_prog" $diff_opts "$left" "$right" > "$got_diff"
87*59c8e88eSDag-Erling Smørgrav
88*59c8e88eSDag-Erling Smørgrav	verify_diff_script "$left" "$right" "$got_diff" "$expected_diff" "$diff_opts"
89*59c8e88eSDag-Erling Smørgravdone
90*59c8e88eSDag-Erling Smørgrav
91*59c8e88eSDag-Erling Smørgrav# XXX required to keep GNU make completely silent during 'make regress'
92*59c8e88eSDag-Erling Smørgravif make -h 2>/dev/null |  grep -q no-print-directory; then
93*59c8e88eSDag-Erling Smørgrav	make_opts="--no-print-directory"
94*59c8e88eSDag-Erling Smørgravfi
95*59c8e88eSDag-Erling Smørgravfor ctest in *_test.c ; do
96*59c8e88eSDag-Erling Smørgrav	prog="$(echo "$ctest" | sed 's/.c//')"
97*59c8e88eSDag-Erling Smørgrav	expect_output="expect.${prog}"
98*59c8e88eSDag-Erling Smørgrav	prog_output="verify.$expect_output"
99*59c8e88eSDag-Erling Smørgrav	make $make_opts -s -C "$prog" regress > "$prog_output"
100*59c8e88eSDag-Erling Smørgrav	if ! cmp "$prog_output" "$expect_output" ; then
101*59c8e88eSDag-Erling Smørgrav		echo "FAIL: $prog_output != $expect_output" | tee -a errors
102*59c8e88eSDag-Erling Smørgrav	else
103*59c8e88eSDag-Erling Smørgrav		echo "OK: $prog"
104*59c8e88eSDag-Erling Smørgrav	fi
105*59c8e88eSDag-Erling Smørgravdone
106*59c8e88eSDag-Erling Smørgrav
107*59c8e88eSDag-Erling Smørgravecho
108*59c8e88eSDag-Erling Smørgravif [ -f errors ]; then
109*59c8e88eSDag-Erling Smørgrav	echo "Tests failed:"
110*59c8e88eSDag-Erling Smørgrav	cat errors
111*59c8e88eSDag-Erling Smørgrav	exit 1
112*59c8e88eSDag-Erling Smørgravelse
113*59c8e88eSDag-Erling Smørgrav	echo "All tests OK"
114*59c8e88eSDag-Erling Smørgrav	echo
115*59c8e88eSDag-Erling Smørgravfi
116