gcc/libstdc++-v3/testsuite/std/time/zoned_time/custom.cc
Jonathan Wakely 41cd9d4dfe libstdc++: Remove dg-options "-std=gnu++20" from std::chrono tests
The testsuite will automatically select C++20 for these tests now, and
removing the hardcoded -std option allows them to be tested for C++23
and C++26 as well.

libstdc++-v3/ChangeLog:

	* testsuite/20_util/duration/arithmetic/overflow_c++20.cc:
	Remove dg-options.
	* testsuite/20_util/duration/io.cc: Likewise.
	* testsuite/std/time/clock/file/io.cc: Likewise.
	* testsuite/std/time/clock/file/members.cc: Likewise.
	* testsuite/std/time/clock/file/overview.cc: Likewise.
	* testsuite/std/time/clock/gps/1.cc: Likewise.
	* testsuite/std/time/clock/gps/io.cc: Likewise.
	* testsuite/std/time/clock/local/io.cc: Likewise.
	* testsuite/std/time/clock/system/io.cc: Likewise.
	* testsuite/std/time/clock/tai/1.cc: Likewise.
	* testsuite/std/time/clock/tai/io.cc: Likewise.
	* testsuite/std/time/clock/utc/1.cc: Likewise.
	* testsuite/std/time/clock/utc/io.cc: Likewise.
	* testsuite/std/time/clock/utc/leap_second_info.cc: Likewise.
	* testsuite/std/time/day/1.cc: Likewise.
	* testsuite/std/time/day/io.cc: Likewise.
	* testsuite/std/time/exceptions.cc: Likewise.
	* testsuite/std/time/format.cc: Likewise.
	* testsuite/std/time/hh_mm_ss/1.cc: Likewise.
	* testsuite/std/time/hh_mm_ss/109772.cc: Likewise.
	* testsuite/std/time/hh_mm_ss/io.cc: Likewise.
	* testsuite/std/time/is_am/1.cc: Likewise.
	* testsuite/std/time/is_pm/1.cc: Likewise.
	* testsuite/std/time/make12/1.cc: Likewise.
	* testsuite/std/time/make24/1.cc: Likewise.
	* testsuite/std/time/month/1.cc: Likewise.
	* testsuite/std/time/month/io.cc: Likewise.
	* testsuite/std/time/month_day/1.cc: Likewise.
	* testsuite/std/time/month_day/io.cc: Likewise.
	* testsuite/std/time/month_day_last/1.cc: Likewise.
	* testsuite/std/time/month_day_last/io.cc: Likewise.
	* testsuite/std/time/month_weekday/1.cc: Likewise.
	* testsuite/std/time/month_weekday/io.cc: Likewise.
	* testsuite/std/time/month_weekday_last/1.cc: Likewise.
	* testsuite/std/time/month_weekday_last/io.cc: Likewise.
	* testsuite/std/time/parse.cc: Likewise.
	* testsuite/std/time/syn_c++20.cc: Likewise.
	* testsuite/std/time/time_zone/get_info_local.cc: Likewise.
	* testsuite/std/time/time_zone/get_info_sys.cc: Likewise.
	* testsuite/std/time/time_zone/requirements.cc: Likewise.
	* testsuite/std/time/traits/is_clock.cc: Likewise.
	* testsuite/std/time/tzdb/1.cc: Likewise.
	* testsuite/std/time/tzdb/leap_seconds.cc: Likewise.
	* testsuite/std/time/tzdb_list/1.cc: Likewise.
	* testsuite/std/time/tzdb_list/requirements.cc: Likewise.
	* testsuite/std/time/weekday/1.cc: Likewise.
	* testsuite/std/time/weekday/io.cc: Likewise.
	* testsuite/std/time/weekday_indexed/io.cc: Likewise.
	* testsuite/std/time/weekday_last/1.cc: Likewise.
	* testsuite/std/time/weekday_last/io.cc: Likewise.
	* testsuite/std/time/year/1.cc: Likewise.
	* testsuite/std/time/year/2.cc: Likewise.
	* testsuite/std/time/year/io.cc: Likewise.
	* testsuite/std/time/weekday_indexed/1.cc: Likewise.
	* testsuite/std/time/year_month/1.cc: Likewise.
	* testsuite/std/time/year_month/2.cc: Likewise.
	* testsuite/std/time/year_month/io.cc: Likewise.
	* testsuite/std/time/year_month_day/1.cc: Likewise.
	* testsuite/std/time/year_month_day/2.cc: Likewise.
	* testsuite/std/time/year_month_day/3.cc: Likewise.
	* testsuite/std/time/year_month_day/4.cc: Likewise.
	* testsuite/std/time/year_month_day/io.cc: Likewise.
	* testsuite/std/time/year_month_day_last/1.cc: Likewise.
	* testsuite/std/time/year_month_day_last/2.cc: Likewise.
	* testsuite/std/time/year_month_day_last/io.cc: Likewise.
	* testsuite/std/time/year_month_weekday/1.cc: Likewise.
	* testsuite/std/time/year_month_weekday/2.cc: Likewise.
	* testsuite/std/time/year_month_weekday/3.cc: Likewise.
	* testsuite/std/time/year_month_weekday/io.cc: Likewise.
	* testsuite/std/time/year_month_weekday_last/1.cc: Likewise.
	* testsuite/std/time/year_month_weekday_last/2.cc: Likewise.
	* testsuite/std/time/year_month_weekday_last/io.cc: Likewise.
	* testsuite/std/time/zoned_time/1.cc: Likewise.
	* testsuite/std/time/zoned_time/custom.cc: Likewise.
	* testsuite/std/time/zoned_time/deduction.cc: Likewise.
	* testsuite/std/time/zoned_time/io.cc: Likewise.
	* testsuite/std/time/zoned_time/req_neg.cc: Likewise.
	* testsuite/std/time/zoned_time/requirements.cc: Likewise.
	* testsuite/std/time/zoned_traits.cc: Likewise.
2023-09-15 21:57:39 +01:00

74 lines
1.9 KiB
C++

// { dg-do run { target c++20 } }
// { dg-require-effective-target tzdb }
#include <chrono>
#include <set>
#include <stdexcept>
#include <testsuite_hooks.h>
struct local_tz
{
local_tz() : name(std::chrono::current_zone()->name()) { }
explicit local_tz(std::string_view name) : name(name) { }
template<typename Dur>
std::chrono::sys_time<Dur> to_sys(const std::chrono::local_time<Dur>& d)
{ return std::chrono::locate_zone(name)->to_sys(d); }
template<typename Dur>
std::chrono::sys_time<Dur> to_local(const std::chrono::sys_time<Dur>& d)
{ return std::chrono::locate_zone(name)->to_sys(d); }
template<typename Dur>
std::chrono::sys_info get_info(const std::chrono::sys_time<Dur>& d)
{ return std::chrono::locate_zone(name)->get_info(d); }
struct indirect_cmp
{
bool operator()(const local_tz* lhs, const local_tz* rhs) const
{ return lhs->name < rhs->name; }
};
bool eq(const std::chrono::time_zone* tz) const noexcept
{ return name == tz->name(); }
private:
std::string_view name;
};
template<> struct std::chrono::zoned_traits<const local_tz*>
{
static const local_tz* default_zone()
{
return locate_zone(std::chrono::current_zone()->name());
}
static const local_tz* locate_zone(std::string_view name)
{
static std::set<const local_tz*, local_tz::indirect_cmp> zones;
local_tz tz(name);
if (auto z = zones.find(&tz); z != zones.end())
return *z;
if (std::chrono::locate_zone(name))
return *zones.insert(new local_tz(tz)).first;
throw std::runtime_error("zone not found");
}
};
void
test_custom_tzptr()
{
using namespace std::chrono;
zoned_time<seconds, const local_tz*> z;
VERIFY( z.get_time_zone()->eq(std::chrono::current_zone()) );
zoned_time<seconds, const local_tz*> z2(std::string_view("Europe/London"));
VERIFY( z2.get_time_zone()->eq(std::chrono::locate_zone("Europe/London")) );
}
int main()
{
test_custom_tzptr();
}