# Copyright The OpenTelemetry Authors
# SPDX-License-Identifier: Apache-2.0

add_library(metrics_common_test_utils common.cc)
target_link_libraries(metrics_common_test_utils opentelemetry_metrics)

foreach(
  testname
  meter_config_test
  meter_provider_set_test
  meter_provider_sdk_test
  meter_test
  view_registry_test
  aggregation_test
  sum_aggregation_test
  histogram_aggregation_test
  attributes_processor_test
  attributes_hashmap_test
  base2_exponential_histogram_indexer_test
  circular_buffer_counter_test
  cardinality_limit_test
  histogram_test
  sync_metric_storage_counter_test
  sync_metric_storage_gauge_test
  sync_metric_storage_histogram_test
  sync_metric_storage_up_down_counter_test
  async_metric_storage_test
  multi_metric_storage_test
  observer_result_test
  sync_instruments_test
  async_instruments_test
  metric_collector_test
  metric_reader_test
  observable_registry_test
  periodic_exporting_metric_reader_test
  instrument_metadata_validator_test)
  add_executable(${testname} "${testname}.cc")
  target_link_libraries(
    ${testname} ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}
    metrics_common_test_utils opentelemetry_resources)
  target_compile_definitions(${testname} PRIVATE UNIT_TESTING)
  gtest_add_tests(
    TARGET ${testname}
    TEST_PREFIX metrics.
    TEST_LIST ${testname})
endforeach()

if(WITH_BENCHMARK)
  add_executable(attributes_processor_benchmark
                 attributes_processor_benchmark.cc)
  target_link_libraries(attributes_processor_benchmark benchmark::benchmark
                        ${CMAKE_THREAD_LIBS_INIT} opentelemetry_common)

  add_executable(attributes_hashmap_benchmark attributes_hashmap_benchmark.cc)
  target_link_libraries(attributes_hashmap_benchmark benchmark::benchmark
                        ${CMAKE_THREAD_LIBS_INIT} opentelemetry_common)

  add_executable(base2_exponential_histogram_indexer_benchmark
                 base2_exponential_histogram_indexer_benchmark.cc)
  target_link_libraries(
    base2_exponential_histogram_indexer_benchmark benchmark::benchmark
    opentelemetry_metrics ${CMAKE_THREAD_LIBS_INIT} opentelemetry_common)

  add_executable(histogram_aggregation_benchmark
                 histogram_aggregation_benchmark.cc)
  target_link_libraries(
    histogram_aggregation_benchmark benchmark::benchmark
    ${CMAKE_THREAD_LIBS_INIT} metrics_common_test_utils opentelemetry_common
    opentelemetry_resources)

  add_executable(measurements_benchmark measurements_benchmark.cc)
  target_link_libraries(
    measurements_benchmark benchmark::benchmark opentelemetry_metrics
    opentelemetry_resources ${CMAKE_THREAD_LIBS_INIT} opentelemetry_common)
  add_executable(sum_aggregation_benchmark sum_aggregation_benchmark.cc)
  target_link_libraries(
    sum_aggregation_benchmark benchmark::benchmark ${CMAKE_THREAD_LIBS_INIT}
    metrics_common_test_utils opentelemetry_common opentelemetry_resources)
endif()

add_subdirectory(exemplar)
