| #!/bin/sh |
| # |
| # /**-------------------------------------------------------------------** |
| # ** CLooG ** |
| # **-------------------------------------------------------------------** |
| # ** checker.sh ** |
| # **-------------------------------------------------------------------** |
| # ** First version: November 16th 2011 ** |
| # **-------------------------------------------------------------------**/ |
| # |
| |
| #/***************************************************************************** |
| # * CLooG : the Chunky Loop Generator (experimental) * |
| # ***************************************************************************** |
| # * * |
| # * Copyright (C) 2003 Cedric Bastoul * |
| # * * |
| # * This library is free software; you can redistribute it and/or * |
| # * modify it under the terms of the GNU Lesser General Public * |
| # * License as published by the Free Software Foundation; either * |
| # * version 2.1 of the License, or (at your option) any later version. * |
| # * * |
| # * This library is distributed in the hope that it will be useful, * |
| # * but WITHOUT ANY WARRANTY; without even the implied warranty of * |
| # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * |
| # * Lesser General Public License for more details. * |
| # * * |
| # * You should have received a copy of the GNU Lesser General Public * |
| # * License along with this library; if not, write to the Free Software * |
| # * Foundation, Inc., 51 Franklin Street, Fifth Floor, * |
| # * Boston, MA 02110-1301 USA * |
| # * * |
| # * CLooG, the Chunky Loop Generator * |
| # * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * |
| # * * |
| # *****************************************************************************/ |
| |
| # This is the main test script of CLooG. It checks that CLooG generates |
| # a convenient output for an input set of tests, according to some |
| # parameters (see below). Two checking policies are possible: simply |
| # compare the generated codes or compare the executions of the generated |
| # codes. The reference output files must be present: if we are checking a |
| # file foo.cloog, either foo.c or foo.f must exist in the case of a simple |
| # code generation checking, and either foo.good.c or foo.good.f must exist |
| # in the case of a run check. |
| |
| TEST_NAME="$1" ## Name of the group of files to test |
| |
| TEST_FILES="$2" ## List of test file prefixes and individual options |
| ## spaces between the elements of one test are |
| ## represented with '%', e.g., "file -f -1" is |
| ## "file%-f%-1". |
| |
| TEST_GLOBAL_OPTIONS="$3" ## Options for all the tests in the group |
| |
| TEST_INPUT_EXTENSION="$4" ## Extension of the input file |
| |
| TEST_OUTPUT_EXTENSION="$5" ## Extension of the generated file |
| |
| TEST_RUN="$6" ## "1" if the checking policy is to generate, |
| ## compile and run, generate only otherwise |
| |
| failedtest=0; |
| cloog=$top_builddir/cloog$EXEEXT |
| echo " /*-----------------------------------------------*" |
| echo " * Testing CLooG: $TEST_NAME test set " |
| echo " *-----------------------------------------------*/" |
| for x in $TEST_FILES; do |
| name=`echo $x | sed 's/%/ /g' | cut -d\ -f1`; |
| individual_options=`echo $x | sed 's/%/ /g' | cut -s -d\ -f2-`; |
| input="$srcdir/$name.$TEST_INPUT_EXTENSION"; |
| output="$srcdir/$name.$TEST_OUTPUT_EXTENSION"; |
| options="$individual_options $TEST_GLOBAL_OPTIONS"; |
| |
| echo "Check file $input \c"; |
| if [ "$options" = " " ]; then |
| echo "(no option), \c" |
| else |
| echo "(options $options), \c"; |
| fi; |
| |
| if [ "$TEST_RUN" = "1" ]; then |
| generate_test=$srcdir/generate_test$EXEEXT |
| test_run=$srcdir/test_run$EXEEXT |
| good="$srcdir/$name.good.$TEST_OUTPUT_EXTENSION"; |
| |
| echo "generating... \c"; |
| $cloog $options -q -callable 1 $input > test_test.c; |
| $generate_test < $input > test_main.c; |
| |
| echo "compiling... \c"; |
| # TODO: (nd Cedric) The following line is to deal with the (F*CKING !!!) |
| # space in PACKAGE_STRING, introduced by AC_INIT and which, for |
| # some reason, seems to be the source of a problem with my shell. |
| # Maybe there is a better way to solve the problem... |
| COMPILE=`echo $COMPILE | sed 's/\\\ /_SPACE_/g'`; |
| $COMPILE -c test_test.c; |
| $COMPILE -Dtest=good -c $good -o test_good.o; |
| $LINK test_main.c test_test.o test_good.o > /dev/null; |
| |
| echo "comparing... \c"; |
| $test_run; |
| result=$?; |
| rm -f $test_run; |
| else |
| echo "generating... \c"; |
| $cloog $options -q $input > cloog_temp; |
| diff -u -w --ignore-matching-lines='CLooG' cloog_temp $output; |
| result=$?; |
| rm -f cloog_temp; |
| fi; |
| |
| if [ "$result" -ne "0" ]; then |
| echo -e "\033[31mFAIL: $output is not the same\033[0m"; |
| failedtest=`expr $failedtest + 1`; |
| else |
| echo "PASS"; |
| fi; |
| done; |
| |
| if [ $failedtest != 0 ]; then |
| echo "\033[31m[CLooG] FAIL: $failedtest tests failed in $TEST_NAME\033[0m"; |
| else |
| echo "[CLooG] PASS: $TEST_NAME passed :-) !"; |
| fi |
| exit $failedtest |