
This avoids failures due to compilation timeouts when testing with a low tool_timeout value. libstdc++-v3/ChangeLog: * testsuite/20_util/duration/io.cc: Double timeout using dg-timeout-factor. * testsuite/std/time/day/io.cc: Likewise. * testsuite/std/time/format.cc: Likewise. * testsuite/std/time/hh_mm_ss/io.cc: Likewise. * testsuite/std/time/month/io.cc: Likewise. * testsuite/std/time/month_day/io.cc: Likewise. * testsuite/std/time/month_day_last/io.cc: Likewise. * testsuite/std/time/month_weekday/io.cc: Likewise. * testsuite/std/time/month_weekday_last/io.cc: Likewise. * testsuite/std/time/weekday/io.cc: Likewise. * testsuite/std/time/weekday_indexed/io.cc: Likewise. * testsuite/std/time/weekday_last/io.cc: Likewise. * testsuite/std/time/year/io.cc: Likewise. * testsuite/std/time/year_month/io.cc: Likewise. * testsuite/std/time/year_month_day/io.cc: Likewise. * testsuite/std/time/year_month_day_last/io.cc: Likewise. * testsuite/std/time/year_month_weekday/io.cc: Likewise. * testsuite/std/time/year_month_weekday_last/io.cc: Likewise. * testsuite/std/time/zoned_time/io.cc: Likewise.
107 lines
2.3 KiB
C++
107 lines
2.3 KiB
C++
// { dg-do run { target c++20 } }
|
|
// { dg-require-namedlocale "fr_FR.ISO8859-15" }
|
|
// { dg-timeout-factor 2 }
|
|
|
|
#include <chrono>
|
|
#include <sstream>
|
|
#include <testsuite_hooks.h>
|
|
|
|
void
|
|
test_ostream()
|
|
{
|
|
using std::ostringstream;
|
|
using namespace std::chrono;
|
|
|
|
ostringstream ss;
|
|
ss << January/14 << ' ' << February/30 << ' ' << March/34;
|
|
VERIFY( ss.str() == "Jan/14 Feb/30 Mar/34 is not a valid day" );
|
|
|
|
ss.str("");
|
|
ss.imbue(std::locale(ISO_8859(15,fr_FR)));
|
|
ss << July/27;
|
|
VERIFY( ss.str() == "juil./27" );
|
|
}
|
|
|
|
void
|
|
test_parse()
|
|
{
|
|
using namespace std::chrono;
|
|
std::istringstream is;
|
|
month_day md{};
|
|
|
|
is.str("jul 0123");
|
|
VERIFY( is >> parse("%B %3e", md) );
|
|
VERIFY( ! is.eof() );
|
|
VERIFY( is.peek() == '3' );
|
|
VERIFY( md == July/12 );
|
|
|
|
is.str("August 11");
|
|
VERIFY( is >> parse("%b %d", md) );
|
|
VERIFY( ! is.eof() );
|
|
VERIFY( md == August/11 );
|
|
|
|
is.clear();
|
|
is.str("012");
|
|
VERIFY( is >> parse("%m%2d", md) );
|
|
VERIFY( is.eof() );
|
|
VERIFY( md == January/2 );
|
|
|
|
is.clear();
|
|
is.str("012/311");
|
|
VERIFY( is >> parse("%4m/%d", md) );
|
|
VERIFY( ! is.eof() );
|
|
VERIFY( md == December/31 );
|
|
|
|
is.clear();
|
|
is.str("2023-7-31");
|
|
VERIFY( is >> parse("%F", md) );
|
|
VERIFY( ! is.eof() );
|
|
VERIFY( md == July/31 );
|
|
|
|
md = month(13)/day(32);
|
|
is.clear();
|
|
is.str("2023-13-1");
|
|
VERIFY( ! (is >> parse("%F", md)) );
|
|
VERIFY( is.eof() );
|
|
VERIFY( md == month(13)/day(32) );
|
|
|
|
md = month(13)/day(33);
|
|
is.clear();
|
|
is.str("2023-6-31");
|
|
VERIFY( ! (is >> parse("%F", md)) ); // June only has 30 days.
|
|
VERIFY( ! is.eof() );
|
|
VERIFY( md == month(13)/day(33) );
|
|
|
|
md = month(13)/day(34);
|
|
is.clear();
|
|
is.str("6-31");
|
|
VERIFY( ! (is >> parse("%m-%d", md)) ); // June only has 30 days in any year.
|
|
VERIFY( ! is.eof() );
|
|
VERIFY( md == month(13)/day(34) );
|
|
|
|
md = month(13)/day(35);
|
|
is.clear();
|
|
is.str("2023-2-29");
|
|
VERIFY( ! (is >> parse("%Y-%m-%e", md)) ); // Feb only has 28 days in 2023.
|
|
VERIFY( ! is.eof() );
|
|
VERIFY( md == month(13)/day(35) );
|
|
|
|
is.clear();
|
|
is.str("2-29");
|
|
VERIFY( is >> parse("%m-%d", md) ); // But Feb has 29 days in some years.
|
|
VERIFY( ! is.eof() );
|
|
VERIFY( md == February/29 );
|
|
|
|
is.clear();
|
|
is.str("2023-W32-5");
|
|
VERIFY( is >> parse("%G-W%V-%u", md) );
|
|
VERIFY( ! is.eof() );
|
|
VERIFY( md == August/11 );
|
|
}
|
|
|
|
int main()
|
|
{
|
|
test_ostream();
|
|
// TODO: test_format();
|
|
test_parse();
|
|
}
|