Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/modules/core/test/test_utils.cpp
16337 views
1
// This file is part of OpenCV project.
2
// It is subject to the license terms in the LICENSE file found in the top-level directory
3
// of this distribution and at http://opencv.org/license.html.
4
#include "test_precomp.hpp"
5
6
namespace opencv_test { namespace {
7
8
static const char * const keys =
9
"{ h help | | print help }"
10
"{ i info | false | print info }"
11
"{ t true | true | true value }"
12
"{ n unused | | dummy }"
13
;
14
15
TEST(CommandLineParser, testFailure)
16
{
17
const char* argv[] = {"<bin>", "-q"};
18
const int argc = 2;
19
cv::CommandLineParser parser(argc, argv, keys);
20
EXPECT_ANY_THROW(parser.has("q"));
21
EXPECT_ANY_THROW(parser.get<bool>("q"));
22
EXPECT_ANY_THROW(parser.get<bool>(0));
23
24
parser.get<bool>("h");
25
EXPECT_FALSE(parser.check());
26
}
27
28
TEST(CommandLineParser, testHas_noValues)
29
{
30
const char* argv[] = {"<bin>", "-h", "--info"};
31
const int argc = 3;
32
cv::CommandLineParser parser(argc, argv, keys);
33
EXPECT_TRUE(parser.has("help"));
34
EXPECT_TRUE(parser.has("h"));
35
EXPECT_TRUE(parser.get<bool>("help"));
36
EXPECT_TRUE(parser.get<bool>("h"));
37
EXPECT_TRUE(parser.has("info"));
38
EXPECT_TRUE(parser.has("i"));
39
EXPECT_TRUE(parser.get<bool>("info"));
40
EXPECT_TRUE(parser.get<bool>("i"));
41
EXPECT_TRUE(parser.get<bool>("true"));
42
EXPECT_TRUE(parser.get<bool>("t"));
43
EXPECT_FALSE(parser.has("n"));
44
EXPECT_FALSE(parser.has("unused"));
45
}
46
TEST(CommandLineParser, testHas_TrueValues)
47
{
48
const char* argv[] = {"<bin>", "-h=TRUE", "--info=true"};
49
const int argc = 3;
50
cv::CommandLineParser parser(argc, argv, keys);
51
EXPECT_TRUE(parser.has("help"));
52
EXPECT_TRUE(parser.has("h"));
53
EXPECT_TRUE(parser.get<bool>("help"));
54
EXPECT_TRUE(parser.get<bool>("h"));
55
EXPECT_TRUE(parser.has("info"));
56
EXPECT_TRUE(parser.has("i"));
57
EXPECT_TRUE(parser.get<bool>("info"));
58
EXPECT_TRUE(parser.get<bool>("i"));
59
EXPECT_TRUE(parser.get<bool>("true"));
60
EXPECT_TRUE(parser.get<bool>("t"));
61
EXPECT_FALSE(parser.has("n"));
62
EXPECT_FALSE(parser.has("unused"));
63
}
64
TEST(CommandLineParser, testHas_TrueValues1)
65
{
66
const char* argv[] = {"<bin>", "-h=1", "--info=1"};
67
const int argc = 3;
68
cv::CommandLineParser parser(argc, argv, keys);
69
EXPECT_TRUE(parser.has("help"));
70
EXPECT_TRUE(parser.has("h"));
71
EXPECT_TRUE(parser.get<bool>("help"));
72
EXPECT_TRUE(parser.get<bool>("h"));
73
EXPECT_TRUE(parser.has("info"));
74
EXPECT_TRUE(parser.has("i"));
75
EXPECT_TRUE(parser.get<bool>("info"));
76
EXPECT_TRUE(parser.get<bool>("i"));
77
EXPECT_TRUE(parser.get<bool>("true"));
78
EXPECT_TRUE(parser.get<bool>("t"));
79
EXPECT_FALSE(parser.has("n"));
80
EXPECT_FALSE(parser.has("unused"));
81
}
82
TEST(CommandLineParser, testHas_FalseValues0)
83
{
84
const char* argv[] = {"<bin>", "-h=0", "--info=0"};
85
const int argc = 3;
86
cv::CommandLineParser parser(argc, argv, keys);
87
EXPECT_TRUE(parser.has("help"));
88
EXPECT_TRUE(parser.has("h"));
89
EXPECT_FALSE(parser.get<bool>("help"));
90
EXPECT_FALSE(parser.get<bool>("h"));
91
EXPECT_TRUE(parser.has("info"));
92
EXPECT_TRUE(parser.has("i"));
93
EXPECT_FALSE(parser.get<bool>("info"));
94
EXPECT_FALSE(parser.get<bool>("i"));
95
EXPECT_TRUE(parser.get<bool>("true"));
96
EXPECT_TRUE(parser.get<bool>("t"));
97
EXPECT_FALSE(parser.has("n"));
98
EXPECT_FALSE(parser.has("unused"));
99
}
100
101
TEST(CommandLineParser, testBoolOption_noArgs)
102
{
103
const char* argv[] = {"<bin>"};
104
const int argc = 1;
105
cv::CommandLineParser parser(argc, argv, keys);
106
EXPECT_FALSE(parser.get<bool>("help"));
107
EXPECT_FALSE(parser.get<bool>("h"));
108
EXPECT_FALSE(parser.get<bool>("info"));
109
EXPECT_FALSE(parser.get<bool>("i"));
110
EXPECT_TRUE(parser.get<bool>("true")); // default is true
111
EXPECT_TRUE(parser.get<bool>("t"));
112
}
113
114
TEST(CommandLineParser, testBoolOption_noValues)
115
{
116
const char* argv[] = {"<bin>", "-h", "--info"};
117
const int argc = 3;
118
cv::CommandLineParser parser(argc, argv, keys);
119
EXPECT_TRUE(parser.get<bool>("help"));
120
EXPECT_TRUE(parser.get<bool>("h"));
121
EXPECT_TRUE(parser.get<bool>("info"));
122
EXPECT_TRUE(parser.get<bool>("i"));
123
EXPECT_TRUE(parser.get<bool>("true"));
124
EXPECT_TRUE(parser.get<bool>("t"));
125
}
126
127
TEST(CommandLineParser, testBoolOption_TrueValues)
128
{
129
const char* argv[] = {"<bin>", "-h=TrUe", "-t=1", "--info=true", "-n=truE"};
130
const int argc = 5;
131
cv::CommandLineParser parser(argc, argv, keys);
132
EXPECT_TRUE(parser.get<bool>("help"));
133
EXPECT_TRUE(parser.get<bool>("h"));
134
EXPECT_TRUE(parser.get<bool>("info"));
135
EXPECT_TRUE(parser.get<bool>("i"));
136
EXPECT_TRUE(parser.get<bool>("true"));
137
EXPECT_TRUE(parser.get<bool>("t"));
138
EXPECT_TRUE(parser.get<bool>("unused"));
139
EXPECT_TRUE(parser.get<bool>("n"));
140
}
141
142
TEST(CommandLineParser, testBoolOption_FalseValues)
143
{
144
const char* argv[] = {"<bin>", "--help=FALSE", "-t=FaLsE", "-i=false", "-n=0"};
145
const int argc = 5;
146
cv::CommandLineParser parser(argc, argv, keys);
147
EXPECT_FALSE(parser.get<bool>("help"));
148
EXPECT_FALSE(parser.get<bool>("h"));
149
EXPECT_FALSE(parser.get<bool>("info"));
150
EXPECT_FALSE(parser.get<bool>("i"));
151
EXPECT_FALSE(parser.get<bool>("true"));
152
EXPECT_FALSE(parser.get<bool>("t"));
153
EXPECT_FALSE(parser.get<bool>("unused"));
154
EXPECT_FALSE(parser.get<bool>("n"));
155
}
156
157
158
static const char * const keys2 =
159
"{ h help | | print help }"
160
"{ @arg1 | default1 | param1 }"
161
"{ @arg2 | | param2 }"
162
"{ n unused | | dummy }"
163
;
164
165
TEST(CommandLineParser, testPositional_noArgs)
166
{
167
const char* argv[] = {"<bin>"};
168
const int argc = 1;
169
cv::CommandLineParser parser(argc, argv, keys2);
170
EXPECT_TRUE(parser.has("@arg1"));
171
EXPECT_FALSE(parser.has("@arg2"));
172
EXPECT_EQ("default1", parser.get<String>("@arg1"));
173
EXPECT_EQ("default1", parser.get<String>(0));
174
175
EXPECT_EQ("", parser.get<String>("@arg2"));
176
EXPECT_EQ("", parser.get<String>(1));
177
}
178
179
TEST(CommandLineParser, testPositional_default)
180
{
181
const char* argv[] = {"<bin>", "test1", "test2"};
182
const int argc = 3;
183
cv::CommandLineParser parser(argc, argv, keys2);
184
EXPECT_TRUE(parser.has("@arg1"));
185
EXPECT_TRUE(parser.has("@arg2"));
186
EXPECT_EQ("test1", parser.get<String>("@arg1"));
187
EXPECT_EQ("test2", parser.get<String>("@arg2"));
188
EXPECT_EQ("test1", parser.get<String>(0));
189
EXPECT_EQ("test2", parser.get<String>(1));
190
}
191
192
TEST(CommandLineParser, testPositional_withFlagsBefore)
193
{
194
const char* argv[] = {"<bin>", "-h", "test1", "test2"};
195
const int argc = 4;
196
cv::CommandLineParser parser(argc, argv, keys2);
197
EXPECT_TRUE(parser.has("@arg1"));
198
EXPECT_TRUE(parser.has("@arg2"));
199
EXPECT_EQ("test1", parser.get<String>("@arg1"));
200
EXPECT_EQ("test2", parser.get<String>("@arg2"));
201
EXPECT_EQ("test1", parser.get<String>(0));
202
EXPECT_EQ("test2", parser.get<String>(1));
203
}
204
205
TEST(CommandLineParser, testPositional_withFlagsAfter)
206
{
207
const char* argv[] = {"<bin>", "test1", "test2", "-h"};
208
const int argc = 4;
209
cv::CommandLineParser parser(argc, argv, keys2);
210
EXPECT_TRUE(parser.has("@arg1"));
211
EXPECT_TRUE(parser.has("@arg2"));
212
EXPECT_EQ("test1", parser.get<String>("@arg1"));
213
EXPECT_EQ("test2", parser.get<String>("@arg2"));
214
EXPECT_EQ("test1", parser.get<String>(0));
215
EXPECT_EQ("test2", parser.get<String>(1));
216
}
217
218
TEST(CommandLineParser, testEmptyStringValue)
219
{
220
static const char * const keys3 =
221
"{ @pos0 | | empty default value }"
222
"{ @pos1 | <none> | forbid empty default value }";
223
224
const char* argv[] = {"<bin>"};
225
const int argc = 1;
226
cv::CommandLineParser parser(argc, argv, keys3);
227
// EXPECT_TRUE(parser.has("@pos0"));
228
EXPECT_EQ("", parser.get<String>("@pos0"));
229
EXPECT_TRUE(parser.check());
230
231
EXPECT_FALSE(parser.has("@pos1"));
232
parser.get<String>(1);
233
EXPECT_FALSE(parser.check());
234
}
235
236
TEST(CommandLineParser, positional_regression_5074_equal_sign)
237
{
238
static const char * const keys3 =
239
"{ @eq0 | | }"
240
"{ eq1 | | }";
241
242
const char* argv[] = {"<bin>", "1=0", "--eq1=1=0"};
243
const int argc = 3;
244
cv::CommandLineParser parser(argc, argv, keys3);
245
EXPECT_EQ("1=0", parser.get<String>("@eq0"));
246
EXPECT_EQ("1=0", parser.get<String>(0));
247
EXPECT_EQ("1=0", parser.get<String>("eq1"));
248
EXPECT_TRUE(parser.check());
249
}
250
251
252
TEST(AutoBuffer, allocate_test)
253
{
254
AutoBuffer<int, 5> abuf(2);
255
EXPECT_EQ(2u, abuf.size());
256
257
abuf.allocate(4);
258
EXPECT_EQ(4u, abuf.size());
259
260
abuf.allocate(6);
261
EXPECT_EQ(6u, abuf.size());
262
}
263
264
TEST(CommandLineParser, testScalar)
265
{
266
static const char * const keys3 =
267
"{ s0 | 3 4 5 | default scalar }"
268
"{ s1 | | single value scalar }"
269
"{ s2 | | two values scalar (default with zeros) }"
270
"{ s3 | | three values scalar }"
271
"{ s4 | | four values scalar }"
272
"{ s5 | | five values scalar }";
273
274
const char* argv[] = {"<bin>", "--s1=1.1", "--s3=1.1 2.2 3",
275
"--s4=-4.2 1 0 3", "--s5=5 -4 3 2 1"};
276
const int argc = 5;
277
CommandLineParser parser(argc, argv, keys3);
278
EXPECT_EQ(parser.get<Scalar>("s0"), Scalar(3, 4, 5));
279
EXPECT_EQ(parser.get<Scalar>("s1"), Scalar(1.1));
280
EXPECT_EQ(parser.get<Scalar>("s2"), Scalar(0));
281
EXPECT_EQ(parser.get<Scalar>("s3"), Scalar(1.1, 2.2, 3));
282
EXPECT_EQ(parser.get<Scalar>("s4"), Scalar(-4.2, 1, 0, 3));
283
EXPECT_EQ(parser.get<Scalar>("s5"), Scalar(5, -4, 3, 2));
284
}
285
286
}} // namespace
287
288