1 /*===========================================================================
2 *
3 * PUBLIC DOMAIN NOTICE
4 * National Center for Biotechnology Information
5 *
6 * This software/database is a "United States Government Work" under the
7 * terms of the United States Copyright Act. It was written as part of
8 * the author's official duties as a United States Government employee and
9 * thus cannot be copyrighted. This software/database is freely available
10 * to the public for use. The National Library of Medicine and the U.S.
11 * Government have not placed any restriction on its use or reproduction.
12 *
13 * Although all reasonable efforts have been taken to ensure the accuracy
14 * and reliability of the software and data, the NLM and the U.S.
15 * Government do not and cannot warrant the performance or results that
16 * may be obtained by using this software or data. The NLM and the U.S.
17 * Government disclaim all warranties, express or implied, including
18 * warranties of performance, merchantability or fitness for any particular
19 * purpose.
20 *
21 * Please cite the author in any work or product based on this material.
22 *
23 * ===========================================================================
24 *
25 */
26
27 /**
28 * Unit tests for SraReleaseVersion
29 */
30
31 #include <ktst/unit_test.hpp>
32 #include <ktst/unit_test_suite.hpp> // REQUIRE_RC
33 #include <kapp/args.h>
34 #include <klib/sra-release-version.h> /* SraReleaseVersion */
35 #include <klib/text.h> /* string_size */
36 #include <string.h> /* memset */
37 using std::string;
38 TEST_SUITE(SraReleaseVersionTestSuite);
39
40 class Test : private ncbi::NK::TestCase {
41 public:
Test(TestCase & dad,const string & s,const char * expected=NULL)42 Test(TestCase &dad, const string &s, const char *expected = NULL)
43 : TestCase(s)
44 {
45 if (expected == NULL) {
46 expected = s.c_str();
47 }
48 SraReleaseVersion v;
49 REQUIRE_RC(SraReleaseVersionInit(&v, s.c_str(), s.size()));
50 char buffer[256] = "";
51 size_t num_writ = 0;
52 REQUIRE_RC(
53 SraReleaseVersionPrint(&v, buffer, sizeof buffer, &num_writ));
54 CHECK_EQ(num_writ, string_size(expected));
55 CHECK_EQ(memcmp(expected, buffer, num_writ), 0);
56
57 SraReleaseVersion v2;
58 REQUIRE_RC(SraReleaseVersionInit(&v2, buffer, string_size(buffer)));
59
60 int32_t result = 0;
61 REQUIRE_RC(SraReleaseVersionCmp(&v, &v2, &result));
62 CHECK_EQ(result, 0);
63
64 dad.ErrorCounterAdd(GetErrorCounter());
65 }
66 };
67
TEST_CASE(SraReleaseVersionTest)68 TEST_CASE(SraReleaseVersionTest) {
69 int32_t result = 0;
70 SraReleaseVersion v;
71 SraReleaseVersion etalon;
72 memset(&etalon, 0, sizeof etalon);
73 etalon.type = SraReleaseVersion::eSraReleaseVersionTypeFinal;
74
75 REQUIRE_RC(SraReleaseVersionInit(&v, NULL, 0));
76 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
77 CHECK_EQ(result, 0);
78
79 REQUIRE_RC(SraReleaseVersionInit(&v, "", 0));
80 Test (*this, "", "0.0.0");
81 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
82 CHECK_EQ(result, 0);
83
84 REQUIRE_RC(SraReleaseVersionInit(&v, "0", 1));
85 Test (*this, "0", "0.0.0");
86 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
87 CHECK_EQ(result, 0);
88
89 etalon.version = 0x1000000;
90 REQUIRE_RC(SraReleaseVersionInit(&v, "1", 1));
91 Test (*this, "1", "1.0.0");
92 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
93 CHECK_EQ(result, 0);
94
95 etalon.version = 0xC000000;
96 REQUIRE_RC(SraReleaseVersionInit(&v, "12", 2));
97 Test (*this, "12", "12.0.0");
98 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
99 CHECK_EQ(result, 0);
100
101 etalon.version = 0x1000000;
102 REQUIRE_RC(SraReleaseVersionInit(&v, "1.", 2));
103 Test (*this, "1.", "1.0.0");
104 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
105 CHECK_EQ(result, 0);
106
107 etalon.version = 0;
108 REQUIRE_RC(SraReleaseVersionInit(&v, "0.", 2));
109 Test (*this, "0.", "0.0.0");
110 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
111 CHECK_EQ(result, 0);
112
113 etalon.version = 0xD000000;
114 REQUIRE_RC(SraReleaseVersionInit(&v, "13.", 3));
115 Test (*this, "13", "13.0.0");
116 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
117 CHECK_EQ(result, 0);
118
119 etalon.version = 0x2010000;
120 REQUIRE_RC(SraReleaseVersionInit(&v, "2.1", 3));
121 Test (*this, "2.1", "2.1.0");
122 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
123 CHECK_EQ(result, 0);
124
125 etalon.version = 0x2000000;
126 REQUIRE_RC(SraReleaseVersionInit(&v, "2.0", 3));
127 Test (*this, "2.0", "2.0.0");
128 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
129 CHECK_EQ(result, 0);
130
131 etalon.version = 0xE010000;
132 REQUIRE_RC(SraReleaseVersionInit(&v, "14.1", 4));
133 Test (*this, "14.1", "14.1.0");
134 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
135 CHECK_EQ(result, 0);
136
137 etalon.version = 0xE000000;
138 REQUIRE_RC(SraReleaseVersionInit(&v, "14.0", 4));
139 Test (*this, "14.0", "14.0.0");
140 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
141 CHECK_EQ(result, 0);
142
143 etalon.version = 0xF0A0000;
144 REQUIRE_RC(SraReleaseVersionInit(&v, "15.10", 5));
145 Test (*this, "15.10", "15.10.0");
146 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
147 CHECK_EQ(result, 0);
148
149 etalon.version = 0x2000000;
150 REQUIRE_RC(SraReleaseVersionInit(&v, "2.0.", 4));
151 Test (*this, "2.0", "2.0.0");
152 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
153 CHECK_EQ(result, 0);
154
155 etalon.version = 0x2010000;
156 REQUIRE_RC(SraReleaseVersionInit(&v, "2.1.", 4));
157 Test (*this, "2.1.", "2.1.0");
158 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
159 CHECK_EQ(result, 0);
160
161 etalon.version = 0xE010000;
162 REQUIRE_RC(SraReleaseVersionInit(&v, "14.1.", 5));
163 Test (*this, "14.1.", "14.1.0");
164 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
165 CHECK_EQ(result, 0);
166
167 etalon.version = 0xF0A0000;
168 REQUIRE_RC(SraReleaseVersionInit(&v, "15.10.", 6));
169 Test (*this, "15.10", "15.10.0");
170 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
171 CHECK_EQ(result, 0);
172
173 etalon.version = 0x3020001;
174 REQUIRE_RC(SraReleaseVersionInit(&v, "3.2.1", 5));
175 Test (*this, "3.2.1", "3.2.1");
176 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
177 CHECK_EQ(result, 0);
178
179 etalon.version = 0x3020000;
180 REQUIRE_RC(SraReleaseVersionInit(&v, "3.2.0", 5));
181 Test (*this, "3.2.0", "3.2.0");
182 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
183 CHECK_EQ(result, 0);
184
185 etalon.version = 0xD030002;
186 REQUIRE_RC(SraReleaseVersionInit(&v, "13.3.2", 6));
187 Test (*this, "13.3.2", "13.3.2");
188 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
189 CHECK_EQ(result, 0);
190
191 etalon.version = 0xC100001;
192 REQUIRE_RC(SraReleaseVersionInit(&v, "12.16.1", 7));
193 Test (*this, "12.16.1", "12.16.1");
194 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
195 CHECK_EQ(result, 0);
196
197 etalon.version = 0x10110012;
198 REQUIRE_RC(SraReleaseVersionInit(&v, "16.17.18", 8));
199 Test (*this, "16.17.18", "16.17.18");
200 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
201 CHECK_EQ(result, 0);
202
203 etalon.version = 0x3020001;
204 REQUIRE_RC(SraReleaseVersionInit(&v, "3.2.1-", 6));
205 Test (*this, "3.2.1-", "3.2.1");
206 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
207 CHECK_EQ(result, 0);
208
209 etalon.version = 0x10110012;
210 REQUIRE_RC(SraReleaseVersionInit(&v, "16.17.18-", 9));
211 Test (*this, "16.17.18-", "16.17.18");
212 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
213 CHECK_EQ(result, 0);
214
215 etalon.version = 0x4030002;
216 etalon.revision = 5;
217 REQUIRE_RC(SraReleaseVersionInit(&v, "4.3.2-5", 7));
218 Test (*this, "4.3.2-5");
219 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
220 CHECK_EQ(result, 0);
221
222 etalon.version = 0x4030002;
223 etalon.revision = 0;
224 REQUIRE_RC(SraReleaseVersionInit(&v, "4.3.2-0", 7));
225 Test (*this, "4.3.2-0", "4.3.2");
226 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
227 CHECK_EQ(result, 0);
228
229 etalon.version = 0x13110012;
230 etalon.revision = 20;
231 REQUIRE_RC(SraReleaseVersionInit(&v, "19.17.18-20", 11));
232 Test (*this, "19.17.18-20");
233 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
234 CHECK_EQ(result, 0);
235
236 etalon.version = 0x4030002;
237 etalon.revision = 0;
238 etalon.type = SraReleaseVersion::eSraReleaseVersionTypeAlpha;
239 REQUIRE_RC(SraReleaseVersionInit(&v, "4.3.2-a", 7));
240 Test (*this, "4.3.2-a");
241 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
242 CHECK_EQ(result, 0);
243
244 etalon.version = 0x13110012;
245 REQUIRE_RC(SraReleaseVersionInit(&v, "19.17.18-a", 10));
246 Test (*this, "19.17.18-a");
247 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
248 CHECK_EQ(result, 0);
249
250 etalon.version = 0x4030002;
251 REQUIRE_RC(SraReleaseVersionInit(&v, "4.3.2-a0", 8));
252 Test (*this, "4.3.2-a0", "4.3.2-a");
253 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
254 CHECK_EQ(result, 0);
255
256 etalon.version = 0x13110012;
257 etalon.revision = 21;
258 REQUIRE_RC(SraReleaseVersionInit(&v, "19.17.18-a21", 12));
259 Test (*this, "19.17.18-a21");
260 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
261 CHECK_EQ(result, 0);
262
263 etalon.version = 0x4030002;
264 etalon.revision = 1;
265 etalon.type = SraReleaseVersion::eSraReleaseVersionTypeBeta;
266 REQUIRE_RC(SraReleaseVersionInit(&v, "4.3.2-b1", 8));
267 Test (*this, "4.3.2-b1");
268 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
269 CHECK_EQ(result, 0);
270
271 etalon.version = 0x4030002;
272 etalon.revision = 0;
273 etalon.type = SraReleaseVersion::eSraReleaseVersionTypeRC;
274 REQUIRE_RC(SraReleaseVersionInit(&v, "4.3.2-rc", 8));
275 Test (*this, "4.3.2-rc");
276 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
277 CHECK_EQ(result, 0);
278
279 etalon.version = 0x13110012;
280 REQUIRE_RC(SraReleaseVersionInit(&v, "19.17.18-rc", 11));
281 Test (*this, "19.17.18-rc");
282 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
283 CHECK_EQ(result, 0);
284
285 etalon.version = 0x4030002;
286 REQUIRE_RC(SraReleaseVersionInit(&v, "4.3.2-rc0", 9));
287 Test (*this, "4.3.2-rc0", "4.3.2-rc");
288 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
289 CHECK_EQ(result, 0);
290
291 etalon.version = 0x4030002;
292 etalon.revision = 1;
293 REQUIRE_RC(SraReleaseVersionInit(&v, "4.3.2-rc1", 9));
294 Test (*this, "4.3.2-rc1");
295 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
296 CHECK_EQ(result, 0);
297
298 etalon.version = 0x13110012;
299 etalon.revision = 21;
300 REQUIRE_RC(SraReleaseVersionInit(&v, "19.17.18-rc21", 13));
301 Test (*this, "19.17.18-rc21");
302 REQUIRE_RC(SraReleaseVersionCmp(&v, &etalon, &result));
303 CHECK_EQ(result, 0);
304 }
305
306 //////////////////////////////////////////////////// Main
307 extern "C" {
KAppVersion(void)308 ver_t CC KAppVersion(void) { return 0; }
Usage(const Args * args)309 rc_t CC Usage(const Args *args) { return 0; }
310 const char UsageDefaultName[] = "test-SraReleaseVersion";
UsageSummary(const char * progname)311 rc_t CC UsageSummary(const char *progname) { return 0; }
312
KMain(int argc,char * argv[])313 rc_t CC KMain(int argc, char *argv[]) {
314 return SraReleaseVersionTestSuite(argc, argv);
315 }
316 }
317