Files
calculet-npu-research-archive/source/repositories-complete/systemc-exact/systemc/cmake/run_test.cmake
T

135 lines
5.0 KiB
CMake

###############################################################################
#
# Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
# more contributor license agreements. See the NOTICE file distributed
# with this work for additional information regarding copyright ownership.
# Accellera licenses this file to you under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with the
# License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied. See the License for the specific language governing
# permissions and limitations under the License.
#
###############################################################################
###############################################################################
#
# cmake/run_test.cmake --
# CMake script to run a compiled unit test and to optionally compare its output
# with a golden reference file.
#
# Original Author: Torsten Maehne, Berner Fachhochschule (BFH), 2016-09-12
#
###############################################################################
###############################################################################
#
# MODIFICATION LOG - modifiers, enter your name, affiliation, date and
# changes you are making here.
#
# Name, Affiliation, Date:
# Description of Modification:
#
###############################################################################
cmake_minimum_required (VERSION 2.8.11)
if(NOT TEST_EXE)
message(FATAL_ERROR " Usage: cmake -DTEST_EXE=<executable> [-DTEST_INPUT=<input-file>] \\\n"
" [-DTEST_GOLDEN=<reference-output-file>] \\\n"
" [-DTEST_FILTER=<pattern-to-filter-from-log>] \\\n"
" [-DDIFF_COMMAND=<diff-command>] \\\n"
" [-DDIFF_OPTIONS=<diff-options>] \\\n"
" -P run_test.cmake")
endif(NOT TEST_EXE)
if(NOT EXISTS ${TEST_EXE})
message(FATAL_ERROR "Can't find the executable: ${TEST_EXE}")
endif(NOT EXISTS ${TEST_EXE})
if (NOT TEST_DIR)
get_filename_component(TEST_DIR ${TEST_EXE} DIRECTORY)
endif (NOT TEST_DIR)
if(NOT EXISTS ${TEST_DIR})
message(FATAL_ERROR "Can't find the test execution directory: ${TEST_DIR}")
endif(NOT EXISTS ${TEST_DIR})
if(TEST_INPUT AND NOT EXISTS ${TEST_INPUT})
message(FATAL_ERROR "Can't find the test input file: ${TEST_INPUT}")
endif(TEST_INPUT AND NOT EXISTS ${TEST_INPUT})
if(TEST_GOLDEN AND NOT EXISTS ${TEST_GOLDEN})
message(FATAL_ERROR "Can't find the test's golden reference output file: ${TEST_GOLDEN}")
endif(TEST_GOLDEN AND NOT EXISTS ${TEST_GOLDEN})
if(TEST_INPUT)
execute_process(COMMAND ${TEST_EXE}
WORKING_DIRECTORY ${TEST_DIR}
RESULT_VARIABLE TEST_EXIT_CODE
INPUT_FILE ${TEST_INPUT}
OUTPUT_FILE run.log
ERROR_VARIABLE TEST_ERROR)
else(TEST_INPUT)
execute_process(COMMAND ${TEST_EXE}
WORKING_DIRECTORY ${TEST_DIR}
RESULT_VARIABLE TEST_EXIT_CODE
OUTPUT_FILE run.log
ERROR_VARIABLE TEST_ERROR)
endif(TEST_INPUT)
if(NOT TEST_GOLDEN)
if(TEST_EXIT_CODE EQUAL 0)
message ("OK")
return()
else(TEST_EXIT_CODE EQUAL 0)
message (FATAL_ERROR "***ERROR:\n${TEST_ERROR}")
endif(TEST_EXIT_CODE EQUAL 0)
endif(NOT TEST_GOLDEN)
# TODO: trim empty lines from run and expected log output
if ("${TEST_FILTER}" STREQUAL "")
file (READ ${TEST_DIR}/run.log RUN_LOG)
else ("${TEST_FILTER}" STREQUAL "")
file (STRINGS ${TEST_DIR}/run.log RUN_FILTERED_LOG REGEX "^.*${TEST_FILTER}.*$" )
string(REPLACE ";" "\n" RUN_LOG "${RUN_FILTERED_LOG}\n")
endif ("${TEST_FILTER}" STREQUAL "")
string(REGEX REPLACE "^.*stopped by user.*$" "" RUN_TRIMMED_LOG ${RUN_LOG})
file(WRITE ${TEST_DIR}/run_trimmed.log "${RUN_TRIMMED_LOG}")
file(READ ${TEST_GOLDEN} EXPECTED_LOG)
string(REGEX REPLACE "^.*stopped by user.*$" "" EXPECTED_TRIMMED_LOG "${EXPECTED_LOG}")
file(WRITE ${TEST_DIR}/expected_trimmed.log "${EXPECTED_TRIMMED_LOG}")
if(NOT DIFF_COMMAND)
set(DIFF_COMMAND ${CMAKE_COMMAND})
set(DIFF_OPTIONS -E compare_files)
endif(NOT DIFF_COMMAND)
execute_process(COMMAND ${DIFF_COMMAND} ${DIFF_OPTIONS}
run_trimmed.log expected_trimmed.log
WORKING_DIRECTORY ${TEST_DIR}
RESULT_VARIABLE DIFF_EXIT_CODE
OUTPUT_FILE diff.log
ERROR_FILE diff.log)
message("DIFF_EXIT_CODE = ${DIFF_EXIT_CODE}")
if(DIFF_EXIT_CODE EQUAL 0)
message ("OK")
else(DIFF_EXIT_CODE EQUAL 0)
file(READ ${TEST_DIR}/diff.log DIFF_LOG)
message(FATAL_ERROR "***ERROR:\n${DIFF_LOG}")
endif(DIFF_EXIT_CODE EQUAL 0)
file(REMOVE ${TEST_DIR}/run.log
${TEST_DIR}/run_trimmed.log
${TEST_DIR}/expected_trimmed.log
${TEST_DIR}/diff.log)