Fix assertion fail in ecma_date_make_day
JerryScript-DCO-1.0-Signed-off-by: Szilard Ledan szledan.u-szeged@partner.samsung.com
This commit is contained in:
committed by
László Langó
parent
c7a47c1791
commit
9edae36b00
@@ -548,8 +548,9 @@ ecma_date_hour_from_time (ecma_number_t time) /**< time value */
|
||||
return time; /* time is NaN */
|
||||
}
|
||||
|
||||
return (ecma_number_t) fmod (floor (time / ECMA_DATE_MS_PER_HOUR),
|
||||
ECMA_DATE_HOURS_PER_DAY);
|
||||
ecma_number_t hour = (ecma_number_t) fmod (floor (time / ECMA_DATE_MS_PER_HOUR),
|
||||
ECMA_DATE_HOURS_PER_DAY);
|
||||
return (hour < 0) ? ECMA_DATE_HOURS_PER_DAY + hour : hour;
|
||||
} /* ecma_date_hour_from_time */
|
||||
|
||||
/**
|
||||
@@ -578,8 +579,9 @@ ecma_date_min_from_time (ecma_number_t time) /**< time value */
|
||||
return time; /* time is NaN */
|
||||
}
|
||||
|
||||
return (ecma_number_t) fmod (floor (time / ECMA_DATE_MS_PER_MINUTE),
|
||||
ECMA_DATE_MINUTES_PER_HOUR);
|
||||
ecma_number_t min = (ecma_number_t) fmod (floor (time / ECMA_DATE_MS_PER_MINUTE),
|
||||
ECMA_DATE_MINUTES_PER_HOUR);
|
||||
return (min < 0) ? ECMA_DATE_MINUTES_PER_HOUR + min : min;
|
||||
} /* ecma_date_min_from_time */
|
||||
|
||||
/**
|
||||
@@ -608,8 +610,9 @@ ecma_date_sec_from_time (ecma_number_t time) /**< time value */
|
||||
return time; /* time is NaN */
|
||||
}
|
||||
|
||||
return (ecma_number_t) fmod (floor (time / ECMA_DATE_MS_PER_SECOND),
|
||||
ECMA_DATE_SECONDS_PER_MINUTE);
|
||||
ecma_number_t sec = (ecma_number_t) fmod (floor (time / ECMA_DATE_MS_PER_SECOND),
|
||||
ECMA_DATE_SECONDS_PER_MINUTE);
|
||||
return (sec < 0) ? ECMA_DATE_SECONDS_PER_MINUTE + sec : sec;
|
||||
} /* ecma_date_sec_from_time */
|
||||
|
||||
/**
|
||||
@@ -638,7 +641,8 @@ ecma_date_ms_from_time (ecma_number_t time) /**< time value */
|
||||
return time; /* time is NaN */
|
||||
}
|
||||
|
||||
return (ecma_number_t) fmod (time, ECMA_DATE_MS_PER_SECOND);
|
||||
ecma_number_t milli = (ecma_number_t) fmod (time, ECMA_DATE_MS_PER_SECOND);
|
||||
return (milli < 0) ? ECMA_DATE_MS_PER_SECOND + milli : milli;
|
||||
} /* ecma_date_ms_from_time */
|
||||
|
||||
/**
|
||||
@@ -725,6 +729,7 @@ ecma_date_make_day (ecma_number_t year, /**< year value */
|
||||
ecma_number_t dt = ecma_number_trunc (date);
|
||||
ecma_number_t ym = y + (ecma_number_t) floor (m / 12);
|
||||
ecma_number_t mn = (ecma_number_t) fmod (m, 12);
|
||||
mn = (mn < 0) ? 12 + mn : mn;
|
||||
ecma_number_t time = ecma_date_time_from_year (ym);
|
||||
|
||||
JERRY_ASSERT (ecma_date_year_from_time (time) == ym);
|
||||
|
||||
@@ -98,3 +98,12 @@ assert (isNaN (d.getMilliseconds()));
|
||||
assert (isNaN (d.getUTCMilliseconds()));
|
||||
assert (isNaN (d.getTimezoneOffset()));
|
||||
|
||||
/* 5. test case */
|
||||
assert (new Date(2013, -1).getMonth() === 11);
|
||||
assert (new Date(-1, -1).getFullYear() === -2);
|
||||
assert (new Date(-1, -1, -1).getMonth() === 10);
|
||||
assert (new Date(-1, -1, -1, -1).getDate() === 28);
|
||||
assert (new Date(-1, -1, -1, -1, -1).getHours() === 22);
|
||||
assert (new Date(-1, -1, -1, -1, -1, -1).getMinutes() === 58);
|
||||
assert (new Date(-1, -1, -1, -1, -1, -1, -1).getSeconds() === 58);
|
||||
assert (new Date(-1, -1, -1, -1, -1, -1, -1, -1).getMilliseconds() === 999);
|
||||
|
||||
@@ -19,6 +19,13 @@
|
||||
#include "ecma-helpers.h"
|
||||
|
||||
#define MS_PER_DAY ((ecma_number_t) 86400000)
|
||||
#define MS_PER_YEAR ((ecma_number_t) 365 * MS_PER_DAY)
|
||||
#define START_OF_GREGORIAN_CALENDAR ((ecma_number_t) (-1970 * MS_PER_YEAR \
|
||||
- (1970 / 4) * MS_PER_DAY \
|
||||
+ (1970 / 100) * MS_PER_DAY \
|
||||
- (1970 / 400) * MS_PER_DAY \
|
||||
- MS_PER_DAY))
|
||||
|
||||
/**
|
||||
* Unit test's main function.
|
||||
*/
|
||||
@@ -61,6 +68,7 @@ main (int __attr_unused___ argc,
|
||||
|
||||
/* int ecma_date_year_from_time (time) */
|
||||
|
||||
JERRY_ASSERT (ecma_date_year_from_time (0) == 1970);
|
||||
JERRY_ASSERT (ecma_date_year_from_time (0) == 1970);
|
||||
JERRY_ASSERT (ecma_date_year_from_time (MS_PER_DAY) == 1970);
|
||||
JERRY_ASSERT (ecma_date_year_from_time ((MS_PER_DAY) * (ecma_number_t) 365 - 1) == 1970);
|
||||
@@ -69,6 +77,10 @@ main (int __attr_unused___ argc,
|
||||
== 2014);
|
||||
JERRY_ASSERT (ecma_date_year_from_time (MS_PER_DAY * (ecma_number_t) (365.25 * (2015 - 1970)))
|
||||
== 2015);
|
||||
JERRY_ASSERT (ecma_date_year_from_time (-MS_PER_YEAR) == 1969);
|
||||
JERRY_ASSERT (ecma_date_year_from_time (-1970 * MS_PER_YEAR) == 1);
|
||||
JERRY_ASSERT (ecma_date_year_from_time (START_OF_GREGORIAN_CALENDAR) == 0);
|
||||
JERRY_ASSERT (ecma_date_year_from_time (START_OF_GREGORIAN_CALENDAR - 1) == -1);
|
||||
|
||||
/* int ecma_date_day_within_year (time) */
|
||||
|
||||
@@ -76,11 +88,17 @@ main (int __attr_unused___ argc,
|
||||
|
||||
/* int ecma_date_month_from_time (time) */
|
||||
|
||||
/* FIXME: Implement */
|
||||
JERRY_ASSERT (ecma_date_month_from_time (START_OF_GREGORIAN_CALENDAR) == 0);
|
||||
JERRY_ASSERT (ecma_date_month_from_time (0) == 0);
|
||||
JERRY_ASSERT (ecma_date_month_from_time (-MS_PER_DAY) == 11);
|
||||
JERRY_ASSERT (ecma_date_month_from_time (31 * MS_PER_DAY) == 1);
|
||||
|
||||
/* int ecma_date_date_from_time (time) */
|
||||
|
||||
/* FIXME: Implement */
|
||||
JERRY_ASSERT (ecma_date_date_from_time (START_OF_GREGORIAN_CALENDAR) == 1);
|
||||
JERRY_ASSERT (ecma_date_date_from_time (0) == 1);
|
||||
JERRY_ASSERT (ecma_date_date_from_time (-MS_PER_DAY) == 31);
|
||||
JERRY_ASSERT (ecma_date_date_from_time (31 * MS_PER_DAY) == 1);
|
||||
|
||||
/* int ecma_date_week_day (ecma_number_t time) */
|
||||
|
||||
@@ -104,19 +122,31 @@ main (int __attr_unused___ argc,
|
||||
|
||||
/* ecma_number_t ecma_date_hour_from_time (time) */
|
||||
|
||||
/* FIXME: Implement */
|
||||
JERRY_ASSERT (ecma_date_hour_from_time (START_OF_GREGORIAN_CALENDAR) == 0);
|
||||
JERRY_ASSERT (ecma_date_hour_from_time (0) == 0);
|
||||
JERRY_ASSERT (ecma_date_hour_from_time (-MS_PER_DAY) == 0);
|
||||
JERRY_ASSERT (ecma_date_hour_from_time (-1) == 23);
|
||||
|
||||
/* ecma_number_t ecma_date_min_from_time (time) */
|
||||
|
||||
/* FIXME: Implement */
|
||||
JERRY_ASSERT (ecma_date_min_from_time (START_OF_GREGORIAN_CALENDAR) == 0);
|
||||
JERRY_ASSERT (ecma_date_min_from_time (0) == 0);
|
||||
JERRY_ASSERT (ecma_date_min_from_time (-MS_PER_DAY) == 0);
|
||||
JERRY_ASSERT (ecma_date_min_from_time (-1) == 59);
|
||||
|
||||
/* ecma_number_t ecma_date_sec_from_time (time) */
|
||||
|
||||
/* FIXME: Implement */
|
||||
JERRY_ASSERT (ecma_date_sec_from_time (START_OF_GREGORIAN_CALENDAR) == 0);
|
||||
JERRY_ASSERT (ecma_date_sec_from_time (0) == 0);
|
||||
JERRY_ASSERT (ecma_date_sec_from_time (-MS_PER_DAY) == 0);
|
||||
JERRY_ASSERT (ecma_date_sec_from_time (-1) == 59);
|
||||
|
||||
/* ecma_number_t ecma_date_ms_from_time (time) */
|
||||
|
||||
/* FIXME: Implement */
|
||||
JERRY_ASSERT (ecma_date_ms_from_time (START_OF_GREGORIAN_CALENDAR) == 0);
|
||||
JERRY_ASSERT (ecma_date_ms_from_time (0) == 0);
|
||||
JERRY_ASSERT (ecma_date_ms_from_time (-MS_PER_DAY) == 0);
|
||||
JERRY_ASSERT (ecma_date_ms_from_time (-1) == 999);
|
||||
|
||||
/* ecma_number_t ecma_date_make_time (hour, min, sec, ms) */
|
||||
|
||||
@@ -125,6 +155,7 @@ main (int __attr_unused___ argc,
|
||||
/* ecma_number_t ecma_date_make_day (year, month, date) */
|
||||
|
||||
JERRY_ASSERT (ecma_date_make_day (1970, 0, 1) == 0);
|
||||
JERRY_ASSERT (ecma_date_make_day (1970, -1, 1) == -31);
|
||||
JERRY_ASSERT (ecma_date_make_day (1970, 0, 2.5) == 1);
|
||||
JERRY_ASSERT (ecma_date_make_day (1970, 1, 35) == 65);
|
||||
JERRY_ASSERT (ecma_date_make_day (1970, 13, 35) == 430);
|
||||
|
||||
Reference in New Issue
Block a user