Home | History | Annotate | Download | only in vulkan
      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 
     29 namespace vkt
     30 {
     31 
     32 class TestGroupHelper0 : public tcu::TestCaseGroup
     33 {
     34 public:
     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 
     45 private:
     46 	const CreateChildrenFunc	m_createChildren;
     47 };
     48 
     49 template<typename Arg0>
     50 class TestGroupHelper1 : public tcu::TestCaseGroup
     51 {
     52 public:
     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 
     67 private:
     68 	const CreateChildrenFunc	m_createChildren;
     69 	const Arg0					m_arg0;
     70 };
     71 
     72 inline 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 
     80 template<typename Arg0>
     81 tcu::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 
     90 inline 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 
     98 template<typename Arg0>
     99 void 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