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() {
return detail::ValuesBool(); }
105 template <
class C,
size_t N>
106 detail::ValuesInObjArray<C, N> ValuesIn(
const C (&a)[N]) {
107 return detail::ValuesInObjArray<C, N>(a);
110 template <
class Container>
111 detail::ValuesInObjContainer<Container> ValuesIn(
const Container& c) {
112 return detail::ValuesInObjContainer<Container>(c);
115 template <
class Iterator>
116 detail::ValuesInObjIterator<Iterator> ValuesIn(Iterator first, Iterator last) {
117 return detail::ValuesInObjIterator<Iterator>(first, last);
121 detail::ValuesRange<T, T> Range(T first, T last) {
122 return detail::ValuesRange<T, T>(first, last, T(1));
125 template <
class T,
class S>
126 detail::ValuesRange<T, S> Range(T first, T last, S step) {
127 return detail::ValuesRange<T, S>(first, last, step);
131 detail::Values1<T1> Values(T1 v1) {
132 return detail::Values1<T1>(v1);
135 template <
class T1,
class T2>
136 detail::Values2<T1, T2> Values(T1 v1, T2 v2) {
137 return detail::Values2<T1, T2>(v1, v2);
140 template <
class T1,
class T2,
class T3>
141 detail::Values3<T1, T2, T3> Values(T1 v1, T2 v2, T3 v3) {
142 return detail::Values3<T1, T2, T3>(v1, v2, v3);
145 template <
class T1,
class T2,
class T3,
class T4>
146 detail::Values4<T1, T2, T3, T4> Values(T1 v1, T2 v2, T3 v3, T4 v4) {
147 return detail::Values4<T1, T2, T3, T4>(v1, v2, v3, v4);
150 template <
class T1,
class T2,
class T3,
class T4,
class T5>
151 detail::Values5<T1, T2, T3, T4, T5> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) {
152 return detail::Values5<T1, T2, T3, T4, T5>(v1, v2, v3, v4, v5);
155 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6>
156 detail::Values6<T1, T2, T3, T4, T5, T6> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) {
157 return detail::Values6<T1, T2, T3, T4, T5, T6>(v1, v2, v3, v4, v5, v6);
160 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7>
161 detail::Values7<T1, T2, T3, T4, T5, T6, T7> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
163 return detail::Values7<T1, T2, T3, T4, T5, T6, T7>(v1, v2, v3, v4, v5, v6, v7);
166 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8>
167 detail::Values8<T1, T2, T3, T4, T5, T6, T7, T8> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
169 return detail::Values8<T1, T2, T3, T4, T5, T6, T7, T8>(v1, v2, v3, v4, v5, v6, v7, v8);
172 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9>
173 detail::Values9<T1, T2, T3, T4, T5, T6, T7, T8, T9> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
174 T7 v7, T8 v8, T9 v9) {
175 return detail::Values9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(v1, v2, v3, v4, v5, v6, v7, v8, v9);
178 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9,
180 detail::Values10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
181 T6 v6, T7 v7, T8 v8, T9 v9,
183 return detail::Values10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(v1, v2, v3, v4, v5, v6, v7, v8,
190 #define TEST_P(test_case, test_name) \ 191 class NLIB_TESTING_CLASS_NAME_(test_case, test_name) \ 192 : public test_case { \ 194 NLIB_TESTING_CLASS_NAME_(test_case, test_name)() {} \ 196 virtual void TestBodySub(); \ 197 static ::nlib_ns::testing::TestInfo* info_; \ 198 NLIB_DISALLOW_COPY_AND_ASSIGN(NLIB_TESTING_CLASS_NAME_(test_case, test_name)); \ 200 ::nlib_ns::testing::TestInfo* NLIB_TESTING_CLASS_NAME_(test_case, test_name)::info_ = \ 201 ::nlib_ns::testing::TestInfo::AddTestInfo< \ 202 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() { \ 213 generator.Gen(test_case::GetParams()); \ 216 ntest_##test_case##prefix##_glbval_ 218 #if defined(_MSC_VER) && defined(nx_testing_EXPORTS) 219 #undef NLIB_VIS_PUBLIC 220 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT 223 #endif // INCLUDE_NN_NLIB_TESTING_PARAMVALUE_H_ #define NLIB_OVERRIDE
利用可能であればoverrideが定義されます。そうでない場合は空文字列です。
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
std::unique_ptrに相当するクラスが定義されています。
std::vectorに似ていますが、コピーできないオブジェクトを格納可能なクラスが定義されています。 ...