]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Add tests of file_compress/file_uncompress in minigzip and minideflate.
authorHans Kristian Rosbach <hk-git@circlestorm.org>
Fri, 12 May 2023 23:54:25 +0000 (01:54 +0200)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Tue, 16 May 2023 08:27:51 +0000 (10:27 +0200)
test/cmake/compress-and-verify.cmake
test/cmake/test-data.cmake
test/cmake/test-tools.cmake

index e79c50c4f04f51b32ae6ba79f274c7cc682816da..fa69773906f197ae74caf49ea1f70cffbfa4aee7 100644 (file)
@@ -22,6 +22,7 @@
 #   GZIP_VERIFY             - Verify that gzip can decompress the COMPRESS_TARGET output and
 #                             verify that DECOMPRESS_TARGET can decompress gzip output of INPUT
 #   COMPARE                 - Verify decompressed output is the same as input
+#   FILEMODE                - Pass data to/from (de)compressor using files instead of stdin/stdout
 #   SUCCESS_EXIT            - List of successful exit codes (default: 0, ie: 0;1)
 
 if(TARGET)
@@ -37,11 +38,20 @@ endif()
 if(NOT DEFINED COMPARE)
     set(COMPARE ON)
 endif()
+if(NOT DEFINED FILEMODE)
+    set(FILEMODE OFF)
+endif()
 if(NOT DEFINED COMPRESS_ARGS)
-    set(COMPRESS_ARGS -c -k)
+    set(COMPRESS_ARGS -3 -k)
+    if(NOT FILEMODE)
+        list(APPEND COMPRESS_ARGS -c)
+    endif()
 endif()
 if(NOT DEFINED DECOMPRESS_ARGS)
-    set(DECOMPRESS_ARGS -d -c)
+    set(DECOMPRESS_ARGS -d -k)
+    if(NOT FILEMODE)
+        list(APPEND DECOMPRESS_ARGS -c)
+    endif()
 endif()
 if(NOT DEFINED GZIP_VERIFY)
     set(GZIP_VERIFY ON)
@@ -101,6 +111,25 @@ macro(diff src1 src2)
     endif()
 endmacro()
 
+
+macro(exec_streams tcmd tsrc tdst)
+    execute_process(COMMAND ${CMAKE_COMMAND}
+        "-DCOMMAND=${tcmd}"
+        -DINPUT=${tsrc}
+        -DOUTPUT=${tdst}
+        "-DSUCCESS_EXIT=${SUCCESS_EXIT}"
+        -P ${CMAKE_CURRENT_LIST_DIR}/run-and-redirect.cmake
+        RESULT_VARIABLE CMD_RESULT
+        COMMAND_ECHO STDOUT)
+endmacro()
+
+macro(exec_files tcmd tsrc)
+    execute_process(COMMAND
+        ${tcmd} ${tsrc}
+        RESULT_VARIABLE CMD_RESULT
+        COMMAND_ECHO STDOUT)
+endmacro()
+
 # Compress input file
 if(NOT EXISTS ${INPUT})
     message(FATAL_ERROR "Cannot find compress input: ${INPUT}")
@@ -108,17 +137,21 @@ endif()
 
 set(COMPRESS_COMMAND ${COMPRESS_TARGET} ${COMPRESS_ARGS})
 
+set(INPUT_FILE ${OUTPUT_BASE})
+
+# Make CMake copy and rename file in one operation
+configure_file(${INPUT} ${INPUT_FILE} COPYONLY)
+
 message(STATUS "Compress ${COMPRESS_COMMAND}")
-message(STATUS "  Input: ${INPUT}")
+message(STATUS "  Source file: ${INPUT}")
+message(STATUS "  Compression input file: ${INPUT_FILE}")
 message(STATUS "  Output: ${OUTPUT_BASE}.gz")
 
-execute_process(COMMAND ${CMAKE_COMMAND}
-    "-DCOMMAND=${COMPRESS_COMMAND}"
-    -DINPUT=${INPUT}
-    -DOUTPUT=${OUTPUT_BASE}.gz
-    "-DSUCCESS_EXIT=${SUCCESS_EXIT}"
-    -P ${CMAKE_CURRENT_LIST_DIR}/run-and-redirect.cmake
-    RESULT_VARIABLE CMD_RESULT)
+if(FILEMODE)
+    exec_files("${COMPRESS_COMMAND}" "${INPUT_FILE}")
+else()
+    exec_streams("${COMPRESS_COMMAND}" "${INPUT_FILE}" "${OUTPUT_BASE}.gz")
+endif()
 
 if(CMD_RESULT)
     cleanup()
@@ -137,13 +170,11 @@ message(STATUS "Decompress ${DECOMPRESS_COMMAND}")
 message(STATUS "  Input: ${OUTPUT_BASE}.gz")
 message(STATUS "  Output: ${OUTPUT_BASE}")
 
-execute_process(COMMAND ${CMAKE_COMMAND}
-    "-DCOMMAND=${DECOMPRESS_COMMAND}"
-    -DINPUT=${OUTPUT_BASE}.gz
-    -DOUTPUT=${OUTPUT_BASE}
-    "-DSUCCESS_EXIT=${SUCCESS_EXIT}"
-    -P ${CMAKE_CURRENT_LIST_DIR}/run-and-redirect.cmake
-    RESULT_VARIABLE CMD_RESULT)
+if(FILEMODE)
+    exec_files("${DECOMPRESS_COMMAND}" "${OUTPUT_BASE}.gz")
+else()
+    exec_streams("${DECOMPRESS_COMMAND}" "${OUTPUT_BASE}.gz" "${OUTPUT_BASE}")
+endif()
 
 if(CMD_RESULT)
     cleanup()
@@ -151,10 +182,15 @@ if(CMD_RESULT)
 endif()
 
 if(COMPARE)
+    message(STATUS "Diff comparison")
+    message(STATUS "  Input: ${INPUT}")
+    message(STATUS "  Output: ${OUTPUT_BASE}")
+
     # Compare decompressed output with original input file
     execute_process(COMMAND ${CMAKE_COMMAND}
         -E compare_files ${INPUT} ${OUTPUT_BASE}
-        RESULT_VARIABLE CMD_RESULT)
+        RESULT_VARIABLE CMD_RESULT
+        COMMAND_ECHO STDOUT)
 
     if(CMD_RESULT)
         diff(${INPUT} ${OUTPUT_BASE})
@@ -179,13 +215,7 @@ if(GZIP_VERIFY AND NOT "${COMPRESS_ARGS}" MATCHES "-T")
         message(STATUS "  Input: ${OUTPUT_BASE}.gz")
         message(STATUS "  Output: ${OUTPUT_BASE}-ungzip")
 
-        execute_process(COMMAND ${CMAKE_COMMAND}
-            "-DCOMMAND=${GZ_DECOMPRESS_COMMAND}"
-            -DINPUT=${OUTPUT_BASE}.gz
-            -DOUTPUT=${OUTPUT_BASE}-ungzip
-            "-DSUCCESS_EXIT=${SUCCESS_EXIT}"
-            -P ${CMAKE_CURRENT_LIST_DIR}/run-and-redirect.cmake
-            RESULT_VARIABLE CMD_RESULT)
+        exec_streams("${GZ_DECOMPRESS_COMMAND}" "${OUTPUT_BASE}.gz" "${OUTPUT_BASE}-ungzip")
 
         if(CMD_RESULT)
             cleanup()
@@ -210,13 +240,7 @@ if(GZIP_VERIFY AND NOT "${COMPRESS_ARGS}" MATCHES "-T")
         message(STATUS "  Input: ${INPUT}")
         message(STATUS "  Output: ${OUTPUT_BASE}-gzip.gz")
 
-        execute_process(COMMAND ${CMAKE_COMMAND}
-            "-DCOMMAND=${GZ_COMPRESS_COMMAND}"
-            -DINPUT=${INPUT}
-            -DOUTPUT=${OUTPUT_BASE}-gzip.gz
-            "-DSUCCESS_EXIT=${SUCCESS_EXIT}"
-            -P ${CMAKE_CURRENT_LIST_DIR}/run-and-redirect.cmake
-            RESULT_VARIABLE CMD_RESULT)
+        exec_streams("${GZ_COMPRESS_COMMAND}" "${INPUT}" "${OUTPUT_BASE}-gzip.gz")
 
         if(CMD_RESULT)
             cleanup()
@@ -233,13 +257,11 @@ if(GZIP_VERIFY AND NOT "${COMPRESS_ARGS}" MATCHES "-T")
         message(STATUS "  Output: ${OUTPUT_BASE}-gzip")
 
         # Check decompress target can handle gzip compressed output
-        execute_process(COMMAND ${CMAKE_COMMAND}
-            "-DCOMMAND=${DECOMPRESS_COMMAND}"
-            -DINPUT=${OUTPUT_BASE}-gzip.gz
-            -DOUTPUT=${OUTPUT_BASE}-gzip
-            "-DSUCCESS_EXIT=${SUCCESS_EXIT}"
-            -P ${CMAKE_CURRENT_LIST_DIR}/run-and-redirect.cmake
-            RESULT_VARIABLE CMD_RESULT)
+        if(FILEMODE)
+            exec_files("${DECOMPRESS_COMMAND}" "${OUTPUT_BASE}-gzip.gz")
+        else()
+            exec_streams("${DECOMPRESS_COMMAND}" "${OUTPUT_BASE}-gzip.gz" "${OUTPUT_BASE}-gzip")
+        endif()
 
         if(CMD_RESULT)
             cleanup()
index 07013355a3e501a555f8185b067b0db58f8adb75..e60c356e462bf74a6073fe47662122a9b340ca20 100644 (file)
@@ -34,6 +34,7 @@ set(TEST_CONFIGS
     -T      # Direct store
     -0      # No compression
     -1      # Deflate quick
+    -2      # Deflate fast
     -4      # Deflate medium (lazy matches)
     "-5;-F" # Deflate medium (Z_FIXED)
     -6      # Deflate medium
index afe4835d89188bbd52cfc9d2a3661a9ffacd9fb4..c2a683fbd94e1147cf6f78987cac94bf24bb1ffc 100644 (file)
@@ -1,5 +1,24 @@
 # test-tools.cmake -- Tests targeting tool coverage
 
+# Compress and decompress using file_compress/file_decompress, optionally also testing MMAP
+add_test(NAME minigzip-file_compress
+    COMMAND ${CMAKE_COMMAND}
+    "-DTARGET=${MINIGZIP_COMMAND}"
+    -DFILEMODE=ON
+    -DGZIP_VERIFY=ON
+    -DTEST_NAME=minigzip-file_compress
+    -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/data/paper-100k.pdf
+    -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compress-and-verify.cmake)
+
+add_test(NAME minideflate-file_compress
+    COMMAND ${CMAKE_COMMAND}
+    "-DTARGET=${MINIDEFLATE_COMMAND}"
+    -DFILEMODE=ON
+    -DGZIP_VERIFY=OFF
+    -DTEST_NAME=minideflate-file_compress
+    -DINPUT=${CMAKE_CURRENT_SOURCE_DIR}/data/paper-100k.pdf
+    -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/compress-and-verify.cmake)
+
 # Test --help and invalid parameters for our tools
 set(TEST_COMMAND ${MINIGZIP_COMMAND} "--help")
 add_test(NAME minigzip-help