mirror of
https://github.com/dlang/phobos.git
synced 2025-04-30 07:00:37 +03:00
Adds check bounds of year to std.datetime.date.Date
This commit is contained in:
parent
8a7aee06a3
commit
c00a5ee6a8
1 changed files with 15 additions and 3 deletions
|
@ -3776,7 +3776,7 @@ public:
|
||||||
enforceValid!"months"(cast(Month) month);
|
enforceValid!"months"(cast(Month) month);
|
||||||
enforceValid!"days"(year, cast(Month) month, day);
|
enforceValid!"days"(year, cast(Month) month, day);
|
||||||
|
|
||||||
_year = cast(short) year;
|
_year = year.castToYear;
|
||||||
_month = cast(Month) month;
|
_month = cast(Month) month;
|
||||||
_day = cast(ubyte) day;
|
_day = cast(ubyte) day;
|
||||||
}
|
}
|
||||||
|
@ -3814,6 +3814,7 @@ public:
|
||||||
assertThrown!DateTimeException(Date(1999, 10, 32));
|
assertThrown!DateTimeException(Date(1999, 10, 32));
|
||||||
assertThrown!DateTimeException(Date(1999, 11, 31));
|
assertThrown!DateTimeException(Date(1999, 11, 31));
|
||||||
assertThrown!DateTimeException(Date(1999, 12, 32));
|
assertThrown!DateTimeException(Date(1999, 12, 32));
|
||||||
|
assertThrown!DateTimeException(Date(short.max+1, 1, 1));
|
||||||
|
|
||||||
assertNotThrown!DateTimeException(Date(1999, 1, 31));
|
assertNotThrown!DateTimeException(Date(1999, 1, 31));
|
||||||
assertNotThrown!DateTimeException(Date(1999, 2, 28));
|
assertNotThrown!DateTimeException(Date(1999, 2, 28));
|
||||||
|
@ -3839,6 +3840,7 @@ public:
|
||||||
assertThrown!DateTimeException(Date(-1, 2, 29));
|
assertThrown!DateTimeException(Date(-1, 2, 29));
|
||||||
assertThrown!DateTimeException(Date(-2, 2, 29));
|
assertThrown!DateTimeException(Date(-2, 2, 29));
|
||||||
assertThrown!DateTimeException(Date(-3, 2, 29));
|
assertThrown!DateTimeException(Date(-3, 2, 29));
|
||||||
|
assertThrown!DateTimeException(Date(short.min-1, 1, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -4128,7 +4130,7 @@ public:
|
||||||
@property void year(int year) @safe pure
|
@property void year(int year) @safe pure
|
||||||
{
|
{
|
||||||
enforceValid!"days"(year, _month, _day);
|
enforceValid!"days"(year, _month, _day);
|
||||||
_year = cast(short) year;
|
_year = year.castToYear;
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@ -4215,7 +4217,7 @@ public:
|
||||||
{
|
{
|
||||||
if (year <= 0)
|
if (year <= 0)
|
||||||
throw new DateTimeException("The given year is not a year B.C.");
|
throw new DateTimeException("The given year is not a year B.C.");
|
||||||
_year = cast(short)((year - 1) * -1);
|
_year = castToYear((year - 1) * -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@ -9689,6 +9691,16 @@ if (units == "days")
|
||||||
assert(!valid!"days"(2017, 2, 29));
|
assert(!valid!"days"(2017, 2, 29));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private short castToYear(int year, string file = __FILE__, size_t line = __LINE__) @safe pure
|
||||||
|
{
|
||||||
|
import std.conv : to, ConvOverflowException;
|
||||||
|
import std.format : format;
|
||||||
|
|
||||||
|
try
|
||||||
|
return year.to!short;
|
||||||
|
catch (ConvOverflowException)
|
||||||
|
throw new DateTimeException(format("year %s doesn't fit to Date.", year), file, line);
|
||||||
|
}
|
||||||
|
|
||||||
/++
|
/++
|
||||||
Params:
|
Params:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue