欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

testlocal_time_input_facet.cpp

Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
CPP
字号:
/* Copyright (c) 2005 CrystalClear Software, Inc. * 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, Bart Garst * $Date: 2008-02-27 15:00:24 -0500 (Wed, 27 Feb 2008) $ */#include "boost/date_time/local_time/local_time.hpp"#include "boost/date_time/testfrmwk.hpp"#include <iostream>#include <sstream>#include <string>// for tests that are expected to fail and throw exceptionstemplate<class temporal_type, class exception_type>bool failure_test(temporal_type component,                  const std::string& input,                  exception_type /*except*/,                  boost::local_time::local_time_input_facet* facet){  using namespace boost::local_time;  bool result = false;  std::istringstream iss(input);  iss.exceptions(std::ios_base::failbit); // turn on exceptions  iss.imbue(std::locale(std::locale::classic(), facet));  try {    iss >> component;  }  catch(exception_type e) {    std::cout << "Expected exception caught: \""               << e.what() << "\"" << std::endl;    result = iss.fail(); // failbit must be set to pass test  }  catch(...) {    result = false;  }  return result;}// for tests that are expected to fail quietlytemplate<class temporal_type>bool failure_test(temporal_type component,                  const std::string& input,                  boost::local_time::local_time_input_facet* facet){  using namespace boost::local_time;  std::istringstream iss(input);  /* leave exceptions turned off   * iss.exceptions(std::ios_base::failbit); */  iss.imbue(std::locale(std::locale::classic(), facet));  try {    iss >> component;  }  catch(...) {    std::cout << "Caught unexpected exception" << std::endl;    return false;  }  return iss.fail(); // failbit must be set to pass test}int main() {  using namespace boost::gregorian;  using namespace boost::posix_time;  using namespace boost::local_time;  time_zone_ptr null_zone;  local_date_time ldt1(not_a_date_time, null_zone);  // verify wide stream works, thorough tests done in narrow stream#if !defined(BOOST_NO_STD_WSTRING)  {    std::wstringstream ws;    ws.str(L"2005-Feb-15 12:15:00 EST-05EDT,M4.1.0,M10.5.0");    ws >> ldt1;    check("Wide stream, Eastern US, daylight savings, winter, minimal input",          ldt1.local_time() == ptime(date(2005,2,15), time_duration(12,15,0)));    check("Wide stream, Eastern US, daylight savings, winter, minimal input",          ldt1.utc_time() == ptime(date(2005,2,15), time_duration(17,15,0)));    check("Wide stream, Eastern US, daylight savings, winter, minimal input", !ldt1.is_dst());    ws.str(L"");    wlocal_time_input_facet* wfacet = new wlocal_time_input_facet(L"%m/%d/%y %ZP");    std::locale loc(std::locale::classic(), wfacet);    ws.imbue(loc);    ws.str(L"10/31/04 PST-08PDT,M4.1.0,M10.5.0"); // midnight on end transition day, still in dst    ws >> ldt1;    std::wcout << ldt1.local_time() << std::endl;    check("Wide stream, Eastern US, daylight savings, winter, custom format",          ldt1.local_time() == ptime(date(2004,10,31), time_duration(0,0,0)));    check("Wide stream, Eastern US, daylight savings, winter, custom format",          ldt1.utc_time() == ptime(date(2004,10,31), time_duration(7,0,0)));    check("Wide stream, Eastern US, daylight savings, winter, custom format", ldt1.is_dst());  }#endif // BOOST_NO_STD_WSTRING  std::stringstream ss;  ss.str("2005-Feb-25 12:15:00 EST-05EDT,M4.1.0,M10.5.0");  ss >> ldt1;  check("Eastern US, daylight savings, winter, minimal input",        ldt1.local_time() == ptime(date(2005,2,25), time_duration(12,15,0)));  check("Eastern US, daylight savings, winter, minimal input",        ldt1.utc_time() == ptime(date(2005,2,25), time_duration(17,15,0)));  check("Eastern US, daylight savings, winter, minimal input", !ldt1.is_dst());  ss.str("");    ss.str("2005-Aug-25 12:15:00 EST-05EDT,M4.1.0,M10.5.0");  ss >> ldt1;  check("Eastern US, daylight savings, summer, minimal input",        ldt1.local_time() == ptime(date(2005,8,25), time_duration(12,15,0)));  check("Eastern US, daylight savings, summer, minimal input",        ldt1.utc_time() == ptime(date(2005,8,25), time_duration(16,15,0)));  check("Eastern US, daylight savings, summer, minimal input", ldt1.is_dst());  ss.str("");    ss.str("2005-Apr-03 01:15:00 EST-05EDT,M4.1.0,M10.5.0");  ss >> ldt1;  check("Eastern US, daylight savings, transition point", !ldt1.is_dst());  ldt1 += hours(1);  check("Eastern US, daylight savings, transition point", ldt1.is_dst());  ss.str("");  ss.str("2005-Apr-03 01:15:00 EST-05EDT,93,303");  ss >> ldt1;  check("Eastern US, daylight savings, transition point", !ldt1.is_dst());  ldt1 += hours(1);  check("Eastern US, daylight savings, transition point", ldt1.is_dst());  ss.str("");    ss.str("2005-Oct-30 00:15:00 EST-05EDT,M4.1.0,M10.5.0");  ss >> ldt1;  check("Eastern US, daylight savings, transition point", ldt1.is_dst());  ldt1 += hours(1);  check("Eastern US, daylight savings, transition point", ldt1.is_dst());  ldt1 += hours(1);  check("Eastern US, daylight savings, transition point", !ldt1.is_dst());  ss.str("");  ss.str("2005-Oct-30 00:15:00 EST-05EDT,93,303");  ss >> ldt1;  check("Eastern US, daylight savings, transition point", ldt1.is_dst());  ldt1 += hours(1);  check("Eastern US, daylight savings, transition point", ldt1.is_dst());  ldt1 += hours(1);  check("Eastern US, daylight savings, transition point", !ldt1.is_dst());  ss.str("");    ss.str("2005-Aug-25 12:15:00 MST-07");  ss >> ldt1;  check("Mountain US, no daylight savings",        ldt1.local_time() == ptime(date(2005,8,25), time_duration(12,15,0)));  check("Mountain US, no daylight savings",        ldt1.utc_time() == ptime(date(2005,8,25), time_duration(19,15,0)));  check("Mountain US, no daylight savings", !ldt1.is_dst());  ss.str("");  // insure input & output formats match  local_time_facet* out_facet =     new local_time_facet(local_time_input_facet::default_time_input_format);  std::locale loc(std::locale::classic(), out_facet);  ss.imbue(loc);  time_zone_ptr syd_tz(new posix_time_zone("EST+10EST,M10.5.0,M3.5.0/03:00"));  ptime pt(date(2005,6,12), hours(0));  local_date_time ldt2(pt, syd_tz);  ss << ldt2;  ss >> ldt1;  check("Output as input makes match", ldt1 == ldt2);  check("Output as input makes match",       ldt1.zone()->dst_local_start_time(2004) == ldt2.zone()->dst_local_start_time(2004));  ss.str("");    time_zone_ptr f_tz(new posix_time_zone("FST+03FDT,90,300"));  ldt2 = local_date_time(ptime(date(2005,6,12), hours(0)), f_tz);  ss << ldt2;  ss >> ldt1;  check("Output as input makes match", ldt1 == ldt2);  check("Output as input makes match",       ldt1.zone()->dst_local_start_time(2004) == ldt2.zone()->dst_local_start_time(2004));  ss.str("");  // missing input & wrong format tests  ss.str("2005-Oct-30 00:15:00");  ss >> ldt1;  check("Missing time_zone spec makes UTC", ldt1.zone_as_posix_string() == std::string("UTC+00"));  check("Missing time_zone spec makes UTC", ldt1.utc_time() == ldt1.local_time());  ss.str("");  {    std::istringstream iss("2005-Aug-25 12:15:00 MST-07");    local_time_input_facet* f = new local_time_input_facet("%Y-%b-%d %H:%M:%S %z");    std::locale loc(std::locale::classic(), f);    iss.imbue(loc);    iss >> ldt1;    check("Wrong format flag makes UTC", ldt1.zone_as_posix_string() == std::string("UTC+00"));    check("Wrong format flag makes UTC", ldt1.utc_time() == ldt1.local_time());  }     // failure tests: (posix_time_zone) bad_offset, bad_adjustment,   // (local_date_time) ambiguous_result, time_label_invalid,   // time/date failures already tested  ambiguous_result amb_ex("default");  time_label_invalid inv_ex("default");  check("Failure test ambiguous time label (w/exceptions)",         failure_test(ldt1,                     "2005-Oct-30 01:15:00 EST-05EDT,M4.1.0,M10.5.0",                     amb_ex,                      new local_time_input_facet()));  check("Failure test ambiguous time label (no exceptions)",         failure_test(ldt1,                     "2005-Oct-30 01:15:00 EST-05EDT,M4.1.0,M10.5.0",                     new local_time_input_facet()));  check("Failure test ambiguous time label (w/exceptions)",         failure_test(ldt1,                     "2005-Oct-30 01:15:00 EST-05EDT,93,303",                     amb_ex,                      new local_time_input_facet()));  check("Failure test ambiguous time label (no exceptions)",         failure_test(ldt1,                     "2005-Oct-30 01:15:00 EST-05EDT,93,303",                     new local_time_input_facet()));  check("Failure test invalid time label (w/exceptions)",         failure_test(ldt1,                     "2005-Apr-03 02:15:00 EST-05EDT,M4.1.0,M10.5.0",                     inv_ex,                      new local_time_input_facet()));  check("Failure test invalid time label (no exceptions)",         failure_test(ldt1,                     "2005-Apr-03 02:15:00 EST-05EDT,M4.1.0,M10.5.0",                     new local_time_input_facet()));  check("Failure test invalid time label (w/exceptions)",         failure_test(ldt1,                     "2005-Apr-03 02:15:00 EST-05EDT,93,303",                     inv_ex,                      new local_time_input_facet()));  check("Failure test invalid time label (no exceptions)",         failure_test(ldt1,                     "2005-Apr-03 02:15:00 EST-05EDT,93,303",                     new local_time_input_facet()));  return printTestStats();}

⌨️ 快捷键说明

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