FUNCTION(DV_ADD_TEST name)
	SET(EXTRA_SOURCE "")
	SET(LIBS "")

	IF(${ARGC} GREATER 1)
		MATH(EXPR lastIndex "${ARGC}-1")
		FOREACH(index RANGE 1 ${lastIndex})
			IF(${ARGV${index}} MATCHES ".cpp$")
				SET(EXTRA_SOURCE ${EXTRA_SOURCE} ${ARGV${index}})
			ELSE()
				SET(LIBS ${LIBS} ${ARGV${index}})
			ENDIF()
		ENDFOREACH()
	ENDIF()

	ADD_EXECUTABLE(test-${name} ${name}.cpp ${EXTRA_SOURCE})
	ADD_TEST(NAME ${name} COMMAND test-${name})

	TARGET_LINK_LIBRARIES(test-${name} PRIVATE dv::processing boost-ut ${LIBS})

	IF(SANITIZER_TEST_FLAGS)
		SET_TESTS_PROPERTIES(${name} PROPERTIES ENVIRONMENT ${SANITIZER_TEST_FLAGS})
	ENDIF()
ENDFUNCTION()

ADD_SUBDIRECTORY(camera)
ADD_SUBDIRECTORY(cluster)
ADD_SUBDIRECTORY(containers)
ADD_SUBDIRECTORY(core)
ADD_SUBDIRECTORY(data)
ADD_SUBDIRECTORY(depth)
ADD_SUBDIRECTORY(features)
ADD_SUBDIRECTORY(imgproc)
ADD_SUBDIRECTORY(kinematics)
ADD_SUBDIRECTORY(optimization)
ADD_SUBDIRECTORY(imu)
ADD_SUBDIRECTORY(io)
ADD_SUBDIRECTORY(visualization)
ADD_SUBDIRECTORY(noise)
