diff --git a/shared/test/common/test_macros/header/common_matchers.h b/shared/test/common/test_macros/header/common_matchers.h new file mode 100644 index 0000000000..b2eb9562c8 --- /dev/null +++ b/shared/test/common/test_macros/header/common_matchers.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2021 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +using IsGen8 = IsGfxCore; +using IsGen9 = IsGfxCore; +using IsGen11HP = IsGfxCore; +using IsGen11LP = IsGfxCore; +using IsGen12LP = IsGfxCore; +using IsXeHpCore = IsGfxCore; +using IsXeHpgCore = IsGfxCore; +using IsXeHpcCore = IsGfxCore; + +using IsAtMostGen11 = IsAtMostGfxCore; + +using IsAtMostGen12lp = IsAtMostGfxCore; + +using IsAtLeastGen12lp = IsAtLeastGfxCore; + +using IsWithinXeGfxFamily = IsWithinGfxCore; + +using IsAtLeastXeHpCore = IsAtLeastGfxCore; +using IsAtMostXeHpCore = IsAtMostGfxCore; + +using IsAtLeastXeHpgCore = IsAtLeastGfxCore; +using IsAtMostXeHpgCore = IsAtMostGfxCore; + +using IsAtLeastXeHpcCore = IsAtLeastGfxCore; + +using IsSKL = IsProduct; +using IsKBL = IsProduct; +using IsCFL = IsProduct; + +using IsBXT = IsProduct; +using IsGLK = IsProduct; + +using IsICLLP = IsProduct; +using IsEHL = IsProduct; +using IsLKF = IsProduct; + +using IsTGLLP = IsProduct; +using IsDG1 = IsProduct; +using IsADLS = IsProduct; +using IsADLP = IsProduct; +using IsRKL = IsProduct; + +using IsXEHP = IsProduct; + +using IsDG2 = IsProduct; + +using IsPVC = IsProduct; diff --git a/shared/test/common/test_macros/header/per_product_test_definitions.h b/shared/test/common/test_macros/header/per_product_test_definitions.h new file mode 100644 index 0000000000..9213defae5 --- /dev/null +++ b/shared/test/common/test_macros/header/per_product_test_definitions.h @@ -0,0 +1,214 @@ +/* + * Copyright (C) 2021 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +#ifdef TESTS_GEN8 +#define GEN8TEST_F(test_fixture, test_name) GENTEST_F(IGFX_GEN8_CORE, test_fixture, test_name) +#define GEN8TEST_P(test_fixture, test_name) GENTEST_P(IGFX_GEN8_CORE, test_fixture, test_name) +#endif +#ifdef TESTS_GEN9 +#define GEN9TEST_F(test_fixture, test_name) GENTEST_F(IGFX_GEN9_CORE, test_fixture, test_name) +#define GEN9TEST_P(test_fixture, test_name) GENTEST_P(IGFX_GEN9_CORE, test_fixture, test_name) +#endif +#ifdef TESTS_GEN11 +#define GEN11TEST_F(test_fixture, test_name) GENTEST_F(IGFX_GEN11_CORE, test_fixture, test_name) +#define GEN11TEST_P(test_fixture, test_name) GENTEST_P(IGFX_GEN11_CORE, test_fixture, test_name) +#endif +#ifdef TESTS_XE_HP_CORE +#define XE_HP_CORE_TEST_F(test_fixture, test_name) GENTEST_F(IGFX_XE_HP_CORE, test_fixture, test_name) +#define XE_HP_CORE_TEST_P(test_fixture, test_name) GENTEST_P(IGFX_XE_HP_CORE, test_fixture, test_name) +#endif +#ifdef TESTS_XE_HPG_CORE +#define XE_HPG_CORETEST_F(test_fixture, test_name) GENTEST_F(IGFX_XE_HPG_CORE, test_fixture, test_name) +#define XE_HPG_CORETEST_P(test_fixture, test_name) GENTEST_P(IGFX_XE_HPG_CORE, test_fixture, test_name) +#endif +#ifdef TESTS_XE_HPC_CORE +#define XE_HPC_CORETEST_F(test_fixture, test_name) GENTEST_F(IGFX_XE_HPC_CORE, test_fixture, test_name) +#define XE_HPC_CORETEST_P(test_fixture, test_name) GENTEST_P(IGFX_XE_HPC_CORE, test_fixture, test_name) +#endif +#ifdef TESTS_GEN12LP +#define GEN12LPTEST_F(test_fixture, test_name) GENTEST_F(IGFX_GEN12LP_CORE, test_fixture, test_name) +#define GEN12LPTEST_P(test_fixture, test_name) GENTEST_P(IGFX_GEN12LP_CORE, test_fixture, test_name) +#endif +#ifdef TESTS_GEN8 +#define BDWTEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_GEN8_CORE, IGFX_BROADWELL) +#define BDWTEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_GEN8_CORE, \ + IGFX_BROADWELL) +#endif + +#ifdef TESTS_SKL +#define SKLTEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_GEN9_CORE, IGFX_SKYLAKE) +#define SKLTEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_GEN9_CORE, \ + IGFX_SKYLAKE) +#endif +#ifdef TESTS_KBL +#define KBLTEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_GEN9_CORE, IGFX_KABYLAKE) +#define KBLTEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_GEN9_CORE, \ + IGFX_KABYLAKE) +#endif +#ifdef TESTS_CFL +#define CFLTEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_GEN9_CORE, IGFX_COFFEELAKE) +#define CFLTEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_GEN9_CORE, \ + IGFX_COFFEELAKE) +#endif + +#ifdef TESTS_GLK +#define GLKTEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_GEN9_CORE, IGFX_GEMINILAKE) +#define GLKTEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_GEN9_CORE, \ + IGFX_GEMINILAKE) +#endif +#ifdef TESTS_BXT +#define BXTTEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_GEN9_CORE, IGFX_BROXTON) +#define BXTTEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_GEN9_CORE, \ + IGFX_BROXTON) +#endif + +#ifdef TESTS_ICLLP +#define ICLLPTEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_GEN11_CORE, IGFX_ICELAKE_LP) +#define ICLLPTEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_GEN11_CORE, \ + IGFX_ICELAKE_LP) +#endif +#ifdef TESTS_LKF +#define LKFTEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_GEN11_CORE, IGFX_LAKEFIELD) +#define LKFTEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_GEN11_CORE, \ + IGFX_LAKEFIELD) +#endif +#ifdef TESTS_EHL +#define EHLTEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_GEN11_CORE, IGFX_ELKHARTLAKE) +#define EHLTEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_GEN11_CORE, \ + IGFX_ELKHARTLAKE) +#endif + +#ifdef TESTS_TGLLP +#define TGLLPTEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_GEN12LP_CORE, IGFX_TIGERLAKE_LP) +#define TGLLPTEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_GEN12LP_CORE, \ + IGFX_TIGERLAKE_LP) +#endif +#ifdef TESTS_DG1 +#define DG1TEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_GEN12LP_CORE, IGFX_DG1) +#define DG1TEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_GEN12LP_CORE, \ + IGFX_DG1) +#endif +#ifdef TESTS_RKL +#define RKLTEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_GEN12LP_CORE, IGFX_ROCKETLAKE) +#define RKLTEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_GEN12LP_CORE, \ + IGFX_ROCKETLAKE) +#endif +#ifdef TESTS_ADLS +#define ADLSTEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_GEN12LP_CORE, IGFX_ALDERLAKE_S) +#define ADLSTEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_GEN12LP_CORE, \ + IGFX_ALDERLAKE_S) +#endif +#ifdef TESTS_ADLP +#define ADLPTEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_GEN12LP_CORE, IGFX_ALDERLAKE_P) +#define ADLPTEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_GEN12LP_CORE, \ + IGFX_ALDERLAKE_P) +#endif + +#ifdef TESTS_XE_HP_SDV +#define XEHPTEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_XE_HP_CORE, IGFX_XE_HP_SDV) +#define XEHPTEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_XE_HP_CORE, \ + IGFX_XE_HP_SDV) +#endif + +#ifdef TESTS_DG2 +#define DG2TEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_XE_HPG_CORE, IGFX_DG2) +#define DG2TEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_XE_HPG_CORE, \ + IGFX_DG2) +#endif + +#ifdef TESTS_PVC +#define PVCTEST_F(test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + IGFX_XE_HPC_CORE, IGFX_PVC) +#define PVCTEST_P(test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, \ + IGFX_XE_HPC_CORE, \ + IGFX_PVC) +#endif diff --git a/shared/test/common/test_macros/header/per_product_test_selector.h b/shared/test/common/test_macros/header/per_product_test_selector.h new file mode 100644 index 0000000000..e275926183 --- /dev/null +++ b/shared/test/common/test_macros/header/per_product_test_selector.h @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2021 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +#include "shared/test/common/test_macros/header/per_product_test_selector_definitions.h" + +#define FAMILY_SELECTOR(family, methodName) \ + switch (family) { \ + case IGFX_GEN8_CORE: \ + BDW_TYPED_TEST(methodName) \ + break; \ + case IGFX_GEN9_CORE: \ + SKL_TYPED_TEST(methodName) \ + break; \ + case IGFX_GEN11_CORE: \ + ICL_TYPED_TEST(methodName) \ + break; \ + case IGFX_GEN12LP_CORE: \ + TGLLP_TYPED_TEST(methodName) \ + break; \ + case IGFX_XE_HP_CORE: \ + XEHP_TYPED_TEST(methodName) \ + break; \ + case IGFX_XE_HPG_CORE: \ + XEHPG_TYPED_TEST(methodName) \ + break; \ + case IGFX_XE_HPC_CORE: \ + PVC_TYPED_TEST(methodName) \ + break; \ + default: \ + ASSERT_TRUE((false && "Unknown hardware family")); \ + break; \ + } + +#define CALL_IF_SUPPORTED(cmdSetBase, expression) \ + { \ + bool supported = false; \ + switch (::renderCoreFamily) { \ + case IGFX_GEN8_CORE: \ + supported = BDW_SUPPORTED_TEST(cmdSetBase); \ + break; \ + case IGFX_GEN9_CORE: \ + supported = SKL_SUPPORTED_TEST(cmdSetBase); \ + break; \ + case IGFX_GEN11_CORE: \ + supported = ICL_SUPPORTED_TEST(cmdSetBase); \ + break; \ + case IGFX_GEN12LP_CORE: \ + supported = TGLLP_SUPPORTED_TEST(cmdSetBase); \ + break; \ + case IGFX_XE_HP_CORE: \ + supported = XEHP_SUPPORTED_TEST(cmdSetBase); \ + break; \ + case IGFX_XE_HPG_CORE: \ + supported = XEHPG_SUPPORTED_TEST(cmdSetBase); \ + break; \ + case IGFX_XE_HPC_CORE: \ + supported = PVC_SUPPORTED_TEST(cmdSetBase); \ + break; \ + default: \ + ASSERT_TRUE((false && "Unknown hardware family")); \ + break; \ + } \ + if (supported) { \ + expression; \ + } \ + } diff --git a/shared/test/common/test_macros/header/per_product_test_selector_definitions.h b/shared/test/common/test_macros/header/per_product_test_selector_definitions.h new file mode 100644 index 0000000000..e986c9c1f2 --- /dev/null +++ b/shared/test/common/test_macros/header/per_product_test_selector_definitions.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2021 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +#ifdef TESTS_GEN8 +#define BDW_TYPED_TEST(method) method::GfxFamily>(); +#define BDW_SUPPORTED_TEST(cmdSetBase) NEO::GfxFamilyMapper::GfxFamily::supportsCmdSet(cmdSetBase) +#else +#define BDW_TYPED_TEST(method) +#define BDW_SUPPORTED_TEST(cmdSetBase) false +#endif +#ifdef TESTS_GEN9 +#define SKL_TYPED_TEST(method) method::GfxFamily>(); +#define SKL_SUPPORTED_TEST(cmdSetBase) NEO::GfxFamilyMapper::GfxFamily::supportsCmdSet(cmdSetBase) +#else +#define SKL_TYPED_TEST(method) +#define SKL_SUPPORTED_TEST(cmdSetBase) false +#endif +#ifdef TESTS_GEN11 +#define ICL_TYPED_TEST(method) method::GfxFamily>(); +#define ICL_SUPPORTED_TEST(cmdSetBase) NEO::GfxFamilyMapper::GfxFamily::supportsCmdSet(cmdSetBase) +#else +#define ICL_TYPED_TEST(method) +#define ICL_SUPPORTED_TEST(cmdSetBase) false +#endif +#ifdef TESTS_GEN12LP +#define TGLLP_TYPED_TEST(method) method::GfxFamily>(); +#define TGLLP_SUPPORTED_TEST(cmdSetBase) NEO::GfxFamilyMapper::GfxFamily::supportsCmdSet(cmdSetBase) +#else +#define TGLLP_TYPED_TEST(method) +#define TGLLP_SUPPORTED_TEST(cmdSetBase) false +#endif +#ifdef TESTS_XE_HP_CORE +#define XEHP_TYPED_TEST(method) method::GfxFamily>(); +#define XEHP_SUPPORTED_TEST(cmdSetBase) NEO::GfxFamilyMapper::GfxFamily::supportsCmdSet(cmdSetBase) +#else +#define XEHP_TYPED_TEST(method) +#define XEHP_SUPPORTED_TEST(cmdSetBase) false +#endif +#ifdef TESTS_XE_HPG_CORE +#define XEHPG_TYPED_TEST(method) method::GfxFamily>(); +#define XEHPG_SUPPORTED_TEST(cmdSetBase) NEO::GfxFamilyMapper::GfxFamily::supportsCmdSet(cmdSetBase) +#else +#define XEHPG_TYPED_TEST(method) +#define XEHPG_SUPPORTED_TEST(cmdSetBase) false +#endif +#ifdef TESTS_XE_HPC_CORE +#define PVC_TYPED_TEST(method) method::GfxFamily>(); +#define PVC_SUPPORTED_TEST(cmdSetBase) NEO::GfxFamilyMapper::GfxFamily::supportsCmdSet(cmdSetBase) +#else +#define PVC_TYPED_TEST(method) +#define PVC_SUPPORTED_TEST(cmdSetBase) false +#endif diff --git a/shared/test/common/test_macros/header/test.h b/shared/test/common/test_macros/header/test.h index a2395b0e2f..66d18353ba 100644 --- a/shared/test/common/test_macros/header/test.h +++ b/shared/test/common/test_macros/header/test.h @@ -6,1192 +6,4 @@ */ #pragma once -#include "shared/source/helpers/hw_info.h" -#include "shared/test/common/test_macros/test_excludes.h" - -#include "gtest/gtest.h" -#include "hw_cmds.h" -#include "igfxfmid.h" -#include "test_mode.h" - -extern PRODUCT_FAMILY productFamily; -extern GFXCORE_FAMILY renderCoreFamily; - -#ifdef TESTS_GEN8 -#define BDW_TYPED_TEST(method) method::GfxFamily>(); -#define BDW_SUPPORTED_TEST(cmdSetBase) NEO::GfxFamilyMapper::GfxFamily::supportsCmdSet(cmdSetBase) -#else -#define BDW_TYPED_TEST(method) -#define BDW_SUPPORTED_TEST(cmdSetBase) false -#endif -#ifdef TESTS_GEN9 -#define SKL_TYPED_TEST(method) method::GfxFamily>(); -#define SKL_SUPPORTED_TEST(cmdSetBase) NEO::GfxFamilyMapper::GfxFamily::supportsCmdSet(cmdSetBase) -#else -#define SKL_TYPED_TEST(method) -#define SKL_SUPPORTED_TEST(cmdSetBase) false -#endif -#ifdef TESTS_GEN11 -#define ICL_TYPED_TEST(method) method::GfxFamily>(); -#define ICL_SUPPORTED_TEST(cmdSetBase) NEO::GfxFamilyMapper::GfxFamily::supportsCmdSet(cmdSetBase) -#else -#define ICL_TYPED_TEST(method) -#define ICL_SUPPORTED_TEST(cmdSetBase) false -#endif -#ifdef TESTS_GEN12LP -#define TGLLP_TYPED_TEST(method) method::GfxFamily>(); -#define TGLLP_SUPPORTED_TEST(cmdSetBase) NEO::GfxFamilyMapper::GfxFamily::supportsCmdSet(cmdSetBase) -#else -#define TGLLP_TYPED_TEST(method) -#define TGLLP_SUPPORTED_TEST(cmdSetBase) false -#endif -#ifdef TESTS_XE_HP_CORE -#define XEHP_TYPED_TEST(method) method::GfxFamily>(); -#define XEHP_SUPPORTED_TEST(cmdSetBase) NEO::GfxFamilyMapper::GfxFamily::supportsCmdSet(cmdSetBase) -#else -#define XEHP_TYPED_TEST(method) -#define XEHP_SUPPORTED_TEST(cmdSetBase) false -#endif -#ifdef TESTS_XE_HPG_CORE -#define XEHPG_TYPED_TEST(method) method::GfxFamily>(); -#define XEHPG_SUPPORTED_TEST(cmdSetBase) NEO::GfxFamilyMapper::GfxFamily::supportsCmdSet(cmdSetBase) -#else -#define XEHPG_TYPED_TEST(method) -#define XEHPG_SUPPORTED_TEST(cmdSetBase) false -#endif -#ifdef TESTS_XE_HPC_CORE -#define PVC_TYPED_TEST(method) method::GfxFamily>(); -#define PVC_SUPPORTED_TEST(cmdSetBase) NEO::GfxFamilyMapper::GfxFamily::supportsCmdSet(cmdSetBase) -#else -#define PVC_TYPED_TEST(method) -#define PVC_SUPPORTED_TEST(cmdSetBase) false -#endif - -#define FAMILY_SELECTOR(family, methodName) \ - switch (family) { \ - case IGFX_GEN8_CORE: \ - BDW_TYPED_TEST(methodName) \ - break; \ - case IGFX_GEN9_CORE: \ - SKL_TYPED_TEST(methodName) \ - break; \ - case IGFX_GEN11_CORE: \ - ICL_TYPED_TEST(methodName) \ - break; \ - case IGFX_GEN12LP_CORE: \ - TGLLP_TYPED_TEST(methodName) \ - break; \ - case IGFX_XE_HP_CORE: \ - XEHP_TYPED_TEST(methodName) \ - break; \ - case IGFX_XE_HPG_CORE: \ - XEHPG_TYPED_TEST(methodName) \ - break; \ - case IGFX_XE_HPC_CORE: \ - PVC_TYPED_TEST(methodName) \ - break; \ - default: \ - ASSERT_TRUE((false && "Unknown hardware family")); \ - break; \ - } - -#define TO_STR2(x) #x -#define TO_STR(x) TO_STR2(x) - -#define TEST_MAX_LENGTH 140 -#define CHECK_TEST_NAME_LENGTH_WITH_MAX(test_fixture, test_name, max_length) \ - static_assert((NEO::defaultTestMode != NEO::TestMode::AubTests && NEO::defaultTestMode != NEO::TestMode::AubTestsWithTbx) || (sizeof(#test_fixture) + sizeof(#test_name) <= max_length), "Test and fixture names length exceeds max allowed size: " TO_STR(max_length)); -#define CHECK_TEST_NAME_LENGTH(test_fixture, test_name) \ - CHECK_TEST_NAME_LENGTH_WITH_MAX(test_fixture, test_name, TEST_MAX_LENGTH) - -#define HWTEST_EXCLUDE_PRODUCT(test_suite_name, test_name, family) \ - struct test_suite_name##test_name##_PLATFORM_EXCLUDES_EXCLUDE_##family { \ - test_suite_name##test_name##_PLATFORM_EXCLUDES_EXCLUDE_##family() { \ - NEO::TestExcludes::addTestExclude(#test_suite_name #test_name, family); \ - } \ - } test_suite_name##test_name##_PLATFORM_EXCLUDES_EXCLUDE_##family##_init; - -#define IS_TEST_EXCLUDED(test_suite_name, test_name) \ - NEO::TestExcludes::isTestExcluded(#test_suite_name #test_name, ::productFamily, ::renderCoreFamily) - -#ifdef TEST_F -#undef TEST_F -#endif - -// Taken from gtest.h -#define TEST_F(test_fixture, test_name) \ - CHECK_TEST_NAME_LENGTH(test_fixture, test_name) \ - GTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId()) - -#ifdef TEST_P -#undef TEST_P -#endif - -// Taken from gtest.h -#define TEST_P(test_suite_name, test_name) \ - CHECK_TEST_NAME_LENGTH(test_fixture, test_name) \ - class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ - : public test_suite_name { \ - public: \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ - () {} \ - void TestBody() override; \ - \ - private: \ - static int AddToRegistry() { \ - ::testing::UnitTest::GetInstance()->parameterized_test_registry().GetTestCasePatternHolder( \ - #test_suite_name, ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ - ->AddTestPattern( \ - #test_suite_name, \ - #test_name, \ - new ::testing::internal::TestMetaFactory< \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)>()); \ - return 0; \ - } \ - static int gtest_registering_dummy_; \ - GTEST_DISALLOW_COPY_AND_ASSIGN_( \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ - }; \ - int GTEST_TEST_CLASS_NAME_(test_suite_name, \ - test_name)::gtest_registering_dummy_ = \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody() - -// Macros to provide template based testing. -// Test can use FamilyType in the test -- equivalent to SKLFamily -#define HWTEST_TEST_(test_suite_name, test_name, parent_class, parent_id, SetUpT_name, TearDownT_name) \ - CHECK_TEST_NAME_LENGTH(test_suite_name, test_name) \ - \ - class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) : public parent_class { \ - \ - public: \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ - () {} \ - \ - private: \ - template \ - void testBodyHw(); \ - template \ - void emptyFcn() {} \ - void SetUp() override { \ - if (IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - GTEST_SKIP(); \ - } \ - parent_class::SetUp(); \ - FAMILY_SELECTOR(::renderCoreFamily, SetUpT_name); \ - } \ - void TearDown() override { \ - if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - FAMILY_SELECTOR(::renderCoreFamily, TearDownT_name) \ - parent_class::TearDown(); \ - } \ - } \ - \ - void TestBody() override { \ - if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - FAMILY_SELECTOR(::renderCoreFamily, testBodyHw) \ - } \ - } \ - static ::testing::TestInfo *const test_info_ GTEST_ATTRIBUTE_UNUSED_; \ - GTEST_DISALLOW_COPY_AND_ASSIGN_( \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ - }; \ - \ - ::testing::TestInfo *const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::test_info_ = \ - ::testing::internal::MakeAndRegisterTestInfo( \ - #test_suite_name, #test_name, nullptr, nullptr, \ - ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id), \ - ::testing::internal::SuiteApiResolver< \ - parent_class>::GetSetUpCaseOrSuite(), \ - ::testing::internal::SuiteApiResolver< \ - parent_class>::GetTearDownCaseOrSuite(), \ - new ::testing::internal::TestFactoryImpl); \ - template \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::testBodyHw() - -#define HWTEST_F(test_fixture, test_name) \ - HWTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), emptyFcn, emptyFcn) - -// Macros to provide template based testing. -// Test can use productFamily, gfxCoreFamily and FamilyType in the test -#define HWTEST2_TEST_(test_suite_name, test_name, parent_class, parent_id, test_matcher) \ - CHECK_TEST_NAME_LENGTH(test_suite_name, test_name) \ - \ - class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) : public parent_class { \ - \ - public: \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ - () {} \ - \ - private: \ - using ContainerType = SupportedProductFamilies; \ - using MatcherType = test_matcher; \ - \ - template \ - void matchBody(); \ - \ - template \ - void matched() { \ - const GFXCORE_FAMILY gfxCoreFamily = \ - static_cast(NEO::HwMapper::gfxFamily); \ - using FamilyType = typename NEO::GfxFamilyMapper::GfxFamily; \ - matchBody(); \ - } \ - \ - struct MatcherFalse { \ - template \ - static void matched() {} \ - }; \ - \ - template \ - void checkForMatch(PRODUCT_FAMILY matchProduct); \ - \ - template \ - bool checkMatch(PRODUCT_FAMILY matchProduct); \ - \ - void SetUp() override; \ - void TearDown() override; \ - void TestBody() override; \ - \ - static ::testing::TestInfo *const test_info_ GTEST_ATTRIBUTE_UNUSED_; \ - GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ - }; \ - \ - ::testing::TestInfo *const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::test_info_ = \ - ::testing::internal::MakeAndRegisterTestInfo( \ - #test_suite_name, #test_name, nullptr, nullptr, \ - ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id), \ - ::testing::internal::SuiteApiResolver::GetSetUpCaseOrSuite(), \ - ::testing::internal::SuiteApiResolver::GetTearDownCaseOrSuite(), \ - new ::testing::internal::TestFactoryImpl); \ - \ - template \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, \ - test_name)::checkForMatch(PRODUCT_FAMILY matchProduct) { \ - const PRODUCT_FAMILY productFamily = At::productFamily; \ - \ - if (matchProduct == productFamily) { \ - const bool isMatched = MatcherType::isMatched(); \ - using Matcher = \ - typename std::conditional::type; \ - Matcher::template matched(); \ - } else { \ - checkForMatch(matchProduct); \ - } \ - } \ - \ - template <> \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, \ - test_name)::checkForMatch<0u>(PRODUCT_FAMILY matchProduct) { \ - const int matcherOrdinal = 0u; \ - const PRODUCT_FAMILY productFamily = At::productFamily; \ - \ - if (matchProduct == productFamily) { \ - const bool isMatched = MatcherType::isMatched(); \ - using Matcher = \ - typename std::conditional::type; \ - Matcher::template matched(); \ - } \ - } \ - template \ - bool GTEST_TEST_CLASS_NAME_(test_suite_name, \ - test_name)::checkMatch(PRODUCT_FAMILY matchProduct) { \ - const PRODUCT_FAMILY productFamily = At::productFamily; \ - \ - if (matchProduct == productFamily) { \ - const bool isMatched = MatcherType::isMatched(); \ - return isMatched; \ - } else { \ - return checkMatch(matchProduct); \ - } \ - } \ - \ - template <> \ - bool GTEST_TEST_CLASS_NAME_(test_suite_name, \ - test_name)::checkMatch<0>(PRODUCT_FAMILY matchProduct) { \ - const int matcherOrdinal = 0u; \ - const PRODUCT_FAMILY productFamily = At::productFamily; \ - \ - if (matchProduct == productFamily) { \ - const bool isMatched = MatcherType::isMatched(); \ - return isMatched; \ - } else { \ - return false; \ - } \ - } \ - \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::SetUp() { \ - if (IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - GTEST_SKIP(); \ - } \ - if (checkMatch(::productFamily)) { \ - parent_class::SetUp(); \ - } \ - } \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TearDown() { \ - if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - if (checkMatch(::productFamily)) { \ - parent_class::TearDown(); \ - } \ - } \ - } \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody() { \ - if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - checkForMatch(::productFamily); \ - } \ - } \ - \ - template \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::matchBody() - -#define HWTEST2_F(test_fixture, test_name, test_matcher) \ - HWTEST2_TEST_(test_fixture, test_name##_##test_matcher, test_fixture, \ - ::testing::internal::GetTypeId(), test_matcher) - -#define HWTEST_TEMPLATED_F(test_fixture, test_name) \ - HWTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), SetUpT, TearDownT) - -#define CALL_IF_SUPPORTED(cmdSetBase, expression) \ - { \ - bool supported = false; \ - switch (::renderCoreFamily) { \ - case IGFX_GEN8_CORE: \ - supported = BDW_SUPPORTED_TEST(cmdSetBase); \ - break; \ - case IGFX_GEN9_CORE: \ - supported = SKL_SUPPORTED_TEST(cmdSetBase); \ - break; \ - case IGFX_GEN11_CORE: \ - supported = ICL_SUPPORTED_TEST(cmdSetBase); \ - break; \ - case IGFX_GEN12LP_CORE: \ - supported = TGLLP_SUPPORTED_TEST(cmdSetBase); \ - break; \ - case IGFX_XE_HP_CORE: \ - supported = XEHP_SUPPORTED_TEST(cmdSetBase); \ - break; \ - case IGFX_XE_HPG_CORE: \ - supported = XEHPG_SUPPORTED_TEST(cmdSetBase); \ - break; \ - case IGFX_XE_HPC_CORE: \ - supported = PVC_SUPPORTED_TEST(cmdSetBase); \ - break; \ - default: \ - ASSERT_TRUE((false && "Unknown hardware family")); \ - break; \ - } \ - if (supported) { \ - expression; \ - } \ - } - -// Macros to provide template based testing. -// Test can use FamilyType in the test -- equivalent to SKLFamily -#define HWCMDTEST_TEST_(cmdset_gen_base, test_suite_name, test_name, parent_class, parent_id) \ - CHECK_TEST_NAME_LENGTH(test_suite_name, test_name) \ - \ - class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) : public parent_class { \ - public: \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ - () {} \ - \ - private: \ - template \ - void testBodyHw(); \ - \ - template \ - auto runCmdTestHwIfSupported() -> typename std::enable_if::type { \ - if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - testBodyHw(); \ - } \ - } \ - \ - template \ - auto runCmdTestHwIfSupported() -> typename std::enable_if::type { \ - /* do nothing */ \ - } \ - \ - void TestBody() override { \ - FAMILY_SELECTOR(::renderCoreFamily, runCmdTestHwIfSupported) \ - } \ - void SetUp() override { \ - if (IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - GTEST_SKIP(); \ - } \ - CALL_IF_SUPPORTED(cmdset_gen_base, parent_class::SetUp()); \ - } \ - void TearDown() override { \ - if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - CALL_IF_SUPPORTED(cmdset_gen_base, parent_class::TearDown()); \ - } \ - } \ - static ::testing::TestInfo *const test_info_ GTEST_ATTRIBUTE_UNUSED_; \ - GTEST_DISALLOW_COPY_AND_ASSIGN_( \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ - }; \ - \ - ::testing::TestInfo *const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::test_info_ = \ - ::testing::internal::MakeAndRegisterTestInfo( \ - #test_suite_name, #test_name, nullptr, nullptr, \ - ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id), \ - ::testing::internal::SuiteApiResolver< \ - parent_class>::GetSetUpCaseOrSuite(), \ - ::testing::internal::SuiteApiResolver< \ - parent_class>::GetTearDownCaseOrSuite(), \ - new ::testing::internal::TestFactoryImpl); \ - template \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::testBodyHw() - -#define HWCMDTEST_F(cmdset_gen_base, test_fixture, test_name) \ - HWCMDTEST_TEST_(cmdset_gen_base, test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId()) - -#define CALL_IF_MATCH(match_core, match_product, expr) \ - auto matchCore = match_core; \ - auto matchProduct = match_product; \ - if ((::renderCoreFamily == matchCore) && \ - (IGFX_MAX_PRODUCT == matchProduct || ::productFamily == matchProduct)) { \ - expr; \ - } - -#define FAMILYTEST_TEST_(test_suite_name, test_name, parent_class, parent_id, match_core, match_product) \ - CHECK_TEST_NAME_LENGTH(test_suite_name, test_name) \ - \ - class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) : public parent_class { \ - public: \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ - () {} \ - \ - private: \ - template \ - void testBodyHw(); \ - \ - void TestBody() override { \ - if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - CALL_IF_MATCH(match_core, match_product, \ - testBodyHw::GfxFamily>()) \ - } \ - } \ - void SetUp() override { \ - if (IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - GTEST_SKIP(); \ - } \ - CALL_IF_MATCH(match_core, match_product, parent_class::SetUp()) \ - } \ - void TearDown() override { \ - if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - CALL_IF_MATCH(match_core, match_product, parent_class::TearDown()) \ - } \ - } \ - static ::testing::TestInfo *const test_info_ GTEST_ATTRIBUTE_UNUSED_; \ - GTEST_DISALLOW_COPY_AND_ASSIGN_( \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ - }; \ - \ - ::testing::TestInfo *const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::test_info_ = \ - ::testing::internal::MakeAndRegisterTestInfo( \ - #test_suite_name, #test_name, nullptr, nullptr, \ - ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id), \ - ::testing::internal::SuiteApiResolver< \ - parent_class>::GetSetUpCaseOrSuite(), \ - ::testing::internal::SuiteApiResolver< \ - parent_class>::GetTearDownCaseOrSuite(), \ - new ::testing::internal::TestFactoryImpl); \ - template \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::testBodyHw() - -// Equivalent Hw specific macro for permuted tests -// Test can use FamilyType in the test -- equivalent to SKLFamily -#define HWTEST_P(test_suite_name, test_name) \ - CHECK_TEST_NAME_LENGTH(test_suite_name, test_name) \ - class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) : public test_suite_name { \ - public: \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ - () {} \ - template \ - void testBodyHw(); \ - \ - void TestBody() override { \ - FAMILY_SELECTOR(::renderCoreFamily, testBodyHw) \ - } \ - \ - private: \ - static int AddToRegistry() { \ - ::testing::UnitTest::GetInstance()->parameterized_test_registry().GetTestCasePatternHolder( \ - #test_suite_name, ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ - ->AddTestPattern( \ - #test_suite_name, \ - #test_name, \ - new ::testing::internal::TestMetaFactory< \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)>()); \ - return 0; \ - } \ - static int gtest_registering_dummy_; \ - GTEST_DISALLOW_COPY_AND_ASSIGN_( \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ - }; \ - int GTEST_TEST_CLASS_NAME_(test_suite_name, \ - test_name)::gtest_registering_dummy_ = \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \ - template \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::testBodyHw() - -#define HWCMDTEST_P(cmdset_gen_base, test_suite_name, test_name) \ - CHECK_TEST_NAME_LENGTH(test_suite_name, test_name) \ - \ - class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) : public test_suite_name { \ - public: \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ - () {} \ - \ - template \ - void testBodyHw(); \ - \ - template \ - auto runCmdTestHwIfSupported() -> typename std::enable_if::type { \ - testBodyHw(); \ - } \ - \ - template \ - auto runCmdTestHwIfSupported() -> typename std::enable_if::type { \ - /* do nothing */ \ - } \ - \ - void TestBody() override { \ - if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - FAMILY_SELECTOR(::renderCoreFamily, runCmdTestHwIfSupported) \ - } \ - } \ - void SetUp() override { \ - if (IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - GTEST_SKIP(); \ - } \ - CALL_IF_SUPPORTED(cmdset_gen_base, test_suite_name::SetUp()); \ - } \ - void TearDown() override { \ - if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - CALL_IF_SUPPORTED(cmdset_gen_base, test_suite_name::TearDown()); \ - } \ - } \ - \ - private: \ - static int AddToRegistry() { \ - ::testing::UnitTest::GetInstance()->parameterized_test_registry().GetTestCasePatternHolder( \ - #test_suite_name, ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ - ->AddTestPattern( \ - #test_suite_name, \ - #test_name, \ - new ::testing::internal::TestMetaFactory< \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)>()); \ - return 0; \ - } \ - static int gtest_registering_dummy_; \ - GTEST_DISALLOW_COPY_AND_ASSIGN_( \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ - }; \ - int GTEST_TEST_CLASS_NAME_(test_suite_name, \ - test_name)::gtest_registering_dummy_ = \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \ - template \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::testBodyHw() - -// Macros to provide template based testing. -// Test can use productFamily, gfxCoreFamily and FamilyType in the test -#define HWTEST2_P(test_suite_name, test_name, test_matcher) \ - class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) : public test_suite_name { \ - \ - public: \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ - () {} \ - \ - template \ - void matchBody(); \ - \ - private: \ - using ContainerType = SupportedProductFamilies; \ - using MatcherType = test_matcher; \ - \ - template \ - void matched() { \ - const GFXCORE_FAMILY gfxCoreFamily = \ - static_cast(NEO::HwMapper::gfxFamily); \ - using FamilyType = typename NEO::GfxFamilyMapper::GfxFamily; \ - matchBody(); \ - } \ - \ - struct MatcherFalse { \ - template \ - static void matched() {} \ - }; \ - \ - template \ - void checkForMatch(PRODUCT_FAMILY matchProduct); \ - \ - template \ - bool checkMatch(PRODUCT_FAMILY matchProduct); \ - \ - void SetUp() override; \ - void TearDown() override; \ - \ - void TestBody() override; \ - \ - static int AddToRegistry() { \ - ::testing::UnitTest::GetInstance() \ - ->parameterized_test_registry() \ - .GetTestCasePatternHolder(#test_suite_name, \ - ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ - ->AddTestPattern(#test_suite_name, #test_name, \ - new ::testing::internal::TestMetaFactory()); \ - return 0; \ - } \ - static int gtest_registering_dummy_; \ - GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ - }; \ - \ - template \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, \ - test_name)::checkForMatch(PRODUCT_FAMILY matchProduct) { \ - const PRODUCT_FAMILY productFamily = At::productFamily; \ - \ - if (matchProduct == productFamily) { \ - const bool isMatched = MatcherType::isMatched(); \ - using Matcher = \ - typename std::conditional::type; \ - Matcher::template matched(); \ - } else { \ - checkForMatch(matchProduct); \ - } \ - } \ - \ - template <> \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, \ - test_name)::checkForMatch<0u>(PRODUCT_FAMILY matchProduct) { \ - const int matcherOrdinal = 0u; \ - const PRODUCT_FAMILY productFamily = At::productFamily; \ - \ - if (matchProduct == productFamily) { \ - const bool isMatched = MatcherType::isMatched(); \ - using Matcher = \ - typename std::conditional::type; \ - Matcher::template matched(); \ - } \ - } \ - template \ - bool GTEST_TEST_CLASS_NAME_(test_suite_name, \ - test_name)::checkMatch(PRODUCT_FAMILY matchProduct) { \ - const PRODUCT_FAMILY productFamily = At::productFamily; \ - \ - if (matchProduct == productFamily) { \ - const bool isMatched = MatcherType::isMatched(); \ - return isMatched; \ - } else { \ - return checkMatch(matchProduct); \ - } \ - } \ - \ - template <> \ - bool GTEST_TEST_CLASS_NAME_(test_suite_name, \ - test_name)::checkMatch<0>(PRODUCT_FAMILY matchProduct) { \ - const int matcherOrdinal = 0u; \ - const PRODUCT_FAMILY productFamily = At::productFamily; \ - \ - if (matchProduct == productFamily) { \ - const bool isMatched = MatcherType::isMatched(); \ - return isMatched; \ - } else { \ - return false; \ - } \ - } \ - \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::SetUp() { \ - if (IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - GTEST_SKIP(); \ - } \ - if (checkMatch(::productFamily)) { \ - test_suite_name::SetUp(); \ - } \ - } \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TearDown() { \ - if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - if (checkMatch(::productFamily)) { \ - test_suite_name::TearDown(); \ - } \ - } \ - } \ - \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody() { \ - if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - checkForMatch(::productFamily); \ - } \ - } \ - \ - int GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::gtest_registering_dummy_ = \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \ - template \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::matchBody() - -#define FAMILYTEST_TEST_P(test_suite_name, test_name, match_core, match_product) \ - CHECK_TEST_NAME_LENGTH(test_suite_name, test_name) \ - class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) : public test_suite_name { \ - public: \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ - () {} \ - template \ - void testBodyHw(); \ - \ - void TestBody() override { \ - if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - CALL_IF_MATCH(match_core, match_product, \ - testBodyHw::GfxFamily>()) \ - } \ - } \ - void SetUp() override { \ - if (IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - GTEST_SKIP(); \ - } \ - CALL_IF_MATCH(match_core, match_product, test_suite_name::SetUp()) \ - } \ - void TearDown() override { \ - if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ - CALL_IF_MATCH(match_core, match_product, test_suite_name::TearDown()) \ - } \ - } \ - \ - private: \ - static int AddToRegistry() { \ - ::testing::UnitTest::GetInstance()->parameterized_test_registry().GetTestCasePatternHolder( \ - #test_suite_name, ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ - ->AddTestPattern( \ - #test_suite_name, \ - #test_name, \ - new ::testing::internal::TestMetaFactory< \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)>()); \ - return 0; \ - } \ - static int gtest_registering_dummy_; \ - GTEST_DISALLOW_COPY_AND_ASSIGN_( \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ - }; \ - int GTEST_TEST_CLASS_NAME_(test_suite_name, \ - test_name)::gtest_registering_dummy_ = \ - GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \ - template \ - void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::testBodyHw() - -#define GENTEST_F(gfx_core, test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - gfx_core, IGFX_MAX_PRODUCT) - -#define GENTEST_P(gfx_core, test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, gfx_core, IGFX_MAX_PRODUCT) - -#ifdef TESTS_GEN8 -#define GEN8TEST_F(test_fixture, test_name) GENTEST_F(IGFX_GEN8_CORE, test_fixture, test_name) -#define GEN8TEST_P(test_fixture, test_name) GENTEST_P(IGFX_GEN8_CORE, test_fixture, test_name) -#endif -#ifdef TESTS_GEN9 -#define GEN9TEST_F(test_fixture, test_name) GENTEST_F(IGFX_GEN9_CORE, test_fixture, test_name) -#define GEN9TEST_P(test_fixture, test_name) GENTEST_P(IGFX_GEN9_CORE, test_fixture, test_name) -#endif -#ifdef TESTS_GEN11 -#define GEN11TEST_F(test_fixture, test_name) GENTEST_F(IGFX_GEN11_CORE, test_fixture, test_name) -#define GEN11TEST_P(test_fixture, test_name) GENTEST_P(IGFX_GEN11_CORE, test_fixture, test_name) -#endif -#ifdef TESTS_GEN12LP -#define GEN12LPTEST_F(test_fixture, test_name) GENTEST_F(IGFX_GEN12LP_CORE, test_fixture, test_name) -#define GEN12LPTEST_P(test_fixture, test_name) GENTEST_P(IGFX_GEN12LP_CORE, test_fixture, test_name) -#endif -#ifdef TESTS_XE_HP_CORE -#define XE_HP_CORE_TEST_F(test_fixture, test_name) GENTEST_F(IGFX_XE_HP_CORE, test_fixture, test_name) -#define XE_HP_CORE_TEST_P(test_fixture, test_name) GENTEST_P(IGFX_XE_HP_CORE, test_fixture, test_name) -#endif -#ifdef TESTS_XE_HPG_CORE -#define XE_HPG_CORETEST_F(test_fixture, test_name) GENTEST_F(IGFX_XE_HPG_CORE, test_fixture, test_name) -#define XE_HPG_CORETEST_P(test_fixture, test_name) GENTEST_P(IGFX_XE_HPG_CORE, test_fixture, test_name) -#endif -#ifdef TESTS_XE_HPC_CORE -#define XE_HPC_CORETEST_F(test_fixture, test_name) GENTEST_F(IGFX_XE_HPC_CORE, test_fixture, test_name) -#define XE_HPC_CORETEST_P(test_fixture, test_name) GENTEST_P(IGFX_XE_HPC_CORE, test_fixture, test_name) -#endif -#ifdef TESTS_GEN8 -#define BDWTEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_GEN8_CORE, IGFX_BROADWELL) -#define BDWTEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_GEN8_CORE, \ - IGFX_BROADWELL) -#endif -#ifdef TESTS_SKL -#define SKLTEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_GEN9_CORE, IGFX_SKYLAKE) -#define SKLTEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_GEN9_CORE, \ - IGFX_SKYLAKE) -#endif -#ifdef TESTS_KBL -#define KBLTEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_GEN9_CORE, IGFX_KABYLAKE) -#define KBLTEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_GEN9_CORE, \ - IGFX_KABYLAKE) -#endif -#ifdef TESTS_GLK -#define GLKTEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_GEN9_CORE, IGFX_GEMINILAKE) -#define GLKTEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_GEN9_CORE, \ - IGFX_GEMINILAKE) -#endif -#ifdef TESTS_BXT -#define BXTTEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_GEN9_CORE, IGFX_BROXTON) -#define BXTTEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_GEN9_CORE, \ - IGFX_BROXTON) -#endif -#ifdef TESTS_CFL -#define CFLTEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_GEN9_CORE, IGFX_COFFEELAKE) -#define CFLTEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_GEN9_CORE, \ - IGFX_COFFEELAKE) -#endif -#ifdef TESTS_ICLLP -#define ICLLPTEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_GEN11_CORE, IGFX_ICELAKE_LP) -#define ICLLPTEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_GEN11_CORE, \ - IGFX_ICELAKE_LP) -#endif -#ifdef TESTS_LKF -#define LKFTEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_GEN11_CORE, IGFX_LAKEFIELD) -#define LKFTEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_GEN11_CORE, \ - IGFX_LAKEFIELD) -#endif -#ifdef TESTS_EHL -#define EHLTEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_GEN11_CORE, IGFX_ELKHARTLAKE) -#define EHLTEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_GEN11_CORE, \ - IGFX_ELKHARTLAKE) -#endif -#ifdef TESTS_TGLLP -#define TGLLPTEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_GEN12LP_CORE, IGFX_TIGERLAKE_LP) -#define TGLLPTEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_GEN12LP_CORE, \ - IGFX_TIGERLAKE_LP) -#endif -#ifdef TESTS_DG1 -#define DG1TEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_GEN12LP_CORE, IGFX_DG1) -#define DG1TEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_GEN12LP_CORE, \ - IGFX_DG1) -#endif -#ifdef TESTS_RKL -#define RKLTEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_GEN12LP_CORE, IGFX_ROCKETLAKE) -#define RKLTEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_GEN12LP_CORE, \ - IGFX_ROCKETLAKE) -#endif -#ifdef TESTS_ADLS -#define ADLSTEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_GEN12LP_CORE, IGFX_ALDERLAKE_S) -#define ADLSTEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_GEN12LP_CORE, \ - IGFX_ALDERLAKE_S) -#endif -#ifdef TESTS_ADLP -#define ADLPTEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_GEN12LP_CORE, IGFX_ALDERLAKE_P) -#define ADLPTEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_GEN12LP_CORE, \ - IGFX_ALDERLAKE_P) -#endif -#ifdef TESTS_XE_HP_SDV -#define XEHPTEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_XE_HP_CORE, IGFX_XE_HP_SDV) -#define XEHPTEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_XE_HP_CORE, \ - IGFX_XE_HP_SDV) -#endif -#ifdef TESTS_DG2 -#define DG2TEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_XE_HPG_CORE, IGFX_DG2) -#define DG2TEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_XE_HPG_CORE, \ - IGFX_DG2) -#endif -#ifdef TESTS_PVC -#define PVCTEST_F(test_fixture, test_name) \ - FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ - ::testing::internal::GetTypeId(), \ - IGFX_XE_HPC_CORE, IGFX_PVC) -#define PVCTEST_P(test_suite_name, test_name) \ - FAMILYTEST_TEST_P(test_suite_name, test_name, \ - IGFX_XE_HPC_CORE, \ - IGFX_PVC) -#endif -#define HWTEST_TYPED_TEST(CaseName, TestName) \ - CHECK_TEST_NAME_LENGTH(CaseName, TestName) \ - template \ - class GTEST_TEST_CLASS_NAME_(CaseName, TestName) : public CaseName { \ - private: \ - typedef CaseName TestFixture; \ - typedef gtest_TypeParam_ TypeParam; \ - template \ - void testBodyHw(); \ - \ - void TestBody() override { \ - FAMILY_SELECTOR(::renderCoreFamily, testBodyHw) \ - } \ - }; \ - bool gtest_##CaseName##_##TestName##_registered_ GTEST_ATTRIBUTE_UNUSED_ = \ - ::testing::internal::TypeParameterizedTest< \ - CaseName, \ - ::testing::internal::TemplateSel< \ - GTEST_TEST_CLASS_NAME_(CaseName, TestName)>, \ - GTEST_TYPE_PARAMS_(CaseName)>::Register("", ::testing::internal::CodeLocation(__FILE__, __LINE__), \ - #CaseName, #TestName, 0); \ - template \ - template \ - void GTEST_TEST_CLASS_NAME_(CaseName, TestName)::testBodyHw() - -template -struct Test - : public Fixture, - public ::testing::Test { - - void SetUp() override { - Fixture::SetUp(); - } - - void TearDown() override { - Fixture::TearDown(); - } -}; - -template -struct SupportedProductFamilyContainer { - using BaseClass = SupportedProductFamilyContainer; - static const PRODUCT_FAMILY productFamily = IGFX_UNKNOWN; -}; - -template -struct SupportedProductFamilyContainer : SupportedProductFamilyContainer { - using BaseClass = SupportedProductFamilyContainer; - - static const PRODUCT_FAMILY productFamily = p; - static const std::size_t size = sizeof...(args) + 1; -}; - -using SupportedProductFamilies = - SupportedProductFamilyContainer; - -// Static container accessor -template -struct At { - static const PRODUCT_FAMILY productFamily = - At::productFamily; -}; - -template -struct At { - static const PRODUCT_FAMILY productFamily = Container::productFamily; -}; - -// HWTEST2_F matchers -template -struct IsGfxCore { - template - static constexpr bool isMatched() { - return NEO::ToGfxCoreFamily::get() == gfxCoreFamily; - } -}; - -template -struct IsNotGfxCore { - template - static constexpr bool isMatched() { - return NEO::ToGfxCoreFamily::get() != gfxCoreFamily; - } -}; - -template -struct AreNotGfxCores { - template - static constexpr bool isMatched() { - return NEO::ToGfxCoreFamily::get() != gfxCoreFamily && NEO::ToGfxCoreFamily::get() != gfxCoreFamily2; - } -}; - -template -struct IsAtMostGfxCore { - template - static constexpr bool isMatched() { - return NEO::ToGfxCoreFamily::get() <= gfxCoreFamily; - } -}; - -template -struct IsAtLeastGfxCore { - template - static constexpr bool isMatched() { - return NEO::ToGfxCoreFamily::get() >= gfxCoreFamily; - } -}; - -template -struct IsWithinGfxCore { - template - static constexpr bool isMatched() { - return NEO::ToGfxCoreFamily::get() >= gfxCoreFamilyMin && NEO::ToGfxCoreFamily::get() <= gfxCoreFamilyMax; - } -}; - -template -struct IsProduct { - template - static constexpr bool isMatched() { - return productFamily == product; - } -}; - -template -struct IsAtMostProduct { - template - static constexpr bool isMatched() { - return productFamily <= productFamilyMax; - } -}; - -template -struct IsAtLeastProduct { - template - static constexpr bool isMatched() { - return productFamily >= productFamilyMin; - } -}; - -template -struct IsWithinProducts { - template - static constexpr bool isMatched() { - return productFamily >= productFamilyMin && productFamily <= productFamilyMax; - } -}; - -struct MatchAny { - template - static constexpr bool isMatched() { return true; } -}; - -// Common matchers -using IsGen9 = IsGfxCore; -using IsGen11HP = IsGfxCore; -using IsGen11LP = IsGfxCore; -using IsGen12LP = IsGfxCore; -using IsXeHpCore = IsGfxCore; -using IsXeHpgCore = IsGfxCore; -using IsXeHpcCore = IsGfxCore; - -using IsAtMostGen11 = IsAtMostGfxCore; - -using IsAtMostGen12lp = IsAtMostGfxCore; - -using IsAtLeastGen12lp = IsAtLeastGfxCore; - -using IsAtLeastXeHpCore = IsAtLeastGfxCore; -using IsAtMostXeHpCore = IsAtMostGfxCore; - -using IsAtLeastXeHpgCore = IsAtLeastGfxCore; -using IsAtMostXeHpgCore = IsAtMostGfxCore; - -using IsAtLeastXeHpcCore = IsAtLeastGfxCore; - -using IsWithinXeGfxFamily = IsWithinGfxCore; - -using IsADLS = IsProduct; -using IsBXT = IsProduct; -using IsCFL = IsProduct; -using IsDG1 = IsProduct; -using IsEHL = IsProduct; -using IsGLK = IsProduct; -using IsICLLP = IsProduct; -using IsKBL = IsProduct; -using IsLKF = IsProduct; -using IsSKL = IsProduct; -using IsTGLLP = IsProduct; -using IsRKL = IsProduct; -using IsXEHP = IsProduct; -using IsADLP = IsProduct; -using IsDG2 = IsProduct; -using IsPVC = IsProduct; +#include "shared/test/common/test_macros/test.h" diff --git a/shared/test/common/test_macros/test.h b/shared/test/common/test_macros/test.h new file mode 100644 index 0000000000..0c758f84aa --- /dev/null +++ b/shared/test/common/test_macros/test.h @@ -0,0 +1,849 @@ +/* + * Copyright (C) 2021 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#pragma once +#include "shared/source/helpers/hw_info.h" +#include "shared/test/common/test_macros/test_excludes.h" + +#include "gtest/gtest.h" +#include "hw_cmds.h" +#include "igfxfmid.h" +#include "per_product_test_selector.h" +#include "test_mode.h" + +extern PRODUCT_FAMILY productFamily; +extern GFXCORE_FAMILY renderCoreFamily; + +#define TO_STR2(x) #x +#define TO_STR(x) TO_STR2(x) + +#define TEST_MAX_LENGTH 140 +#define CHECK_TEST_NAME_LENGTH_WITH_MAX(test_fixture, test_name, max_length) \ + static_assert((NEO::defaultTestMode != NEO::TestMode::AubTests && NEO::defaultTestMode != NEO::TestMode::AubTestsWithTbx) || (sizeof(#test_fixture) + sizeof(#test_name) <= max_length), "Test and fixture names length exceeds max allowed size: " TO_STR(max_length)); +#define CHECK_TEST_NAME_LENGTH(test_fixture, test_name) \ + CHECK_TEST_NAME_LENGTH_WITH_MAX(test_fixture, test_name, TEST_MAX_LENGTH) + +#define HWTEST_EXCLUDE_PRODUCT(test_suite_name, test_name, family) \ + struct test_suite_name##test_name##_PLATFORM_EXCLUDES_EXCLUDE_##family { \ + test_suite_name##test_name##_PLATFORM_EXCLUDES_EXCLUDE_##family() { \ + NEO::TestExcludes::addTestExclude(#test_suite_name #test_name, family); \ + } \ + } test_suite_name##test_name##_PLATFORM_EXCLUDES_EXCLUDE_##family##_init; + +#define IS_TEST_EXCLUDED(test_suite_name, test_name) \ + NEO::TestExcludes::isTestExcluded(#test_suite_name #test_name, ::productFamily, ::renderCoreFamily) + +#ifdef TEST_F +#undef TEST_F +#endif + +// Taken from gtest.h +#define TEST_F(test_fixture, test_name) \ + CHECK_TEST_NAME_LENGTH(test_fixture, test_name) \ + GTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId()) + +#ifdef TEST_P +#undef TEST_P +#endif + +// Taken from gtest.h +#define TEST_P(test_suite_name, test_name) \ + CHECK_TEST_NAME_LENGTH(test_fixture, test_name) \ + class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + : public test_suite_name { \ + public: \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + () {} \ + void TestBody() override; \ + \ + private: \ + static int AddToRegistry() { \ + ::testing::UnitTest::GetInstance()->parameterized_test_registry().GetTestCasePatternHolder( \ + #test_suite_name, ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ + ->AddTestPattern( \ + #test_suite_name, \ + #test_name, \ + new ::testing::internal::TestMetaFactory< \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)>()); \ + return 0; \ + } \ + static int gtest_registering_dummy_; \ + GTEST_DISALLOW_COPY_AND_ASSIGN_( \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ + }; \ + int GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)::gtest_registering_dummy_ = \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody() + +// Macros to provide template based testing. +// Test can use FamilyType in the test -- equivalent to SKLFamily +#define HWTEST_TEST_(test_suite_name, test_name, parent_class, parent_id, SetUpT_name, TearDownT_name) \ + CHECK_TEST_NAME_LENGTH(test_suite_name, test_name) \ + \ + class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) : public parent_class { \ + \ + public: \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + () {} \ + \ + private: \ + template \ + void testBodyHw(); \ + template \ + void emptyFcn() {} \ + void SetUp() override { \ + if (IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + GTEST_SKIP(); \ + } \ + parent_class::SetUp(); \ + FAMILY_SELECTOR(::renderCoreFamily, SetUpT_name); \ + } \ + void TearDown() override { \ + if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + FAMILY_SELECTOR(::renderCoreFamily, TearDownT_name) \ + parent_class::TearDown(); \ + } \ + } \ + \ + void TestBody() override { \ + if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + FAMILY_SELECTOR(::renderCoreFamily, testBodyHw) \ + } \ + } \ + static ::testing::TestInfo *const test_info_ GTEST_ATTRIBUTE_UNUSED_; \ + GTEST_DISALLOW_COPY_AND_ASSIGN_( \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ + }; \ + \ + ::testing::TestInfo *const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::test_info_ = \ + ::testing::internal::MakeAndRegisterTestInfo( \ + #test_suite_name, #test_name, nullptr, nullptr, \ + ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id), \ + ::testing::internal::SuiteApiResolver< \ + parent_class>::GetSetUpCaseOrSuite(), \ + ::testing::internal::SuiteApiResolver< \ + parent_class>::GetTearDownCaseOrSuite(), \ + new ::testing::internal::TestFactoryImpl); \ + template \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::testBodyHw() + +#define HWTEST_F(test_fixture, test_name) \ + HWTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), emptyFcn, emptyFcn) + +// Macros to provide template based testing. +// Test can use productFamily, gfxCoreFamily and FamilyType in the test +#define HWTEST2_TEST_(test_suite_name, test_name, parent_class, parent_id, test_matcher) \ + CHECK_TEST_NAME_LENGTH(test_suite_name, test_name) \ + \ + class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) : public parent_class { \ + \ + public: \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + () {} \ + \ + private: \ + using ContainerType = SupportedProductFamilies; \ + using MatcherType = test_matcher; \ + \ + template \ + void matchBody(); \ + \ + template \ + void matched() { \ + const GFXCORE_FAMILY gfxCoreFamily = \ + static_cast(NEO::HwMapper::gfxFamily); \ + using FamilyType = typename NEO::GfxFamilyMapper::GfxFamily; \ + matchBody(); \ + } \ + \ + struct MatcherFalse { \ + template \ + static void matched() {} \ + }; \ + \ + template \ + void checkForMatch(PRODUCT_FAMILY matchProduct); \ + \ + template \ + bool checkMatch(PRODUCT_FAMILY matchProduct); \ + \ + void SetUp() override; \ + void TearDown() override; \ + void TestBody() override; \ + \ + static ::testing::TestInfo *const test_info_ GTEST_ATTRIBUTE_UNUSED_; \ + GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ + }; \ + \ + ::testing::TestInfo *const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::test_info_ = \ + ::testing::internal::MakeAndRegisterTestInfo( \ + #test_suite_name, #test_name, nullptr, nullptr, \ + ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id), \ + ::testing::internal::SuiteApiResolver::GetSetUpCaseOrSuite(), \ + ::testing::internal::SuiteApiResolver::GetTearDownCaseOrSuite(), \ + new ::testing::internal::TestFactoryImpl); \ + \ + template \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)::checkForMatch(PRODUCT_FAMILY matchProduct) { \ + const PRODUCT_FAMILY productFamily = At::productFamily; \ + \ + if (matchProduct == productFamily) { \ + const bool isMatched = MatcherType::isMatched(); \ + using Matcher = \ + typename std::conditional::type; \ + Matcher::template matched(); \ + } else { \ + checkForMatch(matchProduct); \ + } \ + } \ + \ + template <> \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)::checkForMatch<0u>(PRODUCT_FAMILY matchProduct) { \ + const int matcherOrdinal = 0u; \ + const PRODUCT_FAMILY productFamily = At::productFamily; \ + \ + if (matchProduct == productFamily) { \ + const bool isMatched = MatcherType::isMatched(); \ + using Matcher = \ + typename std::conditional::type; \ + Matcher::template matched(); \ + } \ + } \ + template \ + bool GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)::checkMatch(PRODUCT_FAMILY matchProduct) { \ + const PRODUCT_FAMILY productFamily = At::productFamily; \ + \ + if (matchProduct == productFamily) { \ + const bool isMatched = MatcherType::isMatched(); \ + return isMatched; \ + } else { \ + return checkMatch(matchProduct); \ + } \ + } \ + \ + template <> \ + bool GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)::checkMatch<0>(PRODUCT_FAMILY matchProduct) { \ + const int matcherOrdinal = 0u; \ + const PRODUCT_FAMILY productFamily = At::productFamily; \ + \ + if (matchProduct == productFamily) { \ + const bool isMatched = MatcherType::isMatched(); \ + return isMatched; \ + } else { \ + return false; \ + } \ + } \ + \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::SetUp() { \ + if (IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + GTEST_SKIP(); \ + } \ + if (checkMatch(::productFamily)) { \ + parent_class::SetUp(); \ + } \ + } \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TearDown() { \ + if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + if (checkMatch(::productFamily)) { \ + parent_class::TearDown(); \ + } \ + } \ + } \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody() { \ + if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + checkForMatch(::productFamily); \ + } \ + } \ + \ + template \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::matchBody() + +#define HWTEST2_F(test_fixture, test_name, test_matcher) \ + HWTEST2_TEST_(test_fixture, test_name##_##test_matcher, test_fixture, \ + ::testing::internal::GetTypeId(), test_matcher) + +#define HWTEST_TEMPLATED_F(test_fixture, test_name) \ + HWTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), SetUpT, TearDownT) + +// Macros to provide template based testing. +// Test can use FamilyType in the test -- equivalent to SKLFamily +#define HWCMDTEST_TEST_(cmdset_gen_base, test_suite_name, test_name, parent_class, parent_id) \ + CHECK_TEST_NAME_LENGTH(test_suite_name, test_name) \ + \ + class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) : public parent_class { \ + public: \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + () {} \ + \ + private: \ + template \ + void testBodyHw(); \ + \ + template \ + auto runCmdTestHwIfSupported() -> typename std::enable_if::type { \ + if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + testBodyHw(); \ + } \ + } \ + \ + template \ + auto runCmdTestHwIfSupported() -> typename std::enable_if::type { \ + /* do nothing */ \ + } \ + \ + void TestBody() override { \ + FAMILY_SELECTOR(::renderCoreFamily, runCmdTestHwIfSupported) \ + } \ + void SetUp() override { \ + if (IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + GTEST_SKIP(); \ + } \ + CALL_IF_SUPPORTED(cmdset_gen_base, parent_class::SetUp()); \ + } \ + void TearDown() override { \ + if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + CALL_IF_SUPPORTED(cmdset_gen_base, parent_class::TearDown()); \ + } \ + } \ + static ::testing::TestInfo *const test_info_ GTEST_ATTRIBUTE_UNUSED_; \ + GTEST_DISALLOW_COPY_AND_ASSIGN_( \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ + }; \ + \ + ::testing::TestInfo *const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::test_info_ = \ + ::testing::internal::MakeAndRegisterTestInfo( \ + #test_suite_name, #test_name, nullptr, nullptr, \ + ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id), \ + ::testing::internal::SuiteApiResolver< \ + parent_class>::GetSetUpCaseOrSuite(), \ + ::testing::internal::SuiteApiResolver< \ + parent_class>::GetTearDownCaseOrSuite(), \ + new ::testing::internal::TestFactoryImpl); \ + template \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::testBodyHw() + +#define HWCMDTEST_F(cmdset_gen_base, test_fixture, test_name) \ + HWCMDTEST_TEST_(cmdset_gen_base, test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId()) + +#define CALL_IF_MATCH(match_core, match_product, expr) \ + auto matchCore = match_core; \ + auto matchProduct = match_product; \ + if ((::renderCoreFamily == matchCore) && \ + (IGFX_MAX_PRODUCT == matchProduct || ::productFamily == matchProduct)) { \ + expr; \ + } + +#define FAMILYTEST_TEST_(test_suite_name, test_name, parent_class, parent_id, match_core, match_product) \ + CHECK_TEST_NAME_LENGTH(test_suite_name, test_name) \ + \ + class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) : public parent_class { \ + public: \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + () {} \ + \ + private: \ + template \ + void testBodyHw(); \ + \ + void TestBody() override { \ + if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + CALL_IF_MATCH(match_core, match_product, \ + testBodyHw::GfxFamily>()) \ + } \ + } \ + void SetUp() override { \ + if (IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + GTEST_SKIP(); \ + } \ + CALL_IF_MATCH(match_core, match_product, parent_class::SetUp()) \ + } \ + void TearDown() override { \ + if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + CALL_IF_MATCH(match_core, match_product, parent_class::TearDown()) \ + } \ + } \ + static ::testing::TestInfo *const test_info_ GTEST_ATTRIBUTE_UNUSED_; \ + GTEST_DISALLOW_COPY_AND_ASSIGN_( \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ + }; \ + \ + ::testing::TestInfo *const GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::test_info_ = \ + ::testing::internal::MakeAndRegisterTestInfo( \ + #test_suite_name, #test_name, nullptr, nullptr, \ + ::testing::internal::CodeLocation(__FILE__, __LINE__), (parent_id), \ + ::testing::internal::SuiteApiResolver< \ + parent_class>::GetSetUpCaseOrSuite(), \ + ::testing::internal::SuiteApiResolver< \ + parent_class>::GetTearDownCaseOrSuite(), \ + new ::testing::internal::TestFactoryImpl); \ + template \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::testBodyHw() + +// Equivalent Hw specific macro for permuted tests +// Test can use FamilyType in the test -- equivalent to SKLFamily +#define HWTEST_P(test_suite_name, test_name) \ + CHECK_TEST_NAME_LENGTH(test_suite_name, test_name) \ + class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) : public test_suite_name { \ + public: \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + () {} \ + template \ + void testBodyHw(); \ + \ + void TestBody() override { \ + FAMILY_SELECTOR(::renderCoreFamily, testBodyHw) \ + } \ + \ + private: \ + static int AddToRegistry() { \ + ::testing::UnitTest::GetInstance()->parameterized_test_registry().GetTestCasePatternHolder( \ + #test_suite_name, ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ + ->AddTestPattern( \ + #test_suite_name, \ + #test_name, \ + new ::testing::internal::TestMetaFactory< \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)>()); \ + return 0; \ + } \ + static int gtest_registering_dummy_; \ + GTEST_DISALLOW_COPY_AND_ASSIGN_( \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ + }; \ + int GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)::gtest_registering_dummy_ = \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \ + template \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::testBodyHw() + +#define HWCMDTEST_P(cmdset_gen_base, test_suite_name, test_name) \ + CHECK_TEST_NAME_LENGTH(test_suite_name, test_name) \ + \ + class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) : public test_suite_name { \ + public: \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + () {} \ + \ + template \ + void testBodyHw(); \ + \ + template \ + auto runCmdTestHwIfSupported() -> typename std::enable_if::type { \ + testBodyHw(); \ + } \ + \ + template \ + auto runCmdTestHwIfSupported() -> typename std::enable_if::type { \ + /* do nothing */ \ + } \ + \ + void TestBody() override { \ + if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + FAMILY_SELECTOR(::renderCoreFamily, runCmdTestHwIfSupported) \ + } \ + } \ + void SetUp() override { \ + if (IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + GTEST_SKIP(); \ + } \ + CALL_IF_SUPPORTED(cmdset_gen_base, test_suite_name::SetUp()); \ + } \ + void TearDown() override { \ + if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + CALL_IF_SUPPORTED(cmdset_gen_base, test_suite_name::TearDown()); \ + } \ + } \ + \ + private: \ + static int AddToRegistry() { \ + ::testing::UnitTest::GetInstance()->parameterized_test_registry().GetTestCasePatternHolder( \ + #test_suite_name, ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ + ->AddTestPattern( \ + #test_suite_name, \ + #test_name, \ + new ::testing::internal::TestMetaFactory< \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)>()); \ + return 0; \ + } \ + static int gtest_registering_dummy_; \ + GTEST_DISALLOW_COPY_AND_ASSIGN_( \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ + }; \ + int GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)::gtest_registering_dummy_ = \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \ + template \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::testBodyHw() + +// Macros to provide template based testing. +// Test can use productFamily, gfxCoreFamily and FamilyType in the test +#define HWTEST2_P(test_suite_name, test_name, test_matcher) \ + class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) : public test_suite_name { \ + \ + public: \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + () {} \ + \ + template \ + void matchBody(); \ + \ + private: \ + using ContainerType = SupportedProductFamilies; \ + using MatcherType = test_matcher; \ + \ + template \ + void matched() { \ + const GFXCORE_FAMILY gfxCoreFamily = \ + static_cast(NEO::HwMapper::gfxFamily); \ + using FamilyType = typename NEO::GfxFamilyMapper::GfxFamily; \ + matchBody(); \ + } \ + \ + struct MatcherFalse { \ + template \ + static void matched() {} \ + }; \ + \ + template \ + void checkForMatch(PRODUCT_FAMILY matchProduct); \ + \ + template \ + bool checkMatch(PRODUCT_FAMILY matchProduct); \ + \ + void SetUp() override; \ + void TearDown() override; \ + \ + void TestBody() override; \ + \ + static int AddToRegistry() { \ + ::testing::UnitTest::GetInstance() \ + ->parameterized_test_registry() \ + .GetTestCasePatternHolder(#test_suite_name, \ + ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ + ->AddTestPattern(#test_suite_name, #test_name, \ + new ::testing::internal::TestMetaFactory()); \ + return 0; \ + } \ + static int gtest_registering_dummy_; \ + GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ + }; \ + \ + template \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)::checkForMatch(PRODUCT_FAMILY matchProduct) { \ + const PRODUCT_FAMILY productFamily = At::productFamily; \ + \ + if (matchProduct == productFamily) { \ + const bool isMatched = MatcherType::isMatched(); \ + using Matcher = \ + typename std::conditional::type; \ + Matcher::template matched(); \ + } else { \ + checkForMatch(matchProduct); \ + } \ + } \ + \ + template <> \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)::checkForMatch<0u>(PRODUCT_FAMILY matchProduct) { \ + const int matcherOrdinal = 0u; \ + const PRODUCT_FAMILY productFamily = At::productFamily; \ + \ + if (matchProduct == productFamily) { \ + const bool isMatched = MatcherType::isMatched(); \ + using Matcher = \ + typename std::conditional::type; \ + Matcher::template matched(); \ + } \ + } \ + template \ + bool GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)::checkMatch(PRODUCT_FAMILY matchProduct) { \ + const PRODUCT_FAMILY productFamily = At::productFamily; \ + \ + if (matchProduct == productFamily) { \ + const bool isMatched = MatcherType::isMatched(); \ + return isMatched; \ + } else { \ + return checkMatch(matchProduct); \ + } \ + } \ + \ + template <> \ + bool GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)::checkMatch<0>(PRODUCT_FAMILY matchProduct) { \ + const int matcherOrdinal = 0u; \ + const PRODUCT_FAMILY productFamily = At::productFamily; \ + \ + if (matchProduct == productFamily) { \ + const bool isMatched = MatcherType::isMatched(); \ + return isMatched; \ + } else { \ + return false; \ + } \ + } \ + \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::SetUp() { \ + if (IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + GTEST_SKIP(); \ + } \ + if (checkMatch(::productFamily)) { \ + test_suite_name::SetUp(); \ + } \ + } \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TearDown() { \ + if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + if (checkMatch(::productFamily)) { \ + test_suite_name::TearDown(); \ + } \ + } \ + } \ + \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody() { \ + if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + checkForMatch(::productFamily); \ + } \ + } \ + \ + int GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::gtest_registering_dummy_ = \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \ + template \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::matchBody() + +#define FAMILYTEST_TEST_P(test_suite_name, test_name, match_core, match_product) \ + CHECK_TEST_NAME_LENGTH(test_suite_name, test_name) \ + class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) : public test_suite_name { \ + public: \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \ + () {} \ + template \ + void testBodyHw(); \ + \ + void TestBody() override { \ + if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + CALL_IF_MATCH(match_core, match_product, \ + testBodyHw::GfxFamily>()) \ + } \ + } \ + void SetUp() override { \ + if (IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + GTEST_SKIP(); \ + } \ + CALL_IF_MATCH(match_core, match_product, test_suite_name::SetUp()) \ + } \ + void TearDown() override { \ + if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \ + CALL_IF_MATCH(match_core, match_product, test_suite_name::TearDown()) \ + } \ + } \ + \ + private: \ + static int AddToRegistry() { \ + ::testing::UnitTest::GetInstance()->parameterized_test_registry().GetTestCasePatternHolder( \ + #test_suite_name, ::testing::internal::CodeLocation(__FILE__, __LINE__)) \ + ->AddTestPattern( \ + #test_suite_name, \ + #test_name, \ + new ::testing::internal::TestMetaFactory< \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)>()); \ + return 0; \ + } \ + static int gtest_registering_dummy_; \ + GTEST_DISALLOW_COPY_AND_ASSIGN_( \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)); \ + }; \ + int GTEST_TEST_CLASS_NAME_(test_suite_name, \ + test_name)::gtest_registering_dummy_ = \ + GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \ + template \ + void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::testBodyHw() + +#define GENTEST_F(gfx_core, test_fixture, test_name) \ + FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \ + ::testing::internal::GetTypeId(), \ + gfx_core, IGFX_MAX_PRODUCT) + +#define GENTEST_P(gfx_core, test_suite_name, test_name) \ + FAMILYTEST_TEST_P(test_suite_name, test_name, gfx_core, IGFX_MAX_PRODUCT) + +#include "per_product_test_definitions.h" + +#define HWTEST_TYPED_TEST(CaseName, TestName) \ + CHECK_TEST_NAME_LENGTH(CaseName, TestName) \ + template \ + class GTEST_TEST_CLASS_NAME_(CaseName, TestName) : public CaseName { \ + private: \ + typedef CaseName TestFixture; \ + typedef gtest_TypeParam_ TypeParam; \ + template \ + void testBodyHw(); \ + \ + void TestBody() override { \ + FAMILY_SELECTOR(::renderCoreFamily, testBodyHw) \ + } \ + }; \ + bool gtest_##CaseName##_##TestName##_registered_ GTEST_ATTRIBUTE_UNUSED_ = \ + ::testing::internal::TypeParameterizedTest< \ + CaseName, \ + ::testing::internal::TemplateSel< \ + GTEST_TEST_CLASS_NAME_(CaseName, TestName)>, \ + GTEST_TYPE_PARAMS_(CaseName)>::Register("", ::testing::internal::CodeLocation(__FILE__, __LINE__), \ + #CaseName, #TestName, 0); \ + template \ + template \ + void GTEST_TEST_CLASS_NAME_(CaseName, TestName)::testBodyHw() + +template +struct Test + : public Fixture, + public ::testing::Test { + + void SetUp() override { + Fixture::SetUp(); + } + + void TearDown() override { + Fixture::TearDown(); + } +}; + +template +struct SupportedProductFamilyContainer { + using BaseClass = SupportedProductFamilyContainer; + static const PRODUCT_FAMILY productFamily = IGFX_UNKNOWN; +}; + +template +struct SupportedProductFamilyContainer : SupportedProductFamilyContainer { + using BaseClass = SupportedProductFamilyContainer; + + static const PRODUCT_FAMILY productFamily = p; + static const std::size_t size = sizeof...(args) + 1; +}; + +using SupportedProductFamilies = + SupportedProductFamilyContainer; + +// Static container accessor +template +struct At { + static const PRODUCT_FAMILY productFamily = + At::productFamily; +}; + +template +struct At { + static const PRODUCT_FAMILY productFamily = Container::productFamily; +}; + +template +struct IsGfxCore { + template + static constexpr bool isMatched() { + return NEO::ToGfxCoreFamily::get() == gfxCoreFamily; + } +}; + +template +struct IsNotGfxCore { + template + static constexpr bool isMatched() { + return NEO::ToGfxCoreFamily::get() != gfxCoreFamily; + } +}; + +template +struct AreNotGfxCores { + template + static constexpr bool isMatched() { + return NEO::ToGfxCoreFamily::get() != gfxCoreFamily && NEO::ToGfxCoreFamily::get() != gfxCoreFamily2; + } +}; + +template +struct IsAtMostGfxCore { + template + static constexpr bool isMatched() { + return NEO::ToGfxCoreFamily::get() <= gfxCoreFamily; + } +}; + +template +struct IsAtLeastGfxCore { + template + static constexpr bool isMatched() { + return NEO::ToGfxCoreFamily::get() >= gfxCoreFamily; + } +}; + +template +struct IsWithinGfxCore { + template + static constexpr bool isMatched() { + return NEO::ToGfxCoreFamily::get() >= gfxCoreFamilyMin && NEO::ToGfxCoreFamily::get() <= gfxCoreFamilyMax; + } +}; + +template +struct IsProduct { + template + static constexpr bool isMatched() { + return productFamily == product; + } +}; + +template +struct IsAtMostProduct { + template + static constexpr bool isMatched() { + return productFamily <= productFamilyMax; + } +}; + +template +struct IsAtLeastProduct { + template + static constexpr bool isMatched() { + return productFamily >= productFamilyMin; + } +}; + +template +struct IsWithinProducts { + template + static constexpr bool isMatched() { + return productFamily >= productFamilyMin && productFamily <= productFamilyMax; + } +}; + +struct MatchAny { + template + static constexpr bool isMatched() { return true; } +}; + +#include "common_matchers.h"