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