Yannis Guyon | 8d61469 | 2022-04-01 17:44:40 +0000 | [diff] [blame] | 1 | # Copyright 2022 Joe Drago. All rights reserved. |
| 2 | # SPDX-License-Identifier: BSD-2-Clause |
| 3 | |
| 4 | # With testing enabled, all targets referenced by add_test() can be run |
| 5 | # at once with CMake's ctest command line tool from the build folder. |
| 6 | enable_testing() |
Yannis Guyon | 8d61469 | 2022-04-01 17:44:40 +0000 | [diff] [blame] | 7 | |
Yannis Guyon | 2b91ce6 | 2022-06-21 11:51:46 +0200 | [diff] [blame] | 8 | ################################################################################ |
Yannis Guyon | 440af44 | 2022-06-22 10:42:52 +0200 | [diff] [blame] | 9 | # C tests and tools |
Yannis Guyon | 2b91ce6 | 2022-06-21 11:51:46 +0200 | [diff] [blame] | 10 | |
Yannis Guyon | 8d61469 | 2022-04-01 17:44:40 +0000 | [diff] [blame] | 11 | add_executable(aviftest aviftest.c) |
| 12 | if(AVIF_LOCAL_LIBGAV1) |
| 13 | set_target_properties(aviftest PROPERTIES LINKER_LANGUAGE "CXX") |
| 14 | endif() |
| 15 | target_link_libraries(aviftest avif ${AVIF_PLATFORM_LIBRARIES}) |
Yannis Guyon | 2d271dd | 2022-05-13 12:27:06 +0200 | [diff] [blame] | 16 | add_test(NAME aviftest COMMAND aviftest ${CMAKE_CURRENT_SOURCE_DIR}/data) |
Yannis Guyon | 8d61469 | 2022-04-01 17:44:40 +0000 | [diff] [blame] | 17 | |
Yannis Guyon | 440af44 | 2022-06-22 10:42:52 +0200 | [diff] [blame] | 18 | if(AVIF_ENABLE_COVERAGE) |
| 19 | add_custom_target( |
| 20 | avif_coverage |
| 21 | COMMAND ${CMAKE_COMMAND} -E env "LLVM_PROFILE_FILE=${CMAKE_CURRENT_BINARY_DIR}/aviftest.profraw" $<TARGET_FILE:aviftest> |
| 22 | ${CMAKE_CURRENT_SOURCE_DIR}/data |
| 23 | COMMAND ${XCRUN} llvm-profdata merge -sparse ${CMAKE_CURRENT_BINARY_DIR}/aviftest.profraw -o |
| 24 | ${CMAKE_CURRENT_BINARY_DIR}/aviftest.profdata |
| 25 | COMMAND cmake -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/coverage |
| 26 | COMMAND ${XCRUN} llvm-cov show $<TARGET_FILE:aviftest> -instr-profile=${CMAKE_CURRENT_BINARY_DIR}/aviftest.profdata |
| 27 | -project-title=libavif --format html -output-dir=${CMAKE_CURRENT_BINARY_DIR}/coverage |
| 28 | COMMAND echo Coverage report here: ${CMAKE_CURRENT_BINARY_DIR}/coverage/index.html |
| 29 | DEPENDS aviftest |
| 30 | ) |
| 31 | endif() |
| 32 | |
Yannis Guyon | 8d61469 | 2022-04-01 17:44:40 +0000 | [diff] [blame] | 33 | add_executable(avifyuv avifyuv.c) |
| 34 | if(AVIF_LOCAL_LIBGAV1) |
| 35 | set_target_properties(avifyuv PROPERTIES LINKER_LANGUAGE "CXX") |
| 36 | endif() |
| 37 | target_link_libraries(avifyuv avif ${AVIF_PLATFORM_LIBRARIES}) |
Yannis Guyon | 8efe1a8 | 2022-05-16 11:48:01 +0200 | [diff] [blame] | 38 | foreach(AVIFYUV_MODE limited rgb) # Modes drift and premultiply take more than 2 minutes each so they are disabled. |
Yannis Guyon | 2d271dd | 2022-05-13 12:27:06 +0200 | [diff] [blame] | 39 | add_test(NAME avifyuv_${AVIFYUV_MODE} COMMAND avifyuv -m ${AVIFYUV_MODE}) |
| 40 | endforeach() |
Yannis Guyon | 8d61469 | 2022-04-01 17:44:40 +0000 | [diff] [blame] | 41 | |
Wan-Teh Chang | e279707 | 2022-11-11 14:08:33 -0800 | [diff] [blame] | 42 | if(AVIF_ENABLE_GTEST OR AVIF_BUILD_APPS) |
Yannis Guyon | 44b086a | 2022-05-18 10:47:52 +0200 | [diff] [blame] | 43 | enable_language(CXX) |
| 44 | set(CMAKE_CXX_STANDARD 11) |
Vincent Rabaud | f2e4b1a | 2022-07-15 04:51:01 +0200 | [diff] [blame] | 45 | add_library(aviftest_helpers OBJECT gtest/aviftest_helpers.cc) |
Yannis Guyon | 6624e76 | 2022-09-09 18:01:49 +0200 | [diff] [blame] | 46 | target_link_libraries(aviftest_helpers avif_apps) |
Wan-Teh Chang | e279707 | 2022-11-11 14:08:33 -0800 | [diff] [blame] | 47 | endif() |
Vincent Rabaud | f2e4b1a | 2022-07-15 04:51:01 +0200 | [diff] [blame] | 48 | |
Wan-Teh Chang | e279707 | 2022-11-11 14:08:33 -0800 | [diff] [blame] | 49 | ################################################################################ |
| 50 | # GoogleTest |
| 51 | |
| 52 | if(AVIF_ENABLE_GTEST) |
Yannis Guyon | 44b086a | 2022-05-18 10:47:52 +0200 | [diff] [blame] | 53 | if(AVIF_LOCAL_GTEST) |
| 54 | set(GTEST_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/ext/googletest/googletest/include) |
Yannis Guyon | 60c90a2 | 2022-11-08 13:32:04 +0100 | [diff] [blame] | 55 | set(GTEST_LIBRARIES ${CMAKE_SOURCE_DIR}/ext/googletest/build/lib/${AVIF_LIBRARY_PREFIX}gtest${AVIF_LIBRARY_SUFFIX}) |
Wan-Teh Chang | 393f8f5 | 2022-09-06 19:11:03 -0700 | [diff] [blame] | 56 | set(GTEST_MAIN_LIBRARIES |
Yannis Guyon | b451521 | 2022-10-20 21:16:27 +0200 | [diff] [blame] | 57 | ${CMAKE_SOURCE_DIR}/ext/googletest/build/lib/${AVIF_LIBRARY_PREFIX}gtest_main${AVIF_LIBRARY_SUFFIX} |
Wan-Teh Chang | 393f8f5 | 2022-09-06 19:11:03 -0700 | [diff] [blame] | 58 | ) |
Yannis Guyon | 44b086a | 2022-05-18 10:47:52 +0200 | [diff] [blame] | 59 | set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES}) |
| 60 | if(NOT EXISTS ${GTEST_INCLUDE_DIRS}/gtest/gtest.h) |
| 61 | message(FATAL_ERROR "googletest(AVIF_LOCAL_GTEST): ${GTEST_INCLUDE_DIRS}/gtest/gtest.h is missing, bailing out") |
| 62 | elseif(NOT EXISTS ${GTEST_LIBRARIES}) |
| 63 | message(FATAL_ERROR "googletest(AVIF_LOCAL_GTEST): ${GTEST_LIBRARIES} is missing, bailing out") |
| 64 | elseif(NOT EXISTS ${GTEST_MAIN_LIBRARIES}) |
| 65 | message(FATAL_ERROR "googletest(AVIF_LOCAL_GTEST): ${GTEST_MAIN_LIBRARIES} is missing, bailing out") |
| 66 | else() |
| 67 | message(STATUS "Found local ext/googletest") |
| 68 | endif() |
| 69 | else() |
| 70 | find_package(GTest REQUIRED) |
| 71 | endif() |
| 72 | |
Yannis Guyon | 1ce971e | 2022-08-01 20:22:04 +0200 | [diff] [blame] | 73 | add_executable(avifallocationtest gtest/avifallocationtest.cc) |
| 74 | target_link_libraries(avifallocationtest aviftest_helpers ${GTEST_BOTH_LIBRARIES}) |
| 75 | target_include_directories(avifallocationtest PRIVATE ${GTEST_INCLUDE_DIRS}) |
| 76 | add_test(NAME avifallocationtest COMMAND avifallocationtest) |
| 77 | |
Yannis Guyon | 154da76 | 2022-12-13 13:21:39 +0100 | [diff] [blame] | 78 | add_executable(avifalphapremtest gtest/avifalphapremtest.cc) |
| 79 | target_link_libraries(avifalphapremtest aviftest_helpers ${GTEST_BOTH_LIBRARIES}) |
| 80 | target_include_directories(avifalphapremtest PRIVATE ${GTEST_INCLUDE_DIRS}) |
| 81 | add_test(NAME avifalphapremtest COMMAND avifalphapremtest) |
| 82 | |
Wan-Teh Chang | 05c6e07 | 2022-08-19 11:30:59 -0700 | [diff] [blame] | 83 | add_executable(avifchangesettingtest gtest/avifchangesettingtest.cc) |
| 84 | target_link_libraries(avifchangesettingtest aviftest_helpers ${GTEST_BOTH_LIBRARIES}) |
| 85 | target_include_directories(avifchangesettingtest PRIVATE ${GTEST_INCLUDE_DIRS}) |
| 86 | add_test(NAME avifchangesettingtest COMMAND avifchangesettingtest) |
| 87 | |
Yannis Guyon | ab691e0 | 2022-12-09 14:41:29 +0100 | [diff] [blame] | 88 | add_executable(avifcllitest gtest/avifcllitest.cc) |
| 89 | target_link_libraries(avifcllitest aviftest_helpers ${GTEST_BOTH_LIBRARIES}) |
| 90 | target_include_directories(avifcllitest PRIVATE ${GTEST_INCLUDE_DIRS}) |
| 91 | add_test(NAME avifcllitest COMMAND avifcllitest) |
| 92 | |
Yannis Guyon | 440af44 | 2022-06-22 10:42:52 +0200 | [diff] [blame] | 93 | add_executable(avifgridapitest gtest/avifgridapitest.cc) |
Yannis Guyon | d082504 | 2022-06-21 17:59:38 +0200 | [diff] [blame] | 94 | target_link_libraries(avifgridapitest aviftest_helpers ${GTEST_BOTH_LIBRARIES}) |
Yannis Guyon | 44b086a | 2022-05-18 10:47:52 +0200 | [diff] [blame] | 95 | target_include_directories(avifgridapitest PRIVATE ${GTEST_INCLUDE_DIRS}) |
| 96 | add_test(NAME avifgridapitest COMMAND avifgridapitest) |
| 97 | |
Yannis Guyon | 98dd5eb | 2022-06-30 13:33:18 +0200 | [diff] [blame] | 98 | add_library(avifincrtest_helpers OBJECT gtest/avifincrtest_helpers.cc) |
| 99 | target_link_libraries(avifincrtest_helpers avif ${AVIF_PLATFORM_LIBRARIES} ${GTEST_LIBRARIES}) |
| 100 | target_include_directories(avifincrtest_helpers PUBLIC ${GTEST_INCLUDE_DIRS}) |
| 101 | |
| 102 | add_executable(avifincrtest gtest/avifincrtest.cc) |
| 103 | target_link_libraries(avifincrtest aviftest_helpers avifincrtest_helpers) |
Yannis Guyon | 6624e76 | 2022-09-09 18:01:49 +0200 | [diff] [blame] | 104 | add_test(NAME avifincrtest COMMAND avifincrtest ${CMAKE_CURRENT_SOURCE_DIR}/data/) |
Yannis Guyon | 98dd5eb | 2022-06-30 13:33:18 +0200 | [diff] [blame] | 105 | |
Yannis Guyon | 633af6c | 2022-06-23 17:55:07 +0200 | [diff] [blame] | 106 | add_executable(avifmetadatatest gtest/avifmetadatatest.cc) |
Yannis Guyon | 6624e76 | 2022-09-09 18:01:49 +0200 | [diff] [blame] | 107 | target_link_libraries(avifmetadatatest aviftest_helpers ${GTEST_LIBRARIES}) |
Yannis Guyon | 633af6c | 2022-06-23 17:55:07 +0200 | [diff] [blame] | 108 | target_include_directories(avifmetadatatest PRIVATE ${GTEST_INCLUDE_DIRS}) |
Yannis Guyon | 6624e76 | 2022-09-09 18:01:49 +0200 | [diff] [blame] | 109 | add_test(NAME avifmetadatatest COMMAND avifmetadatatest ${CMAKE_CURRENT_SOURCE_DIR}/data/) |
Yannis Guyon | 633af6c | 2022-06-23 17:55:07 +0200 | [diff] [blame] | 110 | |
Yannis Guyon | bfb84ad | 2022-12-08 18:36:34 +0100 | [diff] [blame] | 111 | add_executable(avifopaquetest gtest/avifopaquetest.cc) |
| 112 | target_link_libraries(avifopaquetest aviftest_helpers ${GTEST_BOTH_LIBRARIES}) |
| 113 | target_include_directories(avifopaquetest PRIVATE ${GTEST_INCLUDE_DIRS}) |
| 114 | add_test(NAME avifopaquetest COMMAND avifopaquetest) |
| 115 | |
Yannis Guyon | 93035c1 | 2022-12-16 11:49:59 +0100 | [diff] [blame^] | 116 | add_executable(avifpng16bittest gtest/avifpng16bittest.cc) |
| 117 | target_link_libraries(avifpng16bittest aviftest_helpers ${GTEST_LIBRARIES}) |
| 118 | target_include_directories(avifpng16bittest PRIVATE ${GTEST_INCLUDE_DIRS}) |
| 119 | add_test(NAME avifpng16bittest COMMAND avifpng16bittest ${CMAKE_CURRENT_SOURCE_DIR}/data/) |
| 120 | |
| 121 | add_executable(avifreadimagetest gtest/avifreadimagetest.cc) |
| 122 | target_link_libraries(avifreadimagetest aviftest_helpers ${GTEST_LIBRARIES}) |
| 123 | target_include_directories(avifreadimagetest PRIVATE ${GTEST_INCLUDE_DIRS}) |
| 124 | add_test(NAME avifreadimagetest COMMAND avifreadimagetest ${CMAKE_CURRENT_SOURCE_DIR}/data/) |
| 125 | |
Yannis Guyon | 5a60792 | 2022-07-07 14:28:54 +0200 | [diff] [blame] | 126 | add_executable(avifrgbtoyuvtest gtest/avifrgbtoyuvtest.cc) |
| 127 | target_link_libraries(avifrgbtoyuvtest aviftest_helpers ${GTEST_BOTH_LIBRARIES}) |
| 128 | target_include_directories(avifrgbtoyuvtest PRIVATE ${GTEST_INCLUDE_DIRS}) |
| 129 | add_test(NAME avifrgbtoyuvtest COMMAND avifrgbtoyuvtest) |
| 130 | |
Yannis Guyon | 6971985 | 2022-10-24 10:24:03 +0200 | [diff] [blame] | 131 | add_executable(aviftilingtest gtest/aviftilingtest.cc) |
| 132 | target_link_libraries(aviftilingtest avif_internal ${GTEST_BOTH_LIBRARIES}) |
| 133 | target_include_directories(aviftilingtest PRIVATE ${GTEST_INCLUDE_DIRS}) |
| 134 | add_test(NAME aviftilingtest COMMAND aviftilingtest) |
Wan-Teh Chang | ff32286 | 2022-09-08 09:26:28 -0700 | [diff] [blame] | 135 | |
Yannis Guyon | 440af44 | 2022-06-22 10:42:52 +0200 | [diff] [blame] | 136 | add_executable(avify4mtest gtest/avify4mtest.cc) |
Yannis Guyon | 6624e76 | 2022-09-09 18:01:49 +0200 | [diff] [blame] | 137 | target_link_libraries(avify4mtest aviftest_helpers ${GTEST_BOTH_LIBRARIES}) |
Yannis Guyon | 44b086a | 2022-05-18 10:47:52 +0200 | [diff] [blame] | 138 | target_include_directories(avify4mtest PRIVATE ${GTEST_INCLUDE_DIRS}) |
| 139 | add_test(NAME avify4mtest COMMAND avify4mtest) |
Yannis Guyon | 7e70644 | 2022-10-17 23:50:27 +0200 | [diff] [blame] | 140 | |
Yannis Guyon | b9366f0 | 2022-10-19 03:23:27 +0200 | [diff] [blame] | 141 | if(NOT AVIF_CODEC_AOM OR NOT AVIF_CODEC_AOM_ENCODE OR NOT AVIF_CODEC_AOM_DECODE) |
| 142 | # These tests are supported with aom being the encoder and decoder. If aom is unavailable, |
| 143 | # these tests are disabled because other codecs may not implement all the necessary features. |
| 144 | # For example, SVT-AV1 requires 4:2:0 images with even dimensions of at least 64x64 px. |
| 145 | set_tests_properties(avifallocationtest avifgridapitest avifmetadatatest avifincrtest PROPERTIES DISABLED True) |
| 146 | |
| 147 | message(STATUS "Some tests are disabled because aom is unavailable for encoding or decoding.") |
| 148 | endif() |
| 149 | |
Yannis Guyon | 7e70644 | 2022-10-17 23:50:27 +0200 | [diff] [blame] | 150 | if(NOT libsharpyuv_FOUND) |
| 151 | message(STATUS "Some tests are skipped because libsharpyuv is unavailable.") |
| 152 | endif() |
Yannis Guyon | 44b086a | 2022-05-18 10:47:52 +0200 | [diff] [blame] | 153 | else() |
| 154 | message(STATUS "Most tests are disabled because AVIF_ENABLE_GTEST is OFF.") |
| 155 | endif() |
Vincent Rabaud | f2e4b1a | 2022-07-15 04:51:01 +0200 | [diff] [blame] | 156 | |
| 157 | ################################################################################ |
| 158 | # Bash tests |
| 159 | |
| 160 | if(AVIF_BUILD_APPS) |
| 161 | # When building apps, test the avifenc/avifdec. |
| 162 | # 'are_images_equal' is used to make sure inputs/outputs are unchanged. |
| 163 | add_executable(are_images_equal gtest/are_images_equal.cc) |
Yannis Guyon | 6624e76 | 2022-09-09 18:01:49 +0200 | [diff] [blame] | 164 | target_link_libraries(are_images_equal aviftest_helpers) |
Wan-Teh Chang | 393f8f5 | 2022-09-06 19:11:03 -0700 | [diff] [blame] | 165 | add_test(NAME test_cmd COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/test_cmd.sh ${CMAKE_BINARY_DIR} |
Yannis Guyon | 2709e75 | 2022-09-14 11:27:21 +0200 | [diff] [blame] | 166 | ${CMAKE_CURRENT_SOURCE_DIR}/data |
Wan-Teh Chang | 393f8f5 | 2022-09-06 19:11:03 -0700 | [diff] [blame] | 167 | ) |
Yannis Guyon | 483340b | 2022-10-28 10:53:19 +0200 | [diff] [blame] | 168 | add_test(NAME test_cmd_grid COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/test_cmd_grid.sh ${CMAKE_BINARY_DIR} |
| 169 | ${CMAKE_CURRENT_SOURCE_DIR}/data |
| 170 | ) |
Yannis Guyon | b9366f0 | 2022-10-19 03:23:27 +0200 | [diff] [blame] | 171 | add_test(NAME test_cmd_lossless COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/test_cmd_lossless.sh ${CMAKE_BINARY_DIR} |
| 172 | ${CMAKE_CURRENT_SOURCE_DIR}/data |
| 173 | ) |
| 174 | add_test(NAME test_cmd_metadata COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/test_cmd_metadata.sh ${CMAKE_BINARY_DIR} |
| 175 | ${CMAKE_CURRENT_SOURCE_DIR}/data |
| 176 | ) |
| 177 | |
| 178 | if(NOT AVIF_CODEC_AOM OR NOT AVIF_CODEC_AOM_ENCODE) |
| 179 | # Only aom encoder supports lossless encoding. |
| 180 | set_property(TEST test_cmd_lossless PROPERTY DISABLED True) |
| 181 | |
| 182 | # SVT-AV1 does not support the images with odd dimensions that are used in this test. |
| 183 | if(NOT AVIF_CODEC_RAV1E) |
| 184 | set_property(TEST test_cmd_metadata PROPERTY DISABLED True) |
| 185 | endif() |
| 186 | |
| 187 | message(STATUS "Some tests are disabled because aom is unavailable for encoding.") |
| 188 | endif() |
Vincent Rabaud | f2e4b1a | 2022-07-15 04:51:01 +0200 | [diff] [blame] | 189 | endif() |