1#ifndef _VKTTESTGROUPUTIL_HPP
2#define _VKTTESTGROUPUTIL_HPP
3/*-------------------------------------------------------------------------
4 * Vulkan Conformance Tests
5 * ------------------------
6 *
7 * Copyright (c) 2016 Google Inc.
8 *
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12 *
13 *      http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 *
21 *//*!
22 * \file
23 * \brief TestCaseGroup utilities
24 *//*--------------------------------------------------------------------*/
25
26#include "tcuDefs.hpp"
27#include "tcuTestCase.hpp"
28
29namespace vkt
30{
31
32class TestGroupHelper0 : public tcu::TestCaseGroup
33{
34public:
35	typedef void (*CreateChildrenFunc) (tcu::TestCaseGroup* testGroup);
36
37								TestGroupHelper0	(tcu::TestContext&		testCtx,
38													 const std::string&		name,
39													 const std::string&		description,
40													 CreateChildrenFunc		createChildren);
41								~TestGroupHelper0	(void);
42
43	void						init				(void);
44
45private:
46	const CreateChildrenFunc	m_createChildren;
47};
48
49template<typename Arg0>
50class TestGroupHelper1 : public tcu::TestCaseGroup
51{
52public:
53	typedef void (*CreateChildrenFunc) (tcu::TestCaseGroup* testGroup, Arg0 arg0);
54
55								TestGroupHelper1	(tcu::TestContext&		testCtx,
56													 const std::string&		name,
57													 const std::string&		description,
58													 CreateChildrenFunc		createChildren,
59													 const Arg0&			arg0)
60									: tcu::TestCaseGroup	(testCtx, name.c_str(), description.c_str())
61									, m_createChildren		(createChildren)
62									, m_arg0				(arg0)
63								{}
64
65	void						init				(void) { m_createChildren(this, m_arg0); }
66
67private:
68	const CreateChildrenFunc	m_createChildren;
69	const Arg0					m_arg0;
70};
71
72inline tcu::TestCaseGroup* createTestGroup (tcu::TestContext&						testCtx,
73											const std::string&						name,
74											const std::string&						description,
75											TestGroupHelper0::CreateChildrenFunc	createChildren)
76{
77	return new TestGroupHelper0(testCtx, name, description, createChildren);
78}
79
80template<typename Arg0>
81tcu::TestCaseGroup* createTestGroup (tcu::TestContext&										testCtx,
82									 const std::string&										name,
83									 const std::string&										description,
84									 typename TestGroupHelper1<Arg0>::CreateChildrenFunc	createChildren,
85									 Arg0													arg0)
86{
87	return new TestGroupHelper1<Arg0>(testCtx, name, description, createChildren, arg0);
88}
89
90inline void addTestGroup (tcu::TestCaseGroup*					parent,
91						  const std::string&					name,
92						  const std::string&					description,
93						  TestGroupHelper0::CreateChildrenFunc	createChildren)
94{
95	parent->addChild(createTestGroup(parent->getTestContext(), name, description, createChildren));
96}
97
98template<typename Arg0>
99void addTestGroup (tcu::TestCaseGroup*									parent,
100				   const std::string&									name,
101				   const std::string&									description,
102				   typename TestGroupHelper1<Arg0>::CreateChildrenFunc	createChildren,
103				   Arg0													arg0)
104{
105	parent->addChild(createTestGroup<Arg0>(parent->getTestContext(), name, description, createChildren, arg0));
106}
107
108} // vkt
109
110#endif // _VKTTESTGROUPUTIL_HPP
111