16 #ifndef INCLUDE_NN_NLIB_TESTING_PARAMVALUE_H_ 17 #define INCLUDE_NN_NLIB_TESTING_PARAMVALUE_H_ 21 #include "nn/nlib/testing/ParamValueTypes.h" 25 #if defined(_MSC_VER) && defined(nx_testing_EXPORTS) 26 #undef NLIB_VIS_PUBLIC 27 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT 38 virtual
void TestBodySub() = 0;
39 virtual
bool SetParam(
size_t i) = 0;
43 class TestWithParam : public TestWithParamBase {
46 TestWithParam() : param_(nullptr) {}
47 const ParamType& GetParam()
const {
return *param_; }
48 static Nlist<ParamType>* GetParams() {
return ¶m_vec_; }
54 const ParamType* param_;
55 static Nlist<ParamType> param_vec_;
61 bool TestWithParam<T>::SetParam(
size_t i) {
62 if (i < param_vec_.size()) {
63 param_ = ¶m_vec_[i];
73 Nlist<T> TestWithParam<T>::param_vec_;
77 virtual ~TestParamAdderBase() {}
78 virtual void AddParams() = 0;
81 TestParamAdderBase() {}
89 static void AddParams();
90 static void AddTestParamAdder(TestParamAdderBase* v);
93 TestParamAdderList() {}
94 ~TestParamAdderList() {}
97 static TestParamAdderBase* adder_list_[1024];
98 static int adder_list_idx_;
103 inline detail::ValuesBool Bool() {
104 return detail::ValuesBool();
107 template<
class C,
size_t N>
108 detail::ValuesInObjArray<C, N> ValuesIn(
const C (&a)[N]) {
109 return detail::ValuesInObjArray<C, N>(a);
112 template<
class Container>
113 detail::ValuesInObjContainer<Container> ValuesIn(
const Container& c) {
114 return detail::ValuesInObjContainer<Container>(c);
117 template<
class Iterator>
118 detail::ValuesInObjIterator<Iterator> ValuesIn(Iterator first, Iterator last) {
119 return detail::ValuesInObjIterator<Iterator>(first, last);
123 detail::ValuesRange<T, T> Range(T first, T last) {
124 return detail::ValuesRange<T, T>(first, last, T(1));
127 template<
class T,
class S>
128 detail::ValuesRange<T, S> Range(T first, T last, S step) {
129 return detail::ValuesRange<T, S>(first, last, step);
133 detail::Values1<T1> Values(T1 v1) {
134 return detail::Values1<T1>(v1);
137 template<
class T1,
class T2>
138 detail::Values2<T1, T2> Values(T1 v1, T2 v2) {
139 return detail::Values2<T1, T2>(v1, v2);
142 template<
class T1,
class T2,
class T3>
143 detail::Values3<T1, T2, T3> Values(T1 v1, T2 v2, T3 v3) {
144 return detail::Values3<T1, T2, T3>(v1, v2, v3);
147 template<
class T1,
class T2,
class T3,
class T4>
148 detail::Values4<T1, T2, T3, T4> Values(T1 v1, T2 v2, T3 v3, T4 v4) {
149 return detail::Values4<T1, T2, T3, T4>(v1, v2, v3, v4);
152 template<
class T1,
class T2,
class T3,
class T4,
class T5>
153 detail::Values5<T1, T2, T3, T4, T5> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) {
154 return detail::Values5<T1, T2, T3, T4, T5>(v1, v2, v3, v4, v5);
157 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6>
158 detail::Values6<T1, T2, T3, T4, T5, T6> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) {
159 return detail::Values6<T1, T2, T3, T4, T5, T6>(v1, v2, v3, v4, v5, v6);
162 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7>
163 detail::Values7<T1, T2, T3, T4, T5, T6, T7>
164 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7) {
165 return detail::Values7<T1, T2, T3, T4, T5, T6, T7>(v1, v2, v3, v4, v5, v6, v7);
168 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8>
169 detail::Values8<T1, T2, T3, T4, T5, T6, T7, T8>
170 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8) {
171 return detail::Values8<T1, T2, T3, T4, T5, T6, T7, T8>(v1, v2, v3, v4, v5, v6, v7, v8);
174 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9>
175 detail::Values9<T1, T2, T3, T4, T5, T6, T7, T8, T9>
176 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9) {
177 return detail::Values9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(v1, v2, v3, v4, v5, v6, v7, v8, v9);
180 template<
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9,
182 detail::Values10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>
183 Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6, T7 v7, T8 v8, T9 v9, T10 v10) {
184 return detail::Values10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(v1, v2, v3, v4, v5, v6, v7, v8,
191 #define TEST_P(test_case, test_name) \ 192 class NLIB_TESTING_CLASS_NAME_(test_case, test_name) : public test_case { \ 194 NLIB_TESTING_CLASS_NAME_(test_case, test_name)() {} \ 197 virtual void TestBodySub(); \ 198 static ::nlib_ns::testing::TestInfo* info_; \ 199 NLIB_DISALLOW_COPY_AND_ASSIGN(NLIB_TESTING_CLASS_NAME_(test_case, test_name)); \ 201 ::nlib_ns::testing::TestInfo* NLIB_TESTING_CLASS_NAME_(test_case, test_name)::info_ = \ 202 ::nlib_ns::testing::TestInfo::AddTestInfo<NLIB_TESTING_CLASS_NAME_(test_case, test_name)>( \ 203 #test_case, #test_name, -1, test_case::SetUpTestCase, test_case::TearDownTestCase); \ 204 void NLIB_TESTING_CLASS_NAME_(test_case, test_name)::TestBodySub() 206 #define INSTANTIATE_TEST_CASE_P(prefix, test_case, generator) \ 207 class TestParamAdder_##test_case##prefix : public ::nlib_ns::testing::TestParamAdderBase { \ 209 TestParamAdder_##test_case##prefix() { \ 210 ::nlib_ns::testing::TestParamAdderList::AddTestParamAdder(this); \ 212 virtual void AddParams() { (generator).Gen(test_case::GetParams()); } \ 213 } ntest_##test_case##prefix##_glbval_ 215 #if defined(_MSC_VER) && defined(nx_testing_EXPORTS) 216 #undef NLIB_VIS_PUBLIC 217 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT 220 #endif // INCLUDE_NN_NLIB_TESTING_PARAMVALUE_H_ #define NLIB_OVERRIDE
Defines override if it is available for use. If not, holds an empty string.
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
Prohibits use of the copy constructor and assignment operator for the class specified by TypeName...
Defines that class that is corresponding to std::unique_ptr.
Defines the class that resembles std::vector but can store objects that cannot be copied...
A file that contains the configuration information for each development environment.
Defines the macro for a basic, simple test.