| #ifndef _VKTTESTGROUPUTIL_HPP |
| #define _VKTTESTGROUPUTIL_HPP |
| /*------------------------------------------------------------------------- |
| * Vulkan Conformance Tests |
| * ------------------------ |
| * |
| * Copyright (c) 2016 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| *//*! |
| * \file |
| * \brief TestCaseGroup utilities |
| *//*--------------------------------------------------------------------*/ |
| |
| #include "tcuDefs.hpp" |
| #include "tcuTestCase.hpp" |
| |
| namespace vkt |
| { |
| |
| class TestGroupHelper0 : public tcu::TestCaseGroup |
| { |
| public: |
| typedef void (*CreateChildrenFunc) (tcu::TestCaseGroup* testGroup); |
| typedef void (*CleanupGroupFunc) (tcu::TestCaseGroup* testGroup); |
| |
| TestGroupHelper0 (tcu::TestContext& testCtx, |
| const std::string& name, |
| const std::string& description, |
| CreateChildrenFunc createChildren, |
| CleanupGroupFunc cleanupGroup); |
| ~TestGroupHelper0 (void); |
| |
| void init (void); |
| void deinit (void); |
| |
| private: |
| const CreateChildrenFunc m_createChildren; |
| const CleanupGroupFunc m_cleanupGroup; |
| }; |
| |
| template<typename Arg0> |
| class TestGroupHelper1 : public tcu::TestCaseGroup |
| { |
| public: |
| typedef void (*CreateChildrenFunc) (tcu::TestCaseGroup* testGroup, Arg0 arg0); |
| typedef void (*CleanupGroupFunc) (tcu::TestCaseGroup* testGroup, Arg0 arg0); |
| |
| TestGroupHelper1 (tcu::TestContext& testCtx, |
| const std::string& name, |
| const std::string& description, |
| CreateChildrenFunc createChildren, |
| const Arg0& arg0, |
| CleanupGroupFunc cleanupGroup) |
| : tcu::TestCaseGroup (testCtx, name.c_str(), description.c_str()) |
| , m_createChildren (createChildren) |
| , m_cleanupGroup (cleanupGroup) |
| , m_arg0 (arg0) |
| {} |
| |
| void init (void) { m_createChildren(this, m_arg0); } |
| void deinit (void) { if (m_cleanupGroup) m_cleanupGroup(this, m_arg0); } |
| |
| private: |
| const CreateChildrenFunc m_createChildren; |
| const CleanupGroupFunc m_cleanupGroup; |
| const Arg0 m_arg0; |
| }; |
| |
| template<typename Arg0, typename Arg1> |
| class TestGroupHelper2 : public tcu::TestCaseGroup |
| { |
| public: |
| typedef void(*CreateChildrenFunc) (tcu::TestCaseGroup* testGroup, Arg0 arg0, Arg1 arg1); |
| typedef void(*CleanupGroupFunc) (tcu::TestCaseGroup* testGroup, Arg0 arg0, Arg1 arg1); |
| |
| TestGroupHelper2(tcu::TestContext& testCtx, |
| const std::string& name, |
| const std::string& description, |
| CreateChildrenFunc createChildren, |
| const Arg0& arg0, |
| const Arg1& arg1, |
| CleanupGroupFunc cleanupGroup) |
| : tcu::TestCaseGroup (testCtx, name.c_str(), description.c_str()) |
| , m_createChildren (createChildren) |
| , m_cleanupGroup (cleanupGroup) |
| , m_arg0 (arg0) |
| , m_arg1 (arg1) |
| {} |
| |
| void init (void) { m_createChildren(this, m_arg0, m_arg1); } |
| void deinit (void) { if (m_cleanupGroup) m_cleanupGroup(this, m_arg0, m_arg1); } |
| |
| private: |
| const CreateChildrenFunc m_createChildren; |
| const CleanupGroupFunc m_cleanupGroup; |
| const Arg0 m_arg0; |
| const Arg1 m_arg1; |
| }; |
| |
| inline tcu::TestCaseGroup* createTestGroup (tcu::TestContext& testCtx, |
| const std::string& name, |
| const std::string& description, |
| TestGroupHelper0::CreateChildrenFunc createChildren, |
| TestGroupHelper0::CleanupGroupFunc cleanupGroup = DE_NULL) |
| { |
| return new TestGroupHelper0(testCtx, name, description, createChildren, cleanupGroup); |
| } |
| |
| template<typename Arg0> |
| tcu::TestCaseGroup* createTestGroup (tcu::TestContext& testCtx, |
| const std::string& name, |
| const std::string& description, |
| typename TestGroupHelper1<Arg0>::CreateChildrenFunc createChildren, |
| Arg0 arg0, |
| typename TestGroupHelper1<Arg0>::CleanupGroupFunc cleanupGroup = DE_NULL) |
| { |
| return new TestGroupHelper1<Arg0>(testCtx, name, description, createChildren, arg0, cleanupGroup); |
| } |
| template<typename Arg0, typename Arg1> |
| tcu::TestCaseGroup* createTestGroup (tcu::TestContext& testCtx, |
| const std::string& name, |
| const std::string& description, |
| typename TestGroupHelper2<Arg0, Arg1>::CreateChildrenFunc createChildren, |
| Arg0 arg0, |
| Arg1 arg1, |
| typename TestGroupHelper2<Arg0, Arg1>::CleanupGroupFunc cleanupGroup = DE_NULL) |
| { |
| return new TestGroupHelper2<Arg0, Arg1>(testCtx, name, description, createChildren, arg0, arg1, cleanupGroup); |
| } |
| |
| inline void addTestGroup (tcu::TestCaseGroup* parent, |
| const std::string& name, |
| const std::string& description, |
| TestGroupHelper0::CreateChildrenFunc createChildren) |
| { |
| parent->addChild(createTestGroup(parent->getTestContext(), name, description, createChildren)); |
| } |
| |
| template<typename Arg0> |
| void addTestGroup (tcu::TestCaseGroup* parent, |
| const std::string& name, |
| const std::string& description, |
| typename TestGroupHelper1<Arg0>::CreateChildrenFunc createChildren, |
| Arg0 arg0, |
| typename TestGroupHelper1<Arg0>::CleanupGroupFunc cleanupGroup = DE_NULL) |
| { |
| parent->addChild(createTestGroup<Arg0>(parent->getTestContext(), name, description, createChildren, arg0, cleanupGroup)); |
| } |
| |
| template<typename Arg0, typename Arg1> |
| void addTestGroup(tcu::TestCaseGroup* parent, |
| const std::string& name, |
| const std::string& description, |
| typename TestGroupHelper2<Arg0,Arg1>::CreateChildrenFunc createChildren, |
| Arg0 arg0, |
| Arg1 arg1, |
| typename TestGroupHelper2<Arg0,Arg1>::CleanupGroupFunc cleanupGroup = DE_NULL) |
| { |
| parent->addChild(createTestGroup<Arg0,Arg1>(parent->getTestContext(), name, description, createChildren, arg0, arg1, cleanupGroup)); |
| } |
| |
| } // vkt |
| |
| #endif // _VKTTESTGROUPUTIL_HPP |