2 The software in this package is distributed under the GNU General
3 Public License version 2 (with a special exception described below).
5 A copy of GNU General Public License (GPL) is included in this distribution,
6 in the file COPYING.GPL.
8 As a special exception, if other files instantiate templates or use macros
9 or inline functions from this file, or you compile this file and link it
10 with other works to produce a work based on this file, this file
11 does not by itself cause the resulting work to be covered
12 by the GNU General Public License.
14 However the source code for this file must still be made available
15 in accordance with section (3) of the GNU General Public License.
17 This exception does not invalidate any other reasons why a work based
18 on this file might be covered by the GNU General Public License.
21 * @brief unit test for time related functions.
23 * @copyright Copyright © 2001-2008 by Intra2net AG
27 #define BOOST_TEST_DYN_LINK
28 #include <boost/test/unit_test.hpp>
30 #include <timefunc.hxx>
31 #include <filefunc.hxx>
38 using namespace I2n::Time;
40 class TestTimeFuncFixture
43 typedef std::list< std::string > StringList;
44 std::set<std::string> used_check_files;
46 std::string get_check_file_path(std::string tag)
49 result= "__unittest__" + tag + ".dat";
50 used_check_files.insert(result);
52 } // eo get_check_file_path
54 void remove_check_files()
56 for (std::set<std::string>::iterator it= used_check_files.begin();
57 it != used_check_files.end();
60 std::string filepath(*it);
61 if (path_exists(filepath))
67 used_check_files.clear();
68 } // eo remove_check_files
75 ~TestTimeFuncFixture()
81 BOOST_FIXTURE_TEST_SUITE(TestTimeFunc, TestTimeFuncFixture)
83 BOOST_AUTO_TEST_CASE(AddIntervalsDisjoint)
87 intervals.add( Interval( 10, 100 ) );
88 intervals.add( Interval( 600, 620 ) );
90 BOOST_CHECK_EQUAL( false, intervals.empty() );
91 BOOST_CHECK_EQUAL( 2u, intervals.size() );
93 BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
94 BOOST_CHECK_EQUAL( 100u, intervals.front().upper_bound() );
96 BOOST_CHECK_EQUAL( 600u, intervals.back().lower_bound() );
97 BOOST_CHECK_EQUAL( 620u, intervals.back().upper_bound() );
98 } // eo AddIntervalsDisjoint()
102 BOOST_AUTO_TEST_CASE(AddIntervalsInclude)
106 intervals.add( Interval( 10, 100 ) );
107 intervals.add( Interval( 10, 80 ) );
109 BOOST_CHECK_EQUAL( false, intervals.empty() );
110 BOOST_CHECK_EQUAL( 1u, intervals.size() );
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()
119 BOOST_AUTO_TEST_CASE(AddIntervalsEmbrace)
123 intervals.add( Interval( 10, 100 ) );
124 intervals.add( Interval( 5, 120 ) );
126 BOOST_CHECK_EQUAL( false, intervals.empty() );
127 BOOST_CHECK_EQUAL( 1u, intervals.size() );
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()
136 BOOST_AUTO_TEST_CASE(AddIntervalsJoin1)
140 intervals.add( Interval( 10, 100 ) );
141 intervals.add( Interval( 60, 120 ) );
143 BOOST_CHECK_EQUAL( false, intervals.empty() );
144 BOOST_CHECK_EQUAL( 1u, intervals.size() );
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()
153 BOOST_AUTO_TEST_CASE(AddIntervalsJoin1b)
157 intervals.add( Interval( 10, 100 ) );
158 intervals.add( Interval( 100, 120 ) );
160 BOOST_CHECK_EQUAL( false, intervals.empty() );
161 BOOST_CHECK_EQUAL( 1u, intervals.size() );
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()
170 BOOST_AUTO_TEST_CASE(AddIntervalsJoin2)
174 intervals.add( Interval( 10, 100 ) );
175 intervals.add( Interval( 200, 250 ) );
177 BOOST_CHECK_EQUAL( false, intervals.empty() );
178 BOOST_CHECK_EQUAL( 2u, intervals.size() );
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() );
185 // now add the gap; the intervals should collapse to one covering all:
186 intervals.add( Interval(100, 200) );
188 BOOST_CHECK_EQUAL( false, intervals.empty() );
189 BOOST_CHECK_EQUAL( 1u, intervals.size() );
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()
198 BOOST_AUTO_TEST_CASE(SubIntervalsDisjoint)
202 intervals.add( Interval(10, 100) );
203 intervals.sub( Interval(0, 10) );
205 BOOST_CHECK_EQUAL( false, intervals.empty() );
206 BOOST_CHECK_EQUAL( 1u, intervals.size() );
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()
215 BOOST_AUTO_TEST_CASE(SubIntervalsExact)
219 intervals.add( Interval(10, 100) );
220 intervals.sub( Interval(10, 100) );
222 BOOST_CHECK_EQUAL( true, intervals.empty() );
223 BOOST_CHECK_EQUAL( 0u, intervals.size() );
224 } // eo SubIntervalsExact()
228 BOOST_AUTO_TEST_CASE(SubIntervalsSplit1)
232 intervals.add( Interval(10, 100) );
233 intervals.sub( Interval(20, 40) );
235 BOOST_CHECK_EQUAL( false, intervals.empty() );
236 BOOST_CHECK_EQUAL( 2u, intervals.size() );
238 BOOST_CHECK_EQUAL( 10u, intervals.front().lower_bound() );
239 BOOST_CHECK_EQUAL( 20u, intervals.front().upper_bound() );
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()
248 BOOST_AUTO_TEST_CASE(SubIntervalsCutFront)
252 intervals.add( Interval(10, 100) );
253 intervals.sub( Interval(10, 20) );
255 BOOST_CHECK_EQUAL( false, intervals.empty() );
256 BOOST_CHECK_EQUAL( 1u, intervals.size() );
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()
264 BOOST_AUTO_TEST_CASE(SubIntervalsCutBack)
268 intervals.add( Interval(10, 100) );
269 intervals.sub( Interval(87, 100) );
271 BOOST_CHECK_EQUAL( false, intervals.empty() );
272 BOOST_CHECK_EQUAL( 1u, intervals.size() );
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()
281 BOOST_AUTO_TEST_CASE(SubIntervalsCutMore)
285 intervals.add( Interval( 10, 100) );
286 intervals.add( Interval(110, 200) );
287 intervals.add( Interval(210, 300) );
289 // this should remove the first 2 intervals and cut the third:
290 intervals.sub( Interval(8, 220) );
292 BOOST_CHECK_EQUAL( false, intervals.empty() );
293 BOOST_CHECK_EQUAL( 1u, intervals.size() );
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()
301 BOOST_AUTO_TEST_CASE(IntervalComparisons)
303 Intervals intervals1;
304 Intervals intervals2;
306 intervals1.add( Interval( 10, 120) );
308 intervals2.add( Interval( 10, 110 ) );
309 intervals2.add( Interval( 100, 120 ) );
311 BOOST_CHECK_EQUAL( 1u, intervals2.size() );
313 BOOST_CHECK( intervals1 == intervals2 );
314 BOOST_CHECK_EQUAL( true, intervals1.contains( intervals2 ));
315 BOOST_CHECK_EQUAL( true, intervals2.contains( intervals1 ));
317 intervals2.sub( Interval( 40, 50) );
319 BOOST_CHECK( intervals1 != intervals2 );
320 BOOST_CHECK_EQUAL( true, intervals1.contains( intervals2 ));
321 BOOST_CHECK_EQUAL( false, intervals2.contains( intervals1 ));
322 } // eo IntervalComparisons()
326 BOOST_AUTO_TEST_CASE(MonotonicClock)
331 bool res = monotonic_clock_gettime(sec0,nsec0);
332 BOOST_CHECK_EQUAL( true, res );
335 res= monotonic_clock_gettime(sec1,nsec1);
336 BOOST_CHECK_EQUAL( true, res);
338 long delta_sec = sec1 - sec0;
339 long delta_nsec= nsec1 - nsec0;
341 long delta_millisec= ( delta_nsec / 1000000L) + delta_sec * 1000L;
343 BOOST_CHECK( delta_millisec >= 250 - /*fuzz*/ 1);
344 BOOST_CHECK( delta_millisec < 300 );
345 } // eo MonotonicClock()
347 BOOST_AUTO_TEST_CASE(WeekInvalid)
349 Week week("99999999");
350 BOOST_CHECK_EQUAL(false, week.is_valid());
351 BOOST_CHECK_EQUAL(string(""), week.get_displaystring());
354 BOOST_AUTO_TEST_CASE(WeekDisplayString1)
357 BOOST_CHECK_EQUAL(true, week.is_valid());
358 BOOST_CHECK_EQUAL(string(""), week.get_displaystring());
361 BOOST_AUTO_TEST_CASE(WeekDisplayString2)
363 Week week("0123456");
364 BOOST_CHECK_EQUAL(true, week.is_valid());
365 BOOST_CHECK_EQUAL(string("Mon-Sun"), week.get_displaystring());
368 BOOST_AUTO_TEST_CASE(WeekDisplayString3)
371 BOOST_CHECK_EQUAL(true, week.is_valid());
372 BOOST_CHECK_EQUAL(string("Mon-Sat"), week.get_displaystring());
375 BOOST_AUTO_TEST_CASE(WeekDisplayString4)
378 BOOST_CHECK_EQUAL(true, week.is_valid());
379 BOOST_CHECK_EQUAL(string("Mon-Fri, Sun"), week.get_displaystring());
382 BOOST_AUTO_TEST_CASE(WeekDisplayString5)
385 BOOST_CHECK_EQUAL(true, week.is_valid());
386 BOOST_CHECK_EQUAL(string("Mon, Tue, Fri, Sat"), week.get_displaystring());
389 BOOST_AUTO_TEST_CASE(WeekDisplayString6)
392 BOOST_CHECK_EQUAL(true, week.is_valid());
393 BOOST_CHECK_EQUAL(string("Tue, Thu, Sat, Sun"), week.get_displaystring());
396 BOOST_AUTO_TEST_CASE(WeekDisplayString7)
399 BOOST_CHECK_EQUAL(true, week.is_valid());
400 BOOST_CHECK_EQUAL(string("Mon, Wed, Fri"), week.get_displaystring());
403 BOOST_AUTO_TEST_CASE(WeekDisplayString8)
406 BOOST_CHECK_EQUAL(true, week.is_valid());
407 BOOST_CHECK_EQUAL(string("Mon, Fri"), week.get_displaystring());
410 BOOST_AUTO_TEST_CASE(WeekDisplayString9)
413 BOOST_CHECK_EQUAL(true, week.is_valid());
414 BOOST_CHECK_EQUAL(string("Sat, Sun"), week.get_displaystring());
417 BOOST_AUTO_TEST_CASE(WeekDisplayString10)
420 BOOST_CHECK_EQUAL(true, week.is_valid());
421 BOOST_CHECK_EQUAL(string("Fri-Sun"), week.get_displaystring());
424 BOOST_AUTO_TEST_CASE(WeekDisplayString11)
427 BOOST_CHECK_EQUAL(true, week.is_valid());
428 BOOST_CHECK_EQUAL(string("Sun"), week.get_displaystring());
431 BOOST_AUTO_TEST_CASE(WeekDisplayString12)
434 BOOST_CHECK_EQUAL(true, week.is_valid());
435 BOOST_CHECK_EQUAL(string("Sat"), week.get_displaystring());
438 BOOST_AUTO_TEST_CASE(WeekDisplayString13)
441 BOOST_CHECK_EQUAL(true, week.is_valid());
442 BOOST_CHECK_EQUAL(string("Mon-Wed"), week.get_displaystring());
445 BOOST_AUTO_TEST_CASE(FormatFullTime)
447 time_t seconds = 1318844005;
449 BOOST_CHECK_EQUAL("17.10.2011 11:33", format_full_time(seconds));
452 BOOST_AUTO_TEST_CASE(DateToSeconds1)
455 BOOST_CHECK_EQUAL(1325372400, date_to_seconds("2012-01-01"));
458 BOOST_AUTO_TEST_CASE(DateToSeconds2)
461 BOOST_CHECK_EQUAL(1341093600, date_to_seconds("2012-07-01"));
464 BOOST_AUTO_TEST_SUITE(Clock)
466 BOOST_AUTO_TEST_CASE(ctor_simple)
470 BOOST_CHECK_EQUAL(t.get_sec (), 0);
471 BOOST_CHECK_EQUAL(t.get_nsec (), 0);
474 BOOST_AUTO_TEST_CASE(ctor_type)
476 I2n::clock::Time t (I2n::clock::type::real);
478 BOOST_CHECK_EQUAL(t.get_sec (), 0);
479 BOOST_CHECK_EQUAL(t.get_nsec (), 0);
482 BOOST_AUTO_TEST_CASE(ctor_variant)
484 I2n::clock::Time t (I2n::clock::type::cpu,
485 I2n::clock::type::thread);
487 BOOST_CHECK_EQUAL(t.get_sec (), 0);
488 BOOST_CHECK_EQUAL(t.get_nsec (), 0);
491 BOOST_AUTO_TEST_CASE(initializer_now)
493 boost::optional<I2n::clock::Time> t = I2n::clock::now ();
496 BOOST_CHECK_GT(t->get_sec (), 0);
497 BOOST_CHECK_EQUAL(t->err, 0);
500 BOOST_AUTO_TEST_CASE(initializer_zero)
502 I2n::clock::Time stundenull = I2n::clock::zero ();
504 BOOST_CHECK_EQUAL(stundenull.get_sec (), 0);
505 BOOST_CHECK_EQUAL(stundenull.get_nsec (), 0);
506 BOOST_CHECK_EQUAL(stundenull.err, 0);
509 BOOST_AUTO_TEST_CASE(member_set_now)
513 BOOST_CHECK(t.set ());
515 BOOST_CHECK_NE(t.get_sec (), 0);
518 BOOST_AUTO_TEST_CASE(member_set_value)
524 BOOST_CHECK_EQUAL(t.get_sec (), 42);
525 BOOST_CHECK_EQUAL(t.get_nsec (), 42);
528 BOOST_AUTO_TEST_CASE(member_set_value_type)
532 t.set (42, 42, I2n::clock::type::real, I2n::clock::type::exact);
534 BOOST_CHECK_EQUAL(t.get_sec (), 42);
535 BOOST_CHECK_EQUAL(t.get_nsec (), 42);
538 BOOST_AUTO_TEST_CASE(member_add_parts)
545 BOOST_CHECK_EQUAL(t.get_sec (), 2229);
546 BOOST_CHECK_EQUAL(t.get_nsec (), 2229);
549 BOOST_AUTO_TEST_CASE(member_sub_parts)
556 BOOST_CHECK_EQUAL(t.get_sec (), 0);
557 BOOST_CHECK_EQUAL(t.get_nsec (), 999999999);
560 BOOST_AUTO_TEST_CASE(member_sub_Time)
570 BOOST_CHECK_EQUAL(t1.get_sec (), 0);
571 BOOST_CHECK_EQUAL(t1.get_nsec (), 42L);
574 BOOST_AUTO_TEST_CASE(member_diff)
576 static const time_t five = 5 * 365 * 24 * 3600;
578 I2n::clock::Time t1 (42, 1337);
579 I2n::clock::Time t2 = t1 + five;;
580 I2n::clock::Time t3 = t1 - five;;
582 BOOST_CHECK_EQUAL(t2, I2n::clock::Time ((time_t)42 + five, 1337));
583 BOOST_CHECK_EQUAL(t3, I2n::clock::Time ((time_t)42 - five, 1337));
584 BOOST_CHECK_EQUAL(t1.difference (t3), t3.difference (t1));
585 BOOST_CHECK_EQUAL(t3.difference (t3), t3.difference (t3));
588 BOOST_AUTO_TEST_CASE(op_copyassign)
593 BOOST_CHECK(t1.set ());
597 BOOST_CHECK_EQUAL(t1.get_sec (), t2.get_sec ());
598 BOOST_CHECK_EQUAL(t1.get_nsec (), t2.get_nsec ());
601 BOOST_AUTO_TEST_CASE(op_equal)
606 BOOST_CHECK(t1.set ());
609 BOOST_CHECK_EQUAL(t1, t2);
612 BOOST_AUTO_TEST_CASE(op_add_Time)
616 I2n::clock::Time tsum;
622 BOOST_CHECK_EQUAL(tsum.get_sec (), 3524);
623 BOOST_CHECK_EQUAL(tsum.get_nsec (), 3524);
626 BOOST_AUTO_TEST_CASE(op_add_Time_carry)
630 I2n::clock::Time tsum;
633 t2.set (1300, 37L * 1000 * 1000 * 1000 + 1337);
637 BOOST_CHECK_EQUAL(tsum.get_sec (), 3524);
638 BOOST_CHECK_EQUAL(tsum.get_nsec (), 3524);
641 BOOST_AUTO_TEST_CASE(op_add_time_t)
643 I2n::clock::Time t1 (2187, 2187);
645 I2n::clock::Time tsum;
649 BOOST_CHECK_EQUAL(tsum.get_sec (), 3524);
650 BOOST_CHECK_EQUAL(tsum.get_nsec (), 2187);
653 BOOST_AUTO_TEST_CASE(op_add_time_t_external)
656 I2n::clock::Time t2 (2187, 2187);
657 I2n::clock::Time tsum;
661 BOOST_CHECK_EQUAL(tsum.get_sec (), 3524);
662 BOOST_CHECK_EQUAL(tsum.get_nsec (), 2187);
665 BOOST_AUTO_TEST_CASE(op_incr_Time)
667 I2n::clock::Time t1 (2187, 2187);
668 I2n::clock::Time t2 (1337, 1337);
672 BOOST_CHECK_EQUAL(t1.get_sec (), 3524);
673 BOOST_CHECK_EQUAL(t1.get_nsec (), 3524);
676 BOOST_AUTO_TEST_CASE(op_incr_time_t)
678 I2n::clock::Time t1 (2187, 2187);
683 BOOST_CHECK_EQUAL(t1.get_sec (), 3524);
684 BOOST_CHECK_EQUAL(t1.get_nsec (), 2187);
687 BOOST_AUTO_TEST_CASE(op_subtract_Time)
691 I2n::clock::Time tdiff;
697 BOOST_CHECK_EQUAL(tdiff.get_sec (), 850);
698 BOOST_CHECK_EQUAL(tdiff.get_nsec (), 850);
701 BOOST_AUTO_TEST_CASE(op_subtract_time_t)
703 I2n::clock::Time t1 (2187, 2187);
705 I2n::clock::Time tdiff;
709 BOOST_CHECK_EQUAL(tdiff.get_sec (), 850);
710 BOOST_CHECK_EQUAL(tdiff.get_nsec (), 2187);
713 BOOST_AUTO_TEST_CASE(op_subtract_time_t_external)
716 I2n::clock::Time t2 (2187, 2187);
717 I2n::clock::Time tdiff;
721 BOOST_CHECK_EQUAL(tdiff.get_sec (), -851);
722 BOOST_CHECK_EQUAL(tdiff.get_nsec (), 999997813);
725 BOOST_AUTO_TEST_CASE(op_decr_Time)
727 I2n::clock::Time t1 (2187, 2187);
728 I2n::clock::Time t2 (1337, 1337);
732 BOOST_CHECK_EQUAL(t1.get_sec (), 850);
733 BOOST_CHECK_EQUAL(t1.get_nsec (), 850);
736 BOOST_AUTO_TEST_CASE(op_decr_time_t)
738 I2n::clock::Time t1 (2187, 2187);
743 BOOST_CHECK_EQUAL(t1.get_sec (), 850);
744 BOOST_CHECK_EQUAL(t1.get_nsec (), 2187);
747 BOOST_AUTO_TEST_CASE(op_mult_scale)
755 BOOST_CHECK_EQUAL(t2.get_sec (), 42);
756 BOOST_CHECK_EQUAL(t2.get_nsec (), 42);
759 BOOST_AUTO_TEST_CASE(op_mult_mutate)
761 I2n::clock::Time t1 ( 42, 42);
762 I2n::clock::Time t2 (1337, 0);
767 BOOST_CHECK_EQUAL(t1.get_sec (), 84);
768 BOOST_CHECK_EQUAL(t1.get_nsec (), 84);
769 BOOST_CHECK_EQUAL(t2.get_sec (), -13370);
772 BOOST_AUTO_TEST_CASE(op_mult_scale_carry)
777 t1.set (1, 500 * 1000 * 1000);
780 BOOST_CHECK_EQUAL(t2.get_sec (), 4);
781 BOOST_CHECK_EQUAL(t2.get_nsec (), 500 * 1000 * 1000);
784 BOOST_AUTO_TEST_CASE(op_equals)
792 BOOST_CHECK_EQUAL(t1, t2);
795 BOOST_AUTO_TEST_CASE(compare_equal)
803 BOOST_CHECK_EQUAL(I2n::clock::compare (t1, t2), 0);
806 BOOST_AUTO_TEST_CASE(compare_equal_type)
808 I2n::clock::Time t1 (42, 42, I2n::clock::type::real);
809 I2n::clock::Time t2 (42, 42, I2n::clock::type::cpu);
810 I2n::clock::Time t3 (42, 0, I2n::clock::type::real);
811 I2n::clock::Time t4 (42, 42, I2n::clock::type::real);
813 BOOST_CHECK_NE(t1, t2);
814 BOOST_CHECK_NE(t1, t3);
815 BOOST_CHECK_EQUAL(t1, t4);
818 BOOST_AUTO_TEST_CASE(compare_ne_sec)
826 BOOST_CHECK_EQUAL(I2n::clock::compare (t1, t2), -1);
827 BOOST_CHECK_EQUAL(I2n::clock::compare (t2, t1), 1);
830 BOOST_AUTO_TEST_CASE(compare_ne_nsec)
838 BOOST_CHECK_EQUAL(I2n::clock::compare (t1, t2), -1);
839 BOOST_CHECK_EQUAL(I2n::clock::compare (t2, t1), 1);
842 BOOST_AUTO_TEST_CASE(compare_ne_both)
850 BOOST_CHECK_EQUAL(I2n::clock::compare (t1, t2), 1);
851 BOOST_CHECK_EQUAL(I2n::clock::compare (t2, t1), -1);
854 BOOST_AUTO_TEST_CASE(op_ineq_sec)
856 I2n::clock::Time t1 (1337);
857 I2n::clock::Time t2 (2187);
859 BOOST_CHECK_LT(t1, t2);
860 BOOST_CHECK_GT(t2, t1);
863 BOOST_AUTO_TEST_CASE(op_ineq_nsec)
865 I2n::clock::Time t1 (1337, 23);
866 I2n::clock::Time t2 (1337, 42);
868 BOOST_CHECK_LT(t1, t2);
869 BOOST_CHECK_GT(t2, t1);
872 BOOST_AUTO_TEST_CASE(op_ineq_both)
874 I2n::clock::Time t1 (2187, 23);
875 I2n::clock::Time t2 (1337, 42);
877 BOOST_CHECK_LT(t2, t1);
878 BOOST_CHECK_GT(t1, t2);
881 BOOST_AUTO_TEST_CASE(op_eq_time_t)
883 boost::optional<I2n::clock::Time> t1 = I2n::clock::now ();
884 const time_t t2 = time (NULL); /* race here */
888 BOOST_CHECK_NE(*t1, t2);
889 BOOST_CHECK_LT(*t1, t2);
890 BOOST_CHECK_GT( t2, *t1);
893 BOOST_AUTO_TEST_CASE(containers_list)
895 std::list<I2n::clock::Time> ts;
897 ts.push_back (I2n::clock::zero ());
898 ts.push_back (I2n::clock::zero ());
900 BOOST_CHECK_EQUAL(ts.size (), 2);
903 BOOST_AUTO_TEST_CASE(containers_vec)
905 std::vector<I2n::clock::Time> ts;
907 ts.push_back (I2n::clock::zero ());
908 ts.push_back (I2n::clock::zero ());
910 BOOST_CHECK_EQUAL(ts.size (), 2);
913 BOOST_AUTO_TEST_CASE(containers_set)
915 std::set<I2n::clock::Time> ts;
917 ts.insert (I2n::clock::zero ());
918 ts.insert (I2n::clock::Time (42, 2187));
919 ts.insert (I2n::clock::zero ());
921 BOOST_CHECK_EQUAL(ts.size (), 2);
924 BOOST_AUTO_TEST_SUITE_END() /* [Clock] */
926 BOOST_AUTO_TEST_SUITE_END()