compute-runtime/shared/test/common/test_macros/hw_test_base.h

134 lines
14 KiB
C++

/*
* Copyright (C) 2021-2022 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/source/helpers/hw_info.h"
#include "shared/test/common/test_macros/test.h"
#include "shared/test/common/test_macros/test_base.h"
#include "shared/test/common/test_macros/test_excludes.h"
#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)
#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 GENTEST_F(gfx_core, test_fixture, test_name) \
FAMILYTEST_TEST_(test_fixture, test_name, test_fixture, \
::testing::internal::GetTypeId<test_fixture>(), \
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)
#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 <typename FamilyType> \
void testBodyHw(); \
\
void TestBody() override { \
if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \
CALL_IF_MATCH(match_core, match_product, \
testBodyHw<typename NEO::GfxFamilyMapper<match_core>::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<GTEST_TEST_CLASS_NAME_( \
test_suite_name, test_name)>); \
template <typename FamilyType> \
void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::testBodyHw()
#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 <typename FamilyType> \
void testBodyHw(); \
\
void TestBody() override { \
if (!IS_TEST_EXCLUDED(test_suite_name, test_name)) { \
CALL_IF_MATCH(match_core, match_product, \
testBodyHw<typename NEO::GfxFamilyMapper<match_core>::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>( \
#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 <typename FamilyType> \
void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::testBodyHw()