Rename get_dir_size() to get_dir_count()
[libi2ncommon] / test / test_timefunc.cpp
CommitLineData
0e23f538
TJ
1/*
2The software in this package is distributed under the GNU General
3Public License version 2 (with a special exception described below).
4
5A copy of GNU General Public License (GPL) is included in this distribution,
6in the file COPYING.GPL.
7
8As a special exception, if other files instantiate templates or use macros
9or inline functions from this file, or you compile this file and link it
10with other works to produce a work based on this file, this file
11does not by itself cause the resulting work to be covered
12by the GNU General Public License.
13
14However the source code for this file must still be made available
15in accordance with section (3) of the GNU General Public License.
16
17This exception does not invalidate any other reasons why a work based
18on this file might be covered by the GNU General Public License.
19*/
8d2b7645
TJ
20/** @file
21 * @brief unit test for time related functions.
22 *
23 * @copyright Copyright © 2001-2008 by Intra2net AG
8d2b7645
TJ
24 *
25 */
26
9fe0853b
TJ
27#define BOOST_TEST_DYN_LINK
28#include <boost/test/unit_test.hpp>
8d2b7645
TJ
29
30#include <timefunc.hxx>
31#include <filefunc.hxx>
32
96d0be2e 33#include <unistd.h>
9fe0853b 34#include <set>
96d0be2e 35
8d2b7645
TJ
36using namespace std;
37using namespace I2n;
8047e088 38using namespace I2n::Time;
8d2b7645 39
9fe0853b 40class TestTimeFuncFixture
8d2b7645 41{
8d2b7645 42protected:
8d2b7645 43 typedef std::list< std::string > StringList;
8d2b7645
TJ
44 std::set<std::string> used_check_files;
45
46 std::string get_check_file_path(std::string tag)
47 {
48 std::string result;
49 result= "__unittest__" + tag + ".dat";
50 used_check_files.insert(result);
51 return result;
52 } // eo get_check_file_path
53
8d2b7645
TJ
54 void remove_check_files()
55 {
56 for (std::set<std::string>::iterator it= used_check_files.begin();
57 it != used_check_files.end();
58 ++it)
59 {
60 std::string filepath(*it);
61 if (path_exists(filepath))
62 {
63 unlink(filepath);
64 }
65 //TODO
66 }
67 used_check_files.clear();
68 } // eo remove_check_files
69
8d2b7645 70public:
9fe0853b
TJ
71 TestTimeFuncFixture()
72 {
73 }
74
75 ~TestTimeFuncFixture()
76 {
77 remove_check_files();
78 }
79};
8d2b7645 80
9fe0853b 81BOOST_FIXTURE_TEST_SUITE(TestTimeFunc, TestTimeFuncFixture)
8d2b7645 82
9fe0853b
TJ
83BOOST_AUTO_TEST_CASE(AddIntervalsDisjoint)
84{
85 Intervals intervals;
8d2b7645 86
9fe0853b
TJ
87 intervals.add( Interval( 10, 100 ) );
88 intervals.add( Interval( 600, 620 ) );
8d2b7645 89
9fe0853b
TJ
90 BOOST_CHECK_EQUAL( false, intervals.empty() );
91 BOOST_CHECK_EQUAL( 2u, intervals.size() );
8d2b7645 92
9fe0853b
TJ
93 BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
94 BOOST_CHECK_EQUAL( 100u, intervals.front().upper_bound() );
8d2b7645 95
9fe0853b
TJ
96 BOOST_CHECK_EQUAL( 600u, intervals.back().lower_bound() );
97 BOOST_CHECK_EQUAL( 620u, intervals.back().upper_bound() );
98} // eo AddIntervalsDisjoint()
8d2b7645
TJ
99
100
101
9fe0853b
TJ
102BOOST_AUTO_TEST_CASE(AddIntervalsInclude)
103{
104 Intervals intervals;
8d2b7645 105
9fe0853b
TJ
106 intervals.add( Interval( 10, 100 ) );
107 intervals.add( Interval( 10, 80 ) );
8d2b7645 108
9fe0853b
TJ
109 BOOST_CHECK_EQUAL( false, intervals.empty() );
110 BOOST_CHECK_EQUAL( 1u, intervals.size() );
8d2b7645 111
9fe0853b
TJ
112 BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
113 BOOST_CHECK_EQUAL( 100u, intervals.front().upper_bound() );
114 BOOST_CHECK_EQUAL( false, intervals.front().changed() );
115} // eo AddIntervalsInclude()
8d2b7645
TJ
116
117
118
9fe0853b
TJ
119BOOST_AUTO_TEST_CASE(AddIntervalsEmbrace)
120{
121 Intervals intervals;
8d2b7645 122
9fe0853b
TJ
123 intervals.add( Interval( 10, 100 ) );
124 intervals.add( Interval( 5, 120 ) );
8d2b7645 125
9fe0853b
TJ
126 BOOST_CHECK_EQUAL( false, intervals.empty() );
127 BOOST_CHECK_EQUAL( 1u, intervals.size() );
8d2b7645 128
9fe0853b
TJ
129 BOOST_CHECK_EQUAL( 5u, intervals.front().lower_bound() );
130 BOOST_CHECK_EQUAL( 120u, intervals.front().upper_bound() );
131 BOOST_CHECK_EQUAL( true, intervals.front().changed() );
132} // eo AddIntervalsEmbrace()
8d2b7645
TJ
133
134
135
9fe0853b
TJ
136BOOST_AUTO_TEST_CASE(AddIntervalsJoin1)
137{
138 Intervals intervals;
8d2b7645 139
9fe0853b
TJ
140 intervals.add( Interval( 10, 100 ) );
141 intervals.add( Interval( 60, 120 ) );
8d2b7645 142
9fe0853b
TJ
143 BOOST_CHECK_EQUAL( false, intervals.empty() );
144 BOOST_CHECK_EQUAL( 1u, intervals.size() );
8d2b7645 145
9fe0853b
TJ
146 BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
147 BOOST_CHECK_EQUAL( 120u, intervals.front().upper_bound() );
148 BOOST_CHECK_EQUAL( true, intervals.front().changed() );
149} // eo AddIntervalsJoin1()
8d2b7645
TJ
150
151
152
9fe0853b
TJ
153BOOST_AUTO_TEST_CASE(AddIntervalsJoin1b)
154{
155 Intervals intervals;
8d2b7645 156
9fe0853b
TJ
157 intervals.add( Interval( 10, 100 ) );
158 intervals.add( Interval( 100, 120 ) );
8d2b7645 159
9fe0853b
TJ
160 BOOST_CHECK_EQUAL( false, intervals.empty() );
161 BOOST_CHECK_EQUAL( 1u, intervals.size() );
8d2b7645 162
9fe0853b
TJ
163 BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
164 BOOST_CHECK_EQUAL( 120u, intervals.front().upper_bound() );
165 BOOST_CHECK_EQUAL( true, intervals.front().changed() );
166} // eo AddIntervalsJoin1b()
8d2b7645
TJ
167
168
169
9fe0853b
TJ
170BOOST_AUTO_TEST_CASE(AddIntervalsJoin2)
171{
172 Intervals intervals;
8d2b7645 173
9fe0853b
TJ
174 intervals.add( Interval( 10, 100 ) );
175 intervals.add( Interval( 200, 250 ) );
8d2b7645 176
9fe0853b
TJ
177 BOOST_CHECK_EQUAL( false, intervals.empty() );
178 BOOST_CHECK_EQUAL( 2u, intervals.size() );
8d2b7645 179
9fe0853b
TJ
180 BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
181 BOOST_CHECK_EQUAL( 100u, intervals.front().upper_bound() );
182 BOOST_CHECK_EQUAL( 200u, intervals.back().lower_bound() );
183 BOOST_CHECK_EQUAL( 250u, intervals.back().upper_bound() );
8d2b7645 184
9fe0853b
TJ
185 // now add the gap; the intervals should collapse to one covering all:
186 intervals.add( Interval(100, 200) );
8d2b7645 187
9fe0853b
TJ
188 BOOST_CHECK_EQUAL( false, intervals.empty() );
189 BOOST_CHECK_EQUAL( 1u, intervals.size() );
8d2b7645 190
9fe0853b
TJ
191 BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
192 BOOST_CHECK_EQUAL( 250u, intervals.front().upper_bound() );
193 BOOST_CHECK_EQUAL( true, intervals.front().changed() );
194} // eo AddIntervalsJoin2()
8d2b7645
TJ
195
196
197
9fe0853b
TJ
198BOOST_AUTO_TEST_CASE(SubIntervalsDisjoint)
199{
200 Intervals intervals;
8d2b7645 201
9fe0853b
TJ
202 intervals.add( Interval(10, 100) );
203 intervals.sub( Interval(0, 10) );
8d2b7645 204
9fe0853b
TJ
205 BOOST_CHECK_EQUAL( false, intervals.empty() );
206 BOOST_CHECK_EQUAL( 1u, intervals.size() );
8d2b7645 207
9fe0853b
TJ
208 BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
209 BOOST_CHECK_EQUAL( 100u, intervals.front().upper_bound() );
210 BOOST_CHECK_EQUAL( false, intervals.front().changed() );
211} // eo SubIntervalsDisjoint()
8d2b7645
TJ
212
213
214
9fe0853b
TJ
215BOOST_AUTO_TEST_CASE(SubIntervalsExact)
216{
217 Intervals intervals;
8d2b7645 218
9fe0853b
TJ
219 intervals.add( Interval(10, 100) );
220 intervals.sub( Interval(10, 100) );
8d2b7645 221
9fe0853b
TJ
222 BOOST_CHECK_EQUAL( true, intervals.empty() );
223 BOOST_CHECK_EQUAL( 0u, intervals.size() );
224} // eo SubIntervalsExact()
8d2b7645
TJ
225
226
227
9fe0853b
TJ
228BOOST_AUTO_TEST_CASE(SubIntervalsSplit1)
229{
230 Intervals intervals;
8d2b7645 231
9fe0853b
TJ
232 intervals.add( Interval(10, 100) );
233 intervals.sub( Interval(20, 40) );
8d2b7645 234
9fe0853b
TJ
235 BOOST_CHECK_EQUAL( false, intervals.empty() );
236 BOOST_CHECK_EQUAL( 2u, intervals.size() );
8d2b7645 237
9fe0853b
TJ
238 BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
239 BOOST_CHECK_EQUAL( 20u, intervals.front().upper_bound() );
8d2b7645 240
9fe0853b
TJ
241 BOOST_CHECK_EQUAL( 40u, intervals.back().lower_bound() );
242 BOOST_CHECK_EQUAL( 100u, intervals.back().upper_bound() );
243 BOOST_CHECK_EQUAL( false, intervals.front().changed() );
244 BOOST_CHECK_EQUAL( true, intervals.back().changed() );
245} // eo SubIntervalsSplit1()
8d2b7645
TJ
246
247
9fe0853b
TJ
248BOOST_AUTO_TEST_CASE(SubIntervalsCutFront)
249{
250 Intervals intervals;
8d2b7645 251
9fe0853b
TJ
252 intervals.add( Interval(10, 100) );
253 intervals.sub( Interval(10, 20) );
8d2b7645 254
9fe0853b
TJ
255 BOOST_CHECK_EQUAL( false, intervals.empty() );
256 BOOST_CHECK_EQUAL( 1u, intervals.size() );
8d2b7645 257
9fe0853b
TJ
258 BOOST_CHECK_EQUAL( 20u, intervals.front().lower_bound() );
259 BOOST_CHECK_EQUAL( 100u, intervals.front().upper_bound() );
260 BOOST_CHECK_EQUAL( true, intervals.front().changed() );
261} // eo SubIntervalsCutFront()
8d2b7645
TJ
262
263
9fe0853b
TJ
264BOOST_AUTO_TEST_CASE(SubIntervalsCutBack)
265{
266 Intervals intervals;
8d2b7645 267
9fe0853b
TJ
268 intervals.add( Interval(10, 100) );
269 intervals.sub( Interval(87, 100) );
8d2b7645 270
9fe0853b
TJ
271 BOOST_CHECK_EQUAL( false, intervals.empty() );
272 BOOST_CHECK_EQUAL( 1u, intervals.size() );
8d2b7645 273
9fe0853b
TJ
274 BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
275 BOOST_CHECK_EQUAL( 87u, intervals.front().upper_bound() );
276 BOOST_CHECK_EQUAL( true, intervals.front().changed() );
277} // eo SubIntervalsCutBack()
8d2b7645
TJ
278
279
280
9fe0853b
TJ
281BOOST_AUTO_TEST_CASE(SubIntervalsCutMore)
282{
283 Intervals intervals;
8d2b7645 284
9fe0853b
TJ
285 intervals.add( Interval( 10, 100) );
286 intervals.add( Interval(110, 200) );
287 intervals.add( Interval(210, 300) );
8d2b7645 288
9fe0853b
TJ
289 // this should remove the first 2 intervals and cut the third:
290 intervals.sub( Interval(8, 220) );
8d2b7645 291
9fe0853b
TJ
292 BOOST_CHECK_EQUAL( false, intervals.empty() );
293 BOOST_CHECK_EQUAL( 1u, intervals.size() );
8d2b7645 294
9fe0853b
TJ
295 BOOST_CHECK_EQUAL( 220u, intervals.front().lower_bound() );
296 BOOST_CHECK_EQUAL( 300u, intervals.front().upper_bound() );
297 BOOST_CHECK_EQUAL( true, intervals.front().changed() );
298} // eo SubIntervalsCutMore()
8d2b7645
TJ
299
300
9fe0853b
TJ
301BOOST_AUTO_TEST_CASE(IntervalComparisons)
302{
303 Intervals intervals1;
304 Intervals intervals2;
8d2b7645 305
9fe0853b 306 intervals1.add( Interval( 10, 120) );
8d2b7645 307
9fe0853b
TJ
308 intervals2.add( Interval( 10, 110 ) );
309 intervals2.add( Interval( 100, 120 ) );
8d2b7645 310
9fe0853b 311 BOOST_CHECK_EQUAL( 1u, intervals2.size() );
8d2b7645 312
9fe0853b
TJ
313 BOOST_CHECK( intervals1 == intervals2 );
314 BOOST_CHECK_EQUAL( true, intervals1.contains( intervals2 ));
315 BOOST_CHECK_EQUAL( true, intervals2.contains( intervals1 ));
8d2b7645 316
9fe0853b 317 intervals2.sub( Interval( 40, 50) );
8d2b7645 318
9fe0853b
TJ
319 BOOST_CHECK( intervals1 != intervals2 );
320 BOOST_CHECK_EQUAL( true, intervals1.contains( intervals2 ));
321 BOOST_CHECK_EQUAL( false, intervals2.contains( intervals1 ));
322} // eo IntervalComparisons()
8d2b7645 323
96d0be2e
TJ
324
325
9fe0853b
TJ
326BOOST_AUTO_TEST_CASE(MonotonicClock)
327{
328 long sec0, nsec0;
329 long sec1, nsec1;
96d0be2e 330
9fe0853b
TJ
331 bool res = monotonic_clock_gettime(sec0,nsec0);
332 BOOST_CHECK_EQUAL( true, res );
96d0be2e 333
9fe0853b
TJ
334 usleep(250000);
335 res= monotonic_clock_gettime(sec1,nsec1);
336 BOOST_CHECK_EQUAL( true, res);
96d0be2e 337
9fe0853b
TJ
338 long delta_sec = sec1 - sec0;
339 long delta_nsec= nsec1 - nsec0;
96d0be2e 340
9fe0853b 341 long delta_millisec= ( delta_nsec / 1000000L) + delta_sec * 1000L;
96d0be2e 342
9fe0853b
TJ
343 BOOST_CHECK( delta_millisec >= 250 - /*fuzz*/ 1);
344 BOOST_CHECK( delta_millisec < 300 );
345} // eo MonotonicClock()
96d0be2e 346
9fe0853b
TJ
347BOOST_AUTO_TEST_CASE(WeekInvalid)
348{
349 Week week("99999999");
350 BOOST_CHECK_EQUAL(false, week.is_valid());
351 BOOST_CHECK_EQUAL(string(""), week.get_displaystring());
352}
8047e088 353
9fe0853b
TJ
354BOOST_AUTO_TEST_CASE(WeekDisplayString1)
355{
356 Week week("");
357 BOOST_CHECK_EQUAL(true, week.is_valid());
358 BOOST_CHECK_EQUAL(string(""), week.get_displaystring());
359}
8047e088 360
9fe0853b
TJ
361BOOST_AUTO_TEST_CASE(WeekDisplayString2)
362{
363 Week week("0123456");
364 BOOST_CHECK_EQUAL(true, week.is_valid());
365 BOOST_CHECK_EQUAL(string("Mon-Sun"), week.get_displaystring());
366}
8047e088 367
9fe0853b
TJ
368BOOST_AUTO_TEST_CASE(WeekDisplayString3)
369{
370 Week week("123456");
371 BOOST_CHECK_EQUAL(true, week.is_valid());
372 BOOST_CHECK_EQUAL(string("Mon-Sat"), week.get_displaystring());
373}
8047e088 374
9fe0853b
TJ
375BOOST_AUTO_TEST_CASE(WeekDisplayString4)
376{
377 Week week("012345");
378 BOOST_CHECK_EQUAL(true, week.is_valid());
379 BOOST_CHECK_EQUAL(string("Mon-Fri, Sun"), week.get_displaystring());
380}
8047e088 381
9fe0853b
TJ
382BOOST_AUTO_TEST_CASE(WeekDisplayString5)
383{
384 Week week("1256");
385 BOOST_CHECK_EQUAL(true, week.is_valid());
386 BOOST_CHECK_EQUAL(string("Mon, Tue, Fri, Sat"), week.get_displaystring());
387}
8047e088 388
9fe0853b
TJ
389BOOST_AUTO_TEST_CASE(WeekDisplayString6)
390{
391 Week week("0246");
392 BOOST_CHECK_EQUAL(true, week.is_valid());
393 BOOST_CHECK_EQUAL(string("Tue, Thu, Sat, Sun"), week.get_displaystring());
394}
96d0be2e 395
9fe0853b
TJ
396BOOST_AUTO_TEST_CASE(WeekDisplayString7)
397{
398 Week week("135");
399 BOOST_CHECK_EQUAL(true, week.is_valid());
400 BOOST_CHECK_EQUAL(string("Mon, Wed, Fri"), week.get_displaystring());
401}
8047e088 402
9fe0853b
TJ
403BOOST_AUTO_TEST_CASE(WeekDisplayString8)
404{
405 Week week("15");
406 BOOST_CHECK_EQUAL(true, week.is_valid());
407 BOOST_CHECK_EQUAL(string("Mon, Fri"), week.get_displaystring());
408}
8047e088 409
9fe0853b
TJ
410BOOST_AUTO_TEST_CASE(WeekDisplayString9)
411{
412 Week week("06");
413 BOOST_CHECK_EQUAL(true, week.is_valid());
414 BOOST_CHECK_EQUAL(string("Sat, Sun"), week.get_displaystring());
415}
8047e088 416
9fe0853b
TJ
417BOOST_AUTO_TEST_CASE(WeekDisplayString10)
418{
419 Week week("056");
420 BOOST_CHECK_EQUAL(true, week.is_valid());
421 BOOST_CHECK_EQUAL(string("Fri-Sun"), week.get_displaystring());
422}
8047e088 423
9fe0853b
TJ
424BOOST_AUTO_TEST_CASE(WeekDisplayString11)
425{
426 Week week("0");
427 BOOST_CHECK_EQUAL(true, week.is_valid());
428 BOOST_CHECK_EQUAL(string("Sun"), week.get_displaystring());
429}
8047e088 430
9fe0853b
TJ
431BOOST_AUTO_TEST_CASE(WeekDisplayString12)
432{
433 Week week("6");
434 BOOST_CHECK_EQUAL(true, week.is_valid());
435 BOOST_CHECK_EQUAL(string("Sat"), week.get_displaystring());
436}
8047e088 437
9fe0853b
TJ
438BOOST_AUTO_TEST_CASE(WeekDisplayString13)
439{
440 Week week("123");
441 BOOST_CHECK_EQUAL(true, week.is_valid());
442 BOOST_CHECK_EQUAL(string("Mon-Wed"), week.get_displaystring());
443}
8d2b7645 444
532d6b3a
TJ
445BOOST_AUTO_TEST_CASE(FormatFullTime)
446{
447 time_t seconds = 1318844005;
448
449 BOOST_CHECK_EQUAL("17.10.2011 11:33", format_full_time(seconds));
450}
451
dad9e26f
GE
452BOOST_AUTO_TEST_CASE(DateToSeconds1)
453{
454 // no DST
455 BOOST_CHECK_EQUAL(1325372400, date_to_seconds("2012-01-01"));
456}
457
458BOOST_AUTO_TEST_CASE(DateToSeconds2)
459{
460 // DST
461 BOOST_CHECK_EQUAL(1341093600, date_to_seconds("2012-07-01"));
462}
463
464
9fe0853b 465BOOST_AUTO_TEST_SUITE_END()