## Copyright 2009-2021 Intel Corporation
## SPDX-License-Identifier: Apache-2.0

FILE(GLOB PRIMITIVE_TESTS "${PROJECT_SOURCE_DIR}/tests/primitives/*.xml")
SET(SHADERS eyelight;uv;Ng;primID;occlusion)

FOREACH(xml ${PRIMITIVE_TESTS})
  FOREACH(shader ${SHADERS})
    GET_FILENAME_COMPONENT(FN ${xml} NAME_WE)
    SET(testname "prim_${FN}_${shader}")
    SET(compare_threshold "55")

    # TODO: APPLE with AVX2 enabled have a sphere cap intersection problem with linear curves
    IF ((testname MATCHES "prim_curves_linear_flat.*") AND ((testname MATCHES ".*uv") OR testname MATCHES ".*Ng"))
      IF (APPLE AND (EMBREE_ISA_AVX2 OR EMBREE_ISA_AVX512))
        SET(compare_threshold "200")
      ENDIF()
    ENDIF()

    # TODO: linear_flat_mblur and linear_flat_far_mblur tests have different results on sycl - issue: 2531
    IF ((testname MATCHES "prim_curves_linear_flat.*mblur.*") AND ((testname MATCHES ".*uv") OR (testname MATCHES ".*Ng") OR (testname MATCHES ".*eyelight")))
      IF (EMBREE_SYCL_SUPPORT)
        SET(compare_threshold "700")
      ENDIF()
    ENDIF()

    # For unkown hardware on public CI
    IF (testname MATCHES "prim_curves_bezier_normal_oriented_mblur_occlusion")
      SET(compare_threshold "60")
    ENDIF()

    ADD_EMBREE_TEST_ECS(${testname} embree_viewer XML ${xml} 
      REFERENCE_SUFFIX _${shader}
      ARGS
        --shader ${shader} 
        --time 0.5 
        --compare-threshold ${compare_threshold}
    )
  ENDFOREACH()
ENDFOREACH()


IF (EMBREE_TESTING_INSTALL_TESTS)
  # test resources
  INSTALL(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/primitives" DESTINATION "${CMAKE_INSTALL_TESTDIR}/tests" COMPONENT testing PATTERN "*.py" EXCLUDE)
  INSTALL(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/models" DESTINATION "${CMAKE_INSTALL_TESTDIR}/tests" COMPONENT testing PATTERN "*.py" EXCLUDE)

  # generated file for creating the testing project in install destination
  file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/testproject-CMakeLists.txt"
    "# Copyright 2009-2021 Intel Corporation\n"
    "# SPDX-License-Identifier: Apache-2.0\n"
    "# This file was automatically generated\n"
    "cmake_minimum_required(VERSION 3.5)\n"
    "\n"
    "project(embree-testing)\n"
    "\n"
    "# allowing EMBREE_TESTING_INTENSITY to be overriden\n"
    "unset(TESTING_INTENSITY_SAVE CACHE)\n"
    "set(TESTING_INTENSITY_SAVE \${EMBREE_TESTING_INTENSITY})\n"
    "unset(EMBREE_TESTING_INTENSITY CACHE)\n"
    "include(\"../${CMAKE_INSTALL_LIBDIR}/cmake/embree-${EMBREE_VERSION}/embree-config.cmake\")\n"
    "if (DEFINED TESTING_INTENSITY_SAVE)\n"
    "  set(EMBREE_TESTING_INTENSITY \${TESTING_INTENSITY_SAVE})\n"
    "endif()\n"
    "\n"
    "\n"
    "SET(EMBREE_TESTING_PACKAGE_TEST_PROJECT ON)\n"
    "SET(EMBREE_INSTALL_BINDIR ${CMAKE_INSTALL_BINDIR})\n"
    "SET(BUILD_TESTING ON)\n"
    "include(test.cmake)\n"
    "\n"
    "\n"
    "if (EMBREE_TESTING_FILTER_TESTS_FILE)\n"
    "  if (EXISTS \"\${EMBREE_TESTING_FILTER_TESTS_FILE}\")\n"
    "    file(READ \"\${EMBREE_TESTING_FILTER_TESTS_FILE}\" lines)\n"
    "    string(REGEX REPLACE \"\\n\" \";\" testnames \"\${lines}\")\n"
    "    list(APPEND EMBREE_TESTING_FILTER_TESTNAMES \${testnames})\n"
    "  else()\n"
    "    message(FATAL_ERROR \"EMBREE_TESTING_FILTER_TESTS_FILE\" was specified as '\${EMBREE_TESTING_FILTER_TESTS_FILE}' but file could not be opened.)\n"
    "  endif()\n"
    "endif()\n"
    "\n"
    "message(\"filter:                            \\\"${EMBREE_TESTING_FILTER_TESTNAMES}\\\"\")\n"
    "message(\"BUILD_TESTING:                     \\\"\${BUILD_TESTING}\\\"\")\n"
    "message(\"EMBREE_TESTING_INSTALL_TESTS:      \\\"\${EMBREE_TESTING_INSTALL_TESTS}\\\"\")\n"
    "message(\"EMBREE_SYCL_SUPPORT:               \\\"\${EMBREE_SYCL_SUPPORT}\\\"\")\n"
    "message(\"EMBREE_TESTING_INTENSITY:          \\\"\${EMBREE_TESTING_INTENSITY}\\\"\")\n"
    "message(\"EMBREE_TESTING_ONLY_SYCL_TESTS:    \\\"\${EMBREE_TESTING_ONLY_SYCL_TESTS}\\\"\")\n"
    "message(\"EMBREE_GEOMETRY_TRIANGLE:          \\\"\${EMBREE_GEOMETRY_TRIANGLE}\\\"\")\n"
    "message(\"EMBREE_GEOMETRY_QUAD:              \\\"\${EMBREE_GEOMETRY_QUAD}\\\"\")\n"
    "message(\"EMBREE_GEOMETRY_GRID:              \\\"\${EMBREE_GEOMETRY_GRID}\\\"\")\n"
    "message(\"EMBREE_GEOMETRY_CURVE:             \\\"\${EMBREE_GEOMETRY_CURVE}\\\"\")\n"
    "message(\"EMBREE_GEOMETRY_SUBDIVISION:       \\\"\${EMBREE_GEOMETRY_SUBDIVISION}\\\"\")\n"
    "message(\"EMBREE_GEOMETRY_USER:              \\\"\${EMBREE_GEOMETRY_USER}\\\"\")\n"
    "message(\"EMBREE_GEOMETRY_INSTANCE:          \\\"\${EMBREE_GEOMETRY_INSTANCE}\\\"\")\n"
    "message(\"EMBREE_GEOMETRY_INSTANCE_ARRAY:    \\\"\${EMBREE_GEOMETRY_INSTANCE_ARRAY}\\\"\")\n"
    "\n"
    "include(embree-addtests.cmake)\n"
  )
  INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/testproject-CMakeLists.txt"
            DESTINATION "${CMAKE_INSTALL_TESTDIR}"
            RENAME "CMakeLists.txt"
            COMPONENT testing)

  FILE(GLOB packfiles "${PROJECT_SOURCE_DIR}/tests/gta-configs/*")
  foreach(f ${packfiles})
    INSTALL(FILES "${f}"
              DESTINATION "${CMAKE_INSTALL_TESTDIR}"
              COMPONENT testing)
  endforeach()

  # generated file adding tests
  INSTALL(FILES "${EMBREE_INSTALL_CTESTTESTFILE}"
            DESTINATION "${CMAKE_INSTALL_TESTDIR}"
            COMPONENT testing)

  # needed for adding tests in install destination
  INSTALL(FILES "${PROJECT_SOURCE_DIR}/common/cmake/test.cmake"
            DESTINATION "${CMAKE_INSTALL_TESTDIR}"
            COMPONENT testing)

ENDIF()