// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SRC_UI_LIB_ESCHER_TEST_TEST_WITH_VK_VALIDATION_LAYER_MACROS_H_
#define SRC_UI_LIB_ESCHER_TEST_TEST_WITH_VK_VALIDATION_LAYER_MACROS_H_

#include "src/ui/lib/escher/test/test_with_vk_validation_layer_macros_internal.h"

// Note: All the macros below can be only used in classes containing  and its derived
// classes (e.g. TestWithVkValidationLayer)
//
// Disable code formatter to allow for longer line length.
// clang-format off

// By default, after test case in TestWithVkValidationLayer finishes, it will check if there
// are Vulkan validation debug reports, and there will be an EXPECT() failure if there is any
// validation errors / warnings / performance warnings.
//
// These macros suppress the after-test validation check by removing all debug reports (or all
// debug reports with specific flag bits).
#define SUPPRESS_VK_VALIDATION_DEBUG_REPORTS()             \
  do {                                                     \
    CHECK_IS_TEST_WITH_VK_VALIDATION_LAYER_DEFAULT();      \
    vk_debug_report_collector().SuppressAllDebugReports(); \
  } while (0)
#define SUPPRESS_VK_VALIDATION_ERRORS()                                                           \
  do {                                                                                            \
    CHECK_IS_TEST_WITH_VK_VALIDATION_LAYER_DEFAULT();                                             \
    vk_debug_report_collector().SuppressDebugReportsWithFlag(vk::DebugReportFlagBitsEXT::eError); \
  } while (0)
#define SUPPRESS_VK_VALIDATION_WARNINGS()                                                           \
  do {                                                                                              \
    CHECK_IS_TEST_WITH_VK_VALIDATION_LAYER_DEFAULT();                                               \
    vk_debug_report_collector().SuppressDebugReportsWithFlag(vk::DebugReportFlagBitsEXT::eWarning); \
  } while (0)
#define SUPPRESS_VK_VALIDATION_PERFORMANCE_WARNINGS()                                                          \
  do {                                                                                                         \
    CHECK_IS_TEST_WITH_VK_VALIDATION_LAYER_DEFAULT();                                                          \
    vk_debug_report_collector().SuppressDebugReportsWithFlag(vk::DebugReportFlagBitsEXT::ePerformanceWarning); \
  } while (0)

// Vulkan validation message check macros.
// EXPECT_... macro will not terminate the test when it fails.
#define EXPECT_VULKAN_VALIDATION_ERRORS_GE(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(ERRORS, std::greater_equal<size_t>, <, num_threshold)
#define EXPECT_VULKAN_VALIDATION_ERRORS_GT(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(ERRORS, std::greater<size_t>,       <=, num_threshold)
#define EXPECT_VULKAN_VALIDATION_ERRORS_LE(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(ERRORS, std::less_equal<size_t>,    >, num_threshold)
#define EXPECT_VULKAN_VALIDATION_ERRORS_LT(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(ERRORS, std::less<size_t>,          >=, num_threshold)
#define EXPECT_VULKAN_VALIDATION_ERRORS_EQ(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(ERRORS, std::equal_to<size_t>,      !=, num_threshold)
#define EXPECT_VULKAN_VALIDATION_ERRORS_NE(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(ERRORS, std::not_equal_to<size_t>,  ==, num_threshold)

#define EXPECT_VULKAN_VALIDATION_WARNINGS_GE(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(WARNINGS, std::greater_equal<size_t>, <, num_threshold)
#define EXPECT_VULKAN_VALIDATION_WARNINGS_GT(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(WARNINGS, std::greater<size_t>,       <=, num_threshold)
#define EXPECT_VULKAN_VALIDATION_WARNINGS_LE(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(WARNINGS, std::less_equal<size_t>,    >, num_threshold)
#define EXPECT_VULKAN_VALIDATION_WARNINGS_LT(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(WARNINGS, std::less<size_t>,          >=, num_threshold)
#define EXPECT_VULKAN_VALIDATION_WARNINGS_EQ(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(WARNINGS, std::equal_to<size_t>,      !=, num_threshold)
#define EXPECT_VULKAN_VALIDATION_WARNINGS_NE(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(WARNINGS, std::not_equal_to<size_t>,  ==, num_threshold)

#define EXPECT_VULKAN_VALIDATION_PERFORMANCE_WARNINGS_GE(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(PERFORMANCE_WARNINGS, std::greater_equal<size_t>, <,  num_threshold)
#define EXPECT_VULKAN_VALIDATION_PERFORMANCE_WARNINGS_GT(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(PERFORMANCE_WARNINGS, std::greater<size_t>,       <=, num_threshold)
#define EXPECT_VULKAN_VALIDATION_PERFORMANCE_WARNINGS_LE(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(PERFORMANCE_WARNINGS, std::less_equal<size_t>,    >,  num_threshold)
#define EXPECT_VULKAN_VALIDATION_PERFORMANCE_WARNINGS_LT(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(PERFORMANCE_WARNINGS, std::less<size_t>,          >=, num_threshold)
#define EXPECT_VULKAN_VALIDATION_PERFORMANCE_WARNINGS_EQ(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(PERFORMANCE_WARNINGS, std::equal_to<size_t>,      !=, num_threshold)
#define EXPECT_VULKAN_VALIDATION_PERFORMANCE_WARNINGS_NE(num_threshold) EXPECT_VULKAN_VALIDATION_REPORT_GENERATOR_(PERFORMANCE_WARNINGS, std::not_equal_to<size_t>,  ==, num_threshold)

// ASSERT_... macro will terminate the test when it fails.
#define ASSERT_VULKAN_VALIDATION_ERRORS_GE(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(ERRORS, std::greater_equal<size_t>, <, num_threshold)
#define ASSERT_VULKAN_VALIDATION_ERRORS_GT(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(ERRORS, std::greater<size_t>,       <=, num_threshold)
#define ASSERT_VULKAN_VALIDATION_ERRORS_LE(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(ERRORS, std::less_equal<size_t>,    >, num_threshold)
#define ASSERT_VULKAN_VALIDATION_ERRORS_LT(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(ERRORS, std::less<size_t>,          >=, num_threshold)
#define ASSERT_VULKAN_VALIDATION_ERRORS_EQ(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(ERRORS, std::equal_to<size_t>,      !=, num_threshold)
#define ASSERT_VULKAN_VALIDATION_ERRORS_NE(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(ERRORS, std::not_equal_to<size_t>,  ==, num_threshold)

#define ASSERT_VULKAN_VALIDATION_WARNINGS_GE(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(WARNINGS, std::greater_equal<size_t>, <, num_threshold)
#define ASSERT_VULKAN_VALIDATION_WARNINGS_GT(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(WARNINGS, std::greater<size_t>,       <=, num_threshold)
#define ASSERT_VULKAN_VALIDATION_WARNINGS_LE(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(WARNINGS, std::less_equal<size_t>,    >, num_threshold)
#define ASSERT_VULKAN_VALIDATION_WARNINGS_LT(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(WARNINGS, std::less<size_t>,          >=, num_threshold)
#define ASSERT_VULKAN_VALIDATION_WARNINGS_EQ(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(WARNINGS, std::equal_to<size_t>,      !=, num_threshold)
#define ASSERT_VULKAN_VALIDATION_WARNINGS_NE(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(WARNINGS, std::not_equal_to<size_t>,  ==, num_threshold)

#define ASSERT_VULKAN_VALIDATION_PERFORMANCE_WARNINGS_GE(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(PERFORMANCE_WARNINGS, std::greater_equal<size_t>, <,  num_threshold)
#define ASSERT_VULKAN_VALIDATION_PERFORMANCE_WARNINGS_GT(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(PERFORMANCE_WARNINGS, std::greater<size_t>,       <=, num_threshold)
#define ASSERT_VULKAN_VALIDATION_PERFORMANCE_WARNINGS_LE(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(PERFORMANCE_WARNINGS, std::less_equal<size_t>,    >,  num_threshold)
#define ASSERT_VULKAN_VALIDATION_PERFORMANCE_WARNINGS_LT(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(PERFORMANCE_WARNINGS, std::less<size_t>,          >=, num_threshold)
#define ASSERT_VULKAN_VALIDATION_PERFORMANCE_WARNINGS_EQ(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(PERFORMANCE_WARNINGS, std::equal_to<size_t>,      !=, num_threshold)
#define ASSERT_VULKAN_VALIDATION_PERFORMANCE_WARNINGS_NE(num_threshold) ASSERT_VULKAN_VALIDATION_REPORT_GENERATOR_(PERFORMANCE_WARNINGS, std::not_equal_to<size_t>,  ==, num_threshold)

#define EXPECT_NO_VULKAN_VALIDATION_ERRORS() EXPECT_VULKAN_VALIDATION_ERRORS_EQ(0)
#define EXPECT_NO_VULKAN_VALIDATION_WARNINGS() EXPECT_VULKAN_VALIDATION_WARNINGS_EQ(0)
#define EXPECT_NO_VULKAN_VALIDATION_PERFORMANCE_WARNINGS() \
  EXPECT_VULKAN_VALIDATION_PERFORMANCE_WARNINGS_EQ(0)

#define ASSERT_NO_VULKAN_VALIDATION_ERRORS() ASSERT_VULKAN_VALIDATION_ERRORS_EQ(0)
#define ASSERT_NO_VULKAN_VALIDATION_WARNINGS() ASSERT_VULKAN_VALIDATION_WARNINGS_EQ(0)
#define ASSERT_NO_VULKAN_VALIDATION_PERFORMANCE_WARNINGS() \
  ASSERT_VULKAN_VALIDATION_PERFORMANCE_WARNINGS_EQ(0)

#define EXPECT_VULKAN_VALIDATION_OK()                   \
  do {                                                  \
    EXPECT_NO_VULKAN_VALIDATION_ERRORS();               \
    EXPECT_NO_VULKAN_VALIDATION_WARNINGS();             \
    EXPECT_NO_VULKAN_VALIDATION_PERFORMANCE_WARNINGS(); \
  } while (0)

#define ASSERT_VULKAN_VALIDATION_OK()                   \
  do {                                                  \
    ASSERT_NO_VULKAN_VALIDATION_ERRORS();               \
    ASSERT_NO_VULKAN_VALIDATION_WARNINGS();             \
    ASSERT_NO_VULKAN_VALIDATION_PERFORMANCE_WARNINGS(); \
  } while (0)
// clang-format on

#endif  // SRC_UI_LIB_ESCHER_TEST_TEST_WITH_VK_VALIDATION_LAYER_MACROS_H_
