iutest  1.17.1.0
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 #include "iutest_any.hpp"
21 
22 #if IUTEST_HAS_PARAM_TEST
23 
24 //======================================================================
25 // define
40 #if IUTEST_HAS_PARAM_TEST_PARAM_NAME_GENERATOR
41 # define IUTEST_INSTANTIATE_TEST_CASE_P(prefix_, testfixture_, generator_, ...) \
42  IIUT_INSTANTIATE_TEST_CASE_P_(prefix_, testfixture_, generator_, __VA_ARGS__)
43 #else
44 # define IUTEST_INSTANTIATE_TEST_CASE_P(prefix_, testfixture_, generator_) \
45  IIUT_INSTANTIATE_TEST_CASE_P_(prefix_, testfixture_, generator_)
46 #endif
47 
59 #define IUTEST_P(testfixture_, testname_) IUTEST_TEST_P_(testfixture_, testname_)
60 
61 
62 #if IUTEST_HAS_ANY_PARAM_TEST
63 
72 #define IUTEST_INSTANTIATE_TEST_CASE_AP(prefix_, testcase_, generator_) \
73  IIUT_INSTANTIATE_TEST_CASE_AP_(prefix_, testcase_, generator_)
74 
85 #define IUTEST_AP(testcase_, testname_) \
86  IUTEST_TEST_AP_(testcase_, testname_)
87 
88 #endif
89 
90 
96 #if !defined(IUTEST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS)
97 # define IIUT_GETTESTCASEPATTERNHOLDER(T, testcase_, package_) \
98  ::iutest::UnitTest::GetInstance()->parameterized_test_registry( \
99  ).GetTestCasePatternHolder<T>(testcase_, package_)
100 #else
101 # define IIUT_GETTESTCASEPATTERNHOLDER(T, testcase_, package_) \
102  ::iutest::UnitTest::GetInstance()->parameterized_test_registry( \
103  ).GetTestCasePatternHolder(testcase_, package_, ::iutest::detail::explicit_type<T>())
104 #endif
105 
106 #if IUTEST_HAS_AUTOFIXTURE_PARAM_TEST
107 # if IUTEST_HAS_IF_EXISTS
108 # define IIUT_TEST_P_FIXTURE_DECL_(testcase_) IIUT_TEST_P_FIXTURE_DECL_I(IIUT_TO_VARNAME_(testcase_))
109 # define IIUT_TEST_P_FIXTURE_DECL_I(testcase_) IUTEST_IF_NOT_EXISTS(testcase_, typedef ::iutest::TestWithAny testcase_;)
110 # define IIUT_TEST_P_BASE_FIXTURE(testcase_) IIUT_TO_VARNAME_(testcase_)
111 # else
112 # define IIUT_TEST_P_FIXTURE_DECL_(testcase_)
113 # if !defined(IUTEST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
114 # define IIUT_TEST_P_BASE_FIXTURE(testcase_) \
115  ::iutest::detail::paramtest_select_base_testcase< void (int (IIUT_TO_VARNAME_(testcase_))) >::type
116 # else
117 # define IIUT_TEST_P_BASE_FIXTURE(testcase_) IIUT_TO_VARNAME_(testcase_)
118 # endif
119 # endif
120 #else
121 # define IIUT_TEST_P_FIXTURE_DECL_(testcase_)
122 # define IIUT_TEST_P_BASE_FIXTURE(testcase_) IIUT_TO_VARNAME_(testcase_)
123 #endif
124 
128 #if IUTEST_HAS_PARAM_TEST_PARAM_NAME_GENERATOR
129 # define IIUT_INSTANTIATE_TEST_CASE_P_(prefix_, testcase_, generator_, ...) \
130  IIUT_INSTANTIATE_TEST_CASE_P_I(prefix_, testcase_, generator_, GetParamNameGen(__VA_ARGS__))
131 #else
132 # define IIUT_INSTANTIATE_TEST_CASE_P_(prefix_, testcase_, generator_) \
133  IIUT_INSTANTIATE_TEST_CASE_P_I(prefix_, testcase_, generator_, GetParamNameGen())
134 #endif
135 
136 #if IUTEST_HAS_TESTFIXTURE_ALIAS_BY_TUPLE
137 
138 #define IIUT_INSTANTIATE_TEST_CASE_P_I(prefix_, testcase_, generator_, paramname_generator_) \
139  IIUT_INSTANTIATE_TEST_CASE_P_II(prefix_, IUTEST_PP_IF( IUTEST_PP_IS_BEGIN_PARENS(testcase_) \
140  , IUTEST_ALIAS_TESTNAME_F_, IUTEST_PP_EMPTY() ) testcase_, generator_, paramname_generator_)
141 
142 #else
143 
144 #define IIUT_INSTANTIATE_TEST_CASE_P_I(prefix_, testcase_, generator_, paramname_generator_) \
145  IIUT_INSTANTIATE_TEST_CASE_P_II(prefix_, testcase_, generator_, paramname_generator_)
146 
147 #endif
148 
149 #define IIUT_INSTANTIATE_TEST_CASE_P_II(prefix_, testcase_, generator_, paramname_generator_) \
150  IIUT_INSTANTIATE_TEST_CASE_P_III(prefix_, testcase_, IIUT_TEST_P_BASE_FIXTURE(testcase_) \
151  , generator_, paramname_generator_)
152 
153 
154 #define IIUT_INSTANTIATE_TEST_CASE_P_III(prefix_, testcase_, basefixture_, generator_, paramname_generator_) \
155  IIUT_TEST_P_FIXTURE_DECL_(testcase_) \
156  static ::iutest::detail::iuIParamGenerator< basefixture_::ParamType >* \
157  IIUT_TEST_P_EVALGENERATOR_NAME_(prefix_, testcase_)() { return generator_; } \
158  static ::std::string IIUT_TEST_P_PARAMGENERATOR_NAME_(prefix_, testcase_)( \
159  const ::iutest::TestParamInfo< basefixture_::ParamType >& info) { return \
160  ::iutest::detail::ParamTestCaseInfo< basefixture_ >::paramname_generator_(info); } \
161  int IIUT_TEST_P_INSTANTIATIONREGISTER_NAME_(prefix_, testcase_)() { \
162  ::iutest::detail::ParamTestCaseInfo< basefixture_ >* p = IIUT_GETTESTCASEPATTERNHOLDER( \
163  basefixture_, IIUT_TO_NAME_STR_(testcase_), IUTEST_GET_PACKAGENAME_()); \
164  return p->AddTestCaseInstantiation(#prefix_ \
165  , IIUT_TEST_P_EVALGENERATOR_NAME_(prefix_, testcase_) \
166  , IIUT_TEST_P_PARAMGENERATOR_NAME_(prefix_, testcase_) ); \
167  } IIUT_TEST_P_INSTANTIATIONREGISTER_(prefix_, testcase_)
168 
172 #define IIUT_TEST_P_I_(classname_, testcase_, testcasename_, testname_) \
173  IIUT_TEST_P_FIXTURE_DECL_(testcase_) \
174  class classname_ : public testcase_ { \
175  public: classname_() {} \
176  protected: virtual void Body() IUTEST_CXX_OVERRIDE; \
177  private: static int AddRegister() { \
178  static ::iutest::detail::ParamTestInstance< classname_ > testinfo(testname_); \
179  IIUT_GETTESTCASEPATTERNHOLDER(testcase_, testcasename_ \
180  , IUTEST_GET_PACKAGENAME_())->AddTestPattern(&testinfo); return 0; \
181  } \
182  static int dummy_; \
183  IUTEST_PP_DISALLOW_COPY_AND_ASSIGN(classname_); \
184  }; \
185  int classname_::dummy_ IUTEST_ATTRIBUTE_UNUSED_ = classname_::AddRegister(); \
186  void classname_::Body()
187 
188 #if IUTEST_HAS_IGNORE_TEST
189 
190 #define IIUT_TEST_P_I_IGNORE_(classname_, testcase_, testcasename_, testname_) \
191  class classname_ : public testcase_ { \
192  public: classname_() {} \
193  protected: virtual void Body() IUTEST_CXX_OVERRIDE { IUTEST_SKIP() << "ignored test..."; } \
194  template<typename T>void Body(); \
195  private: static int AddRegister() { \
196  static ::iutest::detail::ParamTestInstance< classname_ > testinfo(testname_); \
197  IIUT_GETTESTCASEPATTERNHOLDER(testcase_, testcasename_ \
198  , IUTEST_GET_PACKAGENAME_())->AddTestPattern(&testinfo); return 0; \
199  } \
200  static int dummy_; \
201  IUTEST_PP_DISALLOW_COPY_AND_ASSIGN(classname_); \
202  }; \
203  int classname_::dummy_ IUTEST_ATTRIBUTE_UNUSED_ = classname_::AddRegister(); \
204  template<typename T>void classname_::Body()
205 
206 #endif
207 
208 #define IIUT_TEST_P_(macro, testcase_, testname_) \
209  macro(IUTEST_TEST_CLASS_NAME_(testcase_, testname_) \
210  , IIUT_TEST_P_BASE_FIXTURE(testcase_) \
211  , IIUT_TO_NAME_STR_(testcase_), IIUT_TO_NAME_STR_(testname_))
212 
213 #if IUTEST_HAS_TESTFIXTURE_ALIAS_BY_TUPLE
214 
215 #define IIUT_TEST_P_A_(macro, testcase_, testname_) \
216  IIUT_TEST_P_( macro, IUTEST_PP_IF( IUTEST_PP_IS_BEGIN_PARENS(testcase_) \
217  , IUTEST_ALIAS_TESTNAME_F_, IUTEST_PP_EMPTY() ) testcase_, testname_)
218 
219 #define IUTEST_TEST_P_(testcase_, testname_) \
220  IIUT_TEST_P_A_(IIUT_TEST_P_I_, testcase_, testname_)
221 
222 #if IUTEST_HAS_IGNORE_TEST
223 
224 #define IUTEST_TEST_P_IGNORE_(testcase_, testname_) \
225  IIUT_TEST_P_A_(IIUT_TEST_P_I_IGNORE_, testcase_, testname_)
226 
227 #endif
228 
229 #else
230 
231 #define IUTEST_TEST_P_(testcase_, testname_) \
232  IIUT_TEST_P_(IIUT_TEST_P_I_, testcase_, testname_)
233 
234 #if IUTEST_HAS_IGNORE_TEST
235 
236 #define IUTEST_TEST_P_IGNORE_(testcase_, testname_) \
237  IIUT_TEST_P_(IIUT_TEST_P_I_IGNORE_, testcase_, testname_)
238 
239 #endif
240 
241 #endif
242 
243 #define IIUT_TEST_AP_FIXTURE_NAME_(testcase_) IUTEST_PP_CAT(iuTestWithAny, testcase_)
244 #define IIUT_ALIAS_TESTNAME_AP_(testcase_) IUTEST_ALIAS_TESTNAME_F(testcase_, IIUT_TEST_AP_FIXTURE_NAME_(testcase_))
245 
246 #define IUTEST_TEST_AP_(testcase_, testname_) \
247  typedef ::iutest::TestWithAny IIUT_TEST_AP_FIXTURE_NAME_(testcase_); \
248  IUTEST_TEST_P_(IIUT_ALIAS_TESTNAME_AP_(testcase_), testname_)
249 
250 #define IIUT_INSTANTIATE_TEST_CASE_AP_(prefix_, testcase_, generator_) \
251  IIUT_INSTANTIATE_TEST_CASE_P_(prefix_, IIUT_ALIAS_TESTNAME_AP_(testcase_), generator_)
252 
253 
254 #define IIUT_TEST_P_EVALGENERATOR_NAME_(prefix_, testcase_) IIUT_TEST_P_EVALGENERATOR_NAME_I(prefix_, IIUT_TO_VARNAME_(testcase_))
255 #define IIUT_TEST_P_EVALGENERATOR_NAME_I(prefix_, testcase_) IIUT_TEST_P_EVALGENERATOR_NAME_I_(prefix_, testcase_)
256 #define IIUT_TEST_P_EVALGENERATOR_NAME_I_(prefix_, testcase_) s_##prefix_##_x_iutest_x_##testcase_##_EvalGenerator_
257 
258 #define IIUT_TEST_P_PARAMGENERATOR_NAME_(prefix_, testcase_) IIUT_TEST_P_PARAMGENERATOR_NAME_I(prefix_, IIUT_TO_VARNAME_(testcase_))
259 #define IIUT_TEST_P_PARAMGENERATOR_NAME_I(prefix_, testcase_) IIUT_TEST_P_PARAMGENERATOR_NAME_I_(prefix_, testcase_)
260 #define IIUT_TEST_P_PARAMGENERATOR_NAME_I_(prefix_, testcase_) s_##prefix_##_x_iutest_x_##testcase_##_ParamGenerator_
261 
262 #define IIUT_TEST_P_INSTANTIATIONREGISTER_NAME_(prefix_, testcase_) IIUT_TEST_P_INSTANTIATIONREGISTER_NAME_I(prefix_, IIUT_TO_VARNAME_(testcase_))
263 #define IIUT_TEST_P_INSTANTIATIONREGISTER_NAME_I(prefix_, testcase_) IIUT_TEST_P_INSTANTIATIONREGISTER_NAME_I_(prefix_, testcase_)
264 #define IIUT_TEST_P_INSTANTIATIONREGISTER_NAME_I_(prefix_, testcase_) prefix_##_x_iutest_x_##testcase_##_TestCaseInstantiationRegister
265 
266 #define IIUT_TEST_P_INSTANTIATIONREGISTER_(prefix_, testcase_) \
267  IIUT_TEST_P_INSTANTIATIONREGISTER_I(prefix_, IIUT_TO_VARNAME_(testcase_), IIUT_TEST_P_INSTANTIATIONREGISTER_NAME_(prefix_, testcase_))
268 #define IIUT_TEST_P_INSTANTIATIONREGISTER_I(prefix_, testcase_, register_) IIUT_TEST_P_INSTANTIATIONREGISTER_I_(prefix_, testcase_, register_)
269 #define IIUT_TEST_P_INSTANTIATIONREGISTER_I_(prefix_, testcase_, register_) int s_##prefix_##_x_iutest_x_##testcase_##_dummy = register_()
270 
275 namespace iutest {
276 namespace detail
277 {
278 
279 //======================================================================
280 // class
285 template<typename T>
286 class ParamTestInstance : public IParamTestInfoData
287 {
288  typedef T Tester;
289  typedef typename Tester::ParamType ParamType;
290  typedef detail::iuParamTestFactory<T> Factory;
291 
292  // 各テストのインスタンス
293  class EachTest IUTEST_CXX_FINAL : public IParamTestInfoData::ParamEachTestBase<ParamType>
294  {
295  public:
296  EachTest(TestCase* testcase, const ::std::string& name)
297  : m_mediator(testcase)
298  , m_info(&m_mediator, name, &m_factory)
299  {
300  UnitTest::instance().AddTestInfo(testcase, &m_info);
301  }
302  private:
303  virtual void SetParam(const ParamType& param) IUTEST_CXX_OVERRIDE
304  {
305  m_factory.SetParam(param);
306  m_info.set_value_param(PrintToString(param).c_str());
307  }
308  private:
309  TestCaseMediator m_mediator;
310  Factory m_factory;
311  TestInfo m_info;
312  };
313 public:
314  explicit ParamTestInstance(const char* testcase_name) : IParamTestInfoData(testcase_name) {}
315 
316 private:
317  // テストケースの作成
318  virtual TestCase* MakeTestCase(const ::std::string& testcase_name, TestTypeId id
319  , SetUpMethod setup, TearDownMethod teardown) const IUTEST_CXX_OVERRIDE
320  {
321 #if !defined(IUTEST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS)
322  return UnitTest::instance().AddTestCase<TestCase>(testcase_name, id, setup, teardown);
323 #else
324  return UnitTest::instance().AddTestCase(
325  testcase_name, id, setup, teardown, detail::explicit_type<TestCase>());
326 #endif
327  }
328 
329  // テストの作成登録
330  virtual IParamTestInfoData::EachTestBase* RegisterTest(TestCase* testcase
331  , const ::std::string& name) const IUTEST_CXX_OVERRIDE
332  {
333  EachTest* test = new EachTest(testcase, name);
334  // new オブジェクトを管理してもらう
335  detail::iuPool::GetInstance().push(test);
336  return test;
337  }
338 };
339 
340 } // end of namespace detail
341 
346 class TestWithAny : public Test, public WithParamInterface<any>
347 {
348 public:
352  static const ParamType& GetParam() { return WithParamInterface<any>::GetParam(); }
353 
357  template<typename T>
358  static T GetParam() { return unsafe_any_cast<T>(WithParamInterface<any>::GetParam()); }
359 };
360 
361 #if !defined(IUTEST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
362 namespace detail
363 {
364 
368 template<typename T>
369 struct paramtest_select_base_testcase;
370 
371 template<>
372 struct paramtest_select_base_testcase< void(int) >
373 {
374  typedef TestWithAny type;
375 };
376 template<typename T>
377 struct paramtest_select_base_testcase< void(int (T)) >
378 {
379  typedef T type;
380 };
381 
382 } // end of namespace detail
383 #endif
384 
385 //======================================================================
386 // function
398 template<typename T>
399 detail::iuParamGenerator<T> IUTEST_ATTRIBUTE_UNUSED_ Range(T begin, T end, T step=static_cast<T>(1))
400 {
401  return new detail::iuRangeParamsGenerator<T>(begin, end, step);
402 }
403 
407 inline detail::iuParamGenerator<bool> IUTEST_ATTRIBUTE_UNUSED_ Bool()
408 {
409  return new detail::iuBoolParamsGenerator();
410 }
411 
412 #if IUTEST_HAS_VALUESGEN
413 
418 template<typename StdGenerator>
419 inline detail::iuValuesParamsGeneratorHolder<StdGenerator> IUTEST_ATTRIBUTE_UNUSED_ ValuesGen(size_t num, const StdGenerator& generator)
420 {
421  return detail::iuValuesParamsGeneratorHolder<StdGenerator>(num, generator);
422 }
423 
430 template<typename T, typename Filter>
431 inline detail::iuRandomFilterParamGenerator<T, Filter> IUTEST_ATTRIBUTE_UNUSED_ RandomGenerator(const Filter& filter, unsigned int seed=0)
432 {
433  if( seed == 0 )
434  {
435  seed = detail::GetIndefiniteValue();
436  }
437  return detail::iuRandomFilterParamGenerator<T, Filter>(filter, seed);
438 }
439 
440 #endif
441 
442 #if IUTEST_HAS_RANDOMVALUES
443 
446 inline detail::iuRandomParamsHolder IUTEST_ATTRIBUTE_UNUSED_ RandomValues(size_t num, unsigned int seed=0)
447 {
448  return detail::iuRandomParamsHolder(num, seed);
449 }
450 #endif
451 
455 template<typename Container>
456 inline detail::iuParamGenerator< typename Container::value_type > IUTEST_ATTRIBUTE_UNUSED_ ValuesIn(Container container)
457 {
458  return new detail::iuValuesInParamsGenerator< typename Container::value_type >(container);
459 }
460 
461 #if !defined(IUTEST_NO_FUNCTION_TEMPLATE_ORDERING)
462 
463 template<typename T, size_t SIZE>
464 inline detail::iuParamGenerator<T> IUTEST_ATTRIBUTE_UNUSED_ ValuesIn(const T (&v)[SIZE])
465 {
466  return new detail::iuValuesInParamsGenerator<T>(v, v+SIZE);
467 }
468 
469 #if !defined(IUTEST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
470 
471 template<typename Ite>
472 inline detail::iuParamGenerator< typename detail::IteratorTraits<Ite>::type > IUTEST_ATTRIBUTE_UNUSED_ ValuesIn(Ite begin, Ite end)
473 {
474  return new detail::iuValuesInParamsGenerator<
475  typename detail::IteratorTraits<Ite>::type >(begin, end);
476 }
477 #endif
478 
479 #if IUTEST_HAS_INITIALIZER_LIST
480 
481 template<typename T>
482 inline detail::iuParamGenerator<T> IUTEST_ATTRIBUTE_UNUSED_ ValuesIn(::std::initializer_list<T> l)
483 {
484  return new detail::iuValuesInParamsGenerator<T>(l);
485 }
486 #endif
487 
488 #endif
489 
490 #if IUTEST_HAS_VARIADIC_VALUES
491 
494 template<typename ...Args>
495 inline detail::iuValueArray<Args...> IUTEST_ATTRIBUTE_UNUSED_ Values(Args... args)
496 {
497  return detail::iuValueArray<Args...>(args...);
498 }
499 
500 #else
501 
502 #define IIUT_DECL_VALUES_(n) template< IUTEST_PP_ENUM_PARAMS(n, typename T) > \
503  inline detail::iuValueArray##n< IUTEST_PP_ENUM_PARAMS(n, T) > \
504  IUTEST_ATTRIBUTE_UNUSED_ Values( IUTEST_PP_ENUM_BINARY_PARAMS(n, T, t) ) { \
505  return detail::iuValueArray##n< IUTEST_PP_ENUM_PARAMS(n, T) >( IUTEST_PP_ENUM_PARAMS(n, t) ); \
506  }
507 
512 IIUT_DECL_VALUES_(1)
513 IIUT_DECL_VALUES_(2)
514 IIUT_DECL_VALUES_(3)
515 IIUT_DECL_VALUES_(4)
516 IIUT_DECL_VALUES_(5)
517 IIUT_DECL_VALUES_(6)
518 IIUT_DECL_VALUES_(7)
519 IIUT_DECL_VALUES_(8)
520 IIUT_DECL_VALUES_(9)
521 IIUT_DECL_VALUES_(10)
522 IIUT_DECL_VALUES_(11)
523 IIUT_DECL_VALUES_(12)
524 IIUT_DECL_VALUES_(13)
525 IIUT_DECL_VALUES_(14)
526 IIUT_DECL_VALUES_(15)
527 IIUT_DECL_VALUES_(16)
528 IIUT_DECL_VALUES_(17)
529 IIUT_DECL_VALUES_(18)
530 IIUT_DECL_VALUES_(19)
531 IIUT_DECL_VALUES_(20)
532 IIUT_DECL_VALUES_(21)
533 IIUT_DECL_VALUES_(22)
534 IIUT_DECL_VALUES_(23)
535 IIUT_DECL_VALUES_(24)
536 IIUT_DECL_VALUES_(25)
537 IIUT_DECL_VALUES_(26)
538 IIUT_DECL_VALUES_(27)
539 IIUT_DECL_VALUES_(28)
540 IIUT_DECL_VALUES_(29)
541 IIUT_DECL_VALUES_(30)
542 IIUT_DECL_VALUES_(31)
543 IIUT_DECL_VALUES_(32)
544 IIUT_DECL_VALUES_(33)
545 IIUT_DECL_VALUES_(34)
546 IIUT_DECL_VALUES_(35)
547 IIUT_DECL_VALUES_(36)
548 IIUT_DECL_VALUES_(37)
549 IIUT_DECL_VALUES_(38)
550 IIUT_DECL_VALUES_(39)
551 IIUT_DECL_VALUES_(40)
552 IIUT_DECL_VALUES_(41)
553 IIUT_DECL_VALUES_(42)
554 IIUT_DECL_VALUES_(43)
555 IIUT_DECL_VALUES_(44)
556 IIUT_DECL_VALUES_(45)
557 IIUT_DECL_VALUES_(46)
558 IIUT_DECL_VALUES_(47)
559 IIUT_DECL_VALUES_(48)
560 IIUT_DECL_VALUES_(49)
561 IIUT_DECL_VALUES_(50)
562 
563 #undef IIUT_DECL_VALUES_
564 
565 #endif
566 
567 #if IUTEST_HAS_CONCAT
568 
571 template<typename Generator1, typename Generator2>
572 detail::iuConcatParamHolder<Generator1, Generator2> Concat(const Generator1& g1, const Generator2& g2)
573 {
574  return detail::iuConcatParamHolder<Generator1, Generator2>(g1, g2);
575 }
576 #endif
577 
578 #if IUTEST_HAS_COMBINE
579 
580 #if IUTEST_HAS_VARIADIC_COMBINE
581 
584 template<typename ...Generator>
585 detail::iuCartesianProductHolder<Generator...> Combine(const Generator&... generators)
586 {
587  return detail::iuCartesianProductHolder<Generator...>(generators...);
588 }
589 
590 #else
591 
592 #define IIUT_DECL_COMBINE_(n) template< IUTEST_PP_ENUM_PARAMS(n, typename T) > \
593  inline IUTEST_PP_CAT(detail::iuCartesianProductHolder, n)< IUTEST_PP_ENUM_PARAMS(n, T) > \
594  Combine(IUTEST_PP_ENUM_BINARY_PARAMS(n, const T, &t)) { \
595  return IUTEST_PP_CAT(detail::iuCartesianProductHolder, n) \
596  < IUTEST_PP_ENUM_PARAMS(n, T) >(IUTEST_PP_ENUM_PARAMS(n, t)); \
597  }
598 
603 IIUT_DECL_COMBINE_(2)
604 IIUT_DECL_COMBINE_(3)
605 IIUT_DECL_COMBINE_(4)
606 IIUT_DECL_COMBINE_(5)
607 IIUT_DECL_COMBINE_(6)
608 IIUT_DECL_COMBINE_(7)
609 IIUT_DECL_COMBINE_(8)
610 IIUT_DECL_COMBINE_(9)
611 
612 #undef IIUT_DECL_COMBINE_
613 
614 #endif
615 
616 #endif
617 
618 #if IUTEST_HAS_PAIRWISE
619 
620 #if IUTEST_HAS_VARIADIC_PAIRWISE
621 
625 template<typename ...Generator>
626 detail::iuPairwiseHolder<Generator...> Pairwise(const Generator&... generators)
627 {
628  return detail::iuPairwiseHolder<Generator...>(generators...);
629 }
630 
631 #else
632 
633 #define IIUT_DECL_PAIRWISE_(n) template< IUTEST_PP_ENUM_PARAMS(n, typename T) > \
634  inline IUTEST_PP_CAT(detail::iuPairwiseHolder, n)< IUTEST_PP_ENUM_PARAMS(n, T) > \
635  Pairwise(IUTEST_PP_ENUM_BINARY_PARAMS(n, const T, &t)) { \
636  return IUTEST_PP_CAT(detail::iuPairwiseHolder, n) \
637  < IUTEST_PP_ENUM_PARAMS(n, T) >(IUTEST_PP_ENUM_PARAMS(n, t)); \
638  }
639 
644 IIUT_DECL_PAIRWISE_(2)
645 IIUT_DECL_PAIRWISE_(3)
646 IIUT_DECL_PAIRWISE_(4)
647 IIUT_DECL_PAIRWISE_(5)
648 IIUT_DECL_PAIRWISE_(6)
649 IIUT_DECL_PAIRWISE_(7)
650 IIUT_DECL_PAIRWISE_(8)
651 IIUT_DECL_PAIRWISE_(9)
652 
653 #undef IIUT_DECL_PAIRWISE__
654 
655 #endif
656 
657 #endif
658 
659 #if IUTEST_HAS_CSVPARAMS
660 
664 template<typename T>
665 detail::iuParamGenerator<T> IUTEST_ATTRIBUTE_UNUSED_ CSV(const char* path, char delimiter = ',')
666 {
667  return new detail::iuCsvFileParamsGenerator<T>(path, delimiter);
668 }
670 template<typename T>
671 detail::iuParamGenerator<T> IUTEST_ATTRIBUTE_UNUSED_ CSV(const char* relative_path, const char* test_file, char delimiter = ',')
672 {
673  const char* sep = detail::FindLastPathSeparator(test_file, strlen(test_file));
674  ::std::string path;
675  if( sep != NULL )
676  {
677  const size_t length = ::std::distance(test_file, sep);
678  path += ::std::string(test_file, length);
679  path += detail::GetPathSeparator();
680  }
681  path += relative_path;
682  return new detail::iuCsvFileParamsGenerator<T>(path, delimiter);
683 }
684 
685 #endif
686 
691 } // end of namespace iutest
692 
693 #if IUTEST_HAS_ANY_PARAM_TEST
694 
698 typedef ::iutest::TestWithAny iuTestWithAny;
699 #endif
700 
701 #endif // IUTEST_HAS_PARAM_TEST
702 
703 #endif // INCG_IRIS_IUTEST_PARAM_TESTS_HPP_3DBBF55E_A076_4207_B49E_34734EE333EE_
iutest::ValuesGen
detail::iuValuesParamsGeneratorHolder< StdGenerator > IUTEST_ATTRIBUTE_UNUSED_ ValuesGen(size_t num, const StdGenerator &generator)
ユーザー定義ジェネレータ利用パラメータ
Definition: iutest_param_tests.hpp:420
iutest::Test
テストベース
Definition: iutest_body.hpp:43
iutest::WithParamInterface::GetParam
static const ParamType & GetParam()
パラメータの取得
Definition: iutest_body.hpp:258
iutest::any
any
Definition: iutest_any.hpp:31
iutest::Range
detail::iuParamGenerator< T > IUTEST_ATTRIBUTE_UNUSED_ Range(T begin, T end, T step=static_cast< T >(1))
範囲パラメータ
Definition: iutest_param_tests.hpp:400
iutest_config.hpp
iris unit test config
iutest::PrintToString
std::string PrintToString(const T &v)
文字列化
Definition: iutest_printers.hpp:678
iutest
iutest root namespace
Definition: iutest_charcode.hpp:31
iutest::TestWithAny
any パラメータテストフィクスチャ
Definition: iutest_param_tests.hpp:347
IUTEST_CXX_FINAL
#define IUTEST_CXX_FINAL
final definition
Definition: iutest_compiler.hpp:679
iutest::TestWithAny::GetParam
static T GetParam()
パラメータの取得
Definition: iutest_param_tests.hpp:359
iuTestWithAny
::iutest::TestWithAny iuTestWithAny
any param test fixture
Definition: iutest_param_tests.hpp:699
iutest::ValuesIn
detail::iuParamGenerator< typename Container::value_type > IUTEST_ATTRIBUTE_UNUSED_ ValuesIn(Container container)
値配列パラメータ
Definition: iutest_param_tests.hpp:457
iutest::TestTypeId
internal::TypeId TestTypeId
テスト識別型
Definition: iutest_defs.hpp:440
IUTEST_CXX_OVERRIDE
#define IUTEST_CXX_OVERRIDE
override definition
Definition: iutest_compiler.hpp:670
iutest::RandomGenerator
detail::iuRandomFilterParamGenerator< T, Filter > IUTEST_ATTRIBUTE_UNUSED_ RandomGenerator(const Filter &filter, unsigned int seed=0)
乱数ジェネレータ
Definition: iutest_param_tests.hpp:432
iutest::Concat
detail::iuConcatParamHolder< Generator1, Generator2 > Concat(const Generator1 &g1, const Generator2 &g2)
値配列パラメータ
Definition: iutest_param_tests.hpp:573
iutest_any.hpp
iris unit test any object
iutest::TearDownMethod
void(* TearDownMethod)()
TearDown 関数型
Definition: iutest_defs.hpp:443
iutest::SetUpMethod
void(* SetUpMethod)()
SetUp 関数型
Definition: iutest_defs.hpp:442
iutest::Bool
detail::iuParamGenerator< bool > IUTEST_ATTRIBUTE_UNUSED_ Bool()
真偽値パラメータ
Definition: iutest_param_tests.hpp:408
iutest::WithParamInterface
パラメータテストインターフェース
Definition: iutest_body.hpp:28
iutest::TestWithAny::GetParam
static const ParamType & GetParam()
パラメータの取得
Definition: iutest_param_tests.hpp:353