10 class TestDateBase < Test::Unit::TestCase
14 @from ||= julian_day_number_from_absolute(absolute_from_julian(1, 1, 1601))
15 @to ||= julian_day_number_from_absolute(absolute_from_julian(12, 31, 2400))
16 @from4t ||= julian_day_number_from_absolute(absolute_from_julian(1, 1, 1970))
17 @to4t ||= julian_day_number_from_absolute(absolute_from_julian(12, 31, 2037))
22 assert_equal(0, Date::Infinity.new(-1) <=> Date::Infinity.new(-1))
23 assert_equal(-1, Date::Infinity.new(-1) <=> Date::Infinity.new(+1))
24 assert_equal(-1, Date::Infinity.new(-1) <=> 0)
26 assert_equal(1, Date::Infinity.new(+1) <=> Date::Infinity.new(-1))
27 assert_equal(0, Date::Infinity.new(+1) <=> Date::Infinity.new(+1))
28 assert_equal(1, Date::Infinity.new(+1) <=> 0)
30 assert_equal(1, 0 <=> Date::Infinity.new(-1))
31 assert_equal(-1, 0 <=> Date::Infinity.new(+1))
32 assert_equal(0, 0 <=> 0)
34 assert_equal(0, Date::ITALY <=> Date::ITALY)
35 assert_equal(-1, Date::ITALY <=> Date::ENGLAND)
36 assert_equal(-1, Date::ITALY <=> Date::JULIAN)
37 assert_equal(1, Date::ITALY <=> Date::GREGORIAN)
39 assert_equal(1, Date::ENGLAND <=> Date::ITALY)
40 assert_equal(0, Date::ENGLAND <=> Date::ENGLAND)
41 assert_equal(-1, Date::ENGLAND <=> Date::JULIAN)
42 assert_equal(1, Date::ENGLAND <=> Date::GREGORIAN)
44 assert_equal(1, Date::JULIAN <=> Date::ITALY)
45 assert_equal(1, Date::JULIAN <=> Date::ENGLAND)
46 assert_equal(0, Date::JULIAN <=> Date::JULIAN)
47 assert_equal(1, Date::JULIAN <=> Date::GREGORIAN)
49 assert_equal(-1, Date::GREGORIAN <=> Date::ITALY)
50 assert_equal(-1, Date::GREGORIAN <=> Date::ENGLAND)
51 assert_equal(-1, Date::GREGORIAN <=> Date::JULIAN)
52 assert_equal(0, Date::GREGORIAN <=> Date::GREGORIAN)
55 def test_ordinal__julian
56 unless defined?(Calendar)
60 m, d, y = julian_from_absolute(absolute_from_julian_day_number(j))
61 j0 = julian_day_number_from_absolute(absolute_from_julian(12, 31, y - 1))
62 j2 = julian_day_number_from_absolute(absolute_from_julian(m, d, y))
64 oy, od = Date.__send__(:jd_to_ordinal, j, Date::JULIAN)
66 assert_equal(j2 - j0, od)
67 oj = Date.__send__(:ordinal_to_jd, oy, od, Date::JULIAN)
72 def test_ordinal__gregorian
73 unless defined?(Calendar)
77 m, d, y = gregorian_from_absolute(absolute_from_julian_day_number(j))
79 julian_day_number_from_absolute(absolute_from_gregorian(12, 31, y - 1))
80 j2 = julian_day_number_from_absolute(absolute_from_gregorian(m, d, y))
82 oy, od = Date.__send__(:jd_to_ordinal, j, Date::GREGORIAN)
84 assert_equal(j2 - j0, od)
85 oj = Date.__send__(:ordinal_to_jd, oy, od, Date::GREGORIAN)
90 def test_civil__julian
91 unless defined?(Calendar)
95 m, d, y = julian_from_absolute(absolute_from_julian_day_number(j))
96 j2 = julian_day_number_from_absolute(absolute_from_julian(m, d, y))
98 cy, cm, cd = Date.__send__(:jd_to_civil, j, Date::JULIAN)
102 cj = Date.__send__(:civil_to_jd, cy, cm, cd, Date::JULIAN)
107 def test_civil__gregorian
108 unless defined?(Calendar)
112 m, d, y = gregorian_from_absolute(absolute_from_julian_day_number(j))
113 j2 = julian_day_number_from_absolute(absolute_from_gregorian(m, d, y))
115 cy, cm, cd = Date.__send__(:jd_to_civil, j, Date::GREGORIAN)
119 cj = Date.__send__(:civil_to_jd, cy, cm, cd, Date::GREGORIAN)
124 def test_commercial__gregorian
125 unless defined?(Calendar)
129 w, d, y = iso_from_absolute(absolute_from_julian_day_number(j))
130 j2 = julian_day_number_from_absolute(absolute_from_iso(w, d, y))
132 cy, cw, cd = Date.__send__(:jd_to_commercial, j, Date::GREGORIAN)
136 cj = Date.__send__(:commercial_to_jd, cy, cw, cd, Date::GREGORIAN)
142 unless defined?(Calendar)
147 wy, ww, wd = Date.__send__(:jd_to_weeknum, j, k, Date::GREGORIAN)
148 wj = Date.__send__(:weeknum_to_jd, wy, ww, wd, k, Date::GREGORIAN)
155 unless defined?(Calendar)
158 for j in @from4t..@to4t
160 t = Time.mktime(d.year, d.mon, d.mday)
168 d2 = Date.strptime(s, fmt)
169 assert_equal(j, d2.jd)
175 unless defined?(Calendar)
183 j = julian_day_number_from_absolute(Nth_Kday(n, k, m, y))
184 j2 = Date.__send__(:nth_kday_to_jd, y, m, n, k, Date::GREGORIAN)
187 d1 = Date.__send__(:jd_to_nth_kday, j2, Date::GREGORIAN)
188 j3 = Date.__send__(:nth_kday_to_jd, *d1)
197 jd = Date.__send__(:mjd_to_jd, 51321)
198 mjd = Date.__send__(:jd_to_mjd, jd)
199 assert_equal(51321, mjd)
203 jd = Date.__send__(:ld_to_jd, 152162)
204 ld = Date.__send__(:jd_to_ld, jd)
205 assert_equal(152162, ld)
209 assert_equal(4, Date.__send__(:jd_to_wday, 3))
210 assert_equal(3, Date.__send__(:jd_to_wday, 2))
211 assert_equal(2, Date.__send__(:jd_to_wday, 1))
212 assert_equal(1, Date.__send__(:jd_to_wday, 0))
213 assert_equal(0, Date.__send__(:jd_to_wday, -1))
214 assert_equal(6, Date.__send__(:jd_to_wday, -2))
215 assert_equal(5, Date.__send__(:jd_to_wday, -3))
219 assert_equal(true, Date.julian_leap?(1900))
220 assert_equal(false, Date.julian_leap?(1999))
221 assert_equal(true, Date.julian_leap?(2000))
223 assert_equal(false, Date.gregorian_leap?(1900))
224 assert_equal(false, Date.gregorian_leap?(1999))
225 assert_equal(true, Date.gregorian_leap?(2000))
227 assert_equal(Date.leap?(1990), Date.gregorian_leap?(1900))
228 assert_equal(Date.leap?(1999), Date.gregorian_leap?(1999))
229 assert_equal(Date.leap?(2000), Date.gregorian_leap?(2000))
233 valid_jd_p = :_valid_jd?
234 assert_equal(-1, Date.__send__(valid_jd_p, -1))
235 assert_equal(0, Date.__send__(valid_jd_p, 0))
236 assert_equal(1, Date.__send__(valid_jd_p, 1))
237 assert_equal(2452348, Date.__send__(valid_jd_p, 2452348))
240 def test_valid_ordinal
241 valid_ordinal_p = :_valid_ordinal?
242 assert_nil(Date.__send__(valid_ordinal_p, 1999,366))
243 assert_equal(2451910, Date.__send__(valid_ordinal_p, 2000,366))
244 assert_nil(Date.__send__(valid_ordinal_p, 1999,-366))
245 assert_equal(2451545, Date.__send__(valid_ordinal_p, 2000,-366))
246 assert_equal(2452275, Date.__send__(valid_ordinal_p, 2001,365))
247 assert_nil(Date.__send__(valid_ordinal_p, 2001,366))
248 assert_equal(Date.__send__(valid_ordinal_p, 2001,1),
249 Date.__send__(valid_ordinal_p, 2001,-365))
250 assert_nil(Date.__send__(valid_ordinal_p, 2001,-366))
251 assert_equal(2452348, Date.__send__(valid_ordinal_p, 2002,73))
254 def test_valid_ordinal__edge
255 valid_ordinal_p = :_valid_ordinal?
256 (1601..2400).each do |y|
257 d = if Date.leap?(y) then 366 else 365 end
258 assert_not_nil(Date.__send__(valid_ordinal_p, y,d))
259 assert_nil(Date.__send__(valid_ordinal_p, y,d + 1))
260 assert_not_nil(Date.__send__(valid_ordinal_p, y,-d))
261 assert_nil(Date.__send__(valid_ordinal_p, y,-(d + 1)))
267 # 274 275 276 277 288 289
268 # 290 291 292 293 294 295 296
269 # 297 298 299 300 301 302 303
274 # -92 -91 -90 -89 -78 -77
275 # -76 -75 -74 -73 -72 -71 -70
276 # -69 -68 -67 -66 -65 -64 -63
279 def test_valid_ordinal__italy
280 valid_ordinal_p = :_valid_ordinal?
282 assert_not_nil(Date.__send__(valid_ordinal_p, 1582,d,Date::ITALY))
284 (356..365).each do |d|
285 assert_nil(Date.__send__(valid_ordinal_p, 1582,d,Date::ITALY))
291 # 245 246 258 259 260
292 # 261 262 263 264 265 266 267
293 # 268 269 270 271 272 273 274
295 def test_valid_ordinal__england
296 valid_ordinal_p = :_valid_ordinal?
298 assert_not_nil(Date.__send__(valid_ordinal_p, 1752,d,Date::ENGLAND))
300 (356..366).each do |d|
301 assert_nil(Date.__send__(valid_ordinal_p, 1752,d,Date::ENGLAND))
306 valid_civil_p = :_valid_civil?
307 assert_nil(Date.__send__(valid_civil_p, 1999,2,29))
308 assert_equal(2451604, Date.__send__(valid_civil_p, 2000,2,29))
309 assert_nil(Date.__send__(valid_civil_p, 1999,2,-29))
310 assert_equal(2451576, Date.__send__(valid_civil_p, 2000,2,-29))
311 assert_equal(2451941, Date.__send__(valid_civil_p, 2001,1,31))
312 assert_nil(Date.__send__(valid_civil_p, 2001,1,32))
313 assert_equal(Date.__send__(valid_civil_p, 2001,1,1),
314 Date.__send__(valid_civil_p, 2001,1,-31))
315 assert_nil(Date.__send__(valid_civil_p, 2001,1,-32))
316 assert_equal(2452348, Date.__send__(valid_civil_p, 2002,3,14))
319 def test_valid_civil__edge
320 valid_civil_p = :_valid_civil?
321 (1601..2400).each do |y|
322 d = if Date.leap?(y) then 29 else 28 end
323 assert_not_nil(Date.__send__(valid_civil_p, y,2,d))
324 assert_nil(Date.__send__(valid_civil_p, y,2,d + 1))
325 assert_not_nil(Date.__send__(valid_civil_p, y,2,-d))
326 assert_nil(Date.__send__(valid_civil_p, y,2,-(d + 1)))
333 # 17 18 19 20 21 22 23
334 # 24 25 26 27 28 29 30
337 def test_valid_civil__italy
338 valid_civil_p = :_valid_civil?
340 assert_not_nil(Date.__send__(valid_civil_p, 1582,10,d,Date::ITALY))
343 assert_nil(Date.__send__(valid_civil_p, 1582,10,d,Date::ITALY))
346 assert_not_nil(Date.__send__(valid_civil_p, 1582,10,d,Date::ITALY))
348 (32..100).each do |d|
349 assert_nil(Date.__send__(valid_civil_p, 1582,10,d,Date::ITALY))
351 (-31..-22).each do |d|
352 assert_nil(Date.__send__(valid_civil_p, 1582,10,d,Date::ITALY))
354 (-21..-1).each do |d|
355 assert_not_nil(Date.__send__(valid_civil_p, 1582,10,d,Date::ITALY))
362 # 17 18 19 20 21 22 23
363 # 24 25 26 27 28 29 30
365 def test_valid_civil__england
366 valid_civil_p = :_valid_civil?
368 assert_not_nil(Date.__send__(valid_civil_p, 1752,9,d,Date::ENGLAND))
371 assert_nil(Date.__send__(valid_civil_p, 1752,9,d,Date::ENGLAND))
374 assert_not_nil(Date.__send__(valid_civil_p, 1752,9,d,Date::ENGLAND))
376 (31..100).each do |d|
377 assert_nil(Date.__send__(valid_civil_p, 1752,9,d,Date::ENGLAND))
379 (-31..-20).each do |d|
380 assert_nil(Date.__send__(valid_civil_p, 1752,9,d,Date::ENGLAND))
382 (-19..-1).each do |d|
383 assert_not_nil(Date.__send__(valid_civil_p, 1752,9,d,Date::ENGLAND))
387 def test_valid_commercial
388 valid_commercial_p = :_valid_commercial?
389 assert_nil(Date.__send__(valid_commercial_p, 1999,53,1))
390 assert_equal(2453367, Date.__send__(valid_commercial_p, 2004,53,1))
391 assert_nil(Date.__send__(valid_commercial_p, 1999,-53,-1))
392 assert_equal(2453009, Date.__send__(valid_commercial_p, 2004,-53,-1))
393 assert_equal(2452348, Date.__send__(valid_commercial_p, 2002,11,4))
396 def test_valid_weeknum
397 valid_weeknum_p = :_valid_weeknum?
398 assert_nil(Date.__send__(valid_weeknum_p, 1999,53,0, 0))
399 assert_equal(2454101, Date.__send__(valid_weeknum_p, 2006,53,0, 0))
400 assert_nil(Date.__send__(valid_weeknum_p, 1999,-53,-1, 0))
401 assert_equal(2453743, Date.__send__(valid_weeknum_p, 2006,-53,-1, 0))
402 assert_equal(2452355, Date.__send__(valid_weeknum_p, 2002,11,4, 0))
403 assert_nil(Date.__send__(valid_weeknum_p, 1999,53,0, 1))
404 assert_equal(2454101, Date.__send__(valid_weeknum_p, 2006,52,6, 1))
405 assert_nil(Date.__send__(valid_weeknum_p, 1999,-53,-1, 1))
406 assert_equal(2453743, Date.__send__(valid_weeknum_p, 2006,-52,-2, 1))
407 assert_equal(2452355, Date.__send__(valid_weeknum_p, 2002,11,3, 1))
410 def test_valid_nth_kday
411 valid_nth_kday_p = :_valid_nth_kday?
412 assert_nil(Date.__send__(valid_nth_kday_p, 1992,2, 5,0))
413 assert_equal(2448682, Date.__send__(valid_nth_kday_p, 1992,2, 5,6))
414 assert_equal(2448682, Date.__send__(valid_nth_kday_p, 1992,2, 5,-1))
415 assert_equal(2448682, Date.__send__(valid_nth_kday_p, 1992,2, -1,6))
416 assert_equal(2448682, Date.__send__(valid_nth_kday_p, 1992,2, -1,-1))
420 valid_time_p = :_valid_time?
421 assert_equal(Rational(0), DateTime.__send__(valid_time_p, 0,0,0))
422 assert_nil(DateTime.__send__(valid_time_p, 25,59,59))
423 assert_nil(DateTime.__send__(valid_time_p, 23,60,59))
424 assert_nil(DateTime.__send__(valid_time_p, 23,59,60))
425 assert_equal(Rational(86399, 86400),
426 DateTime.__send__(valid_time_p, 23,59,59))
427 assert_equal(Rational(86399, 86400),
428 DateTime.__send__(valid_time_p, -1,-1,-1))
429 assert_equal(Rational(1), DateTime.__send__(valid_time_p, 24,0,0))
430 assert_nil(DateTime.__send__(valid_time_p, 24,0,1))
431 assert_nil(DateTime.__send__(valid_time_p, 24,1,0))
432 assert_nil(DateTime.__send__(valid_time_p, 24,1,1))