1 /* Copyright JS Foundation and other contributors, http://js.foundation 2 * 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 extern "C" 16 { 17 #include "ecma-builtin-helpers.h" 18 } 19 20 #include "ecma-globals.h" 21 #include "ecma-helpers.h" 22 #include "test-common.h" 23 #include <gtest/gtest.h> 24 25 #define MS_PER_DAY ((ecma_number_t) 86400000) 26 #define MS_PER_YEAR ((ecma_number_t) 365 * MS_PER_DAY) 27 #define START_OF_GREGORIAN_CALENDAR ((ecma_number_t) (-1970 * MS_PER_YEAR \ 28 - (1970 / 4) * MS_PER_DAY \ 29 + (1970 / 100) * MS_PER_DAY \ 30 - (1970 / 400) * MS_PER_DAY \ 31 - MS_PER_DAY)) 32 33 /** 34 * Unit test's main function. 35 */ 36 class DateHelpersTest : public testing::Test{ 37 public: SetUpTestCase()38 static void SetUpTestCase() 39 { 40 GTEST_LOG_(INFO) << "DateHelpersTest SetUpTestCase"; 41 } 42 TearDownTestCase()43 static void TearDownTestCase() 44 { 45 GTEST_LOG_(INFO) << "DateHelpersTest TearDownTestCase"; 46 } 47 SetUp()48 void SetUp() override {} TearDown()49 void TearDown() override {} 50 51 }; 52 53 HWTEST_F(DateHelpersTest, Test001, testing::ext::TestSize.Level1) 54 { 55 /* int ecma_date_day (time)*/ 56 57 TEST_ASSERT (ecma_date_day (0) == 0); 58 TEST_ASSERT (ecma_date_day (MS_PER_DAY) == 1); 59 60 /* ecma_number_t ecma_date_time_within_day (time) */ 61 62 TEST_ASSERT (ecma_date_time_within_day (0) == 0); 63 TEST_ASSERT (ecma_date_time_within_day (42) == 42); 64 TEST_ASSERT (ecma_date_time_within_day (42.51) == 42.51); 65 TEST_ASSERT (ecma_date_time_within_day (MS_PER_DAY + 42) == 42); 66 67 /* int ecma_date_year_from_time (time) */ 68 69 TEST_ASSERT (ecma_date_year_from_time (0) == 1970); 70 TEST_ASSERT (ecma_date_year_from_time (0) == 1970); 71 TEST_ASSERT (ecma_date_year_from_time (MS_PER_DAY) == 1970); 72 TEST_ASSERT (ecma_date_year_from_time ((MS_PER_DAY) * (ecma_number_t) 365 - 1) == 1970); 73 TEST_ASSERT (ecma_date_year_from_time (MS_PER_DAY * (ecma_number_t) 365) == 1971); 74 TEST_ASSERT (ecma_date_year_from_time (MS_PER_DAY * (ecma_number_t) (365 * (2015 - 1970))) 75 == 2014); 76 TEST_ASSERT (ecma_date_year_from_time (MS_PER_DAY * (ecma_number_t) (365.25 * (2015 - 1970))) 77 == 2015); 78 TEST_ASSERT (ecma_date_year_from_time (-MS_PER_YEAR) == 1969); 79 TEST_ASSERT (ecma_date_year_from_time (-1970 * MS_PER_YEAR) == 1); 80 TEST_ASSERT (ecma_date_year_from_time (START_OF_GREGORIAN_CALENDAR) == 0); 81 TEST_ASSERT (ecma_date_year_from_time (START_OF_GREGORIAN_CALENDAR - 1) == -1); 82 TEST_ASSERT (ecma_date_year_from_time (START_OF_GREGORIAN_CALENDAR - 3 * MS_PER_YEAR) == -3); 83 84 /* int ecma_date_month_from_time (time) */ 85 86 TEST_ASSERT (ecma_date_month_from_time (START_OF_GREGORIAN_CALENDAR) == 0); 87 TEST_ASSERT (ecma_date_month_from_time (0) == 0); 88 TEST_ASSERT (ecma_date_month_from_time (-MS_PER_DAY) == 11); 89 TEST_ASSERT (ecma_date_month_from_time (31 * MS_PER_DAY) == 1); 90 91 /* int ecma_date_date_from_time (time) */ 92 93 TEST_ASSERT (ecma_date_date_from_time (START_OF_GREGORIAN_CALENDAR) == 1); 94 TEST_ASSERT (ecma_date_date_from_time (0) == 1); 95 TEST_ASSERT (ecma_date_date_from_time (-MS_PER_DAY) == 31); 96 TEST_ASSERT (ecma_date_date_from_time (31 * MS_PER_DAY) == 1); 97 98 /* int ecma_date_week_day (ecma_number_t time) */ 99 100 /* FIXME: Implement */ 101 102 /* ecma_number_t ecma_date_utc (time) */ 103 104 /* FIXME: Implement */ 105 106 /* ecma_number_t ecma_date_hour_from_time (time) */ 107 108 TEST_ASSERT (ecma_date_hour_from_time (START_OF_GREGORIAN_CALENDAR) == 0); 109 TEST_ASSERT (ecma_date_hour_from_time (0) == 0); 110 TEST_ASSERT (ecma_date_hour_from_time (-MS_PER_DAY) == 0); 111 TEST_ASSERT (ecma_date_hour_from_time (-1) == 23); 112 113 /* ecma_number_t ecma_date_min_from_time (time) */ 114 115 TEST_ASSERT (ecma_date_min_from_time (START_OF_GREGORIAN_CALENDAR) == 0); 116 TEST_ASSERT (ecma_date_min_from_time (0) == 0); 117 TEST_ASSERT (ecma_date_min_from_time (-MS_PER_DAY) == 0); 118 TEST_ASSERT (ecma_date_min_from_time (-1) == 59); 119 120 /* ecma_number_t ecma_date_sec_from_time (time) */ 121 122 TEST_ASSERT (ecma_date_sec_from_time (START_OF_GREGORIAN_CALENDAR) == 0); 123 TEST_ASSERT (ecma_date_sec_from_time (0) == 0); 124 TEST_ASSERT (ecma_date_sec_from_time (-MS_PER_DAY) == 0); 125 TEST_ASSERT (ecma_date_sec_from_time (-1) == 59); 126 127 /* ecma_number_t ecma_date_ms_from_time (time) */ 128 129 TEST_ASSERT (ecma_date_ms_from_time (START_OF_GREGORIAN_CALENDAR) == 0); 130 TEST_ASSERT (ecma_date_ms_from_time (0) == 0); 131 TEST_ASSERT (ecma_date_ms_from_time (-MS_PER_DAY) == 0); 132 TEST_ASSERT (ecma_date_ms_from_time (-1) == 999); 133 134 /* ecma_number_t ecma_date_make_time (hour, min, sec, ms) */ 135 136 /* FIXME: Implement */ 137 138 /* ecma_number_t ecma_date_make_day (year, month, date) */ 139 140 TEST_ASSERT (ecma_date_make_day (1970, 0, 1) == 0); 141 TEST_ASSERT (ecma_date_make_day (1970, -1, 1) == -31); 142 TEST_ASSERT (ecma_date_make_day (1970, 0, 2.5) == 1); 143 TEST_ASSERT (ecma_date_make_day (1970, 1, 35) == 65); 144 TEST_ASSERT (ecma_date_make_day (1970, 13, 35) == 430); 145 TEST_ASSERT (ecma_date_make_day (2016, 2, 1) == 16861); 146 TEST_ASSERT (ecma_date_make_day (2016, 8, 31) == 17075); 147 TEST_ASSERT (ecma_date_make_day (2016, 9, 1) == 17075); 148 149 /* ecma_number_t ecma_date_make_date (day, time) */ 150 151 /* FIXME: Implement */ 152 153 /* ecma_number_t ecma_date_time_clip (year) */ 154 155 /* FIXME: Implement */ 156 } 157