name:
tests/Formulas/DateFormulasTest.ts
-rw-r--r--
58141
1import {
2 DATE,
3 DATEVALUE,
4 DATEDIF,
5 EDATE,
6 EOMONTH,
7 DAY,
8 DAYS,
9 DAYS360,
10 MONTH,
11 YEAR,
12 WEEKDAY,
13 WEEKNUM,
14 YEARFRAC,
15 TIMEVALUE,
16 HOUR,
17 MINUTE,
18 SECOND,
19 NETWORKDAYS,
20 NETWORKDAYS$INTL,
21 TIME,
22 WORKDAY,
23 WORKDAY$INTL
24} from "../../src/Formulas/Date"
25import * as ERRORS from "../../src/Errors";
26import {
27 assertEquals,
28 catchAndAssertEquals,
29 test
30} from "../Utils/Asserts"
31
32
33test("WORKDAY.INTL", function () {
34 assertEquals(WORKDAY$INTL(DATE(1999, 2, 2), 10), DATE(1999, 2, 16));
35 assertEquals(WORKDAY$INTL(DATE(1999, 10, 10), 100), DATE(2000, 2, 25));
36 assertEquals(WORKDAY$INTL(DATE(1909, 12, 11), 222), DATE(1910, 10, 18));
37 assertEquals(WORKDAY$INTL(DATE(1922, 4, 1), 1234), DATE(1926, 12, 23));
38 assertEquals(WORKDAY$INTL(DATE(1945, 1, 14), 6000), DATE(1968, 1, 12));
39 assertEquals(WORKDAY$INTL(DATE(1945, 1, 14), 6000, "0000011"), DATE(1968, 1, 12));
40 assertEquals(WORKDAY$INTL(DATE(1945, 1, 14), 6000, "1000001"), DATE(1968, 1, 13));
41 assertEquals(WORKDAY$INTL(DATE(1945, 1, 14), 6000, "1100001"), DATE(1973, 10, 13));
42 assertEquals(WORKDAY$INTL(DATE(1945, 1, 14), 6000, "1110000"), DATE(1973, 10, 14));
43 assertEquals(WORKDAY$INTL(DATE(1945, 1, 14), 6000, "1110001"), DATE(1983, 5, 14));
44 assertEquals(WORKDAY$INTL(DATE(1945, 1, 14), 6000, 6), DATE(1968, 1, 14));
45 catchAndAssertEquals(function() {
46 WORKDAY$INTL.apply(this, [12, 12, [12], false, 1]);
47 }, ERRORS.NA_ERROR);
48 catchAndAssertEquals(function() {
49 WORKDAY$INTL.apply(this, [12]);
50 }, ERRORS.NA_ERROR);
51 catchAndAssertEquals(function() {
52 WORKDAY$INTL("1992-1-1", "str");
53 }, ERRORS.VALUE_ERROR);
54 catchAndAssertEquals(function() {
55 WORKDAY$INTL("1992-1-1", 12, []);
56 }, ERRORS.REF_ERROR);
57 catchAndAssertEquals(function() {
58 WORKDAY$INTL("1992-1-1", 16, "000");
59 }, ERRORS.NUM_ERROR);
60 catchAndAssertEquals(function() {
61 WORKDAY$INTL("1992-1-1", 12, 9);
62 }, ERRORS.NUM_ERROR);
63 catchAndAssertEquals(function() {
64 WORKDAY$INTL("1992-1-1", 66, false);
65 }, ERRORS.VALUE_ERROR);
66});
67
68
69test("WORKDAY", function () {
70 assertEquals(WORKDAY(DATE(1999, 2, 2), 10), DATE(1999, 2, 16));
71 assertEquals(WORKDAY(DATE(1999, 10, 10), 100), DATE(2000, 2, 25));
72 assertEquals(WORKDAY(DATE(1909, 12, 11), 222), DATE(1910, 10, 18));
73 assertEquals(WORKDAY(DATE(1922, 4, 1), 1234), DATE(1926, 12, 23));
74 assertEquals(WORKDAY(DATE(1945, 1, 14), 6000), DATE(1968, 1, 12));
75 assertEquals(WORKDAY(DATE(1945, 1, 14), 6000, [23855, 23856, 23857, 23858, 23859]), DATE(1968, 1, 17));
76 assertEquals(WORKDAY(DATE(1945, 1, 14), 6000, 23859), DATE(1968, 1, 15));
77 assertEquals(WORKDAY(DATE(2012, 5, 29), 1000, [41058, 41059, 41060, 41061, 41062]), DATE(2016, 4, 1));
78 assertEquals(WORKDAY([DATE(1999, 2, 2)], [10]), DATE(1999, 2, 16));
79 catchAndAssertEquals(function() {
80 WORKDAY.apply(this, []);
81 }, ERRORS.NA_ERROR);
82 catchAndAssertEquals(function() {
83 WORKDAY.apply(this, [DATE(2012, 5, 29), 1000, [10], 11]);
84 }, ERRORS.NA_ERROR);
85});
86
87
88test("TIME", function () {
89 assertEquals(TIME(10, 10, 10), 0.4237268518518518);
90 assertEquals(TIME(34, 10, 10), 0.4237268518518518);
91 assertEquals(TIME(29, 10, 10), 0.2153935185185185);
92 assertEquals(TIME(13, 9, 6), 0.5479861111111111);
93 assertEquals(TIME(3, 1, 14), 0.12585648148148149);
94 assertEquals(TIME(0, 0, 0), 0);
95 assertEquals(TIME(24, 0, 0), 0);
96 assertEquals(TIME(23, 60, 0), 0);
97 assertEquals(TIME(23, 59, 60), 0);
98 assertEquals(TIME(18, 0, 0), 0.75);
99 assertEquals(TIME(12, 0, 0), 0.5);
100 assertEquals(TIME(6, 0, 0), 0.25);
101 assertEquals(TIME(3, 0, 0), 0.125);
102 assertEquals(TIME("3", ["0"], false), 0.125);
103 catchAndAssertEquals(function() {
104 TIME.apply(this, []);
105 }, ERRORS.NA_ERROR);
106 catchAndAssertEquals(function() {
107 TIME.apply(this, [1, 1]);
108 }, ERRORS.NA_ERROR);
109 catchAndAssertEquals(function() {
110 TIME.apply(this, [1, 1, 1, 1]);
111 }, ERRORS.NA_ERROR);
112 catchAndAssertEquals(function() {
113 TIME(-29, 10, 10);
114 }, ERRORS.NUM_ERROR);
115 catchAndAssertEquals(function() {
116 TIME(1, 1, []);
117 }, ERRORS.REF_ERROR);
118});
119
120
121test("NETWORKDAYS$INTL", function () {
122 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1992-1-30"), 22);
123 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-1"), 263);
124 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-4"), 264);
125 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-5"), 265);
126 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-6"), 266);
127 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-7"), 267);
128 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-8"), 268);
129 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-9"), 268);
130 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1992-1-30", "0000011"), 22);
131 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-1", "0000011"), 263);
132 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-4", "0000011"), 264);
133 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-5", "0000011"), 265);
134 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-6", "0000011"), 266);
135 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-7", "0000011"), 267);
136 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-8", "0000011"), 268);
137 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-9", "0000011"), 268);
138 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1992-1-30", 1), 22);
139 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-1", 1), 263);
140 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-4", 1), 264);
141 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-5", 1), 265);
142 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-6", 1), 266);
143 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-7", 1), 267);
144 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-8", 1), 268);
145 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-1-9", 1), 268);
146 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1992-1-6", "1110011"), 2);
147 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1992-1-14", "1110011"), 4);
148 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1992-1-30", "1110011"), 9);
149 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1992-1-30", "0001110"), 17);
150 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1992-2-22", "0001110"), 29);
151 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1993-2-22", "0001110"), 239);
152 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1992-2-22", "0000110"), 37);
153 assertEquals(NETWORKDAYS$INTL("1992-1-1", "1992-2-22", 1, [DATE(1992, 1, 10), DATE(1992, 1, 11), DATE(1992, 1, 12), DATE(1992, 1, 13), DATE(1992, 1, 14)]), 35);
154 assertEquals(NETWORKDAYS$INTL(["1992-1-1"], ["1992-1-30"], ["0000011"]), 22);
155 assertEquals(NETWORKDAYS$INTL(900, 11999), 7928);
156 assertEquals(NETWORKDAYS$INTL(900, 12000), 7929);
157 assertEquals(NETWORKDAYS$INTL(900, 12001), 7930);
158 assertEquals(NETWORKDAYS$INTL(900, 12002), 7931);
159 assertEquals(NETWORKDAYS$INTL(900, 12003), 7932);
160 assertEquals(NETWORKDAYS$INTL(900, 12004), 7933);
161 assertEquals(NETWORKDAYS$INTL(900, 12005), 7933);
162 catchAndAssertEquals(function() {
163 NETWORKDAYS$INTL.apply(this, [12, 12, [12], false, 1]);
164 }, ERRORS.NA_ERROR);
165 catchAndAssertEquals(function() {
166 NETWORKDAYS$INTL.apply(this, [12]);
167 }, ERRORS.NA_ERROR);
168 catchAndAssertEquals(function() {
169 NETWORKDAYS$INTL("1992-1-1", "str");
170 }, ERRORS.VALUE_ERROR);
171 catchAndAssertEquals(function() {
172 NETWORKDAYS$INTL(12, 12, 1, ["1992-11-1"]);
173 }, ERRORS.VALUE_ERROR);
174 catchAndAssertEquals(function() {
175 NETWORKDAYS$INTL("1992-1-1", "1992-1-1", []);
176 }, ERRORS.REF_ERROR);
177 catchAndAssertEquals(function() {
178 NETWORKDAYS$INTL("1992-1-1", "1994-1-1", "000");
179 }, ERRORS.NUM_ERROR);
180 catchAndAssertEquals(function() {
181 NETWORKDAYS$INTL("1992-1-1", "1994-1-1", 9);
182 }, ERRORS.NUM_ERROR);
183 catchAndAssertEquals(function() {
184 NETWORKDAYS$INTL("1992-1-1", "1994-1-1", false);
185 }, ERRORS.VALUE_ERROR);
186});
187
188
189test("NETWORKDAYS", function(){
190 assertEquals(NETWORKDAYS("1992-1-1", "1992-1-30"), 22);
191 assertEquals(NETWORKDAYS("1992-1-1", "1993-1-1"), 263);
192 assertEquals(NETWORKDAYS("1992-1-1", "1993-1-4"), 264);
193 assertEquals(NETWORKDAYS("1992-1-1", "1993-1-5"), 265);
194 assertEquals(NETWORKDAYS("1992-1-1", "1993-1-6"), 266);
195 assertEquals(NETWORKDAYS("1992-1-1", "1993-1-7"), 267);
196 assertEquals(NETWORKDAYS("1992-1-1", "1993-1-8"), 268);
197 assertEquals(NETWORKDAYS("1992-1-1", "1993-1-9"), 268);
198 assertEquals(NETWORKDAYS("1992-1-1", "2000-4-24"), 2169);
199 assertEquals(NETWORKDAYS("1992-1-1", false), -24003);
200 assertEquals(NETWORKDAYS("2020-12-12", 0), -31555);
201 assertEquals(NETWORKDAYS(12, 1423), 1008);
202 assertEquals(NETWORKDAYS(12, 12), 1);
203 assertEquals(NETWORKDAYS(DATE(1900, 1, 11), 12), 1);
204 assertEquals(NETWORKDAYS(DATE(1998, 1, 1), DATE(1999, 1, 22)), 277);
205 // Single holiday test
206 assertEquals(NETWORKDAYS("1992-1-1", "1992-1-30", [DATEVALUE("1992-1-22")]), 21);
207 assertEquals(NETWORKDAYS("1992-1-1", "1993-1-1", [DATEVALUE("1992-6-19")]), 262);
208 assertEquals(NETWORKDAYS("1992-1-1", "1993-1-4", [DATEVALUE("1992-6-19")]), 263);
209 assertEquals(NETWORKDAYS("1992-1-1", "1993-1-5", [DATEVALUE("1992-6-19")]), 264);
210 assertEquals(NETWORKDAYS("1992-1-1", "1993-1-6", [DATEVALUE("1992-6-19")]), 265);
211 assertEquals(NETWORKDAYS("1992-1-1", "1993-1-7", [DATEVALUE("1992-6-19"), DATEVALUE("1992-6-18")]), 265);
212 assertEquals(NETWORKDAYS("1992-1-1", "1993-1-8", [DATEVALUE("1992-6-19")]), 267);
213 assertEquals(NETWORKDAYS("1992-1-1", "1993-1-9", [DATEVALUE("1992-6-19")]), 267);
214 assertEquals(NETWORKDAYS("1992-1-1", "2000-4-24", [DATEVALUE("1992-6-19")]), 2168);
215 assertEquals(NETWORKDAYS("1992-1-1", false, [DATEVALUE("1991-6-19")]), -24002);
216 assertEquals(NETWORKDAYS("2020-12-12", 0, [DATEVALUE("1992-6-19")]), -31554);
217 assertEquals(NETWORKDAYS(12, 1423, [22]), 1008);// weekend and holdiay overlapping
218 assertEquals(NETWORKDAYS(12, 1423, [20]), 1007);
219 assertEquals(NETWORKDAYS(12, 12, [12]), 0);
220 assertEquals(NETWORKDAYS(DATE(1998, 1, 1), DATE(1999, 1, 22), [DATE(1999, 1, 20)]), 276);
221 catchAndAssertEquals(function() {
222 NETWORKDAYS.apply(this, [12, 12, [12], false]);
223 }, ERRORS.NA_ERROR);
224 catchAndAssertEquals(function() {
225 NETWORKDAYS.apply(this, [12]);
226 }, ERRORS.NA_ERROR);
227 catchAndAssertEquals(function() {
228 NETWORKDAYS("1992-1-1", "str");
229 }, ERRORS.VALUE_ERROR);
230 catchAndAssertEquals(function() {
231 NETWORKDAYS(12, 12, ["1992-11-1"]);
232 }, ERRORS.VALUE_ERROR);
233 catchAndAssertEquals(function() {
234 NETWORKDAYS("1992-1-1", "1992-1-1", []);
235 }, ERRORS.REF_ERROR);
236});
237
238
239test("SECOND", function() {
240 assertEquals(SECOND("8:10"), 0);
241 assertEquals(SECOND("8:11"), 0);
242 assertEquals(SECOND("8:44"), 0);
243 assertEquals(SECOND("8:70"), 0);
244 assertEquals(SECOND("8:120"), 0);
245 assertEquals(SECOND("8:10:22"), 22);
246 assertEquals(SECOND("8:11:12"), 12);
247 assertEquals(SECOND("8:44:09"), 9);
248 assertEquals(SECOND("8:70:02"), 2);
249 assertEquals(SECOND("8:120:44"), 44);
250 assertEquals(SECOND("8:120:104"), 44);
251 assertEquals(SECOND("1992-1-1 8:120:104"), 44);
252 assertEquals(SECOND(0.511111111111), 0);
253 catchAndAssertEquals(function() {
254 SECOND.apply(this, ["8:10", 5]);
255 }, ERRORS.NA_ERROR);
256 catchAndAssertEquals(function() {
257 SECOND.apply(this, []);
258 }, ERRORS.NA_ERROR);
259 catchAndAssertEquals(function() {
260 SECOND("str");
261 }, ERRORS.VALUE_ERROR);
262 catchAndAssertEquals(function() {
263 SECOND(" ");
264 }, ERRORS.VALUE_ERROR);
265 catchAndAssertEquals(function() {
266 SECOND([]);
267 }, ERRORS.REF_ERROR);
268});
269
270
271test("MINUTE", function() {
272 assertEquals(MINUTE("8:10"), 10);
273 assertEquals(MINUTE("8:11"), 11);
274 assertEquals(MINUTE("8:44"), 44);
275 assertEquals(MINUTE("8:70"), 10);
276 assertEquals(MINUTE("8:120"), 0);
277 assertEquals(MINUTE("8:10000pm"), 40);
278 assertEquals(MINUTE("28:10000"), 40);
279 assertEquals(MINUTE("14:23232:9999991"), 58);
280 assertEquals(MINUTE(["8:10"]), 10);
281 assertEquals(MINUTE("11:21222:2111pm"), 17);
282 assertEquals(MINUTE("11:21222:2111am"), 17);
283 assertEquals(MINUTE(""), 0);
284 assertEquals(MINUTE(0), 0);
285 assertEquals(MINUTE(1), 0);
286 assertEquals(MINUTE(false), 0);
287 assertEquals(MINUTE(true), 0);
288 assertEquals(MINUTE(0.8), 12);
289 assertEquals(MINUTE(0.5), 0);
290 assertEquals(MINUTE(0.25), 0);
291 assertEquals(MINUTE(0.125), 0);
292 assertEquals(MINUTE(0.0625), 30);
293 assertEquals(MINUTE(1.5), 0);
294 assertEquals(MINUTE(99.5), 0);
295 assertEquals(MINUTE("1969-7-6 5:05am"), 5);
296 catchAndAssertEquals(function() {
297 MINUTE.apply(this, ["8:10", 5]);
298 }, ERRORS.NA_ERROR);
299 catchAndAssertEquals(function() {
300 MINUTE.apply(this, []);
301 }, ERRORS.NA_ERROR);
302 catchAndAssertEquals(function() {
303 MINUTE("str");
304 }, ERRORS.VALUE_ERROR);
305 catchAndAssertEquals(function() {
306 MINUTE(" ");
307 }, ERRORS.VALUE_ERROR);
308 catchAndAssertEquals(function() {
309 MINUTE([]);
310 }, ERRORS.REF_ERROR);
311});
312
313
314test("HOUR", function() {
315 assertEquals(HOUR("8:10"), 8);
316 assertEquals(HOUR("8am"), 8);
317 assertEquals(HOUR("8:10pm"), 20);
318 assertEquals(HOUR("8:10000pm"), 18);
319 assertEquals(HOUR("28:10000"), 2);
320 assertEquals(HOUR("14:23232:9999991"), 10);
321 assertEquals(HOUR(["8:10"]), 8);
322 assertEquals(HOUR("11:21222:2111pm"), 17);
323 assertEquals(HOUR("11:21222:2111am"), 5);
324 assertEquals(HOUR(""), 0);
325 assertEquals(HOUR(0), 0);
326 assertEquals(HOUR(1), 0);
327 assertEquals(HOUR(false), 0);
328 assertEquals(HOUR(true), 0);
329 assertEquals(HOUR(0.8), 19);
330 assertEquals(HOUR(0.5), 12);
331 assertEquals(HOUR(0.25), 6);
332 assertEquals(HOUR(0.125), 3);
333 assertEquals(HOUR(0.0625), 1);
334 assertEquals(HOUR(1.5), 12);
335 assertEquals(HOUR(99.5), 12);
336 assertEquals(HOUR("0.8"), 19);
337 assertEquals(HOUR("0.5"), 12);
338 assertEquals(HOUR("0.25"), 6);
339 assertEquals(HOUR("0.125"), 3);
340 assertEquals(HOUR("0.0625"), 1);
341 assertEquals(HOUR("1969-7-6 5am"), 5);
342 catchAndAssertEquals(function() {
343 HOUR.apply(this, ["8:10", 5]);
344 }, ERRORS.NA_ERROR);
345 catchAndAssertEquals(function() {
346 HOUR.apply(this, []);
347 }, ERRORS.NA_ERROR);
348 catchAndAssertEquals(function() {
349 HOUR("str");
350 }, ERRORS.VALUE_ERROR);
351 catchAndAssertEquals(function() {
352 HOUR(" ");
353 }, ERRORS.VALUE_ERROR);
354 catchAndAssertEquals(function() {
355 HOUR([]);
356 }, ERRORS.REF_ERROR);
357});
358
359
360test("TIMEVALUE", function() {
361 assertEquals(TIMEVALUE("1969-7-6"), 0);
362 assertEquals(TIMEVALUE("1969-7-6 8am"), 0.3333333333333333);
363 assertEquals(TIMEVALUE("1969-7-28 8:10"), 0.3402777777777778);
364 assertEquals(TIMEVALUE("2100-7-6 8:10pm"), 0.8402777777777778);
365 assertEquals(TIMEVALUE("1999-1-1 8:10000pm"), 0.7777777777777778);
366 assertEquals(TIMEVALUE("2012/1/1 28:10000"), 0.1111111111111111);
367 assertEquals(TIMEVALUE("2012/1/1 14:23232:9999991"), 0.45730324074074075);
368 assertEquals(TIMEVALUE(["2012/1/1 8:10"]), 0.3402777777777778);
369 assertEquals(TIMEVALUE("2012/1/1 11:21222:2111pm"), 0.7202662037037038);
370 assertEquals(TIMEVALUE("2012/1/1 11:21222:2111am"), 0.2202662037037037);
371 assertEquals(TIMEVALUE("8am"), 0.3333333333333333);
372 assertEquals(TIMEVALUE("8:10"), 0.3402777777777778);
373 assertEquals(TIMEVALUE("8:10pm"), 0.8402777777777778);
374 assertEquals(TIMEVALUE("8:10000pm"), 0.7777777777777778);
375 assertEquals(TIMEVALUE("28:10000"), 0.1111111111111111);
376 assertEquals(TIMEVALUE("14:23232:9999991"), 0.45730324074074075);
377 assertEquals(TIMEVALUE(["8:10"]), 0.3402777777777778);
378 assertEquals(TIMEVALUE("11:21222:2111pm"), 0.7202662037037038);
379 assertEquals(TIMEVALUE("11:21222:2111am"), 0.2202662037037037);
380 catchAndAssertEquals(function() {
381 TIMEVALUE.apply(this, ["8:10", 5]);
382 }, ERRORS.NA_ERROR);
383 catchAndAssertEquals(function() {
384 TIMEVALUE.apply(this, []);
385 }, ERRORS.NA_ERROR);
386 catchAndAssertEquals(function() {
387 TIMEVALUE("str");
388 }, ERRORS.VALUE_ERROR);
389 catchAndAssertEquals(function() {
390 TIMEVALUE([]);
391 }, ERRORS.REF_ERROR);
392});
393
394
395test("YEARFRAC", function(){
396 assertEquals(YEARFRAC(1, 1461, 2), 4.055555555555555);
397 assertEquals(YEARFRAC(0, 365, 0), 1);
398 assertEquals(YEARFRAC(0, 365, 1), 1);
399 assertEquals(YEARFRAC(0, 365, 2), 1.0138888888888888);
400 assertEquals(YEARFRAC(0, 365, 3), 1);
401 assertEquals(YEARFRAC(0, 365, 4), 1);
402 assertEquals(YEARFRAC(0, 1000, 0), 2.738888888888889);
403 assertEquals(YEARFRAC(0, 1000, 1), 2.73972602739726);
404 assertEquals(YEARFRAC(0, 1000, 2), 2.7777777777777777);
405 assertEquals(YEARFRAC(0, 1000, 3), 2.73972602739726);
406 assertEquals(YEARFRAC(0, 1000, 4), 2.738888888888889);
407 assertEquals(YEARFRAC(10000, 20000, 0), 27.375);
408 assertEquals(YEARFRAC(10000, 20000, 1), 27.378507871321013); // gs: 27.37808219, ms: 27.37850787
409 assertEquals(YEARFRAC(10000, 20000, 2), 27.77777777777778);
410 assertEquals(YEARFRAC(10000, 20000, 3), 27.397260273972602);
411 assertEquals(YEARFRAC(10000, 20000, 4), 27.375);
412 assertEquals(YEARFRAC(100000, 200000, 0), 273.7944444444444);
413 assertEquals(YEARFRAC(100000, 200000, 1), 273.7925747453729); // gs: 273.7917808, ms: 273.7925747
414 assertEquals(YEARFRAC(100000, 200000, 2), 277.77777777777777);
415 assertEquals(YEARFRAC(100000, 200000, 3), 273.972602739726);
416 assertEquals(YEARFRAC(100000, 200000, 4), 273.7944444444444);
417 assertEquals(YEARFRAC("1969-7-6", "1988-7-4", 0), 18.994444444444444);
418 assertEquals(YEARFRAC("1969-7-6", "1988-7-22", 0), 19.044444444444444);
419 assertEquals(YEARFRAC("1992-1-6", "2191-7-22", 0), 199.544444444444444);
420 assertEquals(YEARFRAC("1992-1-6", "2191-1-21", 0), 199.041666666666667);
421 assertEquals(YEARFRAC("1992-1-6", "2144-1-22", 0), 152.044444444444444);
422 assertEquals(YEARFRAC("1992-1-6", "1992-1-6", 0), 0);
423 assertEquals(YEARFRAC("1992-1-6", "1992-1-1", 0), 0.013888888888888888);
424 assertEquals(YEARFRAC("1992-1-6", "1993-1-6", 0), 1);
425 assertEquals(YEARFRAC("1969-7-6", "1988-7-4", 1), 18.99520876112252);
426 assertEquals(YEARFRAC("1969-7-6", "1988-7-22", 1), 19.044490075290895);
427 assertEquals(YEARFRAC("1992-1-6", "2191-7-22", 1), 199.54003477118098);
428 assertEquals(YEARFRAC("1992-1-6", "2191-1-21", 1), 199.04173910662706);
429 assertEquals(YEARFRAC("1992-1-6", "2144-1-22", 1), 152.04174793765546);
430 assertEquals(YEARFRAC("1992-1-6", "1992-1-6", 1), 0);
431 assertEquals(YEARFRAC("1992-1-6", "1992-1-1", 1), 0.01366120218579235);
432 assertEquals(YEARFRAC("1991-1-6", "1992-1-6", 1), 1);
433 assertEquals(YEARFRAC("1992-1-6", "1993-1-6", 1), 1);
434 assertEquals(YEARFRAC("1969-7-6", "1988-7-22", 2), 19.322222222222223);
435 assertEquals(YEARFRAC("1992-1-6", "2191-7-22", 2), 202.44722222222222);
436 assertEquals(YEARFRAC("1992-1-6", "2191-1-21", 2), 201.94166666666666);
437 assertEquals(YEARFRAC("1992-1-6", "2144-1-22", 2), 154.25833333333333);
438 assertEquals(YEARFRAC("1992-1-6", "1992-1-6", 2), 0);
439 assertEquals(YEARFRAC("1992-1-6", "1992-1-1", 2), 0.013888888888888888);
440 assertEquals(YEARFRAC("1991-1-6", "1992-1-6", 2), 1.0138888888888888);
441 assertEquals(YEARFRAC("1992-1-6", "1993-1-6", 2), 1.0166666666666666);
442 assertEquals(YEARFRAC("1969-7-6", "1988-7-22", 3), 19.057534246575344);
443 assertEquals(YEARFRAC("1992-1-6", "2191-7-22", 3), 199.67397260273972);
444 assertEquals(YEARFRAC("1992-1-6", "2191-1-21", 3), 199.17534246575343);
445 assertEquals(YEARFRAC("1992-1-6", "2144-1-22", 3), 152.14520547945204);
446 assertEquals(YEARFRAC("1992-1-6", "1992-1-6", 3), 0);
447 assertEquals(YEARFRAC("1992-1-6", "1992-1-1", 3), 0.0136986301369863);
448 assertEquals(YEARFRAC("1991-1-6", "1992-1-6", 3), 1);
449 assertEquals(YEARFRAC("1992-1-6", "1993-1-6", 3), 1.0027397260273974);
450 assertEquals(YEARFRAC("1969-7-6", "1988-7-22", 4), 19.044444444444444);
451 assertEquals(YEARFRAC("1992-1-6", "2191-7-22", 4), 199.54444444444445);
452 assertEquals(YEARFRAC("1992-1-6", "2191-1-21", 4), 199.04166666666666);
453 assertEquals(YEARFRAC("1992-1-6", "2144-1-22", 4), 152.04444444444445);
454 assertEquals(YEARFRAC("1992-1-6", "1992-1-6", 4), 0);
455 assertEquals(YEARFRAC("1992-1-6", "1992-1-1", 4), 0.013888888888888888);
456 assertEquals(YEARFRAC("1991-1-6", "1992-1-6", 4), 1);
457 assertEquals(YEARFRAC("1992-1-6", "1993-1-6", 4), 1);
458 assertEquals(YEARFRAC("1969-7-6", "1988-7-4", 2), 19.272222222222222);
459 assertEquals(YEARFRAC("1969-7-6", "1988-7-4", 3), 19.008219178082193);
460 assertEquals(YEARFRAC("1969-7-6", "1988-7-4", 4), 18.994444444444444);
461 assertEquals(YEARFRAC(["1992-1-6", []], ["1993-1-6", "str"], [4]), 1);
462 catchAndAssertEquals(function() {
463 YEARFRAC("1996-6-19", "1992-6-19", 5);
464 }, ERRORS.NUM_ERROR);
465 catchAndAssertEquals(function() {
466 YEARFRAC.apply(this, []);
467 }, ERRORS.NA_ERROR);
468 catchAndAssertEquals(function() {
469 YEARFRAC.apply(this, ["1992-6-19", "1995-6-19", 1, 0]);
470 }, ERRORS.NA_ERROR);
471 catchAndAssertEquals(function() {
472 YEARFRAC("str", "1995-6-19", 1);
473 }, ERRORS.VALUE_ERROR);
474 catchAndAssertEquals(function() {
475 YEARFRAC([], "1995-6-19", 1);
476 }, ERRORS.REF_ERROR);
477});
478
479
480test("DATEDIF", function(){
481 assertEquals(DATEDIF("1992-6-19", "1996-6-19", "Y"), 4);
482 assertEquals(DATEDIF("1992-6-19", "1996-6-0", "Y"), 3);
483 assertEquals(DATEDIF("1992-6-19", "1992-8-1", "Y"), 0);
484 assertEquals(DATEDIF("1992-6-19", "2199-8-1", "Y"), 207);
485 assertEquals(DATEDIF("1992-6-19", "1996-6-19", "M"), 48);
486 assertEquals(DATEDIF("1992-6-19", "1996-6-1", "M"), 47);
487 assertEquals(DATEDIF("1992-6-19", "1992-8-1", "M"), 1);
488 assertEquals(DATEDIF("1992-6-19", "2199-8-1", "M"), 2485);
489 assertEquals(DATEDIF("1992-6-19", "1996-6-19", "D"), 1461);
490 assertEquals(DATEDIF("1992-6-19", "1996-6-1", "D"), 1443);
491 assertEquals(DATEDIF("1992-6-19", "1992-8-1", "D"), 43);
492 assertEquals(DATEDIF("1992-6-19", "2199-8-1", "D"), 75648);
493 assertEquals(DATEDIF("1992-6-19", "2199-8-1", "MD"), 13);
494 assertEquals(DATEDIF("1992-6-19", "2012-7-22", "MD"), 3);
495 assertEquals(DATEDIF("1992-6-19", "1993-8-1", "MD"), 13);
496 assertEquals(DATEDIF("1992-6-19", "2000-1-19", "MD"), 0);
497 assertEquals(DATEDIF("1992-6-19", "2000-1-20", "MD"), 1);
498 assertEquals(DATEDIF("1992-6-19", "2000-1-21", "MD"), 2);
499 assertEquals(DATEDIF("1992-6-19", "2000-1-22", "MD"), 3);
500 assertEquals(DATEDIF("1992-6-19", "2000-1-23", "MD"), 4);
501 assertEquals(DATEDIF("1992-6-19", "2000-1-24", "MD"), 5);
502 assertEquals(DATEDIF("1992-6-19", "2000-1-25", "MD"), 6);
503 assertEquals(DATEDIF("1992-6-20", "2000-1-25", "MD"), 5);
504 assertEquals(DATEDIF("1992-6-19", "2199-8-1", "YM"), 1);
505 assertEquals(DATEDIF("1992-6-19", "2012-7-22", "YM"), 1);
506 assertEquals(DATEDIF("1992-6-19", "1993-8-1", "YM"), 1);
507 assertEquals(DATEDIF("1992-6-19", "2000-1-19", "YM"), 7);
508 assertEquals(DATEDIF("1992-6-19", "2000-1-20", "YM"), 7);
509 assertEquals(DATEDIF("1992-6-19", "2000-1-21", "YM"), 7);
510 assertEquals(DATEDIF("1992-6-19", "2000-1-22", "YM"), 7);
511 assertEquals(DATEDIF("1992-6-19", "2000-1-23", "YM"), 7);
512 assertEquals(DATEDIF("1992-6-19", "2000-1-24", "YM"), 7);
513 assertEquals(DATEDIF("1992-6-19", "2000-1-25", "YM"), 7);
514 assertEquals(DATEDIF("1992-6-20", "2000-1-25", "YM"), 7);
515 assertEquals(DATEDIF("1992-6-19", "1992-6-19", "YM"), 0);
516 assertEquals(DATEDIF("1992-6-19", "1992-7-19", "YM"), 1);
517 assertEquals(DATEDIF("1992-6-19", "1993-7-19", "YM"), 1);
518 assertEquals(DATEDIF("1992-6-19", "1993-6-19", "YM"), 0);
519 assertEquals(DATEDIF("1992-6-19", "2199-8-1", "YD"), 43);
520 assertEquals(DATEDIF("1992-6-19", "2012-7-22", "YD"), 33);
521 assertEquals(DATEDIF("1992-6-19", "1993-8-1", "YD"), 43);
522 assertEquals(DATEDIF("1992-6-19", "2000-1-19", "YD"), 214);
523 assertEquals(DATEDIF("1992-6-19", "2000-1-20", "YD"), 215);
524 assertEquals(DATEDIF("1992-6-19", "2000-1-21", "YD"), 216);
525 assertEquals(DATEDIF("1992-6-19", "2000-1-22", "YD"), 217);
526 assertEquals(DATEDIF("1992-6-19", "2000-1-23", "YD"), 218);
527 assertEquals(DATEDIF("1992-6-19", "2000-1-24", "YD"), 219);
528 assertEquals(DATEDIF("1992-6-19", "2000-1-25", "YD"), 220);
529 assertEquals(DATEDIF("1992-6-19", "1992-6-19", "YD"), 0);
530 assertEquals(DATEDIF("1992-6-19", "1992-7-19", "YD"), 30);
531 assertEquals(DATEDIF("1992-6-19", "1993-7-19", "YD"), 30);
532 assertEquals(DATEDIF("1992-6-19", "1993-6-19", "YD"), 0);
533 assertEquals(DATEDIF("1992-6-19", "1993-6-19", "yd"), 0);
534 assertEquals(DATEDIF(["1992-6-19", "str"], ["1993-6-19", []], ["yd"]), 0);
535 catchAndAssertEquals(function() {
536 DATEDIF("1996-6-19", "1992-6-19", "Y");
537 }, ERRORS.NUM_ERROR);
538 catchAndAssertEquals(function() {
539 DATEDIF("1992-6-19", "1995-6-19", "Y ");
540 }, ERRORS.NUM_ERROR);
541 catchAndAssertEquals(function() {
542 DATEDIF("1992-6-19", "1995-6-19", "mm");
543 }, ERRORS.NUM_ERROR);
544 catchAndAssertEquals(function() {
545 DATEDIF.apply(this, []);
546 }, ERRORS.NA_ERROR);
547 catchAndAssertEquals(function() {
548 DATEDIF.apply(this, ["1992-6-19", "1995-6-19", "mm", 0]);
549 }, ERRORS.NA_ERROR);
550 catchAndAssertEquals(function() {
551 DATEDIF("str", "1995-6-19", "mm");
552 }, ERRORS.VALUE_ERROR);
553 catchAndAssertEquals(function() {
554 DATEDIF([], "1995-6-19", "mm");
555 }, ERRORS.REF_ERROR);
556});
557
558
559test("WEEKNUM", function(){
560 assertEquals(WEEKNUM(DATE(1992, 6, 19)), 25);
561 assertEquals(WEEKNUM(DATE(1992, 6, 20)), 25);
562 assertEquals(WEEKNUM(DATE(1992, 6, 21)), 26);
563 assertEquals(WEEKNUM(0), 52);
564 assertEquals(WEEKNUM(false), 52);
565 assertEquals(WEEKNUM(1), 53);
566 assertEquals(WEEKNUM(true), 53);
567 assertEquals(WEEKNUM(2), 1);
568 assertEquals(WEEKNUM(3), 1);
569 assertEquals(WEEKNUM(4), 1);
570 assertEquals(WEEKNUM(5), 1);
571 assertEquals(WEEKNUM(6), 1);
572 assertEquals(WEEKNUM(7), 1);
573 assertEquals(WEEKNUM(8), 2);
574 assertEquals(WEEKNUM(9), 2);
575 assertEquals(WEEKNUM(10), 2);
576 assertEquals(WEEKNUM(11), 2);
577 assertEquals(WEEKNUM(12), 2);
578 assertEquals(WEEKNUM(13), 2);
579 assertEquals(WEEKNUM(14), 2);
580 assertEquals(WEEKNUM(15), 3);
581 assertEquals(WEEKNUM(16), 3);
582 assertEquals(WEEKNUM(17), 3);
583 assertEquals(WEEKNUM(18), 3);
584 assertEquals(WEEKNUM(23734), 52);
585 assertEquals(WEEKNUM(23735), 52);
586 assertEquals(WEEKNUM(23736), 52);
587 assertEquals(WEEKNUM(23737), 52);
588 assertEquals(WEEKNUM(23738), 53);
589 assertEquals(WEEKNUM(23739), 53);
590 assertEquals(WEEKNUM(23740), 53);
591 assertEquals(WEEKNUM(23741), 53);
592 assertEquals(WEEKNUM(23742), 53);
593 assertEquals(WEEKNUM(23743), 1);
594 assertEquals(WEEKNUM(23744), 1);
595 assertEquals(WEEKNUM(23745), 2);
596 assertEquals(WEEKNUM(23746), 2);
597 assertEquals(WEEKNUM(23747), 2);
598 assertEquals(WEEKNUM(23748), 2);
599 assertEquals(WEEKNUM(23749), 2);
600 assertEquals(WEEKNUM(23750), 2);
601 assertEquals(WEEKNUM(23751), 2);
602 assertEquals(WEEKNUM(23752), 3);
603 // type=2
604 assertEquals(WEEKNUM(23737, 2), 52);
605 assertEquals(WEEKNUM(23738, 2), 52);
606 assertEquals(WEEKNUM(23739, 2), 53);
607 assertEquals(WEEKNUM(23740, 2), 53);
608 assertEquals(WEEKNUM(23741, 2), 53);
609 assertEquals(WEEKNUM(23742, 2), 53);
610 assertEquals(WEEKNUM(23743, 2), 1);
611 assertEquals(WEEKNUM(23744, 2), 1);
612 assertEquals(WEEKNUM(23745, 2), 1);
613 assertEquals(WEEKNUM(23746, 2), 2);
614 assertEquals(WEEKNUM(23747, 2), 2);
615 assertEquals(WEEKNUM(23748, 2), 2);
616 assertEquals(WEEKNUM(23749, 2), 2);
617 assertEquals(WEEKNUM(23750, 2), 2);
618 assertEquals(WEEKNUM(23751, 2), 2);
619 assertEquals(WEEKNUM(23752, 2), 2);
620 assertEquals(WEEKNUM(23753, 2), 3);
621 assertEquals(WEEKNUM(23754, 2), 3);
622 assertEquals(WEEKNUM(23755, 2), 3);
623 assertEquals(WEEKNUM(23756, 2), 3);
624 assertEquals(WEEKNUM(23757, 2), 3);
625 assertEquals(WEEKNUM(23758, 2), 3);
626 assertEquals(WEEKNUM(23759, 2), 3);
627 assertEquals(WEEKNUM(23760, 2), 4);
628 //type=11
629 assertEquals(WEEKNUM(23737, 11), 52);
630 assertEquals(WEEKNUM(23738, 11), 52);
631 assertEquals(WEEKNUM(23739, 11), 53);
632 assertEquals(WEEKNUM(23740, 11), 53);
633 assertEquals(WEEKNUM(23741, 11), 53);
634 assertEquals(WEEKNUM(23742, 11), 53);
635 assertEquals(WEEKNUM(23743, 11), 1);
636 assertEquals(WEEKNUM(23744, 11), 1);
637 assertEquals(WEEKNUM(23745, 11), 1);
638 assertEquals(WEEKNUM(23746, 11), 2);
639 assertEquals(WEEKNUM(23747, 11), 2);
640 assertEquals(WEEKNUM(23748, 11), 2);
641 assertEquals(WEEKNUM(23749, 11), 2);
642 assertEquals(WEEKNUM(23750, 11), 2);
643 assertEquals(WEEKNUM(23751, 11), 2);
644 assertEquals(WEEKNUM(23752, 11), 2);
645 assertEquals(WEEKNUM(23753, 11), 3);
646 assertEquals(WEEKNUM(23754, 11), 3);
647 assertEquals(WEEKNUM(23755, 11), 3);
648 assertEquals(WEEKNUM(23756, 11), 3);
649 assertEquals(WEEKNUM(23757, 11), 3);
650 assertEquals(WEEKNUM(23758, 11), 3);
651 assertEquals(WEEKNUM(23759, 11), 3);
652 assertEquals(WEEKNUM(23760, 11), 4);
653 //type=12
654 assertEquals(WEEKNUM(23737, 12), 52);
655 assertEquals(WEEKNUM(23738, 12), 52);
656 assertEquals(WEEKNUM(23739, 12), 52);
657 assertEquals(WEEKNUM(23740, 12), 53);
658 assertEquals(WEEKNUM(23741, 12), 53);
659 assertEquals(WEEKNUM(23742, 12), 53);
660 assertEquals(WEEKNUM(23743, 12), 1);
661 assertEquals(WEEKNUM(23744, 12), 1);
662 assertEquals(WEEKNUM(23745, 12), 1);
663 assertEquals(WEEKNUM(23746, 12), 1);
664 assertEquals(WEEKNUM(23747, 12), 2);
665 assertEquals(WEEKNUM(23748, 12), 2);
666 assertEquals(WEEKNUM(23749, 12), 2);
667 assertEquals(WEEKNUM(23750, 12), 2);
668 assertEquals(WEEKNUM(23751, 12), 2);
669 assertEquals(WEEKNUM(23752, 12), 2);
670 assertEquals(WEEKNUM(23753, 12), 2);
671 assertEquals(WEEKNUM(23754, 12), 3);
672 assertEquals(WEEKNUM(23755, 12), 3);
673 assertEquals(WEEKNUM(23756, 12), 3);
674 assertEquals(WEEKNUM(23757, 12), 3);
675 assertEquals(WEEKNUM(23758, 12), 3);
676 assertEquals(WEEKNUM(23759, 12), 3);
677 assertEquals(WEEKNUM(23760, 12), 3);
678 //type=13
679 assertEquals(WEEKNUM(23737, 13), 52);
680 assertEquals(WEEKNUM(23738, 13), 52);
681 assertEquals(WEEKNUM(23739, 13), 52);
682 assertEquals(WEEKNUM(23740, 13), 52);
683 assertEquals(WEEKNUM(23741, 13), 53);
684 assertEquals(WEEKNUM(23742, 13), 53);
685 assertEquals(WEEKNUM(23743, 13), 1);
686 assertEquals(WEEKNUM(23744, 13), 1);
687 assertEquals(WEEKNUM(23745, 13), 1);
688 assertEquals(WEEKNUM(23746, 13), 1);
689 assertEquals(WEEKNUM(23747, 13), 1);
690 assertEquals(WEEKNUM(23748, 13), 2);
691 assertEquals(WEEKNUM(23749, 13), 2);
692 assertEquals(WEEKNUM(23750, 13), 2);
693 assertEquals(WEEKNUM(23751, 13), 2);
694 assertEquals(WEEKNUM(23752, 13), 2);
695 assertEquals(WEEKNUM(23753, 13), 2);
696 assertEquals(WEEKNUM(23754, 13), 2);
697 assertEquals(WEEKNUM(23755, 13), 3);
698 assertEquals(WEEKNUM(23756, 13), 3);
699 assertEquals(WEEKNUM(23757, 13), 3);
700 assertEquals(WEEKNUM(23758, 13), 3);
701 assertEquals(WEEKNUM(23759, 13), 3);
702 assertEquals(WEEKNUM(23760, 13), 3);
703 //type=14
704 assertEquals(WEEKNUM(23734, 14), 52);
705 assertEquals(WEEKNUM(23735, 14), 53);
706 assertEquals(WEEKNUM(23736, 14), 53);
707 assertEquals(WEEKNUM(23737, 14), 53);
708 assertEquals(WEEKNUM(23738, 14), 53);
709 assertEquals(WEEKNUM(23739, 14), 53);
710 assertEquals(WEEKNUM(23740, 14), 53);
711 assertEquals(WEEKNUM(23741, 14), 53);
712 assertEquals(WEEKNUM(23742, 14), 54);
713 assertEquals(WEEKNUM(23743, 14), 1);
714 assertEquals(WEEKNUM(23744, 14), 1);
715 assertEquals(WEEKNUM(23745, 14), 1);
716 assertEquals(WEEKNUM(23746, 14), 1);
717 assertEquals(WEEKNUM(23747, 14), 1);
718 assertEquals(WEEKNUM(23748, 14), 1);
719 assertEquals(WEEKNUM(23749, 14), 2);
720 assertEquals(WEEKNUM(23750, 14), 2);
721 assertEquals(WEEKNUM(23751, 14), 2);
722 assertEquals(WEEKNUM(23752, 14), 2);
723 assertEquals(WEEKNUM(23753, 14), 2);
724 assertEquals(WEEKNUM(23754, 14), 2);
725 assertEquals(WEEKNUM(23755, 14), 2);
726 assertEquals(WEEKNUM(23756, 14), 3);
727 assertEquals(WEEKNUM(23757, 14), 3);
728 assertEquals(WEEKNUM(23758, 14), 3);
729 assertEquals(WEEKNUM(23759, 14), 3);
730 assertEquals(WEEKNUM(23760, 14), 3);
731 //type=14 again
732 assertEquals(WEEKNUM(355, 14), 52);
733 assertEquals(WEEKNUM(356, 14), 52);
734 assertEquals(WEEKNUM(357, 14), 52);
735 assertEquals(WEEKNUM(358, 14), 52);
736 assertEquals(WEEKNUM(359, 14), 52);
737 assertEquals(WEEKNUM(360, 14), 52);
738 assertEquals(WEEKNUM(361, 14), 52);
739 assertEquals(WEEKNUM(362, 14), 53);
740 assertEquals(WEEKNUM(363, 14), 53);
741 assertEquals(WEEKNUM(364, 14), 53);
742 assertEquals(WEEKNUM(365, 14), 53);
743 assertEquals(WEEKNUM(366, 14), 53);
744 assertEquals(WEEKNUM(367, 14), 1);
745 assertEquals(WEEKNUM(368, 14), 1);
746 assertEquals(WEEKNUM(369, 14), 2);
747 assertEquals(WEEKNUM(370, 14), 2);
748 assertEquals(WEEKNUM(371, 14), 2);
749 assertEquals(WEEKNUM(372, 14), 2);
750 assertEquals(WEEKNUM(373, 14), 2);
751 assertEquals(WEEKNUM(374, 14), 2);
752 assertEquals(WEEKNUM(375, 14), 2);
753 assertEquals(WEEKNUM(376, 14), 3);
754 assertEquals(WEEKNUM(377, 14), 3);
755 assertEquals(WEEKNUM(378, 14), 3);
756 assertEquals(WEEKNUM(379, 14), 3);
757 assertEquals(WEEKNUM(380, 14), 3);
758 assertEquals(WEEKNUM(381, 14), 3);
759 //type=14 again
760 assertEquals(WEEKNUM(730, 14), 53);
761 assertEquals(WEEKNUM(731, 14), 53);
762 assertEquals(WEEKNUM(732, 14), 1);
763 assertEquals(WEEKNUM(733, 14), 2);
764 assertEquals(WEEKNUM(734, 14), 2);
765 assertEquals(WEEKNUM(735, 14), 2);
766 assertEquals(WEEKNUM(736, 14), 2);
767 assertEquals(WEEKNUM(737, 14), 2);
768 assertEquals(WEEKNUM(738, 14), 2);
769 assertEquals(WEEKNUM(739, 14), 2);
770 assertEquals(WEEKNUM(740, 14), 3);
771 assertEquals(WEEKNUM(741, 14), 3);
772 assertEquals(WEEKNUM(742, 14), 3);
773 assertEquals(WEEKNUM(743, 14), 3);
774 assertEquals(WEEKNUM(744, 14), 3);
775 assertEquals(WEEKNUM(745, 14), 3);
776 assertEquals(WEEKNUM(746, 14), 3);
777 //type=15
778 assertEquals(WEEKNUM(23734, 15), 52);
779 assertEquals(WEEKNUM(23735, 15), 52);
780 assertEquals(WEEKNUM(23736, 15), 53);
781 assertEquals(WEEKNUM(23737, 15), 53);
782 assertEquals(WEEKNUM(23738, 15), 53);
783 assertEquals(WEEKNUM(23739, 15), 53);
784 assertEquals(WEEKNUM(23740, 15), 53);
785 assertEquals(WEEKNUM(23741, 15), 53);
786 assertEquals(WEEKNUM(23742, 15), 53);
787 assertEquals(WEEKNUM(23743, 15), 1);
788 assertEquals(WEEKNUM(23744, 15), 1);
789 assertEquals(WEEKNUM(23745, 15), 1);
790 assertEquals(WEEKNUM(23746, 15), 1);
791 assertEquals(WEEKNUM(23747, 15), 1);
792 assertEquals(WEEKNUM(23748, 15), 1);
793 assertEquals(WEEKNUM(23749, 15), 1);
794 assertEquals(WEEKNUM(23750, 15), 2);
795 assertEquals(WEEKNUM(23751, 15), 2);
796 assertEquals(WEEKNUM(23752, 15), 2);
797 assertEquals(WEEKNUM(23753, 15), 2);
798 assertEquals(WEEKNUM(23754, 15), 2);
799 assertEquals(WEEKNUM(23755, 15), 2);
800 assertEquals(WEEKNUM(23756, 15), 2);
801 assertEquals(WEEKNUM(23757, 15), 3);
802 assertEquals(WEEKNUM(23758, 15), 3);
803 assertEquals(WEEKNUM(23759, 15), 3);
804 assertEquals(WEEKNUM(23760, 15), 3);
805 //type=15 again
806 assertEquals(WEEKNUM(355, 15), 51);
807 assertEquals(WEEKNUM(356, 15), 52);
808 assertEquals(WEEKNUM(357, 15), 52);
809 assertEquals(WEEKNUM(358, 15), 52);
810 assertEquals(WEEKNUM(359, 15), 52);
811 assertEquals(WEEKNUM(360, 15), 52);
812 assertEquals(WEEKNUM(361, 15), 52);
813 assertEquals(WEEKNUM(362, 15), 52);
814 assertEquals(WEEKNUM(363, 15), 53);
815 assertEquals(WEEKNUM(364, 15), 53);
816 assertEquals(WEEKNUM(365, 15), 53);
817 assertEquals(WEEKNUM(366, 15), 53);
818 assertEquals(WEEKNUM(367, 15), 1);
819 assertEquals(WEEKNUM(368, 15), 1);
820 assertEquals(WEEKNUM(369, 15), 1);
821 assertEquals(WEEKNUM(370, 15), 2);
822 assertEquals(WEEKNUM(371, 15), 2);
823 assertEquals(WEEKNUM(372, 15), 2);
824 assertEquals(WEEKNUM(373, 15), 2);
825 assertEquals(WEEKNUM(374, 15), 2);
826 assertEquals(WEEKNUM(375, 15), 2);
827 assertEquals(WEEKNUM(376, 15), 2);
828 assertEquals(WEEKNUM(377, 15), 3);
829 assertEquals(WEEKNUM(378, 15), 3);
830 assertEquals(WEEKNUM(379, 15), 3);
831 assertEquals(WEEKNUM(380, 15), 3);
832 assertEquals(WEEKNUM(381, 15), 3);
833 //type=15 again
834 assertEquals(WEEKNUM(730, 15), 53);
835 assertEquals(WEEKNUM(731, 15), 53);
836 assertEquals(WEEKNUM(732, 15), 1);
837 assertEquals(WEEKNUM(733, 15), 1);
838 assertEquals(WEEKNUM(734, 15), 2);
839 assertEquals(WEEKNUM(735, 15), 2);
840 assertEquals(WEEKNUM(736, 15), 2);
841 assertEquals(WEEKNUM(737, 15), 2);
842 assertEquals(WEEKNUM(738, 15), 2);
843 assertEquals(WEEKNUM(739, 15), 2);
844 assertEquals(WEEKNUM(740, 15), 2);
845 assertEquals(WEEKNUM(741, 15), 3);
846 assertEquals(WEEKNUM(742, 15), 3);
847 assertEquals(WEEKNUM(743, 15), 3);
848 assertEquals(WEEKNUM(744, 15), 3);
849 assertEquals(WEEKNUM(745, 15), 3);
850 assertEquals(WEEKNUM(746, 15), 3);
851 //type=16
852 assertEquals(WEEKNUM(23734, 16), 52);
853 assertEquals(WEEKNUM(23735, 16), 52);
854 assertEquals(WEEKNUM(23736, 16), 52);
855 assertEquals(WEEKNUM(23737, 16), 53);
856 assertEquals(WEEKNUM(23738, 16), 53);
857 assertEquals(WEEKNUM(23739, 16), 53);
858 assertEquals(WEEKNUM(23740, 16), 53);
859 assertEquals(WEEKNUM(23741, 16), 53);
860 assertEquals(WEEKNUM(23742, 16), 53);
861 assertEquals(WEEKNUM(23743, 16), 1);
862 assertEquals(WEEKNUM(23744, 16), 2);
863 assertEquals(WEEKNUM(23745, 16), 2);
864 assertEquals(WEEKNUM(23746, 16), 2);
865 assertEquals(WEEKNUM(23747, 16), 2);
866 assertEquals(WEEKNUM(23748, 16), 2);
867 assertEquals(WEEKNUM(23749, 16), 2);
868 assertEquals(WEEKNUM(23750, 16), 2);
869 assertEquals(WEEKNUM(23751, 16), 3);
870 assertEquals(WEEKNUM(23752, 16), 3);
871 assertEquals(WEEKNUM(23753, 16), 3);
872 assertEquals(WEEKNUM(23754, 16), 3);
873 assertEquals(WEEKNUM(23755, 16), 3);
874 assertEquals(WEEKNUM(23756, 16), 3);
875 assertEquals(WEEKNUM(23757, 16), 3);
876 assertEquals(WEEKNUM(23758, 16), 4);
877 assertEquals(WEEKNUM(23759, 16), 4);
878 assertEquals(WEEKNUM(23760, 16), 4);
879 // //type=16 again
880 assertEquals(WEEKNUM(355, 16), 51);
881 assertEquals(WEEKNUM(356, 16), 51);
882 assertEquals(WEEKNUM(357, 16), 52);
883 assertEquals(WEEKNUM(358, 16), 52);
884 assertEquals(WEEKNUM(359, 16), 52);
885 assertEquals(WEEKNUM(360, 16), 52);
886 assertEquals(WEEKNUM(361, 16), 52);
887 assertEquals(WEEKNUM(362, 16), 52);
888 assertEquals(WEEKNUM(363, 16), 52);
889 assertEquals(WEEKNUM(364, 16), 53);
890 assertEquals(WEEKNUM(365, 16), 53);
891 assertEquals(WEEKNUM(366, 16), 53);
892 assertEquals(WEEKNUM(367, 16), 1);
893 assertEquals(WEEKNUM(368, 16), 1);
894 assertEquals(WEEKNUM(369, 16), 1);
895 assertEquals(WEEKNUM(370, 16), 1);
896 assertEquals(WEEKNUM(371, 16), 2);
897 assertEquals(WEEKNUM(372, 16), 2);
898 assertEquals(WEEKNUM(373, 16), 2);
899 assertEquals(WEEKNUM(374, 16), 2);
900 assertEquals(WEEKNUM(375, 16), 2);
901 assertEquals(WEEKNUM(376, 16), 2);
902 assertEquals(WEEKNUM(377, 16), 2);
903 assertEquals(WEEKNUM(378, 16), 3);
904 assertEquals(WEEKNUM(379, 16), 3);
905 assertEquals(WEEKNUM(380, 16), 3);
906 assertEquals(WEEKNUM(381, 16), 3);
907 //type=16 again
908 assertEquals(WEEKNUM(730, 16), 53);
909 assertEquals(WEEKNUM(731, 16), 53);
910 assertEquals(WEEKNUM(732, 16), 1);
911 assertEquals(WEEKNUM(733, 16), 1);
912 assertEquals(WEEKNUM(734, 16), 1);
913 assertEquals(WEEKNUM(735, 16), 2);
914 assertEquals(WEEKNUM(736, 16), 2);
915 assertEquals(WEEKNUM(737, 16), 2);
916 assertEquals(WEEKNUM(738, 16), 2);
917 assertEquals(WEEKNUM(739, 16), 2);
918 assertEquals(WEEKNUM(740, 16), 2);
919 assertEquals(WEEKNUM(741, 16), 2);
920 assertEquals(WEEKNUM(742, 16), 3);
921 assertEquals(WEEKNUM(743, 16), 3);
922 assertEquals(WEEKNUM(744, 16), 3);
923 assertEquals(WEEKNUM(745, 16), 3);
924 assertEquals(WEEKNUM(746, 16), 3);
925 //type=17
926 assertEquals(WEEKNUM(23734, 17), 52);
927 assertEquals(WEEKNUM(23735, 17), 52);
928 assertEquals(WEEKNUM(23736, 17), 52);
929 assertEquals(WEEKNUM(23737, 17), 52);
930 assertEquals(WEEKNUM(23738, 17), 53);
931 assertEquals(WEEKNUM(23739, 17), 53);
932 assertEquals(WEEKNUM(23740, 17), 53);
933 assertEquals(WEEKNUM(23741, 17), 53);
934 assertEquals(WEEKNUM(23742, 17), 53);
935 assertEquals(WEEKNUM(23743, 17), 1);
936 assertEquals(WEEKNUM(23744, 17), 1);
937 assertEquals(WEEKNUM(23745, 17), 2);
938 assertEquals(WEEKNUM(23746, 17), 2);
939 assertEquals(WEEKNUM(23747, 17), 2);
940 assertEquals(WEEKNUM(23748, 17), 2);
941 assertEquals(WEEKNUM(23749, 17), 2);
942 assertEquals(WEEKNUM(23750, 17), 2);
943 assertEquals(WEEKNUM(23751, 17), 2);
944 assertEquals(WEEKNUM(23752, 17), 3);
945 assertEquals(WEEKNUM(23753, 17), 3);
946 assertEquals(WEEKNUM(23754, 17), 3);
947 assertEquals(WEEKNUM(23755, 17), 3);
948 assertEquals(WEEKNUM(23756, 17), 3);
949 assertEquals(WEEKNUM(23757, 17), 3);
950 assertEquals(WEEKNUM(23758, 17), 3);
951 assertEquals(WEEKNUM(23759, 17), 4);
952 assertEquals(WEEKNUM(23760, 17), 4);
953 // //type=17 again
954 assertEquals(WEEKNUM(355, 17), 51);
955 assertEquals(WEEKNUM(356, 17), 51);
956 assertEquals(WEEKNUM(357, 17), 51);
957 assertEquals(WEEKNUM(358, 17), 52);
958 assertEquals(WEEKNUM(359, 17), 52);
959 assertEquals(WEEKNUM(360, 17), 52);
960 assertEquals(WEEKNUM(361, 17), 52);
961 assertEquals(WEEKNUM(362, 17), 52);
962 assertEquals(WEEKNUM(363, 17), 52);
963 assertEquals(WEEKNUM(364, 17), 52);
964 assertEquals(WEEKNUM(365, 17), 53);
965 assertEquals(WEEKNUM(366, 17), 53);
966 assertEquals(WEEKNUM(367, 17), 1);
967 assertEquals(WEEKNUM(368, 17), 1);
968 assertEquals(WEEKNUM(369, 17), 1);
969 assertEquals(WEEKNUM(370, 17), 1);
970 assertEquals(WEEKNUM(371, 17), 1);
971 assertEquals(WEEKNUM(372, 17), 2);
972 assertEquals(WEEKNUM(373, 17), 2);
973 assertEquals(WEEKNUM(374, 17), 2);
974 assertEquals(WEEKNUM(375, 17), 2);
975 assertEquals(WEEKNUM(376, 17), 2);
976 assertEquals(WEEKNUM(377, 17), 2);
977 assertEquals(WEEKNUM(378, 17), 2);
978 assertEquals(WEEKNUM(379, 17), 3);
979 assertEquals(WEEKNUM(380, 17), 3);
980 assertEquals(WEEKNUM(381, 17), 3);
981 //type=17 again
982 assertEquals(WEEKNUM(730, 17), 53);
983 assertEquals(WEEKNUM(731, 17), 53);
984 assertEquals(WEEKNUM(732, 17), 1);
985 assertEquals(WEEKNUM(733, 17), 1);
986 assertEquals(WEEKNUM(734, 17), 1);
987 assertEquals(WEEKNUM(735, 17), 1);
988 assertEquals(WEEKNUM(736, 17), 2);
989 assertEquals(WEEKNUM(737, 17), 2);
990 assertEquals(WEEKNUM(738, 17), 2);
991 assertEquals(WEEKNUM(739, 17), 2);
992 assertEquals(WEEKNUM(740, 17), 2);
993 assertEquals(WEEKNUM(741, 17), 2);
994 assertEquals(WEEKNUM(742, 17), 2);
995 assertEquals(WEEKNUM(743, 17), 3);
996 assertEquals(WEEKNUM(744, 17), 3);
997 assertEquals(WEEKNUM(745, 17), 3);
998 assertEquals(WEEKNUM(746, 17), 3);
999 //type=21
1000 assertEquals(WEEKNUM(23730, 21), 51);
1001 assertEquals(WEEKNUM(23731, 21), 51);
1002 assertEquals(WEEKNUM(23732, 21), 52);
1003 assertEquals(WEEKNUM(23733, 21), 52);
1004 assertEquals(WEEKNUM(23734, 21), 52);
1005 assertEquals(WEEKNUM(23735, 21), 52);
1006 assertEquals(WEEKNUM(23736, 21), 52);
1007 assertEquals(WEEKNUM(23737, 21), 52);
1008 assertEquals(WEEKNUM(23738, 21), 52);
1009 assertEquals(WEEKNUM(23739, 21), 53);
1010 assertEquals(WEEKNUM(23740, 21), 53);
1011 assertEquals(WEEKNUM(23741, 21), 53);
1012 assertEquals(WEEKNUM(23742, 21), 53);
1013 assertEquals(WEEKNUM(23743, 21), 53);
1014 assertEquals(WEEKNUM(23744, 21), 53);
1015 assertEquals(WEEKNUM(23745, 21), 53);
1016 assertEquals(WEEKNUM(23746, 21), 1);
1017 assertEquals(WEEKNUM(23747, 21), 1);
1018 assertEquals(WEEKNUM(23748, 21), 1);
1019 assertEquals(WEEKNUM(23749, 21), 1);
1020 assertEquals(WEEKNUM(23750, 21), 1);
1021 assertEquals(WEEKNUM(23751, 21), 1);
1022 assertEquals(WEEKNUM(23752, 21), 1);
1023 assertEquals(WEEKNUM(23753, 21), 2);
1024 assertEquals(WEEKNUM(23754, 21), 2);
1025 assertEquals(WEEKNUM(23755, 21), 2);
1026 assertEquals(WEEKNUM(23756, 21), 2);
1027 assertEquals(WEEKNUM(23757, 21), 2);
1028 assertEquals(WEEKNUM(23758, 21), 2);
1029 assertEquals(WEEKNUM(23759, 21), 2);
1030 assertEquals(WEEKNUM(23760, 21), 3);
1031 // //type=21 again
1032 assertEquals(WEEKNUM(355, 21), 51);
1033 assertEquals(WEEKNUM(356, 21), 51);
1034 assertEquals(WEEKNUM(357, 21), 51);
1035 assertEquals(WEEKNUM(358, 21), 51);
1036 assertEquals(WEEKNUM(359, 21), 52);
1037 assertEquals(WEEKNUM(360, 21), 52);
1038 assertEquals(WEEKNUM(361, 21), 52);
1039 assertEquals(WEEKNUM(362, 21), 52);
1040 assertEquals(WEEKNUM(363, 21), 52);
1041 assertEquals(WEEKNUM(364, 21), 52);
1042 assertEquals(WEEKNUM(365, 21), 52);
1043 assertEquals(WEEKNUM(366, 21), 1);
1044 assertEquals(WEEKNUM(367, 21), 1);
1045 assertEquals(WEEKNUM(368, 21), 1);
1046 assertEquals(WEEKNUM(369, 21), 1);
1047 assertEquals(WEEKNUM(370, 21), 1);
1048 assertEquals(WEEKNUM(371, 21), 1);
1049 assertEquals(WEEKNUM(372, 21), 1);
1050 assertEquals(WEEKNUM(373, 21), 2);
1051 assertEquals(WEEKNUM(374, 21), 2);
1052 assertEquals(WEEKNUM(375, 21), 2);
1053 assertEquals(WEEKNUM(376, 21), 2);
1054 assertEquals(WEEKNUM(377, 21), 2);
1055 assertEquals(WEEKNUM(378, 21), 2);
1056 assertEquals(WEEKNUM(379, 21), 2);
1057 assertEquals(WEEKNUM(380, 21), 3);
1058 assertEquals(WEEKNUM(381, 21), 3);
1059 // //type=21 again
1060 assertEquals(WEEKNUM(728, 21), 52);
1061 assertEquals(WEEKNUM(729, 21), 52);
1062 assertEquals(WEEKNUM(730, 21), 1);
1063 assertEquals(WEEKNUM(731, 21), 1);
1064 assertEquals(WEEKNUM(732, 21), 1);
1065 assertEquals(WEEKNUM(733, 21), 1);
1066 assertEquals(WEEKNUM(734, 21), 1);
1067 assertEquals(WEEKNUM(735, 21), 1);
1068 assertEquals(WEEKNUM(736, 21), 1);
1069 assertEquals(WEEKNUM(737, 21), 2);
1070 assertEquals(WEEKNUM(738, 21), 2);
1071 assertEquals(WEEKNUM(739, 21), 2);
1072 assertEquals(WEEKNUM(740, 21), 2);
1073 assertEquals(WEEKNUM(741, 21), 2);
1074 assertEquals(WEEKNUM(742, 21), 2);
1075 assertEquals(WEEKNUM(743, 21), 2);
1076 assertEquals(WEEKNUM(744, 21), 3);
1077 assertEquals(WEEKNUM(745, 21), 3);
1078 assertEquals(WEEKNUM(746, 21), 3);
1079 catchAndAssertEquals(function() {
1080 WEEKNUM.apply(this, []);
1081 }, ERRORS.NA_ERROR);
1082 catchAndAssertEquals(function() {
1083 WEEKNUM.apply(this, [213123, 1, 1]);
1084 }, ERRORS.NA_ERROR);
1085 catchAndAssertEquals(function() {
1086 WEEKNUM("str");
1087 }, ERRORS.VALUE_ERROR);
1088 catchAndAssertEquals(function() {
1089 WEEKNUM([]);
1090 }, ERRORS.REF_ERROR);
1091 catchAndAssertEquals(function() {
1092 WEEKNUM(-10);
1093 }, ERRORS.NUM_ERROR);
1094 catchAndAssertEquals(function() {
1095 WEEKNUM(10, 4);
1096 }, ERRORS.NUM_ERROR);
1097 catchAndAssertEquals(function() {
1098 WEEKNUM(10, 22);
1099 }, ERRORS.NUM_ERROR);
1100});
1101
1102
1103test("WEEKDAY", function(){
1104 assertEquals(WEEKDAY(DATE(1992, 6, 20)), 7);
1105 assertEquals(WEEKDAY(DATE(1992, 6, 21)), 1);
1106 assertEquals(WEEKDAY(DATE(1992, 6, 24)), 4);
1107 assertEquals(WEEKDAY(DATE(1992, 6, 25)), 5);
1108 assertEquals(WEEKDAY(1312211), 5);
1109 assertEquals(WEEKDAY(1312212), 6);
1110 assertEquals(WEEKDAY(1312213), 7);
1111 assertEquals(WEEKDAY(0), 7);
1112 assertEquals(WEEKDAY(false), 7);
1113 assertEquals(WEEKDAY(1), 1);
1114 assertEquals(WEEKDAY(true), 1);
1115 assertEquals(WEEKDAY(40909, 1), 1);
1116 assertEquals(WEEKDAY(40909, 2), 7);
1117 assertEquals(WEEKDAY(40909, 3), 6);
1118 assertEquals(WEEKDAY(411, 1), 5);
1119 assertEquals(WEEKDAY(411, 2), 4);
1120 assertEquals(WEEKDAY(411, 3), 3);
1121 assertEquals(WEEKDAY(40909, 1), 1);
1122 assertEquals(WEEKDAY(40910, 1), 2);
1123 assertEquals(WEEKDAY(40911, 1), 3);
1124 assertEquals(WEEKDAY(40912, 1), 4);
1125 assertEquals(WEEKDAY(40913, 1), 5);
1126 assertEquals(WEEKDAY(40914, 1), 6);
1127 assertEquals(WEEKDAY(40915, 1), 7);
1128 assertEquals(WEEKDAY(40916, 1), 1);
1129 assertEquals(WEEKDAY(40909, 2), 7);
1130 assertEquals(WEEKDAY(40910, 2), 1);
1131 assertEquals(WEEKDAY(40911, 2), 2);
1132 assertEquals(WEEKDAY(40912, 2), 3);
1133 assertEquals(WEEKDAY(40913, 2), 4);
1134 assertEquals(WEEKDAY(40914, 2), 5);
1135 assertEquals(WEEKDAY(40915, 2), 6);
1136 assertEquals(WEEKDAY(40916, 2), 7);
1137 assertEquals(WEEKDAY(40909, 3), 6);
1138 assertEquals(WEEKDAY(40910, 3), 0);
1139 assertEquals(WEEKDAY(40911, 3), 1);
1140 assertEquals(WEEKDAY(40912, 3), 2);
1141 assertEquals(WEEKDAY(40913, 3), 3);
1142 assertEquals(WEEKDAY(40914, 3), 4);
1143 assertEquals(WEEKDAY(40915, 3), 5);
1144 assertEquals(WEEKDAY(40916, 3), 6);
1145 catchAndAssertEquals(function() {
1146 WEEKDAY.apply(this, []);
1147 }, ERRORS.NA_ERROR);
1148 catchAndAssertEquals(function() {
1149 WEEKDAY.apply(this, [213123, 1, 1]);
1150 }, ERRORS.NA_ERROR);
1151 catchAndAssertEquals(function() {
1152 WEEKDAY("str");
1153 }, ERRORS.VALUE_ERROR);
1154 catchAndAssertEquals(function() {
1155 WEEKDAY([]);
1156 }, ERRORS.REF_ERROR);
1157 catchAndAssertEquals(function() {
1158 WEEKDAY(-10);
1159 }, ERRORS.NUM_ERROR);
1160 catchAndAssertEquals(function() {
1161 WEEKDAY(10, 4);
1162 }, ERRORS.NUM_ERROR);
1163});
1164
1165
1166test("YEAR", function(){
1167 assertEquals(YEAR(DATE(1992, 6, 24)), 1992);
1168 assertEquals(YEAR(DATE(2000, 6, 24)), 2000);
1169 assertEquals(YEAR(DATE(100, 6, 24)), 2000);
1170 assertEquals(YEAR(DATE(44, 6, 24)), 1944);
1171 assertEquals(YEAR(1312212), 5492);
1172 assertEquals(YEAR(9), 1900);
1173 assertEquals(YEAR(0), 1899);
1174 assertEquals(YEAR(false), 1899);
1175 assertEquals(YEAR(1), 1899);
1176 assertEquals(YEAR(true), 1899);
1177 assertEquals(YEAR([1, "str"]), 1899);
1178 catchAndAssertEquals(function() {
1179 YEAR.apply(this, []);
1180 }, ERRORS.NA_ERROR);
1181 catchAndAssertEquals(function() {
1182 YEAR.apply(this, [213123, 123123]);
1183 }, ERRORS.NA_ERROR);
1184 catchAndAssertEquals(function() {
1185 YEAR("str");
1186 }, ERRORS.VALUE_ERROR);
1187 catchAndAssertEquals(function() {
1188 YEAR([]);
1189 }, ERRORS.REF_ERROR);
1190 catchAndAssertEquals(function() {
1191 YEAR(-10);
1192 }, ERRORS.NUM_ERROR);
1193});
1194
1195
1196test("MONTH", function(){
1197 assertEquals(MONTH(DATE(1992, 6, 24)), 6);
1198 assertEquals(MONTH(1312212), 9);
1199 assertEquals(MONTH(13122121), 2);
1200 catchAndAssertEquals(function() {
1201 MONTH.apply(this, []);
1202 }, ERRORS.NA_ERROR);
1203 catchAndAssertEquals(function() {
1204 MONTH.apply(this, [213123, 123123]);
1205 }, ERRORS.NA_ERROR);
1206 catchAndAssertEquals(function() {
1207 MONTH("str");
1208 }, ERRORS.VALUE_ERROR);
1209 catchAndAssertEquals(function() {
1210 MONTH([]);
1211 }, ERRORS.REF_ERROR);
1212 catchAndAssertEquals(function() {
1213 MONTH(-10);
1214 }, ERRORS.NUM_ERROR);
1215});
1216
1217
1218test("DAYS360", function(){
1219 assertEquals(DAYS360(DATE(1992, 6, 24), DATE(1992, 6, 25)), 1);
1220 assertEquals(DAYS360(DATE(1992, 6, 25), DATE(1992, 6, 24)), -1);
1221 assertEquals(DAYS360(DATE(1992, 6, 25), DATE(1992, 6, 23)), -2);
1222 assertEquals(DAYS360(DATE(1992, 6, 24), DATE(1991, 6, 24)), -360);
1223 assertEquals(DAYS360(DATE(1993, 6, 24), DATE(1992, 6, 24)), -360);
1224 assertEquals(DAYS360(DATEVALUE("1993-6-24"), 1), -33653);
1225 assertEquals(DAYS360(DATEVALUE("1993-6-24"), true), -33653);
1226 assertEquals(DAYS360(DATEVALUE("1993-6-24"), 0), -33654);
1227 assertEquals(DAYS360(DATEVALUE("1993-6-24"), false), -33654);
1228 assertEquals(DAYS360("2191-6-24", "1992-6-24"), -71640);
1229 assertEquals(DAYS360("2191-6-24", "1992-6-24", true), -71640);
1230 assertEquals(DAYS360(1, 390, 1), 384);
1231 assertEquals(DAYS360(1, 390), 384);
1232 assertEquals(DAYS360(33779, 33780), 1);
1233 assertEquals(DAYS360([1, "str"], [390, "str"]), 384);
1234 catchAndAssertEquals(function() {
1235 DAYS360.apply(this, []);
1236 }, ERRORS.NA_ERROR);
1237 catchAndAssertEquals(function() {
1238 DAYS360.apply(this, [100]);
1239 }, ERRORS.NA_ERROR);
1240 catchAndAssertEquals(function() {
1241 DAYS360.apply(this, [100, 200, true, "str"]);
1242 }, ERRORS.NA_ERROR);
1243 catchAndAssertEquals(function() {
1244 DAYS360("str", 100);
1245 }, ERRORS.VALUE_ERROR);
1246 catchAndAssertEquals(function() {
1247 DAYS360("false", "true");
1248 }, ERRORS.VALUE_ERROR);
1249 catchAndAssertEquals(function() {
1250 DAYS360([[], 100], 22);
1251 }, ERRORS.REF_ERROR);
1252});
1253
1254
1255test("DAYS", function(){
1256 assertEquals(DAYS(DATE(1992, 6, 24), DATE(1992, 6, 25)), -1);
1257 assertEquals(DAYS(DATE(1992, 6, 25), DATE(1992, 6, 24)), 1);
1258 assertEquals(DAYS(DATE(1992, 6, 25), DATE(1992, 6, 23)), 2);
1259 assertEquals(DAYS(DATE(1992, 6, 24), DATE(1991, 6, 24)), 366);
1260 assertEquals(DAYS(DATE(1993, 6, 24), DATE(1992, 6, 24)), 365);
1261 assertEquals(DAYS("2191-6-24", "1992-6-24"), 72683);
1262 assertEquals(DAYS(0, 1), -1);
1263 assertEquals(DAYS(false, true), -1);
1264 assertEquals(DAYS(0, 100), -100);
1265 assertEquals(DAYS(-100, 100), -200);
1266 assertEquals(DAYS(100, -100), 200);
1267 assertEquals(DAYS(100, 0), 100);
1268 assertEquals(DAYS([0, "str"], [100, "str"]), -100);
1269 assertEquals(DAYS("1992, 6, 25", "1992, 6, 24"), 1);
1270 catchAndAssertEquals(function() {
1271 DAYS.apply(this, []);
1272 }, ERRORS.NA_ERROR);
1273 catchAndAssertEquals(function() {
1274 DAYS.apply(this, [100]);
1275 }, ERRORS.NA_ERROR);
1276 catchAndAssertEquals(function() {
1277 DAYS.apply(this, [100, 200, 300]);
1278 }, ERRORS.NA_ERROR);
1279 catchAndAssertEquals(function() {
1280 DAYS([[], 100], 22);
1281 }, ERRORS.REF_ERROR);
1282 catchAndAssertEquals(function() {
1283 DAYS("str", 100);
1284 }, ERRORS.VALUE_ERROR);
1285 catchAndAssertEquals(function() {
1286 DAYS("false", "true");
1287 }, ERRORS.VALUE_ERROR);
1288});
1289
1290
1291test("DAY", function(){
1292 assertEquals(DAY(DATE(1992, 6, 24)), 24);
1293 assertEquals(DAY(DATE(1992, 5, 10)), 10);
1294 assertEquals(DAY(DATE(1992, 5, 22)), 22);
1295 assertEquals(DAY(DATE(1992, 6, 1)), 1);
1296 assertEquals(DAY(DATE(2008, 1, 31)), 31);
1297 assertEquals(DAY("1992, 6, 24"), 24);
1298 assertEquals(DAY(["1992, 6, 24"]), 24);
1299 assertEquals(DAY(0), 30);
1300 assertEquals(DAY(false), 30);
1301 assertEquals(DAY(1), 31);
1302 assertEquals(DAY(true), 31);
1303 assertEquals(DAY(33779), 24);
1304 assertEquals(DAY([33779]), 24);
1305 assertEquals(DAY([33779, "str"]), 24);
1306 catchAndAssertEquals(function() {
1307 DAY("str");
1308 }, ERRORS.VALUE_ERROR);
1309 catchAndAssertEquals(function() {
1310 DAY.apply(this, []);
1311 }, ERRORS.NA_ERROR);
1312 catchAndAssertEquals(function() {
1313 DAY.apply(this, [DATE(1992, 6, 24), 4]);
1314 }, ERRORS.NA_ERROR);
1315 catchAndAssertEquals(function() {
1316 DAY(-1);
1317 }, ERRORS.NUM_ERROR);
1318});
1319
1320
1321test("EDATE", function(){
1322 assertEquals(EDATE(DATE(1992, 6, 24), 1), DATE(1992, 7, 24));
1323 assertEquals(EDATE(DATE(1992, 5, 24), 2), DATE(1992, 7, 24));
1324 assertEquals(EDATE(DATE(1992, 5, 24), 2.2), DATE(1992, 7, 24));
1325 assertEquals(EDATE(DATE(1992, 6, 24), 0), DATE(1992, 6, 24));
1326 assertEquals(EDATE(DATE(1992, 6, 24), false), DATE(1992, 6, 24));
1327 assertEquals(EDATE("1992, 5, 24", 2), DATE(1992, 7, 24));
1328 assertEquals(EDATE("6/24/92", 1), DATE(1992, 7, 24));
1329 assertEquals(EDATE([DATE(1992, 6, 24), "str"], [1, "str"]), DATE(1992, 7, 24));
1330 assertEquals(EDATE(0, 1), DATE(1900, 1, 30));
1331 assertEquals(EDATE(false, 1), DATE(1900, 1, 30));
1332 catchAndAssertEquals(function() {
1333 EDATE("str", 2);
1334 }, ERRORS.VALUE_ERROR);
1335 catchAndAssertEquals(function() {
1336 EDATE.apply(this, [DATE(1992, 6, 24)]);
1337 }, ERRORS.NA_ERROR);
1338 catchAndAssertEquals(function() {
1339 EDATE.apply(this, [DATE(1992, 6, 24), 4, 4]);
1340 }, ERRORS.NA_ERROR);
1341 catchAndAssertEquals(function() {
1342 EDATE(-1, 1);
1343 }, ERRORS.NUM_ERROR);
1344 catchAndAssertEquals(function() {
1345 EDATE(DATEVALUE("01/13/0101"), 1);
1346 }, ERRORS.NUM_ERROR);
1347});
1348
1349
1350test("EOMONTH", function(){
1351 assertEquals(EOMONTH(DATE(1992, 6, 24), 0), DATE(1992, 6, 30));
1352 assertEquals(EOMONTH(DATE(1992, 6, 24), false), DATE(1992, 6, 30));
1353 assertEquals(EOMONTH(DATE(1992, 6, 24), 1), DATE(1992, 7, 31));
1354 assertEquals(EOMONTH(DATE(1992, 6, 24), 2), DATE(1992, 8, 31));
1355 assertEquals(EOMONTH(DATE(2012, 6, 24), 2), DATE(2012, 8, 31));
1356 assertEquals(EOMONTH(DATE(2049, 1, 1), 2), DATE(2049, 3, 31));
1357 assertEquals(EOMONTH(DATE(1990, 2, 24), 400), DATE(2023, 6, 30));
1358 assertEquals(EOMONTH("1992, 6, 24", 2), DATE(1992, 8, 31));
1359 //leap years
1360 assertEquals(EOMONTH(DATE(2004, 2, 24), 0), DATE(2004, 2, 29));
1361 assertEquals(EOMONTH(DATE(2008, 2, 24), 0), DATE(2008, 2, 29));
1362 // misc.
1363 assertEquals(EOMONTH([DATE(1992, 6, 24), "str"], [2, "str"]), DATE(1992, 8, 31));
1364 assertEquals(EOMONTH(0, 1), DATE(1900, 1, 31));
1365 assertEquals(EOMONTH(false, 1), DATE(1900, 1, 31));
1366 assertEquals(EOMONTH(1, 1), DATE(1900, 1, 31));
1367 assertEquals(EOMONTH(true, 1), DATE(1900, 1, 31));
1368 catchAndAssertEquals(function() {
1369 EOMONTH.apply(this, []);
1370 }, ERRORS.NA_ERROR);
1371 catchAndAssertEquals(function() {
1372 EOMONTH.apply(this, [true, 1, 1]);
1373 }, ERRORS.NA_ERROR);
1374 catchAndAssertEquals(function() {
1375 EOMONTH("str", 2);
1376 }, ERRORS.VALUE_ERROR);
1377 catchAndAssertEquals(function() {
1378 EOMONTH(-1, 2);
1379 }, ERRORS.NUM_ERROR);
1380});
1381
1382
1383test("DATE", function(){
1384 assertEquals(DATE(1900, 1, 2), 3);
1385 assertEquals(DATE(1900, 1, 1), 2);
1386 assertEquals(DATE(1900, 1, 4), 5);
1387 catchAndAssertEquals(function() {
1388 DATE(1900, 0, 5);
1389 }, ERRORS.NUM_ERROR);
1390 catchAndAssertEquals(function() {
1391 DATE.apply(this, [1900, 0, 5, 22]);
1392 }, ERRORS.NA_ERROR);
1393 catchAndAssertEquals(function() {
1394 DATE.apply(this, [1900, 0]);
1395 }, ERRORS.NA_ERROR);
1396 assertEquals(DATE(1992, 6, 24), 33779);
1397 assertEquals(DATE(2017, 2, 26), 42792);
1398 assertEquals(DATE(1999, 1, 13), 36173);
1399 // Leap day stuff
1400 assertEquals(DATE(2004, 2, 28), 38045);
1401 assertEquals(DATE(2004, 2, 29), 38046);
1402 assertEquals(DATE(2004, 3, 1), 38047);
1403 // Overflow values
1404 assertEquals(DATE(1992, 6, 44), 33799);
1405 assertEquals(DATE(2, 33, 44), 1749);
1406 assertEquals(DATE(1777, 33, 44), 650055);
1407 assertEquals(DATE(1976, 2, -10), 27780);
1408 assertEquals(DATE(-1900, 1, 1), 2);
1409 assertEquals(DATE(1992, 1, 10), 33613);
1410});
1411
1412
1413test("DATEVALUE", function(){
1414 assertEquals(DATEVALUE("6/24/92"), 33779);
1415 assertEquals(DATEVALUE(["6/24/92", false]), 33779);
1416 assertEquals(DATEVALUE("6-24-92 10am"), 33779);
1417 assertEquals(DATEVALUE("1992/6/24 00:00"), 33779);
1418 assertEquals(DATEVALUE("4243/11/3 200000000:33:444"), 9189404);
1419 assertEquals(DATEVALUE("1992/1/13 6:22222222:44am"), 49048); // overload minutes
1420 assertEquals(DATEVALUE("1992/6/24"), 33779);
1421 assertEquals(DATEVALUE("Sunday 1992/6/24"), 33779);
1422 assertEquals(DATEVALUE("1992-6-24"), 33779);
1423 assertEquals(DATEVALUE("1992/6/24"), 33779);
1424 assertEquals(DATEVALUE("1992 6 24"), 33779);
1425 assertEquals(DATEVALUE("1992 6 24"), 33779);
1426 assertEquals(DATEVALUE("1992 . 6 . 24"), 33779);
1427 assertEquals(DATEVALUE("1992 / 6 / 24"), 33779);
1428 assertEquals(DATEVALUE("1992, 6, 24"), 33779);
1429 assertEquals(DATEVALUE("1992/6/24 00am"), 33779);
1430 assertEquals(DATEVALUE("1992/5/20 01am"), 33744);
1431 assertEquals(DATEVALUE("Sun 09 Feb 2017"), 42775);
1432 assertEquals(DATEVALUE("01 Jan 2017"), 42736);
1433 assertEquals(DATEVALUE("24/June/1992 10am"), 33779);
1434 assertEquals(DATEVALUE("24/June/1992 10:10"), 33779);
1435 assertEquals(DATEVALUE("24/June/1992 10:10am"), 33779);
1436 assertEquals(DATEVALUE("24/June/1992 10:10:10"), 33779);
1437 assertEquals(DATEVALUE("24/June/1992 10:10:10am"), 33779);
1438 assertEquals(DATEVALUE("Sun Feb 09 2017"), 42775);
1439 assertEquals(DATEVALUE("2017/01"), 42736);
1440 assertEquals(DATEVALUE("2017-01 10am"), 42736);
1441 assertEquals(DATEVALUE("01/2017"), 42736);
1442 assertEquals(DATEVALUE("01-2017 10am"), 42736);
1443 assertEquals(DATEVALUE("2017 January"), 42736);
1444 assertEquals(DATEVALUE("2017-January 10am"), 42736);
1445 assertEquals(DATEVALUE("2017-January 10:10"), 42736);
1446 assertEquals(DATEVALUE("2017-January 10:10am"), 42736);
1447 assertEquals(DATEVALUE("2017-January 10:10:10"), 42736);
1448 assertEquals(DATEVALUE("2017-January 10:10:10am"), 42736);
1449 assertEquals(DATEVALUE("January 2017"), 42736);
1450 assertEquals(DATEVALUE("January 0030"), 10959);
1451 assertEquals(DATEVALUE("November 4243"), 856069);
1452 assertEquals(DATEVALUE("December 0100"), -657100);
1453 assertEquals(DATEVALUE("Jan 2017"), 42736);
1454 assertEquals(DATEVALUE("January-2017 10am"), 42736);
1455 assertEquals(DATEVALUE("January-2017 10:10"), 42736);
1456 assertEquals(DATEVALUE("January-2017 10:10am"), 42736);
1457 assertEquals(DATEVALUE("January-2017 10:10:10"), 42736);
1458 assertEquals(DATEVALUE("January-2017 10:10:10am"), 42736);
1459 catchAndAssertEquals(function() {
1460 DATEVALUE.apply(this, ["6/24/92", 10]);
1461 }, ERRORS.NA_ERROR);
1462 catchAndAssertEquals(function() {
1463 DATEVALUE.apply(this, []);
1464 }, ERRORS.NA_ERROR);
1465 catchAndAssertEquals(function() {
1466 DATEVALUE(false);
1467 }, ERRORS.VALUE_ERROR);
1468 catchAndAssertEquals(function() {
1469 DATEVALUE("Sunday,1992/6/24");
1470 }, ERRORS.VALUE_ERROR);
1471 catchAndAssertEquals(function() {
1472 DATEVALUE("2005/2/29");
1473 }, ERRORS.VALUE_ERROR);
1474 catchAndAssertEquals(function() {
1475 DATEVALUE("2001/2/29");
1476 }, ERRORS.VALUE_ERROR);
1477 catchAndAssertEquals(function() {
1478 DATEVALUE("2005/1/44");
1479 }, ERRORS.VALUE_ERROR);
1480});