set(TESTS
clustering
deprecated
edge
hierarchy
indexing
inspection
miscellaneous
opclass_brin
opclass_btree
opclass_gist
opclass_hash
opclass_spgist
regions
traversal
type
vertex
# Keep this last: it drops and recreates h3 to exercise upgrades.
extension
)
if(PostgreSQL_REGRESS)
if(WIN32)
set(H3_REGRESS_PATH_SEP ";")
else()
set(H3_REGRESS_PATH_SEP ":")
endif()
if(CMAKE_CONFIGURATION_TYPES)
set(H3_REGRESS_TEMP_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/regress-postgresql-$<CONFIG>.conf")
set(H3_REGRESS_TEMP_CONFIG_DYNAMIC_LIBRARY_PATH
"$<TARGET_FILE_DIR:postgresql_h3>${H3_REGRESS_PATH_SEP}$libdir")
else()
set(H3_REGRESS_TEMP_CONFIG "${CMAKE_CURRENT_BINARY_DIR}/regress-postgresql.conf")
set(H3_REGRESS_TEMP_CONFIG_DYNAMIC_LIBRARY_PATH
"${CMAKE_BINARY_DIR}/h3${H3_REGRESS_PATH_SEP}$libdir")
endif()
# Force pg_regress temp clusters to load extensions from the build tree.
set(H3_REGRESS_TEMP_CONFIG_CONTENT
"dynamic_library_path = '${H3_REGRESS_TEMP_CONFIG_DYNAMIC_LIBRARY_PATH}'\n")
if(PostgreSQL_VERSION_MAJOR VERSION_GREATER_EQUAL "18")
string(PREPEND H3_REGRESS_TEMP_CONFIG_CONTENT
"extension_control_path = '${CMAKE_BINARY_DIR}/share${H3_REGRESS_PATH_SEP}$system'\n")
endif()
if(CMAKE_CONFIGURATION_TYPES)
file(GENERATE OUTPUT "${H3_REGRESS_TEMP_CONFIG}" CONTENT "${H3_REGRESS_TEMP_CONFIG_CONTENT}")
else()
file(WRITE "${H3_REGRESS_TEMP_CONFIG}" "${H3_REGRESS_TEMP_CONFIG_CONTENT}")
endif()
add_test(
NAME h3_regress
COMMAND ${PostgreSQL_REGRESS}
--temp-instance=${CMAKE_BINARY_DIR}/tmp
--temp-config=${H3_REGRESS_TEMP_CONFIG}
--bindir=${PostgreSQL_BIN_DIR}
--inputdir=${CMAKE_CURRENT_SOURCE_DIR}
--outputdir=${CMAKE_CURRENT_BINARY_DIR}
--load-extension h3
${TESTS}
)
if(PostgreSQL_VERSION_MAJOR VERSION_GREATER_EQUAL "18")
set(H3_EXTUPGRADE_EXTENSION_CONTROL_PATH
"${CMAKE_BINARY_DIR}/share${H3_REGRESS_PATH_SEP}$system")
else()
set(H3_EXTUPGRADE_EXTENSION_CONTROL_PATH "")
endif()
endif()
PostgreSQL_add_extupgrade_test(
NAME h3_validate_extupgrade
EXTNAME h3
FROM_VERSION 0.1.0
TO_VERSION ${INSTALL_VERSION}
TEMP_ROOT ${CMAKE_CURRENT_BINARY_DIR}/extupgrade-h3
TEMP_PORT 65441
DYNAMIC_LIBRARY_PATH ${H3_REGRESS_TEMP_CONFIG_DYNAMIC_LIBRARY_PATH}
EXTENSION_CONTROL_PATH ${H3_EXTUPGRADE_EXTENSION_CONTROL_PATH}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
WATCH_PATHS
CMakeLists.txt
cmake/AddPostgreSQLExtension.cmake
h3/CMakeLists.txt
h3/sql/install
h3/sql/updates
)
# @TODO: Figure out how to inline on MacOS
set(H3_INLINED_TEST_ENABLED FALSE)
if(CMAKE_CONFIGURATION_TYPES)
# Multi-config generators (e.g. Visual Studio) select the active config at
# test time, so we can safely register this test and scope it to Release.
set(H3_INLINED_TEST_ENABLED TRUE)
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
# Single-config generators only have one active build type in the tree.
# This check asserts Release-quality optimization, not debug behavior.
set(H3_INLINED_TEST_ENABLED TRUE)
endif()
if(NOT APPLE AND H3_INLINED_TEST_ENABLED)
add_test(
NAME h3_inlined
COMMAND sh -c "! objdump -D \"$<TARGET_FILE:postgresql_h3>\" | grep radsToDegs"
CONFIGURATIONS Release
)
endif()