diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 69deceab97de9b42133aca40ecb535c1c0d5b1d8..db467d616be183d3c2c9f9ede2a2d33af46e3690 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,41 +1,49 @@ CMAKE_MINIMUM_REQUIRED (VERSION 3.4) +SET (TESTS_SRC_DIR ${PROJECT_SOURCE_DIR}/tests) +SET (TESTS_BIN_DIR ${PROJECT_BINARY_DIR}/tests) + + MACRO (REGISTER_TEST sac_file) GET_FILENAME_COMPONENT (namewe "${sac_file}" NAME_WE) SET (test_name "test-${namewe}") ADD_TEST ( NAME ${test_name} - COMMAND ${PROJECT_BINARY_DIR}/tests/scripts/run.sh ${sac_file}) + COMMAND + ${PROJECT_BINARY_DIR}/tests/scripts/run.sh + ${sac_file} ${TESTS_BIN_DIR}) ENDMACRO () SET (SAC2C_EXEC "${PROJECT_BINARY_DIR}/sac2c${BUILD_TYPE_POSTFIX}") SET (SCRIPT_LIST common.sh run.sh grep-command-output.sh -check-return-status.sh isalloptionson.sh) + check-return-status.sh isalloptionson.sh) FOREACH (script ${SCRIPT_LIST}) CONFIGURE_FILE( - "${PROJECT_SOURCE_DIR}/tests/scripts/${script}.in" - "${PROJECT_BINARY_DIR}/tests/scripts/${script}" @ONLY) + "${TESTS_SRC_DIR}/scripts/${script}.in" + "${TESTS_BIN_DIR}/scripts/${script}" @ONLY) ENDFOREACH () -CONFIGURE_FILE ( - "${PROJECT_SOURCE_DIR}/tests/common.mk.in" - "${PROJECT_BINARY_DIR}/tests/common.mk" @ONLY) CONFIGURE_FILE ( - "${PROJECT_SOURCE_DIR}/tests/ut-optional-packages.h.in" - "${PROJECT_BINARY_DIR}/tests/ut-optional-packages.h" COPYONLY) -CONFIGURE_FILE ( - "${PROJECT_SOURCE_DIR}/tests/ut-flags.mk.in" - "${PROJECT_BINARY_DIR}/tests/ut-flags.mk" COPYONLY) - - -FILE (GLOB sac_test_files "${PROJECT_SOURCE_DIR}/tests/*.sac") -#FILE (GLOB scripts "${PROJECT_SOURCE_DIR}/tests/*.sh") -FILE (GLOB mk "${PROJECT_SOURCE_DIR}/tests/*.mk") + "${TESTS_SRC_DIR}/common.mk.in" + "${TESTS_BIN_DIR}/common.mk" @ONLY) + +FILE (GLOB_RECURSE sac_test_files + RELATIVE "${TESTS_SRC_DIR}" "*.sac") +FILE (GLOB_RECURSE headers + RELATIVE "${TESTS_SRC_DIR}" "*.h") +FILE (GLOB_RECURSE mk + RELATIVE "${TESTS_SRC_DIR}" "*.mk") + +FOREACH (f ${sac_test_files} ${headers} ${mk}) + GET_FILENAME_COMPONENT (localdir "${f}" DIRECTORY) + FILE (COPY ${TESTS_SRC_DIR}/${f} + DESTINATION "${TESTS_BIN_DIR}/${localdir}") +ENDFOREACH () -FILE (COPY ${sac_test_files} ${mk} DESTINATION "${PROJECT_BINARY_DIR}/tests") -FILE (GLOB tests "${PROJECT_BINARY_DIR}/tests/test-*.sac") +FILE (GLOB_RECURSE tests + RELATIVE "${TESTS_SRC_DIR}" "test-*.sac") FOREACH (test ${tests}) REGISTER_TEST ("${test}") diff --git a/tests/common.mk.in b/tests/common.mk.in index b5bc1a0ec72c996e7013c38c822e55993419ad29..717f5e4963db2fa91ef79015d5ab7011f3d33c04 100644 --- a/tests/common.mk.in +++ b/tests/common.mk.in @@ -1,18 +1,18 @@ SAC2C := @SAC2C_EXEC@ -SAC2C_FLAGS := -v0 +SAC2C_FLAGS := -v0 -cppI@TESTS_BIN_DIR@ # Name wrapper around shell script taking two arguments # specifying a grep string and wc for same # on the stdout. -GREP_COMMAND_OUTPUT := ./scripts/grep-command-output.sh +GREP_COMMAND_OUTPUT := @TESTS_BIN_DIR@/scripts/grep-command-output.sh # Namewrapper for predicate script that returns true if # all sac2c optional packages are enabled -ISALLOPTIONSON := ./scripts/isalloptionson.sh +ISALLOPTIONSON := @TESTS_BIN_DIR@/scripts/isalloptionson.sh # Namewrapper for a script of two arguments `binary' and `ret' # that verifies that return status of executing $binary is $ret. -CHECK_RETURN_STATUS := ./scripts/check-return-status.sh +CHECK_RETURN_STATUS := @TESTS_BIN_DIR@/scripts/check-return-status.sh %:%.sac $(SAC2C) $(SAC2C_FLAGS) -o $@ $< diff --git a/tests/test-cuda-grid-block-size-check.sac b/tests/cuda/test-cuda-grid-block-size-check.sac similarity index 100% rename from tests/test-cuda-grid-block-size-check.sac rename to tests/cuda/test-cuda-grid-block-size-check.sac diff --git a/tests/test-cuda-target.sac b/tests/cuda/test-cuda-target.sac similarity index 100% rename from tests/test-cuda-target.sac rename to tests/cuda/test-cuda-target.sac diff --git a/tests/test-parser-segfault-01.sac b/tests/parser/test-parser-segfault-01.sac similarity index 100% rename from tests/test-parser-segfault-01.sac rename to tests/parser/test-parser-segfault-01.sac diff --git a/tests/test-parser-segfault-02.sac b/tests/parser/test-parser-segfault-02.sac similarity index 100% rename from tests/test-parser-segfault-02.sac rename to tests/parser/test-parser-segfault-02.sac diff --git a/tests/test-parser-segfault-03.sac b/tests/parser/test-parser-segfault-03.sac similarity index 100% rename from tests/test-parser-segfault-03.sac rename to tests/parser/test-parser-segfault-03.sac diff --git a/tests/test-parser-segfault-04.sac b/tests/parser/test-parser-segfault-04.sac similarity index 100% rename from tests/test-parser-segfault-04.sac rename to tests/parser/test-parser-segfault-04.sac diff --git a/tests/test-parser-segfault-05.sac b/tests/parser/test-parser-segfault-05.sac similarity index 100% rename from tests/test-parser-segfault-05.sac rename to tests/parser/test-parser-segfault-05.sac diff --git a/tests/test-condfun.nostdlib.sac b/tests/pogo/test-condfun-nostdlib.sac similarity index 100% rename from tests/test-condfun.nostdlib.sac rename to tests/pogo/test-condfun-nostdlib.sac diff --git a/tests/test-ipbbFaux.sac b/tests/pogo/test-ipbb-faux.sac similarity index 100% rename from tests/test-ipbbFaux.sac rename to tests/pogo/test-ipbb-faux.sac diff --git a/tests/ut-flags.mk.in b/tests/pogo/ut-flags.mk similarity index 55% rename from tests/ut-flags.mk.in rename to tests/pogo/ut-flags.mk index 2e189c11cf93ba518b326b98b77471f0a99cdd6c..a9a437f40c9242b2c93d3a41f132dd174e144a34 100644 --- a/tests/ut-flags.mk.in +++ b/tests/pogo/ut-flags.mk @@ -1,23 +1,22 @@ -// TEMPORARY LOCATION UNTIL ARTEM GETS SUBDIR SUPPORT WORKING. -// THIS IS FOR POGO ONLY... other subdirs need different flags - -// gitlab unit test flag definitions for POGO +// unit test template for POGO // Caller must define GREP_STR and GREP_COUNT; -// GREP_STR is the string to look for in the compiler output, -// e.g., GREP_STR="val_l" -// GREP_COUNT is the number of occurrences of that string if all goes well, -// e.g., GREP_COUNT=42 -//echo GREP_STR is $GREP_STR and GREP_COUNT is $GREP_COUNT +// GREP_STR +// is the string to look for in the compiler +// output, e.g., GREP_STR="val_l" +// GREP_COUNT +// is the number of occurrences of that string +// if all goes well, e.g., GREP_COUNT=42 // SAC_TEST|include common.mk + // Compile and execute unit test; save exit code // SAC_TEST|SAC2C_FLAGS += -check c -dopogo -noggs -dolacsi -dowlf -nopwlf -noctz -norelcf -noainl -doplur // SAC_TEST|SAC2C_BREAKPOINT := $(SAC2C_FLAGS) -bopt:wlbscnf2 -printfun main // SAC_TEST|CALL_SAC2C := $(SAC2C) $(SAC2C_FLAGS) -// SAC_TEST|ifeq ($(shell ./scripts/isalloptionson.sh $(SAC2C) "ISL" "BARVINOK"),yes) +// SAC_TEST|ifeq ($(shell $(ISALLOPTIONSON) $(SAC2C) "ISL" "BARVINOK"),yes) // SAC_TEST|all: -// SAC_TEST|@$(SAC2C) $(SAC2C_FLAGS) $< -o +// SAC_TEST|@$(CALL_SAC2C) $< -o // SAC_TEST|$(CHECK_RETURN_STATUS) 0 // Compile unit test with breakpoint // SAC_TEST|@$(CALL_SAC2C) $(SAC2C_BREAKPOINT) $< | $(GREP_COMMAND_OUTPUT) $(GREP_STR) $(GREP_COUNT) diff --git a/tests/ut-optional-packages.h.in b/tests/pogo/ut-optional-packages.h similarity index 100% rename from tests/ut-optional-packages.h.in rename to tests/pogo/ut-optional-packages.h diff --git a/tests/scripts/isalloptionson.sh.in b/tests/scripts/isalloptionson.sh.in index 70a7b63e4215b7b50ce0dfb5fe2547a7bab0dff9..c9a8cace94d6d9795e20fdd665bc98695dd8bf7d 100755 --- a/tests/scripts/isalloptionson.sh.in +++ b/tests/scripts/isalloptionson.sh.in @@ -3,10 +3,10 @@ # predicate: return true(0) if all script arguments are configured ON in sac2c, # and print yes/no on stdout. Caller decisions are driven by the stdout value. -# Arguments are: sac2c name, optionalpackage1, optionalpackage2,... +# Arguments are: ... sac=$1 -shift +shift for i in $@; do res=$($sac -VV | grep $i:) @@ -16,6 +16,7 @@ for i in $@; do echo "no"; exit 1 fi done + # All arguments were configured ON in sac2c - echo "yes"; exit 0 +echo "yes"; exit 0 diff --git a/tests/scripts/run.sh.in b/tests/scripts/run.sh.in index 6c87fec9b0881b68ca2e8f6bf0caf96e99588af5..1a7e0e86840f2a4c4a9d7674a43b6598ec66236a 100755 --- a/tests/scripts/run.sh.in +++ b/tests/scripts/run.sh.in @@ -9,9 +9,15 @@ function namewe () { # Source file that we are about to run tests on. SAC_FILE=$1 +# Location of the toplevel tests directory. +TOP_DIR=$2 + # Cut the path off. base_fname=$(basename $SAC_FILE) +# Cut the filename off. +dir_name=$(dirname $SAC_FILE) + # Generate the name for the extracted makefile. makefile=${base_fname}.mk @@ -25,13 +31,13 @@ base_fname_we=$(namewe "$base_fname") -e 's//\t/g' \ -e "s//$base_fname/g" \ -e "s//$base_fname_we/g" \ - -e 's//\\/g' > $makefile + -e 's//\\/g' > ${dir_name}/$makefile if test $? -ne 0; then die "cannot parse SAC_TEST specification in $SAC_FILE" fi -if ! make -f $makefile; then +if ! (cd ${dir_name}; make -I$TOP_DIR -f $makefile); then die "test $SAC_FILE failed" fi