testperiod.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 154 行

CPP
154
字号
/* Copyright (c) 2002,2003 CrystalClear Software, Inc. * Use, modification and distribution is subject to the  * Boost Software License, Version 1.0. (See accompanying * file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) * Author: Jeff Garland  */#include "boost/date_time/gregorian/gregorian.hpp"#include "boost/date_time/testfrmwk.hpp"#include <iostream>int main() {  using namespace boost::gregorian;  date d1(2000,Jan,1),d2(2000,Jan,4);  date d3 = d2;  check("assignment", d3 == d2);  date_period p1(d1,d2);  date_period p2(d1,date_duration(3));  check("construction and ==", p1 == p2);  check("begin",  p1.begin()  == d1);  check("last",   p1.last()   == d2-date_duration(1) );  check("end",    p1.end()    == d2);  check("length", p2.length() == date_duration(3));  check("contains begin", p1.contains(d1));  check("contains last", !p1.contains(d2));  date_period p3(date(2000,Jan,4),date(2000,Feb,1));  check("operator== not equal case", !(p1 == p3));  check("less than order", p1 < p3);  check("greater than order", p3 > p1);  check("not equal", p3 != p1);  check("intersects with myself", p1.intersects(p1));  check("not intersects", !(p1.intersects(p3)));  check("not intersects", !(p3.intersects(p1)));  date_period p4(date(1999,Dec,1), d2);  check("intersects", p1.intersects(p4));  check("intersects", p4.intersects(p1));  date_period p5(date(1999,Dec,1), date(2000,Dec,31));  check("intersects", p1.intersects(p5));  check("intersects", p5.intersects(p1));  date_period p6(date(2000,Jan,1),date(2000,Dec,31));  check("contains period", p5.contains(p6));  check("contains period equal", p6.contains(p6));  check("not contains period", !p6.contains(p5));    //shift test  date_duration fourDays(4);  p1.shift(fourDays); //from 2000-Jan-01--2000-Jan-04  date_period shifted(date(2000,Jan,5),date(2000,Jan,8));  //   std::cout << to_string(p1.begin()) <<"--"   //             << to_string(p1.last()) << std::endl;  check("shift", p1 == shifted);  //expand the date period    date_period p10(date(2000,Jan,5),date(2000,Jan,8));  p10.expand(days(2)); //from 2000-Jan-01--2000-Jan-04  check("expand", p10 == date_period(date(2000,Jan,3),date(2000,Jan,10)));  //intersection tests  date_period i1(date(2000,Jan,5), date(2000,Jan,10));  date_period i2(date(2000,Jan,1), date(2000,Jan,7));  date_period r1(date(2000,Jan,5), date(2000,Jan,7));  //case 1    [5 -10) intersect [1-7) ->  [5-7)  std::cout << to_simple_string(i1.intersection(i2)) << std::endl;  check("intersect case1", i1.intersection(i2) == r1);  check("intersect case1", i2.intersection(i1) == r1);  //case 2    [5 -10) intersect [1-15) -> [5-10)  date_period i3(date(2000,Jan,1), date(2000,Jan,15));  check("intersect case2", i1.intersection(i3) == i1);  check("intersect case2", i3.intersection(i1) == i1);  //case 3    [5-10) intersect [7-15)  -> [7-10)  date_period i4(date(2000,Jan,7), date(2000,Jan,10));  date_period r2(date(2000,Jan,7), date(2000,Jan,10));  check("intersect case3", i1.intersection(i4) == r2);  check("intersect case3", i4.intersection(i1) == r2);  //case 4    [5-10) intersect [6-9)  -> [6-9)  date_period i5(date(2000,Jan,6), date(2000,Jan,9));  check("intersect case4", i1.intersection(i5) == i5);  check("intersect case4", i5.intersection(i1) == i5);  //case 5 no intersection [1-7) intersect [7-10)  check("no intersection", i2.intersection(i4).is_null());  //case 1    [5 -10) merge [1-7) ->  [1-10)  date_period r3(date(2000,Jan,1), date(2000,Jan,10));  //  std::cout << to_iso_string(i1.merge(i2).begin()) << "/" << to_iso_string(i1.merge(i2).last()) << std::endl;  check("[5 -10) merge [1-7)  -> [1-10)", i1.merge(i2) == r3);  check("[1 -7)  merge [7-10) ->  null",  i2.merge(i4).is_null());  date_period r4(date(2000,Jan,5), date(2000,Jan,10));  check("[5 -10) merge [6-9)  -> [5-10)", i1.merge(i5) == r4);  check("[5-10) span [1-7)  -> [1-10)", i1.span(i2) == r3);  check("[1-7)  span [7-10) -> [1-10)", i2.span(i4) == r3);  check("[7-10)  span [1-7) -> [1-10)", i4.span(i2) == r3);  check("[1-15)  span [1-7) -> [1-15)", i3.span(i2) == i3);  date_period i6(date(2000,Jan,1), date(2000,Jan,2));  check("[1-2)  span [7-10) -> [1-10)", i6.span(i4) == r3);  check("[7-10)  span [1-2) -> [1-10)", i4.span(i6) == r3);    date bf_start(2000,Jan,5);  date bf_end(2000,Jan,10);  date bf_before(2000,Jan,4); //is before the period  date bf_after(2000,Jan,11);  //is really after  date bf_during(2000, Jan, 7);  date_period bfp1(bf_start, bf_end);  //[2000-Jan-5 - 2000-Jan10)    check("is before -- start boundary", !bfp1.is_before(bf_start));  check("is before -- end boundary", bfp1.is_before(bf_end));  check("is before -- last boundary", !bfp1.is_before(bfp1.last()));  check("is before -- false", !bfp1.is_before(bf_before));  check("is before -- false", !bfp1.is_before(bf_during));  check("is before -- true",  bfp1.is_before(bf_after));  check("is after -- start boundary", !bfp1.is_after(bf_start));  check("is after -- end boundary", !bfp1.is_after(bf_end));  check("is after -- last boundary", !bfp1.is_after(bfp1.last()));  check("is after -- true",   bfp1.is_after(bf_before));  check("is after -- false", !bfp1.is_after(bf_during));  check("is after -- false", !bfp1.is_after(bf_after));  //adjacent tests  /*          [5-----10)            adj1     [1----5)                   adj2             [7-----12)         adj3                     [12----15) adj4     [1-3)                      adj5             [7-9)              adj6  */    date_period adj1(date(2000,Jan,5), date(2000,Jan,10));  date_period adj2(date(2000,Jan,1), date(2000,Jan,5));  date_period adj3(date(2000,Jan,7), date(2000,Jan,12));  date_period adj4(date(2000,Jan,12), date(2000,Jan,15));  date_period adj5(date(2000,Jan,1),  date(2000,Jan,3));  date_period adj6(date(2000,Jan,7),  date(2000,Jan,9));    check("is adjacent -- adj1-->adj2", adj1.is_adjacent(adj2));  check("is adjacent -- adj2-->adj1", adj2.is_adjacent(adj1));  check("is adjacent -- adj1-->adj3", !adj1.is_adjacent(adj3));  check("is adjacent -- adj3-->adj1", !adj3.is_adjacent(adj1));  check("is adjacent -- adj1-->adj4", !adj1.is_adjacent(adj4));  check("is adjacent -- adj4-->adj1", !adj4.is_adjacent(adj1));  check("is adjacent -- adj1-->adj5", !adj1.is_adjacent(adj5));  check("is adjacent -- adj5-->adj1", !adj5.is_adjacent(adj1));  check("is adjacent -- adj1-->adj6", !adj1.is_adjacent(adj6));  check("is adjacent -- adj6-->adj1", !adj6.is_adjacent(adj1));    printTestStats();  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?