내 프로젝트에 Boost's datetime library을 사용하고 있습니다. 시간, 일, 월, 년 등의 기간 유형이 있다는 것을 발견했을 때 매우 기뻤습니다. 추가 한 항목에 따라 가치를 바꿉니다 (즉, 1 개월 전진하면 월 부분을 추가합니다). , 그것은 단지 30 일 또는 somesuch를 추가하지 않습니다). 나는 는 일 유형 개최이 속성을 생각했지만 생산에 넣어 전에 내 CppUnit을 단위 테스트를 볼 수 있습니다 위의 나는 ... 그것을 테스트local_date_time 수학을 잘못 입력 했습니까?
local_date_time t1(date(2010, 3, 14), hours(1), easternTime, false); // 1am on DST transition date
{
CPPUNIT_ASSERT_EQUAL(greg_year(2010), t1.local_time().date().year());
CPPUNIT_ASSERT_EQUAL(greg_month(3), t1.local_time().date().month());
CPPUNIT_ASSERT_EQUAL(greg_day(14), t1.local_time().date().day());
CPPUNIT_ASSERT_EQUAL(1L, t1.local_time().time_of_day().hours());
CPPUNIT_ASSERT_EQUAL(0L, t1.local_time().time_of_day().minutes());
CPPUNIT_ASSERT_EQUAL(0L, t1.local_time().time_of_day().seconds());
}
t1 += days(1); // the time in EST should now be 1am on the 15th
{
CPPUNIT_ASSERT_EQUAL(greg_year(2010), t1.local_time().date().year());
CPPUNIT_ASSERT_EQUAL(greg_month(3), t1.local_time().date().month());
CPPUNIT_ASSERT_EQUAL(greg_day(15), t1.local_time().date().day());
CPPUNIT_ASSERT_EQUAL(1L, t1.local_time().time_of_day().hours()); // fails, returns 2
CPPUNIT_ASSERT_EQUAL(0L, t1.local_time().time_of_day().minutes());
CPPUNIT_ASSERT_EQUAL(0L, t1.local_time().time_of_day().seconds());
}
을 결정했다. DST 전환으로 인해 EST에서 23 시간이되는 2010-03-14 이후 1 일의 논리적 인 날 대신 days()가 단지 24 시간 만 추가하면 예상되는 줄은 2로 표시되는 줄에서 실패합니다.
내가 잘못 했나요? 이거 버그 야? 이런 종류의 수학과 관련하여 도서관의 디자인 목표를 완전히 오해 했습니까? 대신 date_duration 객체 일을 추가
이것은 테스트 하네스 코드를 모두 써야하는 이유의 훌륭한 예입니다. 실제와 비교해 보겠습니다. – slf