Update time_of_day to be more consistent ...

the needs of formatting.
This commit is contained in:
Howard Hinnant
2019-02-02 14:06:12 -05:00
parent f1326968af
commit 9cb0013aef
11 changed files with 184 additions and 689 deletions

View File

@@ -94,7 +94,6 @@ main()
{
using D = decimal_format_seconds<milliseconds>;
static_assert(D::width == 3, "");
static_assert(is_same<D::precision, make_precision<D::rep, D::width>::type>{}, "");
D dfs{seconds{3}};
assert(dfs.seconds() == seconds{3});
assert(dfs.to_duration() == seconds{3});
@@ -106,7 +105,6 @@ main()
{
using D = decimal_format_seconds<milliseconds>;
static_assert(D::width == 3, "");
static_assert(is_same<D::precision, make_precision<D::rep, D::width>::type>{}, "");
D dfs{milliseconds{3}};
assert(dfs.seconds() == seconds{0});
assert(dfs.to_duration() == milliseconds{3});
@@ -118,9 +116,8 @@ main()
{
using D = decimal_format_seconds<microfortnights>;
static_assert(D::width == 4, "");
using S = make_precision<D::rep, D::width>::type;
static_assert(is_same<D::precision, S>{}, "");
D dfs{microfortnights{3}};
using S = D::precision;
assert(dfs.seconds() == seconds{3});
assert(dfs.to_duration() == S{36288});
assert(dfs.subseconds() == S{6288});
@@ -132,9 +129,8 @@ main()
using CT = common_type<seconds, microfortnights>::type;
using D = decimal_format_seconds<CT>;
static_assert(D::width == 4, "");
using S = make_precision<D::rep, D::width>::type;
static_assert(is_same<D::precision, S>{}, "");
D dfs{microfortnights{3}};
using S = D::precision;
assert(dfs.seconds() == seconds{3});
assert(dfs.to_duration() == S{36288});
assert(dfs.subseconds() == S{6288});

View File

@@ -27,27 +27,6 @@
// time_of_day<std::chrono::duration<Rep, Period>>
// make_time(std::chrono::duration<Rep, Period> d) noexcept;
// constexpr
// time_of_day<std::chrono::hours>
// make_time(std::chrono::hours h, unsigned md) noexcept;
// constexpr
// time_of_day<std::chrono::minutes>
// make_time(std::chrono::hours h, std::chrono::minutes m, unsigned md) noexcept;
// constexpr
// time_of_day<std::chrono::seconds>
// make_time(std::chrono::hours h, std::chrono::minutes m, std::chrono::seconds s,
// unsigned md) noexcept;
// template <class Rep, class Period,
// class = typename std::enable_if<std::ratio_less<Period,
// std::ratio<1>>::value>::type>
// constexpr
// time_of_day<std::chrono::duration<Rep, Period>>
// make_time(std::chrono::hours h, std::chrono::minutes m, std::chrono::seconds s,
// std::chrono::duration<Rep, Period> sub_s, unsigned md) noexcept;
#include "date.h"
#include <cassert>
@@ -68,7 +47,6 @@ main()
assert(tod.minutes() == minutes{7});
assert(tod.seconds() == seconds{9});
assert(tod.subseconds() == nanoseconds{22});
assert(tod.mode() == 0);
}
{
static_assert(is_same<decltype(make_time(microseconds{18429000022})),
@@ -78,7 +56,6 @@ main()
assert(tod.minutes() == minutes{7});
assert(tod.seconds() == seconds{9});
assert(tod.subseconds() == microseconds{22});
assert(tod.mode() == 0);
}
{
static_assert(is_same<decltype(make_time(seconds{18429})),
@@ -87,7 +64,6 @@ main()
assert(tod.hours() == hours{5});
assert(tod.minutes() == minutes{7});
assert(tod.seconds() == seconds{9});
assert(tod.mode() == 0);
}
{
static_assert(is_same<decltype(make_time(minutes{307})),
@@ -95,70 +71,11 @@ main()
auto tod = make_time(minutes{307});
assert(tod.hours() == hours{5});
assert(tod.minutes() == minutes{7});
assert(tod.mode() == 0);
}
{
static_assert(is_same<decltype(make_time(hours{5})),
time_of_day<hours>>{}, "");
auto tod = make_time(hours{5});
assert(tod.hours() == hours{5});
assert(tod.mode() == 0);
}
{
static_assert(is_same<decltype(make_time(hours{5}, minutes{7}, seconds{9},
nanoseconds{22}, pm)),
time_of_day<nanoseconds>>{}, "");
auto tod = make_time(hours{5}, minutes{7}, seconds{9}, nanoseconds{22}, pm);
assert(tod.hours() == hours{5});
assert(tod.minutes() == minutes{7});
assert(tod.seconds() == seconds{9});
assert(tod.subseconds() == nanoseconds{22});
assert(tod.mode() == pm);
}
{
static_assert(is_same<decltype(make_time(hours{5}, minutes{7}, seconds{9},
microseconds{22}, 0)),
time_of_day<microseconds>>{}, "");
auto tod = make_time(hours{5}, minutes{7}, seconds{9}, microseconds{22}, 0);
assert(tod.hours() == hours{5});
assert(tod.minutes() == minutes{7});
assert(tod.seconds() == seconds{9});
assert(tod.subseconds() == microseconds{22});
assert(tod.mode() == 0);
}
{
static_assert(is_same<decltype(make_time(hours{5}, minutes{7}, seconds{9},
milliseconds{22}, am)),
time_of_day<milliseconds>>{}, "");
auto tod = make_time(hours{5}, minutes{7}, seconds{9}, milliseconds{22}, am);
assert(tod.hours() == hours{5});
assert(tod.minutes() == minutes{7});
assert(tod.seconds() == seconds{9});
assert(tod.subseconds() == milliseconds{22});
assert(tod.mode() == am);
}
{
static_assert(is_same<decltype(make_time(hours{5}, minutes{7}, seconds{9}, am)),
time_of_day<seconds>>{}, "");
auto tod = make_time(hours{5}, minutes{7}, seconds{9}, am);
assert(tod.hours() == hours{5});
assert(tod.minutes() == minutes{7});
assert(tod.seconds() == seconds{9});
assert(tod.mode() == am);
}
{
static_assert(is_same<decltype(make_time(hours{5}, minutes{7}, pm)),
time_of_day<minutes>>{}, "");
auto tod = make_time(hours{5}, minutes{7}, pm);
assert(tod.hours() == hours{5});
assert(tod.minutes() == minutes{7});
assert(tod.mode() == pm);
}
{
static_assert(is_same<decltype(make_time(hours{5}, 0)),
time_of_day<hours>>{}, "");
auto tod = make_time(hours{5}, 0);
assert(tod.hours() == hours{5});
assert(tod.mode() == 0);
}
}

View File

@@ -57,7 +57,7 @@ main()
using tod = time_of_day<hours>;
static_assert(is_same<tod::precision::period, hours::period>{}, "");
static_assert(is_same<tod::precision::period, seconds::period>{}, "");
static_assert( is_trivially_destructible<tod>{}, "");
static_assert( is_default_constructible<tod>{}, "");
@@ -74,7 +74,6 @@ main()
constexpr tod t1 = tod{hours{13}};
static_assert(t1.hours() == hours{13}, "");
static_assert(t1.mode() == 0, "");
#if __cplusplus >= 201402
static_assert(static_cast<tod::precision>(t1) == hours{13}, "");
static_assert(t1.to_duration() == hours{13}, "");
@@ -82,23 +81,20 @@ main()
auto t2 = t1;
assert(t2.hours() == t1.hours());
assert(t2.mode() == t1.mode());
assert(t2.to_duration() == t1.to_duration());
ostringstream os;
os << t2;
assert(os.str() == "1300");
assert(os.str() == "13:00:00");
t2.make12();
os.str("");
assert(t2.hours() == hours{1});
assert(t2.mode() == pm);
assert(t2.to_duration() == t1.to_duration());
os << t2;
assert(os.str() == "1pm");
assert(os.str() == "1:00:00PM");
t2.make24();
os.str("");
assert(t2.hours() == hours{13});
assert(t2.mode() == 0);
assert(t2.to_duration() == t1.to_duration());
os << t2;
assert(os.str() == "1300");
assert(os.str() == "13:00:00");
}

View File

@@ -111,7 +111,7 @@ main()
t2.make12();
os.str("");
os << t2;
assert(os.str() == "1:07:06.0480pm");
assert(os.str() == "1:07:06.0480PM");
t2.make24();
os.str("");
os << t2;

View File

@@ -85,7 +85,6 @@ main()
static_assert(t1.minutes() == minutes{7}, "");
static_assert(t1.seconds() == seconds{5}, "");
static_assert(t1.subseconds() == milliseconds{22}, "");
static_assert(t1.mode() == 0, "");
#if __cplusplus >= 201402
static_assert(static_cast<tod::precision>(t1) == hours{13} + minutes{7}
+ seconds{5} + milliseconds{22}, "");
@@ -98,7 +97,6 @@ main()
assert(t2.minutes() == t1.minutes());
assert(t2.seconds() == t1.seconds());
assert(t2.subseconds() == t1.subseconds());
assert(t2.mode() == t1.mode());
assert(t2.to_duration() == t1.to_duration());
ostringstream os;
os << t2;
@@ -109,17 +107,15 @@ main()
assert(t2.minutes() == minutes{7});
assert(t2.seconds() == seconds{5});
assert(t2.subseconds() == milliseconds{22});
assert(t2.mode() == pm);
assert(t2.to_duration() == t1.to_duration());
os << t2;
assert(os.str() == "1:07:05.022pm");
assert(os.str() == "1:07:05.022PM");
t2.make24();
os.str("");
assert(t2.hours() == hours{13});
assert(t2.minutes() == minutes{7});
assert(t2.seconds() == seconds{5});
assert(t2.subseconds() == milliseconds{22});
assert(t2.mode() == 0);
assert(t2.to_duration() == t1.to_duration());
os << t2;
assert(os.str() == "13:07:05.022");

View File

@@ -59,7 +59,7 @@ main()
using tod = time_of_day<minutes>;
static_assert(is_same<tod::precision::period, minutes::period>{}, "");
static_assert(is_same<tod::precision::period, seconds::period>{}, "");
static_assert( is_trivially_destructible<tod>{}, "");
static_assert( is_default_constructible<tod>{}, "");
@@ -77,7 +77,6 @@ main()
constexpr tod t1 = tod{hours{13} + minutes{7}};
static_assert(t1.hours() == hours{13}, "");
static_assert(t1.minutes() == minutes{7}, "");
static_assert(t1.mode() == 0, "");
#if __cplusplus >= 201402
static_assert(static_cast<tod::precision>(t1) == hours{13} + minutes{7}, "");
static_assert(t1.to_duration() == hours{13} + minutes{7}, "");
@@ -86,25 +85,22 @@ main()
auto t2 = t1;
assert(t2.hours() == t1.hours());
assert(t2.minutes() == t1.minutes());
assert(t2.mode() == t1.mode());
assert(t2.to_duration() == t1.to_duration());
ostringstream os;
os << t2;
assert(os.str() == "13:07");
assert(os.str() == "13:07:00");
t2.make12();
os.str("");
assert(t2.hours() == hours{1});
assert(t2.minutes() == minutes{7});
assert(t2.mode() == pm);
assert(t2.to_duration() == t1.to_duration());
os << t2;
assert(os.str() == "1:07pm");
assert(os.str() == "1:07:00PM");
t2.make24();
os.str("");
assert(t2.hours() == hours{13});
assert(t2.minutes() == minutes{7});
assert(t2.mode() == 0);
assert(t2.to_duration() == t1.to_duration());
os << t2;
assert(os.str() == "13:07");
assert(os.str() == "13:07:00");
}

View File

@@ -85,7 +85,6 @@ main()
static_assert(t1.minutes() == minutes{7}, "");
static_assert(t1.seconds() == seconds{5}, "");
static_assert(t1.subseconds() == nanoseconds{22}, "");
static_assert(t1.mode() == 0, "");
#if __cplusplus >= 201402
static_assert(static_cast<tod::precision>(t1) == hours{13} + minutes{7}
+ seconds{5} + nanoseconds{22}, "");
@@ -98,7 +97,6 @@ main()
assert(t2.minutes() == t1.minutes());
assert(t2.seconds() == t1.seconds());
assert(t2.subseconds() == t1.subseconds());
assert(t2.mode() == t1.mode());
assert(t2.to_duration() == t1.to_duration());
ostringstream os;
os << t2;
@@ -109,17 +107,15 @@ main()
assert(t2.minutes() == minutes{7});
assert(t2.seconds() == seconds{5});
assert(t2.subseconds() == nanoseconds{22});
assert(t2.mode() == pm);
assert(t2.to_duration() == t1.to_duration());
os << t2;
assert(os.str() == "1:07:05.000000022pm");
assert(os.str() == "1:07:05.000000022PM");
t2.make24();
os.str("");
assert(t2.hours() == hours{13});
assert(t2.minutes() == minutes{7});
assert(t2.seconds() == seconds{5});
assert(t2.subseconds() == nanoseconds{22});
assert(t2.mode() == 0);
assert(t2.to_duration() == t1.to_duration());
os << t2;
assert(os.str() == "13:07:05.000000022");

View File

@@ -79,7 +79,6 @@ main()
static_assert(t1.hours() == hours{13}, "");
static_assert(t1.minutes() == minutes{7}, "");
static_assert(t1.seconds() == seconds{5}, "");
static_assert(t1.mode() == 0, "");
#if __cplusplus >= 201402
static_assert(static_cast<tod::precision>(t1) == hours{13} + minutes{7}
+ seconds{5}, "");
@@ -90,7 +89,6 @@ main()
assert(t2.hours() == t1.hours());
assert(t2.minutes() == t1.minutes());
assert(t2.seconds() == t1.seconds());
assert(t2.mode() == t1.mode());
assert(t2.to_duration() == t1.to_duration());
ostringstream os;
os << t2;
@@ -100,16 +98,14 @@ main()
assert(t2.hours() == hours{1});
assert(t2.minutes() == minutes{7});
assert(t2.seconds() == seconds{5});
assert(t2.mode() == pm);
assert(t2.to_duration() == t1.to_duration());
os << t2;
assert(os.str() == "1:07:05pm");
assert(os.str() == "1:07:05PM");
t2.make24();
os.str("");
assert(t2.hours() == hours{13});
assert(t2.minutes() == minutes{7});
assert(t2.seconds() == seconds{5});
assert(t2.mode() == 0);
assert(t2.to_duration() == t1.to_duration());
os << t2;
assert(os.str() == "13:07:05");