]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/date_time/test/gregorian/testperiod.cpp
1 /* Copyright (c) 2002,2003 CrystalClear Software, Inc.
2 * Use, modification and distribution is subject to the
3 * Boost Software License, Version 1.0. (See accompanying
4 * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
8 #include "boost/date_time/gregorian/gregorian.hpp"
9 #include "../testfrmwk.hpp"
14 using namespace boost::gregorian
;
15 date
d1(2000,Jan
,1),d2(2000,Jan
,4);
17 check("assignment", d3
== d2
);
18 date_period
p1(d1
,d2
);
19 date_period
p2(d1
,date_duration(3));
20 check("construction and ==", p1
== p2
);
21 check("begin", p1
.begin() == d1
);
22 check("last", p1
.last() == d2
-date_duration(1) );
23 check("end", p1
.end() == d2
);
24 check("length", p2
.length() == date_duration(3));
25 check("contains begin", p1
.contains(d1
));
26 check("contains last", !p1
.contains(d2
));
27 date_period
p3(date(2000,Jan
,4),date(2000,Feb
,1));
28 check("operator== not equal case", !(p1
== p3
));
29 check("less than order", p1
< p3
);
30 check("greater than order", p3
> p1
);
31 check("not equal", p3
!= p1
);
32 check("intersects with myself", p1
.intersects(p1
));
33 check("not intersects", !(p1
.intersects(p3
)));
34 check("not intersects", !(p3
.intersects(p1
)));
35 date_period
p4(date(1999,Dec
,1), d2
);
36 check("intersects", p1
.intersects(p4
));
37 check("intersects", p4
.intersects(p1
));
38 date_period
p5(date(1999,Dec
,1), date(2000,Dec
,31));
39 check("intersects", p1
.intersects(p5
));
40 check("intersects", p5
.intersects(p1
));
41 date_period
p6(date(2000,Jan
,1),date(2000,Dec
,31));
42 check("contains period", p5
.contains(p6
));
43 check("contains period equal", p6
.contains(p6
));
44 check("not contains period", !p6
.contains(p5
));
47 date_duration
fourDays(4);
48 p1
.shift(fourDays
); //from 2000-Jan-01--2000-Jan-04
49 date_period
shifted(date(2000,Jan
,5),date(2000,Jan
,8));
50 // std::cout << to_string(p1.begin()) <<"--"
51 // << to_string(p1.last()) << std::endl;
52 check("shift", p1
== shifted
);
54 //expand the date period
55 date_period
p10(date(2000,Jan
,5),date(2000,Jan
,8));
56 p10
.expand(days(2)); //from 2000-Jan-01--2000-Jan-04
57 check("expand", p10
== date_period(date(2000,Jan
,3),date(2000,Jan
,10)));
60 date_period
i1(date(2000,Jan
,5), date(2000,Jan
,10));
61 date_period
i2(date(2000,Jan
,1), date(2000,Jan
,7));
62 date_period
r1(date(2000,Jan
,5), date(2000,Jan
,7));
63 //case 1 [5 -10) intersect [1-7) -> [5-7)
64 std::cout
<< i1
.intersection(i2
) << std::endl
;
65 check("intersect case1", i1
.intersection(i2
) == r1
);
66 check("intersect case1", i2
.intersection(i1
) == r1
);
67 //case 2 [5 -10) intersect [1-15) -> [5-10)
68 date_period
i3(date(2000,Jan
,1), date(2000,Jan
,15));
69 check("intersect case2", i1
.intersection(i3
) == i1
);
70 check("intersect case2", i3
.intersection(i1
) == i1
);
71 //case 3 [5-10) intersect [7-15) -> [7-10)
72 date_period
i4(date(2000,Jan
,7), date(2000,Jan
,10));
73 date_period
r2(date(2000,Jan
,7), date(2000,Jan
,10));
74 check("intersect case3", i1
.intersection(i4
) == r2
);
75 check("intersect case3", i4
.intersection(i1
) == r2
);
76 //case 4 [5-10) intersect [6-9) -> [6-9)
77 date_period
i5(date(2000,Jan
,6), date(2000,Jan
,9));
78 check("intersect case4", i1
.intersection(i5
) == i5
);
79 check("intersect case4", i5
.intersection(i1
) == i5
);
80 //case 5 no intersection [1-7) intersect [7-10)
81 check("no intersection", i2
.intersection(i4
).is_null());
83 //case 1 [5 -10) merge [1-7) -> [1-10)
84 date_period
r3(date(2000,Jan
,1), date(2000,Jan
,10));
85 // std::cout << to_iso_string(i1.merge(i2).begin()) << "/" << to_iso_string(i1.merge(i2).last()) << std::endl;
86 check("[5 -10) merge [1-7) -> [1-10)", i1
.merge(i2
) == r3
);
87 check("[1 -7) merge [7-10) -> null", i2
.merge(i4
).is_null());
88 date_period
r4(date(2000,Jan
,5), date(2000,Jan
,10));
89 check("[5 -10) merge [6-9) -> [5-10)", i1
.merge(i5
) == r4
);
91 check("[5-10) span [1-7) -> [1-10)", i1
.span(i2
) == r3
);
92 check("[1-7) span [7-10) -> [1-10)", i2
.span(i4
) == r3
);
93 check("[7-10) span [1-7) -> [1-10)", i4
.span(i2
) == r3
);
94 check("[1-15) span [1-7) -> [1-15)", i3
.span(i2
) == i3
);
96 date_period
i6(date(2000,Jan
,1), date(2000,Jan
,2));
97 check("[1-2) span [7-10) -> [1-10)", i6
.span(i4
) == r3
);
98 check("[7-10) span [1-2) -> [1-10)", i4
.span(i6
) == r3
);
101 date
bf_start(2000,Jan
,5);
102 date
bf_end(2000,Jan
,10);
103 date
bf_before(2000,Jan
,4); //is before the period
104 date
bf_after(2000,Jan
,11); //is really after
105 date
bf_during(2000, Jan
, 7);
106 date_period
bfp1(bf_start
, bf_end
); //[2000-Jan-5 - 2000-Jan10)
108 check("is before -- start boundary", !bfp1
.is_before(bf_start
));
109 check("is before -- end boundary", bfp1
.is_before(bf_end
));
110 check("is before -- last boundary", !bfp1
.is_before(bfp1
.last()));
111 check("is before -- false", !bfp1
.is_before(bf_before
));
112 check("is before -- false", !bfp1
.is_before(bf_during
));
113 check("is before -- true", bfp1
.is_before(bf_after
));
115 check("is after -- start boundary", !bfp1
.is_after(bf_start
));
116 check("is after -- end boundary", !bfp1
.is_after(bf_end
));
117 check("is after -- last boundary", !bfp1
.is_after(bfp1
.last()));
118 check("is after -- true", bfp1
.is_after(bf_before
));
119 check("is after -- false", !bfp1
.is_after(bf_during
));
120 check("is after -- false", !bfp1
.is_after(bf_after
));
131 date_period
adj1(date(2000,Jan
,5), date(2000,Jan
,10));
132 date_period
adj2(date(2000,Jan
,1), date(2000,Jan
,5));
133 date_period
adj3(date(2000,Jan
,7), date(2000,Jan
,12));
134 date_period
adj4(date(2000,Jan
,12), date(2000,Jan
,15));
135 date_period
adj5(date(2000,Jan
,1), date(2000,Jan
,3));
136 date_period
adj6(date(2000,Jan
,7), date(2000,Jan
,9));
138 check("is adjacent -- adj1-->adj2", adj1
.is_adjacent(adj2
));
139 check("is adjacent -- adj2-->adj1", adj2
.is_adjacent(adj1
));
140 check("is adjacent -- adj1-->adj3", !adj1
.is_adjacent(adj3
));
141 check("is adjacent -- adj3-->adj1", !adj3
.is_adjacent(adj1
));
142 check("is adjacent -- adj1-->adj4", !adj1
.is_adjacent(adj4
));
143 check("is adjacent -- adj4-->adj1", !adj4
.is_adjacent(adj1
));
144 check("is adjacent -- adj1-->adj5", !adj1
.is_adjacent(adj5
));
145 check("is adjacent -- adj5-->adj1", !adj5
.is_adjacent(adj1
));
146 check("is adjacent -- adj1-->adj6", !adj1
.is_adjacent(adj6
));
147 check("is adjacent -- adj6-->adj1", !adj6
.is_adjacent(adj1
));