add_test(NAME makefixed
COMMAND ${CMAKE_COMMAND}
"-DCOMMAND=${MAKEFIXED_COMMAND}"
- -DOUTPUT=${CMAKE_CURRENT_SOURCE_DIR}/inffixed_tbl._h
+ -DOUTPUT=${CMAKE_CURRENT_BINARY_DIR}/inffixed_tbl._h
-DCOMPARE=${CMAKE_CURRENT_SOURCE_DIR}/inffixed_tbl.h
-DIGNORE_LINE_ENDINGS=ON
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/run-and-compare.cmake)
add_test(NAME maketrees
COMMAND ${CMAKE_COMMAND}
"-DCOMMAND=${MAKETREES_COMMAND}"
- -DOUTPUT=${CMAKE_CURRENT_SOURCE_DIR}/trees_tbl._h
+ -DOUTPUT=${CMAKE_CURRENT_BINARY_DIR}/trees_tbl._h
-DCOMPARE=${CMAKE_CURRENT_SOURCE_DIR}/trees_tbl.h
-DIGNORE_LINE_ENDINGS=ON
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/run-and-compare.cmake)
add_test(NAME makecrct-crc32
COMMAND ${CMAKE_COMMAND}
"-DCOMMAND=${MAKECRCT_COMMAND}"
- -DOUTPUT=${CMAKE_CURRENT_SOURCE_DIR}/crc32_tbl._h
+ -DOUTPUT=${CMAKE_CURRENT_BINARY_DIR}/crc32_tbl._h
-DCOMPARE=${CMAKE_CURRENT_SOURCE_DIR}/crc32_tbl.h
-DIGNORE_LINE_ENDINGS=ON
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/run-and-compare.cmake)
add_test(NAME makecrct-crc32-combine
COMMAND ${CMAKE_COMMAND}
"-DCOMMAND=${MAKECRCT_COMMAND}"
- -DOUTPUT=${CMAKE_CURRENT_SOURCE_DIR}/crc32_comb_tbl._h
+ -DOUTPUT=${CMAKE_CURRENT_BINARY_DIR}/crc32_comb_tbl._h
-DCOMPARE=${CMAKE_CURRENT_SOURCE_DIR}/crc32_comb_tbl.h
-DIGNORE_LINE_ENDINGS=ON
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/run-and-compare.cmake)
"-DCOMPRESS_ARGS=${compress_args}"
"-DDECOMPRESS_ARGS=-d;-c"
-DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/${path}
- -DOUTPUT=${CMAKE_CURRENT_SOURCE_DIR}/${path}-${test_id}.gz
+ -DTEST_NAME=${test_id}
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
endif()
endmacro()
continue()
endif()
foreach(TEST_CONFIG ${TEST_CONFIGS})
- get_filename_component(TEST_NAME ${TEST_FILE_PATH} NAME_WE)
+ get_filename_component(TEST_NAME ${TEST_FILE_PATH} NAME)
if (TEST_NAME STREQUAL "")
continue()
endif()
COMMAND ${CMAKE_COMMAND}
"-DTARGET=${MINIGZIP_COMMAND}"
"-DCOMPRESS_ARGS=-c;-k;-4"
+ -DTEST_NAME=GH-361-test-txt
-DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/GH-361/test.txt
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
"-DCOMPRESS_TARGET=${SWITCHLEVELS_COMMAND}"
"-DCOMPRESS_ARGS=1;5;9;3"
"-DDECOMPRESS_TARGET=${MINIGZIP_COMMAND}"
+ -DTEST_NAME=GH-364-test-bin
-DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/GH-364/test.bin
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
"-DCOMPRESS_ARGS=-c;-m;1;-w;-15;-1;-s;4"
"-DDECOMPRESS_ARGS=-c;-d;-m;1;-w;-15"
-DGZIP_VERIFY=OFF
+ -DTEST_NAME=GH-382-defneg3-dat
-DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/GH-382/defneg3.dat
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
"-DDECOMPRESS_TARGET=${MINIGZIP_COMMAND}"
-DCOMPARE=OFF
-DGZIP_VERIFY=OFF
+ -DTEST_NAME=GH-536-segfault-lcet10-txt
-DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/data/lcet10.txt
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
"-DDECOMPRESS_TARGET=${MINIGZIP_COMMAND}"
-DCOMPARE=OFF
-DGZIP_VERIFY=OFF
+ -DTEST_NAME=GH-536-incomplete-read-lcet10-txt
-DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/data/lcet10.txt
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
"-DDECOMPRESS_TARGET=${MINIGZIP_COMMAND}"
-DCOMPARE=OFF
-DGZIP_VERIFY=OFF
+ -DTEST_NAME=GH-536-zero-stored-block-lcet10-txt
-DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/data/lcet10.txt
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
add_test(NAME GH-751
COMMAND ${CMAKE_COMMAND}
"-DTARGET=${MINIGZIP_COMMAND}"
+ -DTEST_NAME=GH-751-test-txt
-DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/test/GH-751/test.txt
-P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/test-compress.cmake)
# DECOMPRESS_TARGET - Command to run to decompress output file
# Optional Variables
+# TEST_NAME - Name of test to use when constructing output file paths
# COMPRESS_ARGS - Arguments to pass for compress command (default: -c -k)
# DECOMPRESS_ARGS - Arguments to pass to decompress command (default: -d -c)
set(SUCCESS_EXIT 0)
endif()
-# Generate unique output path so multiple tests can be executed at the same time
-if(NOT OUTPUT)
- # Output name based on input and unique id
- string(RANDOM UNIQUE_ID)
- set(OUTPUT ${INPUT}-${UNIQUE_ID})
-else()
- # Output name appends unique id in case multiple tests with same output name
- string(RANDOM LENGTH 6 UNIQUE_ID)
- set(OUTPUT ${OUTPUT}-${UNIQUE_ID})
+# Use test name from input file name
+if(NOT DEFINED TEST_NAME)
+ get_filename_component(TEST_NAME "${INPUT}" NAME)
endif()
-string(REPLACE ".gz" "" OUTPUT "${OUTPUT}")
+
+# Generate unique output path so multiple tests can be executed at the same time
+string(RANDOM LENGTH 6 UNIQUE_ID)
+string(REPLACE "." "-" TEST_NAME "${TEST_NAME}")
+set(OUTPUT_BASE "${CMAKE_CURRENT_BINARY_DIR}/test/${TEST_NAME}-${UNIQUE_ID}")
+
+# Ensure directory exists for output files
+get_filename_component(OUTPUT_DIR "${OUTPUT_BASE}" DIRECTORY)
+file(MAKE_DIRECTORY "${OUTPUT_DIR}")
macro(cleanup)
# Cleanup temporary mingizip files
- file(REMOVE ${OUTPUT}.gz ${OUTPUT}.out)
+ file(REMOVE ${OUTPUT_BASE}.gz ${OUTPUT_BASE}.out)
# Cleanup temporary gzip files
- file(REMOVE ${OUTPUT}.gzip.gz ${OUTPUT}.gzip.out)
+ file(REMOVE ${OUTPUT_BASE}.gzip.gz ${OUTPUT_BASE}.gzip.out)
endmacro()
# Compress input file
execute_process(COMMAND ${CMAKE_COMMAND}
"-DCOMMAND=${COMPRESS_COMMAND}"
-DINPUT=${INPUT}
- -DOUTPUT=${OUTPUT}.gz
+ -DOUTPUT=${OUTPUT_BASE}.gz
"-DSUCCESS_EXIT=${SUCCESS_EXIT}"
-P ${CMAKE_CURRENT_LIST_DIR}/run-and-redirect.cmake
RESULT_VARIABLE CMD_RESULT)
endif()
# Decompress output
-if(NOT EXISTS ${OUTPUT}.gz)
+if(NOT EXISTS ${OUTPUT_BASE}.gz)
cleanup()
- message(FATAL_ERROR "Cannot find decompress input: ${OUTPUT}.gz")
+ message(FATAL_ERROR "Cannot find decompress input: ${OUTPUT_BASE}.gz")
endif()
set(DECOMPRESS_COMMAND ${DECOMPRESS_TARGET} ${DECOMPRESS_ARGS})
execute_process(COMMAND ${CMAKE_COMMAND}
"-DCOMMAND=${DECOMPRESS_COMMAND}"
- -DINPUT=${OUTPUT}.gz
- -DOUTPUT=${OUTPUT}.out
+ -DINPUT=${OUTPUT_BASE}.gz
+ -DOUTPUT=${OUTPUT_BASE}.out
"-DSUCCESS_EXIT=${SUCCESS_EXIT}"
-P ${CMAKE_CURRENT_LIST_DIR}/run-and-redirect.cmake
RESULT_VARIABLE CMD_RESULT)
if(COMPARE)
# Compare decompressed output with original input file
execute_process(COMMAND ${CMAKE_COMMAND}
- -E compare_files ${INPUT} ${OUTPUT}.out
+ -E compare_files ${INPUT} ${OUTPUT_BASE}.out
RESULT_VARIABLE CMD_RESULT)
if(CMD_RESULT)
# Transparent writing does not use gzip format
find_program(GZIP gzip)
if(GZIP)
- if(NOT EXISTS ${OUTPUT}.gz)
+ if(NOT EXISTS ${OUTPUT_BASE}.gz)
cleanup()
- message(FATAL_ERROR "Cannot find gzip decompress input: ${OUTPUT}.gz")
+ message(FATAL_ERROR "Cannot find gzip decompress input: ${OUTPUT_BASE}.gz")
endif()
# Check gzip can decompress our compressed output
execute_process(COMMAND ${CMAKE_COMMAND}
"-DCOMMAND=${GZ_DECOMPRESS_COMMAND}"
- -DINPUT=${OUTPUT}.gz
- -DOUTPUT=${OUTPUT}.gzip.out
+ -DINPUT=${OUTPUT_BASE}.gz
+ -DOUTPUT=${OUTPUT_BASE}.gzip.out
"-DSUCCESS_EXIT=${SUCCESS_EXIT}"
-P ${CMAKE_CURRENT_LIST_DIR}/run-and-redirect.cmake
RESULT_VARIABLE CMD_RESULT)
# Compare gzip output with original input file
execute_process(COMMAND ${CMAKE_COMMAND}
- -E compare_files ${INPUT} ${OUTPUT}.gzip.out
+ -E compare_files ${INPUT} ${OUTPUT_BASE}.gzip.out
RESULT_VARIABLE CMD_RESULT)
if(CMD_RESULT)
message(FATAL_ERROR "Compare gzip decompress failed: ${CMD_RESULT}")
endif()
- if(NOT EXISTS ${OUTPUT}.gz)
+ if(NOT EXISTS ${OUTPUT_BASE}.gz)
cleanup()
message(FATAL_ERROR "Cannot find gzip compress input: ${INPUT}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND}
"-DCOMMAND=${GZ_COMPRESS_COMMAND}"
-DINPUT=${INPUT}
- -DOUTPUT=${OUTPUT}.gzip.gz
+ -DOUTPUT=${OUTPUT_BASE}.gzip.gz
"-DSUCCESS_EXIT=${SUCCESS_EXIT}"
-P ${CMAKE_CURRENT_LIST_DIR}/run-and-redirect.cmake
RESULT_VARIABLE CMD_RESULT)
message(FATAL_ERROR "Gzip compress failed: ${CMD_RESULT}")
endif()
- if(NOT EXISTS ${OUTPUT}.gz)
+ if(NOT EXISTS ${OUTPUT_BASE}.gz)
cleanup()
- message(FATAL_ERROR "Cannot find minigzip decompress input: ${OUTPUT}.gzip.gz")
+ message(FATAL_ERROR "Cannot find minigzip decompress input: ${OUTPUT_BASE}.gzip.gz")
endif()
# Check decompress target can handle gzip compressed output
execute_process(COMMAND ${CMAKE_COMMAND}
"-DCOMMAND=${DECOMPRESS_COMMAND}"
- -DINPUT=${OUTPUT}.gzip.gz
- -DOUTPUT=${OUTPUT}.gzip.out
+ -DINPUT=${OUTPUT_BASE}.gzip.gz
+ -DOUTPUT=${OUTPUT_BASE}.gzip.out
"-DSUCCESS_EXIT=${SUCCESS_EXIT}"
-P ${CMAKE_CURRENT_LIST_DIR}/run-and-redirect.cmake
RESULT_VARIABLE CMD_RESULT)
if(COMPARE)
# Compare original input file with gzip decompressed output
execute_process(COMMAND ${CMAKE_COMMAND}
- -E compare_files ${INPUT} ${OUTPUT}.gzip.out
+ -E compare_files ${INPUT} ${OUTPUT_BASE}.gzip.out
RESULT_VARIABLE CMD_RESULT)
if(CMD_RESULT)