iutest  1.17.99.14
iutest_param_tests.hpp
[詳解]
1 //======================================================================
2 //-----------------------------------------------------------------------
13 //-----------------------------------------------------------------------
14 //======================================================================
15 #ifndef INCG_IRIS_IUTEST_PARAM_TESTS_HPP_3DBBF55E_A076_4207_B49E_34734EE333EE_
16 #define INCG_IRIS_IUTEST_PARAM_TESTS_HPP_3DBBF55E_A076_4207_B49E_34734EE333EE_
17 
18 //======================================================================
19 // include
20 // IWYU pragma: begin_exports
21 #include "iutest_any.hpp"
22 // IWYU pragma: end_exports
23 
24 #if IUTEST_HAS_PARAM_TEST
25 
26 //======================================================================
27 // define
42 #if IUTEST_HAS_PARAM_TEST_PARAM_NAME_GENERATOR
43 # define IUTEST_INSTANTIATE_TEST_SUITE_P(prefix_, testfixture_, generator_, ...) \
44  IIUT_INSTANTIATE_TEST_SUITE_P_(prefix_, testfixture_, generator_, __VA_ARGS__)
45 #else
46 # define IUTEST_INSTANTIATE_TEST_SUITE_P(prefix_, testfixture_, generator_) \
47  IIUT_INSTANTIATE_TEST_SUITE_P_(prefix_, testfixture_, generator_)
48 #endif
49 
61 #define IUTEST_P(testfixture_, testname_) IUTEST_TEST_P_(testfixture_, testname_)
62 
63 
64 #if IUTEST_HAS_ANY_PARAM_TEST
65 
74 #define IUTEST_INSTANTIATE_TEST_SUITE_AP(prefix_, testsuite_, generator_) \
75  IIUT_INSTANTIATE_TEST_SUITE_AP_(prefix_, testsuite_, generator_)
76 
87 #define IUTEST_AP(testsuite_, testname_) \
88  IUTEST_TEST_AP_(testsuite_, testname_)
89 
90 #endif
91 
92 
98 #if !defined(IUTEST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS)
99 # define IIUT_GETTESTSUITEPATTERNHOLDER(T, testsuite_, package_) \
100  ::iutest::UnitTest::GetInstance()->parameterized_test_registry( \
101  ).GetTestSuitePatternHolder<T>(testsuite_, package_)
102 #else
103 # define IIUT_GETTESTSUITEPATTERNHOLDER(T, testsuite_, package_) \
104  ::iutest::UnitTest::GetInstance()->parameterized_test_registry( \
105  ).GetTestSuitePatternHolder(testsuite_, package_, ::iutest::detail::explicit_type<T>())
106 #endif
107 
108 #if IUTEST_HAS_AUTOFIXTURE_PARAM_TEST
109 # if IUTEST_HAS_IF_EXISTS
110 # define IIUT_TEST_P_FIXTURE_DECL_(testsuite_) IIUT_TEST_P_FIXTURE_DECL_I(IIUT_TO_VARNAME_(testsuite_))
111 # define IIUT_TEST_P_FIXTURE_DECL_I(testsuite_) IUTEST_IF_NOT_EXISTS(testsuite_, typedef ::iutest::TestWithAny testsuite_;)
112 # define IIUT_TEST_P_BASE_FIXTURE(testsuite_) IIUT_TO_VARNAME_(testsuite_)
113 # else
114 # define IIUT_TEST_P_FIXTURE_DECL_(testsuite_)
115 # if !defined(IUTEST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
116 # define IIUT_TEST_P_BASE_FIXTURE(testsuite_) \
117  ::iutest::detail::paramtest_select_base_testsuite< void (int (IIUT_TO_VARNAME_(testsuite_))) >::type
118 # else
119 # define IIUT_TEST_P_BASE_FIXTURE(testsuite_) IIUT_TO_VARNAME_(testsuite_)
120 # endif
121 # endif
122 #else
123 # define IIUT_TEST_P_FIXTURE_DECL_(testsuite_)
124 # define IIUT_TEST_P_BASE_FIXTURE(testsuite_) IIUT_TO_VARNAME_(testsuite_)
125 #endif
126 
130 #if IUTEST_HAS_PARAM_TEST_PARAM_NAME_GENERATOR
131 # define IIUT_INSTANTIATE_TEST_SUITE_P_(prefix_, testsuite_, generator_, ...) \
132  IIUT_INSTANTIATE_TEST_SUITE_P_I(prefix_, testsuite_, generator_, GetParamNameGen(__VA_ARGS__))
133 #else
134 # define IIUT_INSTANTIATE_TEST_SUITE_P_(prefix_, testsuite_, generator_) \
135  IIUT_INSTANTIATE_TEST_SUITE_P_I(prefix_, testsuite_, generator_, GetParamNameGen())
136 #endif
137 
138 #if IUTEST_HAS_TESTFIXTURE_ALIAS_BY_TUPLE
139 
140 #define IIUT_INSTANTIATE_TEST_SUITE_P_I(prefix_, testsuite_, generator_, paramname_generator_) \
141  IIUT_INSTANTIATE_TEST_SUITE_P_II(prefix_, IUTEST_PP_IF( IUTEST_PP_IS_BEGIN_PARENS(testsuite_) \
142  , IUTEST_ALIAS_TESTNAME_F_, IUTEST_PP_EMPTY() ) testsuite_, generator_, paramname_generator_)
143 
144 #else
145 
146 #define IIUT_INSTANTIATE_TEST_SUITE_P_I(prefix_, testsuite_, generator_, paramname_generator_) \
147  IIUT_INSTANTIATE_TEST_SUITE_P_II(prefix_, testsuite_, generator_, paramname_generator_)
148 
149 #endif
150 
151 #define IIUT_INSTANTIATE_TEST_SUITE_P_II(prefix_, testsuite_, generator_, paramname_generator_) \
152  IIUT_INSTANTIATE_TEST_SUITE_P_III(prefix_, testsuite_, IIUT_TEST_P_BASE_FIXTURE(testsuite_) \
153  , generator_, paramname_generator_)
154 
155 
156 #define IIUT_INSTANTIATE_TEST_SUITE_P_III(prefix_, testsuite_, basefixture_, generator_, paramname_generator_) \
157  IIUT_TEST_P_FIXTURE_DECL_(testsuite_) \
158  static ::iutest::detail::iuIParamGenerator< basefixture_::ParamType >* \
159  IIUT_TEST_P_EVALGENERATOR_NAME_(prefix_, testsuite_)() { return generator_; } \
160  static ::std::string IIUT_TEST_P_PARAMGENERATOR_NAME_(prefix_, testsuite_)( \
161  const ::iutest::TestParamInfo< basefixture_::ParamType >& pinfo_) { return \
162  ::iutest::detail::ParamTestSuiteInfo< basefixture_ >::paramname_generator_(pinfo_); } \
163  int IIUT_TEST_P_INSTANTIATIONREGISTER_NAME_(prefix_, testsuite_)() { \
164  ::iutest::detail::ParamTestSuiteInfo< basefixture_ >* p = IIUT_GETTESTSUITEPATTERNHOLDER( \
165  basefixture_, IIUT_TO_NAME_STR_(testsuite_), IUTEST_GET_PACKAGENAME_()); \
166  return p->AddTestSuiteInstantiation(#prefix_ \
167  , IIUT_TEST_P_EVALGENERATOR_NAME_(prefix_, testsuite_) \
168  , IIUT_TEST_P_PARAMGENERATOR_NAME_(prefix_, testsuite_) \
169  , __FILE__, __LINE__); \
170  } IIUT_TEST_P_INSTANTIATIONREGISTER_(prefix_, testsuite_)
171 
175 #define IIUT_TEST_P_I_(classname_, testsuite_, testsuitename_, testname_) \
176  IIUT_TEST_P_FIXTURE_DECL_(testsuite_) \
177  class classname_ IUTEST_CXX_FINAL : public testsuite_ { \
178  public: classname_() {} \
179  protected: virtual void Body() IUTEST_CXX_OVERRIDE; \
180  private: static int AddRegister() { \
181  static ::iutest::detail::ParamTestInstance< classname_ > testinfo(testname_); \
182  IIUT_GETTESTSUITEPATTERNHOLDER(testsuite_, testsuitename_ \
183  , IUTEST_GET_PACKAGENAME_())->AddTestPattern(&testinfo); return 0; \
184  } \
185  static int dummy_; \
186  IUTEST_PP_DISALLOW_COPY_AND_ASSIGN(classname_); \
187  }; \
188  int classname_::dummy_ IUTEST_ATTRIBUTE_UNUSED_ = classname_::AddRegister(); \
189  void classname_::Body()
190 
191 #if IUTEST_HAS_IGNORE_TEST
192 
193 #define IIUT_TEST_P_I_IGNORE_(classname_, testsuite_, testsuitename_, testname_) \
194  class classname_ IUTEST_CXX_FINAL : public testsuite_ { \
195  public: classname_() {} \
196  protected: virtual void Body() IUTEST_CXX_OVERRIDE { IUTEST_SKIP() << "ignored test..."; } \
197  template<typename T>void Body(); \
198  private: static int AddRegister() { \
199  static ::iutest::detail::ParamTestInstance< classname_ > testinfo(testname_); \
200  IIUT_GETTESTSUITEPATTERNHOLDER(testsuite_, testsuitename_ \
201  , IUTEST_GET_PACKAGENAME_())->AddTestPattern(&testinfo); return 0; \
202  } \
203  static int dummy_; \
204  IUTEST_PP_DISALLOW_COPY_AND_ASSIGN(classname_); \
205  }; \
206  int classname_::dummy_ IUTEST_ATTRIBUTE_UNUSED_ = classname_::AddRegister(); \
207  template<typename T>void classname_::Body()
208 
209 #endif
210 
211 #define IIUT_TEST_P_(macro, testsuite_, testname_) \
212  macro(IUTEST_TEST_CLASS_NAME_(testsuite_, testname_) \
213  , IIUT_TEST_P_BASE_FIXTURE(testsuite_) \
214  , IIUT_TO_NAME_STR_(testsuite_), IIUT_TO_NAME_STR_(testname_))
215 
216 #if IUTEST_HAS_TESTFIXTURE_ALIAS_BY_TUPLE
217 
218 #define IIUT_TEST_P_A_(macro, testsuite_, testname_) \
219  IIUT_TEST_P_( macro, IUTEST_PP_IF( IUTEST_PP_IS_BEGIN_PARENS(testsuite_) \
220  , IUTEST_ALIAS_TESTNAME_F_, IUTEST_PP_EMPTY() ) testsuite_, testname_)
221 
222 #define IUTEST_TEST_P_(testsuite_, testname_) \
223  IIUT_TEST_P_A_(IIUT_TEST_P_I_, testsuite_, testname_)
224 
225 #if IUTEST_HAS_IGNORE_TEST
226 
227 #define IUTEST_TEST_P_IGNORE_(testsuite_, testname_) \
228  IIUT_TEST_P_A_(IIUT_TEST_P_I_IGNORE_, testsuite_, testname_)
229 
230 #endif
231 
232 #else
233 
234 #define IUTEST_TEST_P_(testsuite_, testname_) \
235  IIUT_TEST_P_(IIUT_TEST_P_I_, testsuite_, testname_)
236 
237 #if IUTEST_HAS_IGNORE_TEST
238 
239 #define IUTEST_TEST_P_IGNORE_(testsuite_, testname_) \
240  IIUT_TEST_P_(IIUT_TEST_P_I_IGNORE_, testsuite_, testname_)
241 
242 #endif
243 
244 #endif
245 
246 #define IIUT_TEST_AP_FIXTURE_NAME_(testsuite_) IUTEST_PP_CAT(iuTestWithAny, testsuite_)
247 #define IIUT_ALIAS_TESTNAME_AP_(testsuite_) IUTEST_ALIAS_TESTNAME_F(testsuite_, IIUT_TEST_AP_FIXTURE_NAME_(testsuite_))
248 
249 #define IUTEST_TEST_AP_(testsuite_, testname_) \
250  typedef ::iutest::TestWithAny IIUT_TEST_AP_FIXTURE_NAME_(testsuite_); \
251  IUTEST_TEST_P_(IIUT_ALIAS_TESTNAME_AP_(testsuite_), testname_)
252 
253 #define IIUT_INSTANTIATE_TEST_SUITE_AP_(prefix_, testsuite_, generator_) \
254  IIUT_INSTANTIATE_TEST_SUITE_P_(prefix_, IIUT_ALIAS_TESTNAME_AP_(testsuite_), generator_)
255 
256 
257 #define IIUT_TEST_P_EVALGENERATOR_NAME_(prefix_, testsuite_) IIUT_TEST_P_EVALGENERATOR_NAME_I(prefix_, IIUT_TO_VARNAME_(testsuite_))
258 #define IIUT_TEST_P_EVALGENERATOR_NAME_I(prefix_, testsuite_) IIUT_TEST_P_EVALGENERATOR_NAME_I_(prefix_, testsuite_)
259 #define IIUT_TEST_P_EVALGENERATOR_NAME_I_(prefix_, testsuite_) s_##prefix_##_x_iutest_x_##testsuite_##_EvalGenerator_
260 
261 #define IIUT_TEST_P_PARAMGENERATOR_NAME_(prefix_, testsuite_) IIUT_TEST_P_PARAMGENERATOR_NAME_I(prefix_, IIUT_TO_VARNAME_(testsuite_))
262 #define IIUT_TEST_P_PARAMGENERATOR_NAME_I(prefix_, testsuite_) IIUT_TEST_P_PARAMGENERATOR_NAME_I_(prefix_, testsuite_)
263 #define IIUT_TEST_P_PARAMGENERATOR_NAME_I_(prefix_, testsuite_) s_##prefix_##_x_iutest_x_##testsuite_##_ParamGenerator_
264 
265 #define IIUT_TEST_P_INSTANTIATIONREGISTER_NAME_(prefix_, testsuite_) \
266  IIUT_TEST_P_INSTANTIATIONREGISTER_NAME_I(prefix_, IIUT_TO_VARNAME_(testsuite_))
267 #define IIUT_TEST_P_INSTANTIATIONREGISTER_NAME_I(prefix_, testsuite_) IIUT_TEST_P_INSTANTIATIONREGISTER_NAME_I_(prefix_, testsuite_)
268 #define IIUT_TEST_P_INSTANTIATIONREGISTER_NAME_I_(prefix_, testsuite_) prefix_##_x_iutest_x_##testsuite_##_TestSuiteInstantiationRegister
269 
270 #define IIUT_TEST_P_INSTANTIATIONREGISTER_(prefix_, testsuite_) \
271  IIUT_TEST_P_INSTANTIATIONREGISTER_I(prefix_, IIUT_TO_VARNAME_(testsuite_), IIUT_TEST_P_INSTANTIATIONREGISTER_NAME_(prefix_, testsuite_))
272 #define IIUT_TEST_P_INSTANTIATIONREGISTER_I(prefix_, testsuite_, register_) IIUT_TEST_P_INSTANTIATIONREGISTER_I_(prefix_, testsuite_, register_)
273 #define IIUT_TEST_P_INSTANTIATIONREGISTER_I_(prefix_, testsuite_, register_) int s_##prefix_##_x_iutest_x_##testsuite_##_dummy = register_()
274 
279 namespace iutest {
280 namespace detail
281 {
282 
283 //======================================================================
284 // class
289 template<typename T>
290 class ParamTestInstance : public IParamTestInfoData
291 {
292  typedef T Tester;
293  typedef typename Tester::ParamType ParamType;
294  typedef detail::iuParamTestFactory<T> Factory;
295 
296  // 各テストのインスタンス
297  class EachTest IUTEST_CXX_FINAL : public IParamTestInfoData::ParamEachTestBase<ParamType>
298  {
299  public:
300  EachTest(TestSuite* testsuite, const ::std::string& name)
301  : m_mediator(testsuite)
302  , m_info(&m_mediator, name, &m_factory)
303  {
304  UnitTest::instance().AddTestInfo(testsuite, &m_info);
305  }
306  private:
307  virtual void SetParam(const ParamType& param) IUTEST_CXX_OVERRIDE
308  {
309  m_factory.SetParam(param);
310  m_info.set_value_param(PrintToString(param).c_str());
311  }
312  private:
313  TestSuiteMediator m_mediator;
314  Factory m_factory;
315  TestInfo m_info;
316  };
317 public:
318  ParamTestInstance() : IParamTestInfoData("") {} // allow empty name
319  explicit ParamTestInstance(const char* testsuite_name) : IParamTestInfoData(testsuite_name) {}
320 
321 private:
322  // TestSuite の作成
323  virtual TestSuite* MakeTestSuite(const ::std::string& testsuite_name, TestTypeId id
324  , SetUpMethod setup, TearDownMethod teardown) const IUTEST_CXX_OVERRIDE
325  {
326 #if !defined(IUTEST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS)
327  return UnitTest::instance().AddTestSuite<TestSuite>(testsuite_name, id, setup, teardown);
328 #else
329  return UnitTest::instance().AddTestSuite(
330  testsuite_name, id, setup, teardown, detail::explicit_type<TestSuite>());
331 #endif
332  }
333 
334  // テストの作成登録
335  virtual IParamTestInfoData::EachTestBase* RegisterTest(TestSuite* testsuite
336  , const ::std::string& name) const IUTEST_CXX_OVERRIDE
337  {
338  EachTest* test = new EachTest(testsuite, name);
339  // new オブジェクトを管理してもらう
340  detail::iuPool::GetInstance().push(test);
341  return test;
342  }
343 };
344 
345 } // end of namespace detail
346 
351 class TestWithAny : public Test, public WithParamInterface<any>
352 {
353 public:
357  static const ParamType& GetParam() { return WithParamInterface<any>::GetParam(); }
358 
362  template<typename T>
363  static T GetParam() { return unsafe_any_cast<T>(WithParamInterface<any>::GetParam()); }
364 };
365 
366 #if !defined(IUTEST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
367 namespace detail
368 {
369 
373 template<typename T>
374 struct paramtest_select_base_testsuite;
375 
376 template<>
377 struct paramtest_select_base_testsuite< void(int) >
378 {
379  typedef TestWithAny type;
380 };
381 template<typename T>
382 struct paramtest_select_base_testsuite< void(int (T)) >
383 {
384  typedef T type;
385 };
386 
387 } // end of namespace detail
388 #endif
389 
390 //======================================================================
391 // function
403 template<typename T>
404 detail::iuParamGenerator<T> IUTEST_ATTRIBUTE_UNUSED_ Range(T begin, T end, T step=static_cast<T>(1))
405 {
406  return new detail::iuRangeParamsGenerator<T>(begin, end, step);
407 }
408 
412 inline detail::iuParamGenerator<bool> IUTEST_ATTRIBUTE_UNUSED_ Bool()
413 {
414  return new detail::iuBoolParamsGenerator();
415 }
416 
417 #if IUTEST_HAS_VALUESGEN
418 
423 template<typename StdGenerator>
424 inline detail::iuValuesParamsGeneratorHolder<StdGenerator> IUTEST_ATTRIBUTE_UNUSED_ ValuesGen(size_t num, const StdGenerator& generator)
425 {
426  return detail::iuValuesParamsGeneratorHolder<StdGenerator>(num, generator);
427 }
428 
435 template<typename T, typename Filter>
436 inline detail::iuRandomFilterParamGenerator<T, Filter> IUTEST_ATTRIBUTE_UNUSED_ RandomGenerator(const Filter& filter, unsigned int seed=0)
437 {
438  if( seed == 0 )
439  {
440  seed = detail::GetIndefiniteValue();
441  }
442  return detail::iuRandomFilterParamGenerator<T, Filter>(filter, seed);
443 }
444 
445 #endif
446 
447 #if IUTEST_HAS_RANDOMVALUES
451 inline detail::iuRandomParamsHolder IUTEST_ATTRIBUTE_UNUSED_ RandomValues(size_t num, unsigned int seed=0)
452 {
453  return detail::iuRandomParamsHolder(num, seed);
454 }
455 #endif
456 
460 template<typename Container>
461 inline detail::iuParamGenerator< typename Container::value_type > IUTEST_ATTRIBUTE_UNUSED_ ValuesIn(Container container)
462 {
463  return new detail::iuValuesInParamsGenerator< typename Container::value_type >(container);
464 }
465 
466 #if !defined(IUTEST_NO_FUNCTION_TEMPLATE_ORDERING)
468 template<typename T, size_t SIZE>
469 inline detail::iuParamGenerator<T> IUTEST_ATTRIBUTE_UNUSED_ ValuesIn(const T (&v)[SIZE])
470 {
471  return new detail::iuValuesInParamsGenerator<T>(v, v+SIZE);
472 }
473 
474 #if !defined(IUTEST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
476 template<typename Ite>
477 inline detail::iuParamGenerator< typename detail::IteratorTraits<Ite>::type > IUTEST_ATTRIBUTE_UNUSED_ ValuesIn(Ite begin, Ite end)
478 {
479  return new detail::iuValuesInParamsGenerator<
480  typename detail::IteratorTraits<Ite>::type >(begin, end);
481 }
482 #endif
483 
484 #if IUTEST_HAS_INITIALIZER_LIST
486 template<typename T>
487 inline detail::iuParamGenerator<T> IUTEST_ATTRIBUTE_UNUSED_ ValuesIn(::std::initializer_list<T> l)
488 {
489  return new detail::iuValuesInParamsGenerator<T>(l);
490 }
491 #endif
492 
493 #endif
494 
495 #if IUTEST_HAS_VARIADIC_VALUES
499 template<typename ...Args>
500 inline detail::iuValueArray<Args...> IUTEST_ATTRIBUTE_UNUSED_ Values(Args... args)
501 {
502  return detail::iuValueArray<Args...>(args...);
503 }
504 
505 #else
506 
507 #define IIUT_DECL_VALUES_(n) template< IUTEST_PP_ENUM_PARAMS(n, typename T) > \
508  inline detail::iuValueArray##n< IUTEST_PP_ENUM_PARAMS(n, T) > \
509  IUTEST_ATTRIBUTE_UNUSED_ Values( IUTEST_PP_ENUM_BINARY_PARAMS(n, T, t) ) { \
510  return detail::iuValueArray##n< IUTEST_PP_ENUM_PARAMS(n, T) >( IUTEST_PP_ENUM_PARAMS(n, t) ); \
511  }
512 
517 IIUT_DECL_VALUES_(1)
518 IIUT_DECL_VALUES_(2)
519 IIUT_DECL_VALUES_(3)
520 IIUT_DECL_VALUES_(4)
521 IIUT_DECL_VALUES_(5)
522 IIUT_DECL_VALUES_(6)
523 IIUT_DECL_VALUES_(7)
524 IIUT_DECL_VALUES_(8)
525 IIUT_DECL_VALUES_(9)
526 IIUT_DECL_VALUES_(10)
527 IIUT_DECL_VALUES_(11)
528 IIUT_DECL_VALUES_(12)
529 IIUT_DECL_VALUES_(13)
530 IIUT_DECL_VALUES_(14)
531 IIUT_DECL_VALUES_(15)
532 IIUT_DECL_VALUES_(16)
533 IIUT_DECL_VALUES_(17)
534 IIUT_DECL_VALUES_(18)
535 IIUT_DECL_VALUES_(19)
536 IIUT_DECL_VALUES_(20)
537 IIUT_DECL_VALUES_(21)
538 IIUT_DECL_VALUES_(22)
539 IIUT_DECL_VALUES_(23)
540 IIUT_DECL_VALUES_(24)
541 IIUT_DECL_VALUES_(25)
542 IIUT_DECL_VALUES_(26)
543 IIUT_DECL_VALUES_(27)
544 IIUT_DECL_VALUES_(28)
545 IIUT_DECL_VALUES_(29)
546 IIUT_DECL_VALUES_(30)
547 IIUT_DECL_VALUES_(31)
548 IIUT_DECL_VALUES_(32)
549 IIUT_DECL_VALUES_(33)
550 IIUT_DECL_VALUES_(34)
551 IIUT_DECL_VALUES_(35)
552 IIUT_DECL_VALUES_(36)
553 IIUT_DECL_VALUES_(37)
554 IIUT_DECL_VALUES_(38)
555 IIUT_DECL_VALUES_(39)
556 IIUT_DECL_VALUES_(40)
557 IIUT_DECL_VALUES_(41)
558 IIUT_DECL_VALUES_(42)
559 IIUT_DECL_VALUES_(43)
560 IIUT_DECL_VALUES_(44)
561 IIUT_DECL_VALUES_(45)
562 IIUT_DECL_VALUES_(46)
563 IIUT_DECL_VALUES_(47)
564 IIUT_DECL_VALUES_(48)
565 IIUT_DECL_VALUES_(49)
566 IIUT_DECL_VALUES_(50)
567 
568 #undef IIUT_DECL_VALUES_
569 
570 #endif
571 
572 #if IUTEST_HAS_CONCAT
576 template<typename Generator1, typename Generator2>
577 detail::iuConcatParamHolder<Generator1, Generator2> Concat(const Generator1& g1, const Generator2& g2)
578 {
579  return detail::iuConcatParamHolder<Generator1, Generator2>(g1, g2);
580 }
581 #endif
582 
583 #if IUTEST_HAS_COMBINE
584 
585 #if IUTEST_HAS_VARIADIC_COMBINE
589 template<typename ...Generator>
590 detail::iuCartesianProductHolder<Generator...> Combine(const Generator&... generators)
591 {
592  return detail::iuCartesianProductHolder<Generator...>(generators...);
593 }
594 
595 #else
596 
597 #define IIUT_DECL_COMBINE_(n) template< IUTEST_PP_ENUM_PARAMS(n, typename T) > \
598  inline IUTEST_PP_CAT(detail::iuCartesianProductHolder, n)< IUTEST_PP_ENUM_PARAMS(n, T) > \
599  Combine(IUTEST_PP_ENUM_BINARY_PARAMS(n, const T, &t)) { \
600  return IUTEST_PP_CAT(detail::iuCartesianProductHolder, n) \
601  < IUTEST_PP_ENUM_PARAMS(n, T) >(IUTEST_PP_ENUM_PARAMS(n, t)); \
602  }
603 
608 IIUT_DECL_COMBINE_(2)
609 IIUT_DECL_COMBINE_(3)
610 IIUT_DECL_COMBINE_(4)
611 IIUT_DECL_COMBINE_(5)
612 IIUT_DECL_COMBINE_(6)
613 IIUT_DECL_COMBINE_(7)
614 IIUT_DECL_COMBINE_(8)
615 IIUT_DECL_COMBINE_(9)
616 
617 #undef IIUT_DECL_COMBINE_
618 
619 #endif
620 
621 #endif
622 
623 #if IUTEST_HAS_PAIRWISE
624 
625 #if IUTEST_HAS_VARIADIC_PAIRWISE
626 
630 template<typename ...Generator>
631 detail::iuPairwiseHolder<Generator...> Pairwise(const Generator&... generators)
632 {
633  return detail::iuPairwiseHolder<Generator...>(generators...);
634 }
635 
636 #else
637 
638 #define IIUT_DECL_PAIRWISE_(n) template< IUTEST_PP_ENUM_PARAMS(n, typename T) > \
639  inline IUTEST_PP_CAT(detail::iuPairwiseHolder, n)< IUTEST_PP_ENUM_PARAMS(n, T) > \
640  Pairwise(IUTEST_PP_ENUM_BINARY_PARAMS(n, const T, &t)) { \
641  return IUTEST_PP_CAT(detail::iuPairwiseHolder, n) \
642  < IUTEST_PP_ENUM_PARAMS(n, T) >(IUTEST_PP_ENUM_PARAMS(n, t)); \
643  }
644 
649 IIUT_DECL_PAIRWISE_(2)
650 IIUT_DECL_PAIRWISE_(3)
651 IIUT_DECL_PAIRWISE_(4)
652 IIUT_DECL_PAIRWISE_(5)
653 IIUT_DECL_PAIRWISE_(6)
654 IIUT_DECL_PAIRWISE_(7)
655 IIUT_DECL_PAIRWISE_(8)
656 IIUT_DECL_PAIRWISE_(9)
657 
658 #undef IIUT_DECL_PAIRWISE__
659 
660 #endif
661 
662 #endif
663 
664 #if IUTEST_HAS_CSVPARAMS
665 
669 template<typename T>
670 detail::iuParamGenerator<T> IUTEST_ATTRIBUTE_UNUSED_ CSV(const char* path, char delimiter = ',')
671 {
672  return new detail::iuCsvFileParamsGenerator<T>(path, delimiter);
673 }
675 template<typename T>
676 detail::iuParamGenerator<T> IUTEST_ATTRIBUTE_UNUSED_ CSV(const char* relative_path, const char* test_file, char delimiter = ',')
677 {
678  const char* sep = detail::FindLastPathSeparator(test_file, strlen(test_file));
679  ::std::string path;
680  if( sep != NULL )
681  {
682  const size_t length = static_cast<size_t>(::std::distance(test_file, sep));
683  path += ::std::string(test_file, length);
684  path += detail::GetPathSeparator();
685  }
686  path += relative_path;
687  return new detail::iuCsvFileParamsGenerator<T>(path, delimiter);
688 }
689 
690 #endif
691 
696 } // end of namespace iutest
697 
698 #if IUTEST_HAS_ANY_PARAM_TEST
703 typedef ::iutest::TestWithAny iuTestWithAny;
704 #endif
705 
706 #endif // IUTEST_HAS_PARAM_TEST
707 
708 #endif // INCG_IRIS_IUTEST_PARAM_TESTS_HPP_3DBBF55E_A076_4207_B49E_34734EE333EE_
any パラメータテストフィクスチャ
Definition: iutest_param_tests.hpp:353
static const ParamType & GetParam()
パラメータの取得
Definition: iutest_param_tests.hpp:358
パラメータテストインターフェース
Definition: iutest_body.hpp:248
static const ParamType & GetParam()
パラメータの取得
Definition: iutest_body.hpp:259
any
Definition: iutest_any.hpp:34
detail::iuParamGenerator< bool > IUTEST_ATTRIBUTE_UNUSED_ Bool()
真偽値パラメータ
Definition: iutest_param_tests.hpp:413
detail::iuRandomFilterParamGenerator< T, Filter > IUTEST_ATTRIBUTE_UNUSED_ RandomGenerator(const Filter &filter, unsigned int seed=0)
乱数ジェネレータ
Definition: iutest_param_tests.hpp:437
detail::iuConcatParamHolder< Generator1, Generator2 > Concat(const Generator1 &g1, const Generator2 &g2)
値配列パラメータ
Definition: iutest_param_tests.hpp:578
detail::iuValuesParamsGeneratorHolder< StdGenerator > IUTEST_ATTRIBUTE_UNUSED_ ValuesGen(size_t num, const StdGenerator &generator)
ユーザー定義ジェネレータ利用パラメータ
Definition: iutest_param_tests.hpp:425
detail::iuParamGenerator< typename Container::value_type > IUTEST_ATTRIBUTE_UNUSED_ ValuesIn(Container container)
値配列パラメータ
Definition: iutest_param_tests.hpp:462
detail::iuRandomParamsHolder IUTEST_ATTRIBUTE_UNUSED_ RandomValues(size_t num, unsigned int seed=0)
乱数値パラメータ
Definition: iutest_param_tests.hpp:452
detail::iuParamGenerator< T > IUTEST_ATTRIBUTE_UNUSED_ Range(T begin, T end, T step=static_cast< T >(1))
範囲パラメータ
Definition: iutest_param_tests.hpp:405
::iutest::TestWithAny iuTestWithAny
any param test fixture
Definition: iutest_param_tests.hpp:704
iris unit test any object
#define IUTEST_CXX_FINAL
final definition
Definition: iutest_compiler.hpp:756
#define IUTEST_CXX_OVERRIDE
override definition
Definition: iutest_compiler.hpp:747
iutest root namespace
Definition: iutest_charcode.hpp:33
std::string PrintToString(const T &v)
文字列化
Definition: iutest_printers.hpp:767
void(* SetUpMethod)()
SetUp 関数型
Definition: iutest_defs.hpp:523
void(* TearDownMethod)()
TearDown 関数型
Definition: iutest_defs.hpp:524
internal::TypeId TestTypeId
テスト識別型
Definition: iutest_defs.hpp:521