3 #ifndef INCLUDE_NN_NLIB_TESTING_PARAMVALUE_H_
4 #define INCLUDE_NN_NLIB_TESTING_PARAMVALUE_H_
10 #include "nn/nlib/testing/ParamValueTypes.h"
13 #if defined(_MSC_VER) && defined(nx_testing_EXPORTS)
14 #undef NLIB_VIS_PUBLIC
15 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT
26 virtual
void TestBodySub() = 0;
27 virtual
bool SetParam(
size_t i) = 0;
31 class TestWithParam : public TestWithParamBase {
34 TestWithParam() : m_Parameter(NULL) {}
35 const ParamType& GetParam()
const {
return *m_Parameter; }
36 template <
class Iterator>
37 static void AddParamList(Iterator first, Iterator last);
43 const ParamType* m_Parameter;
44 static std::vector<ParamType> m_ParamVec;
50 template <
class Iterator>
51 void TestWithParam<T>::AddParamList(Iterator first, Iterator last) {
52 while (first != last) {
53 m_ParamVec.push_back(*first);
59 bool TestWithParam<T>::SetParam(
size_t i) {
60 if (i < m_ParamVec.size()) {
61 m_Parameter = &m_ParamVec[i];
71 std::vector<T> TestWithParam<T>::m_ParamVec;
75 virtual ~TestParamAdderBase() {}
76 virtual void AddParams() = 0;
79 TestParamAdderBase() {}
87 static void AddParams();
88 static void AddTestParamAdder(TestParamAdderBase* v);
91 TestParamAdderList() {}
92 ~TestParamAdderList() {}
95 static TestParamAdderBase* m_AdderList[1024];
96 static int m_AdderListIdx;
101 inline detail::ValuesBool Bool() {
return detail::ValuesBool(); }
103 template <
class C,
size_t N>
104 detail::ValuesInObjArray<C, N> ValuesIn(
const C (&a)[N]) {
105 return detail::ValuesInObjArray<C, N>(a);
108 template <
class Container>
109 detail::ValuesInObjContainer<Container> ValuesIn(
const Container& c) {
110 return detail::ValuesInObjContainer<Container>(c);
113 template <
class Iterator>
114 detail::ValuesInObjIterator<Iterator> ValuesIn(Iterator first, Iterator last) {
115 return detail::ValuesInObjIterator<Iterator>(first, last);
119 detail::ValuesRange<T, T> Range(T first, T last) {
120 return detail::ValuesRange<T, T>(first, last, T(1));
123 template <
class T,
class S>
124 detail::ValuesRange<T, S> Range(T first, T last, S step) {
125 return detail::ValuesRange<T, S>(first, last, step);
129 detail::Values1<T1> Values(T1 v1) {
130 return detail::Values1<T1>(v1);
133 template <
class T1,
class T2>
134 detail::Values2<T1, T2> Values(T1 v1, T2 v2) {
135 return detail::Values2<T1, T2>(v1, v2);
138 template <
class T1,
class T2,
class T3>
139 detail::Values3<T1, T2, T3> Values(T1 v1, T2 v2, T3 v3) {
140 return detail::Values3<T1, T2, T3>(v1, v2, v3);
143 template <
class T1,
class T2,
class T3,
class T4>
144 detail::Values4<T1, T2, T3, T4> Values(T1 v1, T2 v2, T3 v3, T4 v4) {
145 return detail::Values4<T1, T2, T3, T4>(v1, v2, v3, v4);
148 template <
class T1,
class T2,
class T3,
class T4,
class T5>
149 detail::Values5<T1, T2, T3, T4, T5> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) {
150 return detail::Values5<T1, T2, T3, T4, T5>(v1, v2, v3, v4, v5);
153 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6>
154 detail::Values6<T1, T2, T3, T4, T5, T6> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) {
155 return detail::Values6<T1, T2, T3, T4, T5, T6>(v1, v2, v3, v4, v5, v6);
158 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7>
159 detail::Values7<T1, T2, T3, T4, T5, T6, T7> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
161 return detail::Values7<T1, T2, T3, T4, T5, T6, T7>(v1, v2, v3, v4, v5, v6, v7);
164 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8>
165 detail::Values8<T1, T2, T3, T4, T5, T6, T7, T8> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
167 return detail::Values8<T1, T2, T3, T4, T5, T6, T7, T8>(v1, v2, v3, v4, v5, v6, v7, v8);
170 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9>
171 detail::Values9<T1, T2, T3, T4, T5, T6, T7, T8, T9> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
172 T7 v7, T8 v8, T9 v9) {
173 return detail::Values9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(v1, v2, v3, v4, v5, v6, v7, v8, v9);
176 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9,
178 detail::Values10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
179 T6 v6, T7 v7, T8 v8, T9 v9,
181 return detail::Values10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(v1, v2, v3, v4, v5, v6, v7, v8,
188 #define TEST_P(test_case, test_name) \
189 class NLIB_TESTING_CLASS_NAME_(test_case, test_name) \
190 : public test_case { \
192 NLIB_TESTING_CLASS_NAME_(test_case, test_name)() {} \
194 virtual void TestBodySub(); \
195 static ::nlib_ns::testing::TestInfo* m_Info; \
196 NLIB_DISALLOW_COPY_AND_ASSIGN(NLIB_TESTING_CLASS_NAME_(test_case, test_name)); \
198 ::nlib_ns::testing::TestInfo* NLIB_TESTING_CLASS_NAME_(test_case, test_name)::m_Info = \
199 ::nlib_ns::testing::TestInfo::AddTestInfo< \
200 NLIB_TESTING_CLASS_NAME_(test_case, test_name)>( \
201 #test_case, #test_name, -1, test_case::SetUpTestCase, test_case::TearDownTestCase); \
202 void NLIB_TESTING_CLASS_NAME_(test_case, test_name)::TestBodySub()
204 #define INSTANTIATE_TEST_CASE_P(prefix, test_case, generator) \
205 class TestParamAdder_##test_case##prefix : public ::nlib_ns::testing::TestParamAdderBase { \
207 TestParamAdder_##test_case##prefix() { \
208 ::nlib_ns::testing::TestParamAdderList::AddTestParamAdder(this); \
210 virtual void AddParams() { \
211 ::nlib_ns::UniquePtr<std::vector<test_case::ParamType> > vec( \
212 generator.Gen<test_case::ParamType>()); \
213 if (!vec.get()) return; \
214 test_case::AddParamList(vec->begin(), vec->end()); \
217 ntest_##test_case##prefix##_glbval_
219 #if defined(_MSC_VER) && defined(nx_testing_EXPORTS)
220 #undef NLIB_VIS_PUBLIC
221 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT
224 #endif // INCLUDE_NN_NLIB_TESTING_PARAMVALUE_H_
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
Prohibits use of the copy constructor and assignment operator for the class specified by TypeName...
#define NLIB_OVERRIDE
Defines override if it is available for use. If not, holds an empty string.
Defines that class that is corresponding to std::unique_ptr.
A file that contains the configuration information for each development environment.
Defines the macro for a basic, simple test.