3 #ifndef INCLUDE_NN_NLIB_TESTING_PARAMVALUE_H_ 4 #define INCLUDE_NN_NLIB_TESTING_PARAMVALUE_H_ 8 #include "nn/nlib/testing/ParamValueTypes.h" 12 #if defined(_MSC_VER) && defined(nx_testing_EXPORTS) 13 #undef NLIB_VIS_PUBLIC 14 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT 25 virtual
void TestBodySub() = 0;
26 virtual
bool SetParam(
size_t i) = 0;
30 class TestWithParam : public TestWithParamBase {
33 TestWithParam() : param_(NULL) {}
34 const ParamType& GetParam()
const {
return *param_; }
35 static Nlist<ParamType>* GetParams() {
return ¶m_vec_; }
41 const ParamType* param_;
42 static Nlist<ParamType> param_vec_;
48 bool TestWithParam<T>::SetParam(
size_t i) {
49 if (i < param_vec_.size()) {
50 param_ = ¶m_vec_[i];
60 Nlist<T> TestWithParam<T>::param_vec_;
64 virtual ~TestParamAdderBase() {}
65 virtual void AddParams() = 0;
68 TestParamAdderBase() {}
76 static void AddParams();
77 static void AddTestParamAdder(TestParamAdderBase* v);
80 TestParamAdderList() {}
81 ~TestParamAdderList() {}
84 static TestParamAdderBase* adder_list_[1024];
85 static int adder_list_idx_;
90 inline detail::ValuesBool Bool() {
return detail::ValuesBool(); }
92 template <
class C,
size_t N>
93 detail::ValuesInObjArray<C, N> ValuesIn(
const C (&a)[N]) {
94 return detail::ValuesInObjArray<C, N>(a);
97 template <
class Container>
98 detail::ValuesInObjContainer<Container> ValuesIn(
const Container& c) {
99 return detail::ValuesInObjContainer<Container>(c);
102 template <
class Iterator>
103 detail::ValuesInObjIterator<Iterator> ValuesIn(Iterator first, Iterator last) {
104 return detail::ValuesInObjIterator<Iterator>(first, last);
108 detail::ValuesRange<T, T> Range(T first, T last) {
109 return detail::ValuesRange<T, T>(first, last, T(1));
112 template <
class T,
class S>
113 detail::ValuesRange<T, S> Range(T first, T last, S step) {
114 return detail::ValuesRange<T, S>(first, last, step);
118 detail::Values1<T1> Values(T1 v1) {
119 return detail::Values1<T1>(v1);
122 template <
class T1,
class T2>
123 detail::Values2<T1, T2> Values(T1 v1, T2 v2) {
124 return detail::Values2<T1, T2>(v1, v2);
127 template <
class T1,
class T2,
class T3>
128 detail::Values3<T1, T2, T3> Values(T1 v1, T2 v2, T3 v3) {
129 return detail::Values3<T1, T2, T3>(v1, v2, v3);
132 template <
class T1,
class T2,
class T3,
class T4>
133 detail::Values4<T1, T2, T3, T4> Values(T1 v1, T2 v2, T3 v3, T4 v4) {
134 return detail::Values4<T1, T2, T3, T4>(v1, v2, v3, v4);
137 template <
class T1,
class T2,
class T3,
class T4,
class T5>
138 detail::Values5<T1, T2, T3, T4, T5> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5) {
139 return detail::Values5<T1, T2, T3, T4, T5>(v1, v2, v3, v4, v5);
142 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6>
143 detail::Values6<T1, T2, T3, T4, T5, T6> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6) {
144 return detail::Values6<T1, T2, T3, T4, T5, T6>(v1, v2, v3, v4, v5, v6);
147 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7>
148 detail::Values7<T1, T2, T3, T4, T5, T6, T7> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
150 return detail::Values7<T1, T2, T3, T4, T5, T6, T7>(v1, v2, v3, v4, v5, v6, v7);
153 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8>
154 detail::Values8<T1, T2, T3, T4, T5, T6, T7, T8> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
156 return detail::Values8<T1, T2, T3, T4, T5, T6, T7, T8>(v1, v2, v3, v4, v5, v6, v7, v8);
159 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9>
160 detail::Values9<T1, T2, T3, T4, T5, T6, T7, T8, T9> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5, T6 v6,
161 T7 v7, T8 v8, T9 v9) {
162 return detail::Values9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(v1, v2, v3, v4, v5, v6, v7, v8, v9);
165 template <
class T1,
class T2,
class T3,
class T4,
class T5,
class T6,
class T7,
class T8,
class T9,
167 detail::Values10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Values(T1 v1, T2 v2, T3 v3, T4 v4, T5 v5,
168 T6 v6, T7 v7, T8 v8, T9 v9,
170 return detail::Values10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(v1, v2, v3, v4, v5, v6, v7, v8,
177 #define TEST_P(test_case, test_name) \ 178 class NLIB_TESTING_CLASS_NAME_(test_case, test_name) \ 179 : public test_case { \ 181 NLIB_TESTING_CLASS_NAME_(test_case, test_name)() {} \ 183 virtual void TestBodySub(); \ 184 static ::nlib_ns::testing::TestInfo* info_; \ 185 NLIB_DISALLOW_COPY_AND_ASSIGN(NLIB_TESTING_CLASS_NAME_(test_case, test_name)); \ 187 ::nlib_ns::testing::TestInfo* NLIB_TESTING_CLASS_NAME_(test_case, test_name)::info_ = \ 188 ::nlib_ns::testing::TestInfo::AddTestInfo< \ 189 NLIB_TESTING_CLASS_NAME_(test_case, test_name)>( \ 190 #test_case, #test_name, -1, test_case::SetUpTestCase, test_case::TearDownTestCase); \ 191 void NLIB_TESTING_CLASS_NAME_(test_case, test_name)::TestBodySub() 193 #define INSTANTIATE_TEST_CASE_P(prefix, test_case, generator) \ 194 class TestParamAdder_##test_case##prefix : public ::nlib_ns::testing::TestParamAdderBase { \ 196 TestParamAdder_##test_case##prefix() { \ 197 ::nlib_ns::testing::TestParamAdderList::AddTestParamAdder(this); \ 199 virtual void AddParams() { \ 200 generator.Gen(test_case::GetParams()); \ 203 ntest_##test_case##prefix##_glbval_ 205 #if defined(_MSC_VER) && defined(nx_testing_EXPORTS) 206 #undef NLIB_VIS_PUBLIC 207 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT 210 #endif // INCLUDE_NN_NLIB_TESTING_PARAMVALUE_H_ #define NLIB_OVERRIDE
利用可能であればoverrideが定義されます。そうでない場合は空文字列です。
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
std::unique_ptrに相当するクラスが定義されています。
std::vectorに似ていますが、コピーできないオブジェクトを格納可能なクラスが定義されています。 ...