run-tests.sh 4.52 KB
Newer Older
Daniel Barlow's avatar
Daniel Barlow committed
1 2
#!/bin/sh

3
# do_tests {lisp invocation} {scripts-regex}
4 5 6 7
# - read lisp forms one at a time from standard input
# - quit with exit status 0 on getting eof
# - quit with exit status >0 if an unhandled error occurs

8
export CL_SOURCE_REGISTRY="$PWD"
9
unset DEBUG_ASDF_TEST
Robert P. Goldman's avatar
 
Robert P. Goldman committed
10 11 12

while getopts "duh" OPTION
do
13
    case $OPTION in
Robert P. Goldman's avatar
 
Robert P. Goldman committed
14
        d)
15
            export DEBUG_ASDF_TEST=t
Robert P. Goldman's avatar
 
Robert P. Goldman committed
16 17 18 19 20 21 22 23 24 25 26 27
            ;;
        u)
            usage
            exit 1
            ;;
        h)
            usage
            exit 1
            ;;
    esac
done
shift $(($OPTIND - 1))
28

29
if [ x"$1" = "xhelp" ]; then
Robert P. Goldman's avatar
 
Robert P. Goldman committed
30 31
    usage
    exit 1
32 33
fi

34 35 36
if [ -z "$2" ]; then
    scripts="*.script"
else
37
    scripts="$2"
38 39
fi

40 41
sok=1

Robert P. Goldman's avatar
 
Robert P. Goldman committed
42 43 44 45 46 47 48 49 50 51 52 53
usage () {
    echo "$0 [lisp invocation] [scripts-regex]"
    echo " - read lisp forms one at a time from matching scripts"
    echo " - quit with exit status 0 on getting eof"
    echo " - quit with exit status >0 if an unhandled error occurs"
    echo " you need to supply the .script in the second argument"
    echo " lisps include sbcl, clisp, allegro and allegromodern"
    echo "OPTIONS:"
    echo "    -d -- debug mode"
    echo "    -u -h -- show this message."
}

54
do_tests() {
55 56 57
  command=$1 eval=$2 fasl_ext=$3
  rm -f *.$fasl_ext ~/.cache/common-lisp/"`pwd`"/*.$fasl_ext || true
  ( cd .. && $command $eval '(load "test/compile-asdf.lisp")' )
58 59 60 61
  if [ $? -ne 0 ] ; then
    echo "Compilation FAILED" >&2
  else
    echo "Compiled OK" >&2
62 63 64 65
    test_count=0
    test_pass=0
    test_fail=0
    failed_list=""
66 67
    for i in $scripts ;
    do
68 69
      echo "Testing: $i" >&2
      test_count=`expr "$test_count" + 1`
70 71 72
      rm -f *.$fasl_ext ~/.cache/common-lisp/"`pwd`"/*.$fasl_ext || true
      if $command $eval "(load \"$i\")" ; then
        echo "Using $command, $i passed" >&2
73 74
	test_pass=`expr "$test_pass" + 1`
      else
75
        echo "Using $command, $i failed" >&2
76 77 78 79 80 81
	test_fail=`expr "$test_fail" + 1`
	failed_list="$failed_list $i"
        sok=0
      fi
    done
    echo >&2
Gary King's avatar
Gary King committed
82
    echo "-#---------------------------------------" >&2
83
    echo "Using $command" >&2
84 85 86 87 88 89 90
    echo "Ran $test_count tests: " >&2
    echo "  $test_pass passing and $test_fail failing" >&2
    if [ $test_fail -eq 0 ] ; then
	echo "all tests apparently successful" >&2
    else
	echo "failing test(s): $failed_list" >&2
    fi
Gary King's avatar
Gary King committed
91
    echo "-#---------------------------------------" >&2
92
    echo >&2
93
  fi
94 95
}

96
# terminate on error
97 98
set -e

99 100 101
lisp=$1
if [ -z $1 ] ; then
    lisp="sbcl"
102 103
fi

104
command=
105 106
case "$lisp" in
  sbcl)
107 108
    if type sbcl ; then
      fasl_ext="fasl"
109 110 111
      command="sbcl --noinform --userinit /dev/null --sysinit /dev/null"
      nodebug="--disable-debugger"
      eval="--eval"
112 113
    fi ;;
  clisp)
114 115
    if type clisp ; then
	fasl_ext="fas"
116
	command="clisp -norc -ansi -I "
117 118
        nodebug="-on-error exit"
        eval="-x"
119 120
    fi ;;
  allegro)
121 122
    if type alisp ; then
	fasl_ext="fasl"
123 124
	command="alisp -q "
        nodebug="-batch"
125
        eval="-e"
126 127
    fi ;;
  allegromodern)
128 129
    if type mlisp ; then
	fasl_ext="fasl"
130 131
	command="mlisp -q"
        nodebug="-batch"
132
        eval="-e"
133 134
    fi ;;
  ccl)
Gary King's avatar
Gary King committed
135
    if type ccl ; then
136 137 138 139 140 141 142 143 144
        case `uname -s` in
          Linux) fasl_os=lx ;;
          Darwin) fasl_os=dx ;;
        esac
        case `uname -m` in
          x86_64|ppc64) fasl_bits=64 ;;
          i?86|ppc) fasl_bits=32 ;;
        esac
        fasl_ext="${fasl_os}${fasl_bits}fsl"
145 146 147
	command="ccl --no-init --quiet"
        nodebug="--batch"
        eval="--eval"
148 149 150 151
    fi ;;
  cmucl)
    if type lisp ; then
	fasl_ext="x86f"
152 153 154 155 156 157 158
	command="lisp -noinit"
        nodebug="-batch"
        eval="-eval"
    fi ;;
  ecl)
    if type ecl ; then
	fasl_ext="fas"
159
	command="ecl -norc"
160
        eval="-eval"
161
    fi ;;
162 163 164
  lispworks)
    if type lispworks ; then
	fasl_ext="ofasl"
165
	command="lispworks -siteinit - -init -"
166 167
        eval="-eval"
    fi ;;
168 169 170 171
  *)
    echo "Unsupported lisp: $1" >&2
    echo "Please add support to run-tests.sh" >&2
    exit 42 ;;
172
esac
173

174 175 176 177 178
if [ -z "$command" ] ; then
    echo "lisp implementation not found: $1" >&2
    exit 43
fi

179 180 181 182
if [ -z "${DEBUG_ASDF_TEST}" ] ; then
  command="$command $nodebug"
fi

183 184
create_config () {
    mkdir -p ../tmp/test-source-registry-conf.d ../tmp/test-asdf-output-translations-conf.d
185 186 187
}

clean_up () {
188
    rm -rf ../tmp/test-source-registry-conf.d ../tmp/test-asdf-output-translations-conf.d
189 190
}

191
if [ -z "$command" ] ; then
Gary King's avatar
Gary King committed
192
    echo "Error: cannot find or do not know how to run Lisp named $lisp"
193
else
194
    create_config
Gary King's avatar
Gary King committed
195
    mkdir -p results
196
    echo $command
Gary King's avatar
Gary King committed
197
    thedate=`date "+%Y-%m-%d"`
198 199
    do_tests "$command" "$eval" "$fasl_ext" 2>&1 | \
	tee "results/${lisp}.text" "results/${lisp}-${thedate}.save"
200
    clean_up
201
fi