]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/date_time/test/local_time/testtz_database.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / date_time / test / local_time / testtz_database.cpp
CommitLineData
7c673cae
FG
1/* Copyright (c) 2003-2005 CrystalClear Software, Inc.
2 * Subject to the Boost Software License, Version 1.0.
3 * (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
4 * Author: Jeff Garland, Bart Garst
5 * $Date$
6 */
7
8
9#include "../testfrmwk.hpp"
10#include "boost/date_time/gregorian/gregorian.hpp"
11#include "boost/date_time/posix_time/posix_time.hpp"
12#include "boost/date_time/local_time/custom_time_zone.hpp"
13#include "boost/date_time/local_time/local_time_types.hpp"
14#include "boost/date_time/local_time/tz_database.hpp"
15#include "boost/date_time/local_time/posix_time_zone.hpp"
16#include <iostream>
17
18bool run_bad_field_count_test();
19
20int main(){
21 using namespace boost::gregorian;
22 using namespace boost::posix_time;
23 using namespace boost::local_time;
24
25 /* NOTE: The testlocal_time_facet tests required full names
26 * be added to some of the date_time_zonespec.csv entries. The
27 * tests here also use those full names. Those entries are:
28 * Chicago, Denver, Los_Angeles, New_York, and Phoenix
29 * have all had full names added */
30
31 // run the exception tests first
32 try{
33 tz_database tz_db;
34 tz_db.load_from_file("missing_file.csv"); // file does not exist
b32b8144 35 }catch(data_not_accessible&){
7c673cae
FG
36 check("Caught Missing data file exception", true);
37 }catch(...){
38 check("Caught first unexpected exception", false);
39 }
40 check("Caught Bad field count exception", run_bad_field_count_test());
41
42 /* This test-file is usually run from either $BOOST_ROOT/status, or
43 * $BOOST_ROOT/libs/date_time/test. Therefore, the relative path
44 * to the data file this test depends on will be one of two
45 * possible paths.
46 *
47 * If the first attempt at opening the data file fails, an exception
48 * will be thrown. The handling of that exception consists of
49 * attempting to open it again but from a different location. If that
50 * also fails, we abort the test. */
51 tz_database tz_db;
52 try {
53 // first try to find the data file from the test dir
54 tz_db.load_from_file("../data/date_time_zonespec.csv");
b32b8144 55 }catch(data_not_accessible&) {
7c673cae
FG
56 // couldn't find the data file so assume we are being run from
57 // boost_root/status and try again
58 tz_db.load_from_file("../libs/date_time/data/date_time_zonespec.csv");
59 }catch(...) {
60 check("Cannot locate data file - aborting.", false);
61 return printTestStats();
62 }
63
64 time_zone_ptr bad_tz = tz_db.time_zone_from_region("Invalid/name");
65 check("Expected null pointer return", bad_tz == time_zone_ptr());
66
67 time_zone_ptr nyc_test = tz_db.time_zone_from_region("America/New_York");
68 check("nyc Valid pointer", nyc_test != time_zone_ptr() );
69 check("nyc Abbreviations",nyc_test->std_zone_abbrev() == std::string("EST"));
70 check("nyc Full Name", nyc_test->std_zone_name() == std::string("Eastern Standard Time"));
71 check("nyc Abbreviations",nyc_test->dst_zone_abbrev() == std::string("EDT"));
72 //std::cout << nyc_test->std_zone_name() << std::endl;
73 check("nyc Full Name", nyc_test->dst_zone_name() == std::string("Eastern Daylight Time"));
74 check("nyc GMT Offset", nyc_test->base_utc_offset() == hours(-5));
75 check("nyc DST Offset", nyc_test->dst_offset() == hours(1));
76 //std::cout << nyc_test->dst_local_start_time(2004) << std::endl;
77 check("nyc dst start", nyc_test->dst_local_start_time(2007) == ptime(date(2007, Mar, 11), hours(2)));
78 check("nyc dst end", nyc_test->dst_local_end_time(2007) == ptime(date(2007, Nov, 4), hours(2)));
79 check("nyc has dst", nyc_test->has_dst());
80
81 time_zone_ptr phx_test = tz_db.time_zone_from_region("America/Phoenix");
82 check("az Valid pointer", phx_test != time_zone_ptr() );
83 check("az Abbreviations",phx_test->std_zone_abbrev() == std::string("MST"));
84 check("az Full Name", phx_test->std_zone_name() == std::string("Mountain Standard Time"));
85 check("az Abbreviations", phx_test->dst_zone_abbrev() == std::string(""));
86 check("az Full Name", phx_test->dst_zone_name() == std::string(""));
87 check("az GMT Offset", phx_test->base_utc_offset() == hours(-7));
88 check("az DST Offset", phx_test->dst_offset() == hours(0));
89 //std::cout << phx_test->dst_local_start_time(2004) << std::endl;
90 check("az has dst", phx_test->has_dst() == false);
91
92 //Now add and retrieve a Posix tz spec from the database
93 time_zone_ptr eastern(new posix_time_zone("EST-05:00:00EDT+01:00:00,M4.1.0/02:00:00,M10.5.0/02:00:00"));
94 tz_db.add_record("United States/Eastern", eastern);
95 time_zone_ptr eastern_test = tz_db.time_zone_from_region("United States/Eastern");
96 check("eastern Valid pointer", eastern_test != time_zone_ptr() );
97 check("eastern Abbreviations",
98 eastern_test->std_zone_abbrev() == std::string("EST"));
99 check("eastern Abbreviations",
100 eastern_test->std_zone_name() == std::string("EST"));
101 check("eastern Abbreviations",
102 eastern_test->dst_zone_abbrev() == std::string("EDT"));
103 check("eastern Abbreviations",
104 eastern_test->dst_zone_name() == std::string("EDT"));
105 check("eastern GMT Offset", eastern_test->base_utc_offset() == hours(-5));
106 check("eastern dst start", eastern_test->dst_local_start_time(2004) == ptime(date(2004, Apr, 4), hours(2)));
107 check("eastern dst end", eastern_test->dst_local_end_time(2004) == ptime(date(2004, Oct, 31), hours(2)));
108 check("eastern has dst", eastern_test->has_dst() == true);
109
110
111 return printTestStats();
112}
113
114/* This test only checks to make sure the bad_field_count exception
115 * is properly thrown. It does not pay any attention to any other
116 * exception, those are tested elsewhere. */
117bool run_bad_field_count_test()
118{
119 using namespace boost::local_time;
120 bool caught_bfc = false;
121 tz_database other_db;
122 try{
123 other_db.load_from_file("local_time/poorly_formed_zonespec.csv");
b32b8144 124 }catch(bad_field_count&){
7c673cae
FG
125 caught_bfc = true;
126 }catch(...) {
127 // do nothing (file not found)
128 }
129 try{
130 other_db.load_from_file("../libs/date_time/test/local_time/poorly_formed_zonespec.csv");
b32b8144 131 }catch(bad_field_count&){
7c673cae
FG
132 caught_bfc = true;
133 }catch(...) {
134 // do nothing (file not found)
135 }
136 return caught_bfc;
137}
138