Fixes the bug of ecma_date_make_day() (#1836) & ecma_date_week_day(). (#1466)

The ecma_date_make_day() handled any date in October on leap years incorrectly,
which was mentioned in issue #1836. The ecma_date_week_day() returned minus values
when return week_day before 1970 years which was also incorrect.

This change solves these bugs. In addition, this enhances the algorithm of accessing 'the ym-mn-1'
by replacing binary search to simple computation at ecma_date_make_day().

JerryScript-DCO-1.0-Signed-off-by: Hayun Lee lhy920806@gmail.com
This commit is contained in:
LeeHayun
2016-12-05 17:58:36 +09:00
committed by Zoltan Herczeg
parent 4ef3c0caa8
commit bed094f74f
3 changed files with 32 additions and 31 deletions
+24
View File
@@ -0,0 +1,24 @@
// Copyright 2016 Hayun Lee (lhy920806@gmail.com)
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
for (var y = 1950; y < 2050; y++) {
for (var m = 0; m < 12; m++) {
var last_date = new Date(y, m, 1).getDay ();
assert (!isNaN (last_date));
for (var d = 1; d < 32; d++) {
assert (last_date == new Date(y, m, d).getDay ());
last_date = (last_date + 1) % 7;
}
}
}
+2
View File
@@ -162,6 +162,8 @@ main ()
TEST_ASSERT (ecma_date_make_day (1970, 1, 35) == 65);
TEST_ASSERT (ecma_date_make_day (1970, 13, 35) == 430);
TEST_ASSERT (ecma_date_make_day (2016, 2, 1) == 16861);
TEST_ASSERT (ecma_date_make_day (2016, 8, 31) == 17075);
TEST_ASSERT (ecma_date_make_day (2016, 9, 1) == 17075);
/* ecma_number_t ecma_date_make_date (day, time) */