| // { dg-do run { target c++20 } } |
| // { dg-require-effective-target tzdb } |
| |
| #include <chrono> |
| #include <testsuite_hooks.h> |
| |
| void |
| test_nonexistent() |
| { |
| std::string expected |
| = "2016-03-13 02:30:00 is in a gap between\n" |
| "2016-03-13 02:00:00 EST and\n" |
| "2016-03-13 03:00:00 EDT which are both equivalent to\n" |
| "2016-03-13 07:00:00 UTC"; |
| |
| using namespace std::chrono; |
| try { |
| auto zt = zoned_time{"America/New_York", |
| local_days{Sunday[2]/March/2016} + 2h + 30min}; |
| VERIFY(false); |
| } catch (const nonexistent_local_time& e) { |
| VERIFY( e.what() == expected ); |
| } |
| } |
| |
| void |
| test_ambiguous() |
| { |
| std::string expected |
| = "2016-11-06 01:30:00 is ambiguous. It could be\n" |
| "2016-11-06 01:30:00 EDT == 2016-11-06 05:30:00 UTC or\n" |
| "2016-11-06 01:30:00 EST == 2016-11-06 06:30:00 UTC"; |
| |
| using namespace std::chrono; |
| try { |
| auto zt = zoned_time{"America/New_York", |
| local_days{Sunday[1]/November/2016} + 1h + 30min}; |
| VERIFY(false); |
| } catch (const ambiguous_local_time& e) { |
| VERIFY( e.what() == expected ); |
| } |
| } |
| |
| int main() |
| { |
| test_nonexistent(); |
| test_ambiguous(); |
| } |