date-constructor 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,112 @@
1
+ require 'test/unit'
2
+ require 'date'
3
+
4
+ class TestDateAttr < Test::Unit::TestCase
5
+
6
+ def test__attr
7
+ date = Date.new(1965, 5, 23)
8
+ datetime = DateTime.new(1965, 5, 23, 22, 31, 59)
9
+
10
+ [date, datetime].each_with_index do |d, i|
11
+ =begin
12
+ if i == 0
13
+ assert_match(/\#<Date\d?: 1965-05-23 \(4877807\/2,0,2299161\)>/,
14
+ d.inspect)
15
+ else
16
+ assert_match(/\#<DateTime\d?: 1965-05-23T22:31:59\+00:00 \(210721343519\/86400,0,2299161\)>/,
17
+ d.inspect)
18
+ end
19
+ =end
20
+
21
+ if i == 0
22
+ assert_equal('1965-05-23', d.to_s)
23
+ else
24
+ assert_equal('1965-05-23T22:31:59+00:00', d.to_s)
25
+ end
26
+
27
+ assert_equal('', d.inspect.gsub!(/./,''))
28
+ assert_equal('', d.to_s.gsub!(/./,''))
29
+
30
+ assert_equal(2438904, d.jd)
31
+
32
+ if i == 0
33
+ assert_equal(0, d.day_fraction)
34
+ else
35
+ assert_equal(22.to_r/24 + 31.to_r/1440 + 59.to_r/86400, d.day_fraction)
36
+ end
37
+
38
+ assert_equal(38903, d.mjd)
39
+ assert_equal(139744, d.ld)
40
+
41
+ assert_equal(1965, d.year)
42
+ assert_equal(143, d.yday)
43
+ assert_equal(5, d.mon)
44
+ assert_equal(d.mon, d.month)
45
+ assert_equal(23, d.mday)
46
+ assert_equal(d.mday, d.day)
47
+
48
+ if i == 0
49
+ assert_equal(false, d.respond_to?(:hour))
50
+ assert_equal(false, d.respond_to?(:min))
51
+ assert_equal(false, d.respond_to?(:sec))
52
+ assert_equal(false, d.respond_to?(:sec_fraction))
53
+ assert_equal(false, d.respond_to?(:zone))
54
+ assert_equal(false, d.respond_to?(:offset))
55
+ else
56
+ assert_equal(22, d.hour)
57
+ assert_equal(31, d.min)
58
+ assert_equal(59, d.sec)
59
+ assert_equal(0, d.sec_fraction)
60
+ assert_equal('+00:00', d.zone)
61
+ assert_equal(0, d.offset)
62
+ end
63
+
64
+ assert_equal(1965, d.cwyear)
65
+ assert_equal(20, d.cweek)
66
+ assert_equal(7, d.cwday)
67
+
68
+ assert_equal(0, d.wday)
69
+ assert_equal(false, d.leap?)
70
+ assert_equal(false, d.julian?)
71
+ assert_equal(true, d.gregorian?)
72
+
73
+ assert_equal(Date::ITALY, d.start)
74
+ assert_equal(d.start, d.start)
75
+ end
76
+
77
+ d = DateTime.new(1965, 5, 23, 22, 31, 59) + 1.to_r/(86400*2)
78
+ assert_equal(1.to_r/2, d.sec_fraction)
79
+ end
80
+
81
+ def test__wday_predicate
82
+ d = Date.new(2005, 10, 23)
83
+ assert_equal(true, d.sunday?)
84
+ assert_equal(false, d.monday?)
85
+ assert_equal(false, d.tuesday?)
86
+ assert_equal(false, d.wednesday?)
87
+ assert_equal(false, d.thursday?)
88
+ assert_equal(false, d.friday?)
89
+ assert_equal(false, d.saturday?)
90
+
91
+ d = Date.new(2005, 10, 30)
92
+ 14.times do |i|
93
+ assert((d + i).__send__(%w(sunday? monday? tuesday? wednesday?
94
+ thursday? friday? saturday?)[i % 7]))
95
+ end
96
+ end
97
+
98
+ def test_nth_kday
99
+ skip unless Date.new.respond_to?(:nth_kday?, true)
100
+ assert_equal(false, Date.new(2001,1,14).__send__(:nth_kday?, 1,0))
101
+ assert_equal(true, Date.new(2001,1,14).__send__(:nth_kday?, 2,0))
102
+ assert_equal(false, Date.new(2001,1,14).__send__(:nth_kday?, 3,0))
103
+ assert_equal(false, Date.new(2001,1,14).__send__(:nth_kday?, 4,0))
104
+ assert_equal(false, Date.new(2001,1,14).__send__(:nth_kday?, 5,0))
105
+ assert_equal(false, Date.new(2001,1,14).__send__(:nth_kday?, -1,0))
106
+ assert_equal(false, Date.new(2001,1,14).__send__(:nth_kday?, -2,0))
107
+ assert_equal(true, Date.new(2001,1,14).__send__(:nth_kday?, -3,0))
108
+ assert_equal(false, Date.new(2001,1,14).__send__(:nth_kday?, -4,0))
109
+ assert_equal(false, Date.new(2001,1,14).__send__(:nth_kday?, -5,0))
110
+ end
111
+
112
+ end
@@ -0,0 +1,442 @@
1
+ require 'test/unit'
2
+ require 'date'
3
+
4
+ begin
5
+ require 'calendar'
6
+ include Calendar
7
+ rescue LoadError
8
+ end
9
+
10
+ class TestDateBase < Test::Unit::TestCase
11
+
12
+ def setup
13
+ if defined?(Calendar)
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))
18
+ end
19
+ end
20
+
21
+ def test__inf
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)
25
+
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)
29
+
30
+ assert_equal(1, 0 <=> Date::Infinity.new(-1))
31
+ assert_equal(-1, 0 <=> Date::Infinity.new(+1))
32
+ assert_equal(0, 0 <=> 0)
33
+
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)
38
+
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)
43
+
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)
48
+
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)
53
+ end
54
+
55
+ def test_ordinal__julian
56
+ skip unless defined?(Calendar)
57
+ for j in @from..@to
58
+ m, d, y = julian_from_absolute(absolute_from_julian_day_number(j))
59
+ j0 = julian_day_number_from_absolute(absolute_from_julian(12, 31, y - 1))
60
+ j2 = julian_day_number_from_absolute(absolute_from_julian(m, d, y))
61
+ assert_equal(j, j2)
62
+ oy, od = Date.__send__(:jd_to_ordinal, j, Date::JULIAN)
63
+ assert_equal(y, oy)
64
+ assert_equal(j2 - j0, od)
65
+ oj = Date.__send__(:ordinal_to_jd, oy, od, Date::JULIAN)
66
+ assert_equal(j, oj)
67
+ end
68
+ end
69
+
70
+ def test_ordinal__gregorian
71
+ skip unless defined?(Calendar)
72
+ for j in @from..@to
73
+ m, d, y = gregorian_from_absolute(absolute_from_julian_day_number(j))
74
+ j0 =
75
+ julian_day_number_from_absolute(absolute_from_gregorian(12, 31, y - 1))
76
+ j2 = julian_day_number_from_absolute(absolute_from_gregorian(m, d, y))
77
+ assert_equal(j, j2)
78
+ oy, od = Date.__send__(:jd_to_ordinal, j, Date::GREGORIAN)
79
+ assert_equal(y, oy)
80
+ assert_equal(j2 - j0, od)
81
+ oj = Date.__send__(:ordinal_to_jd, oy, od, Date::GREGORIAN)
82
+ assert_equal(j, oj)
83
+ end
84
+ end
85
+
86
+ def test_civil__julian
87
+ skip unless defined?(Calendar)
88
+ for j in @from..@to
89
+ m, d, y = julian_from_absolute(absolute_from_julian_day_number(j))
90
+ j2 = julian_day_number_from_absolute(absolute_from_julian(m, d, y))
91
+ assert_equal(j2, j)
92
+ cy, cm, cd = Date.__send__(:jd_to_civil, j, Date::JULIAN)
93
+ assert_equal(y, cy)
94
+ assert_equal(m, cm)
95
+ assert_equal(d, cd)
96
+ cj = Date.__send__(:civil_to_jd, cy, cm, cd, Date::JULIAN)
97
+ assert_equal(j, cj)
98
+ end
99
+ end
100
+
101
+ def test_civil__gregorian
102
+ skip unless defined?(Calendar)
103
+ for j in @from..@to
104
+ m, d, y = gregorian_from_absolute(absolute_from_julian_day_number(j))
105
+ j2 = julian_day_number_from_absolute(absolute_from_gregorian(m, d, y))
106
+ assert_equal(j2, j)
107
+ cy, cm, cd = Date.__send__(:jd_to_civil, j, Date::GREGORIAN)
108
+ assert_equal(y, cy)
109
+ assert_equal(m, cm)
110
+ assert_equal(d, cd)
111
+ cj = Date.__send__(:civil_to_jd, cy, cm, cd, Date::GREGORIAN)
112
+ assert_equal(j, cj)
113
+ end
114
+ end
115
+
116
+ def test_commercial__gregorian
117
+ skip unless defined?(Calendar)
118
+ for j in @from..@to
119
+ w, d, y = iso_from_absolute(absolute_from_julian_day_number(j))
120
+ j2 = julian_day_number_from_absolute(absolute_from_iso(w, d, y))
121
+ assert_equal(j2, j)
122
+ cy, cw, cd = Date.__send__(:jd_to_commercial, j, Date::GREGORIAN)
123
+ assert_equal(y, cy)
124
+ assert_equal(w, cw)
125
+ assert_equal(d, cd)
126
+ cj = Date.__send__(:commercial_to_jd, cy, cw, cd, Date::GREGORIAN)
127
+ assert_equal(j, cj)
128
+ end
129
+ end
130
+
131
+ def test_weeknum
132
+ skip unless defined?(Calendar)
133
+ for j in @from..@to
134
+ for k in 0..1
135
+ wy, ww, wd = Date.__send__(:jd_to_weeknum, j, k, Date::GREGORIAN)
136
+ wj = Date.__send__(:weeknum_to_jd, wy, ww, wd, k, Date::GREGORIAN)
137
+ assert_equal(j, wj)
138
+ end
139
+ end
140
+ end
141
+
142
+ def test_weeknum__2
143
+ skip unless defined?(Calendar)
144
+ for j in @from4t..@to4t
145
+ d = Date.jd(j)
146
+ t = Time.mktime(d.year, d.mon, d.mday)
147
+ [
148
+ '%Y %U %w',
149
+ '%Y %U %u',
150
+ '%Y %W %w',
151
+ '%Y %W %u'
152
+ ].each do |fmt|
153
+ s = t.strftime(fmt)
154
+ d2 = Date.strptime(s, fmt)
155
+ assert_equal(j, d2.jd)
156
+ end
157
+ end
158
+ end
159
+
160
+ def test_nth_kday
161
+ skip unless defined?(Calendar)
162
+ skip unless (Date.respond_to?(:nth_kday_to_jd, true) &&
163
+ Date.respond_to?(:jd_to_nth_kday, true))
164
+ for y in 1601..2401
165
+ for m in 1..12
166
+ for n in -5..5
167
+ next if n == 0
168
+ for k in 0..6
169
+ j = julian_day_number_from_absolute(Nth_Kday(n, k, m, y))
170
+ j2 = Date.__send__(:nth_kday_to_jd, y, m, n, k, Date::GREGORIAN)
171
+ assert_equal(j, j2)
172
+
173
+ d1 = Date.__send__(:jd_to_nth_kday, j2, Date::GREGORIAN)
174
+ j3 = Date.__send__(:nth_kday_to_jd, *d1)
175
+ assert_equal(j, j3)
176
+ end
177
+ end
178
+ end
179
+ end
180
+ end
181
+
182
+ def test_jd
183
+ assert_equal(1 << 33, Date.jd(1 << 33).jd)
184
+ end
185
+
186
+ def test_mjd
187
+ skip unless Date.respond_to?(:mjd_to_jd, true)
188
+ jd = Date.__send__(:mjd_to_jd, 51321)
189
+ mjd = Date.__send__(:jd_to_mjd, jd)
190
+ assert_equal(51321, mjd)
191
+ end
192
+
193
+ def test_ld
194
+ skip unless Date.respond_to?(:ld_to_jd, true)
195
+ jd = Date.__send__(:ld_to_jd, 152162)
196
+ ld = Date.__send__(:jd_to_ld, jd)
197
+ assert_equal(152162, ld)
198
+ end
199
+
200
+ def test_wday
201
+ skip unless Date.respond_to?(:jd_to_wday, true)
202
+ assert_equal(4, Date.__send__(:jd_to_wday, 3))
203
+ assert_equal(3, Date.__send__(:jd_to_wday, 2))
204
+ assert_equal(2, Date.__send__(:jd_to_wday, 1))
205
+ assert_equal(1, Date.__send__(:jd_to_wday, 0))
206
+ assert_equal(0, Date.__send__(:jd_to_wday, -1))
207
+ assert_equal(6, Date.__send__(:jd_to_wday, -2))
208
+ assert_equal(5, Date.__send__(:jd_to_wday, -3))
209
+ end
210
+
211
+ def test_leap?
212
+ assert_equal(true, Date.julian_leap?(1900))
213
+ assert_equal(false, Date.julian_leap?(1999))
214
+ assert_equal(true, Date.julian_leap?(2000))
215
+
216
+ assert_equal(false, Date.gregorian_leap?(1900))
217
+ assert_equal(false, Date.gregorian_leap?(1999))
218
+ assert_equal(true, Date.gregorian_leap?(2000))
219
+
220
+ assert_equal(Date.leap?(1990), Date.gregorian_leap?(1900))
221
+ assert_equal(Date.leap?(1999), Date.gregorian_leap?(1999))
222
+ assert_equal(Date.leap?(2000), Date.gregorian_leap?(2000))
223
+ end
224
+
225
+ def test_valid_jd
226
+ valid_jd_p = :_valid_jd?
227
+ skip unless Date.respond_to?(valid_jd_p, true)
228
+ assert_equal(-1, Date.__send__(valid_jd_p, -1))
229
+ assert_equal(0, Date.__send__(valid_jd_p, 0))
230
+ assert_equal(1, Date.__send__(valid_jd_p, 1))
231
+ assert_equal(2452348, Date.__send__(valid_jd_p, 2452348))
232
+ end
233
+
234
+ def test_valid_ordinal
235
+ valid_ordinal_p = :_valid_ordinal?
236
+ skip unless Date.respond_to?(valid_ordinal_p, true)
237
+ assert_nil(Date.__send__(valid_ordinal_p, 1999,366))
238
+ assert_equal(2451910, Date.__send__(valid_ordinal_p, 2000,366))
239
+ assert_nil(Date.__send__(valid_ordinal_p, 1999,-366))
240
+ assert_equal(2451545, Date.__send__(valid_ordinal_p, 2000,-366))
241
+ assert_equal(2452275, Date.__send__(valid_ordinal_p, 2001,365))
242
+ assert_nil(Date.__send__(valid_ordinal_p, 2001,366))
243
+ assert_equal(Date.__send__(valid_ordinal_p, 2001,1),
244
+ Date.__send__(valid_ordinal_p, 2001,-365))
245
+ assert_nil(Date.__send__(valid_ordinal_p, 2001,-366))
246
+ assert_equal(2452348, Date.__send__(valid_ordinal_p, 2002,73))
247
+ end
248
+
249
+ def test_valid_ordinal__edge
250
+ valid_ordinal_p = :_valid_ordinal?
251
+ skip unless Date.respond_to?(valid_ordinal_p, true)
252
+ (1601..2400).each do |y|
253
+ d = if Date.leap?(y) then 366 else 365 end
254
+ assert_not_nil(Date.__send__(valid_ordinal_p, y,d))
255
+ assert_nil(Date.__send__(valid_ordinal_p, y,d + 1))
256
+ assert_not_nil(Date.__send__(valid_ordinal_p, y,-d))
257
+ assert_nil(Date.__send__(valid_ordinal_p, y,-(d + 1)))
258
+ end
259
+ end
260
+
261
+ # October 1582
262
+ # S M Tu W Th F S
263
+ # 274 275 276 277 288 289
264
+ # 290 291 292 293 294 295 296
265
+ # 297 298 299 300 301 302 303
266
+ # 304
267
+
268
+ # October 1582
269
+ # S M Tu W Th F S
270
+ # -92 -91 -90 -89 -78 -77
271
+ # -76 -75 -74 -73 -72 -71 -70
272
+ # -69 -68 -67 -66 -65 -64 -63
273
+ # -62
274
+
275
+ def test_valid_ordinal__italy
276
+ valid_ordinal_p = :_valid_ordinal?
277
+ skip unless Date.respond_to?(valid_ordinal_p, true)
278
+ (1..355).each do |d|
279
+ assert_not_nil(Date.__send__(valid_ordinal_p, 1582,d,Date::ITALY))
280
+ end
281
+ (356..365).each do |d|
282
+ assert_nil(Date.__send__(valid_ordinal_p, 1582,d,Date::ITALY))
283
+ end
284
+ end
285
+
286
+ # September 1752
287
+ # S M Tu W Th F S
288
+ # 245 246 258 259 260
289
+ # 261 262 263 264 265 266 267
290
+ # 268 269 270 271 272 273 274
291
+
292
+ def test_valid_ordinal__england
293
+ valid_ordinal_p = :_valid_ordinal?
294
+ skip unless Date.respond_to?(valid_ordinal_p, true)
295
+ (1..355).each do |d|
296
+ assert_not_nil(Date.__send__(valid_ordinal_p, 1752,d,Date::ENGLAND))
297
+ end
298
+ (356..366).each do |d|
299
+ assert_nil(Date.__send__(valid_ordinal_p, 1752,d,Date::ENGLAND))
300
+ end
301
+ end
302
+
303
+ def test_valid_civil
304
+ valid_civil_p = :_valid_civil?
305
+ skip unless Date.respond_to?(valid_civil_p, true)
306
+ assert_nil(Date.__send__(valid_civil_p, 1999,2,29))
307
+ assert_equal(2451604, Date.__send__(valid_civil_p, 2000,2,29))
308
+ assert_nil(Date.__send__(valid_civil_p, 1999,2,-29))
309
+ assert_equal(2451576, Date.__send__(valid_civil_p, 2000,2,-29))
310
+ assert_equal(2451941, Date.__send__(valid_civil_p, 2001,1,31))
311
+ assert_nil(Date.__send__(valid_civil_p, 2001,1,32))
312
+ assert_equal(Date.__send__(valid_civil_p, 2001,1,1),
313
+ Date.__send__(valid_civil_p, 2001,1,-31))
314
+ assert_nil(Date.__send__(valid_civil_p, 2001,1,-32))
315
+ assert_equal(2452348, Date.__send__(valid_civil_p, 2002,3,14))
316
+ assert_nil(Date.__send__(valid_civil_p, 2010,-13,-1))
317
+ end
318
+
319
+ def test_valid_civil__edge
320
+ valid_civil_p = :_valid_civil?
321
+ skip unless Date.respond_to?(valid_civil_p, true)
322
+ (1601..2400).each do |y|
323
+ d = if Date.leap?(y) then 29 else 28 end
324
+ assert_not_nil(Date.__send__(valid_civil_p, y,2,d))
325
+ assert_nil(Date.__send__(valid_civil_p, y,2,d + 1))
326
+ assert_not_nil(Date.__send__(valid_civil_p, y,2,-d))
327
+ assert_nil(Date.__send__(valid_civil_p, y,2,-(d + 1)))
328
+ end
329
+ end
330
+
331
+ # October 1582
332
+ # S M Tu W Th F S
333
+ # 1 2 3 4 15 16
334
+ # 17 18 19 20 21 22 23
335
+ # 24 25 26 27 28 29 30
336
+ # 31
337
+
338
+ def test_valid_civil__italy
339
+ valid_civil_p = :_valid_civil?
340
+ skip unless Date.respond_to?(valid_civil_p, true)
341
+ (1..4).each do |d|
342
+ assert_not_nil(Date.__send__(valid_civil_p, 1582,10,d,Date::ITALY))
343
+ end
344
+ (5..14).each do |d|
345
+ assert_nil(Date.__send__(valid_civil_p, 1582,10,d,Date::ITALY))
346
+ end
347
+ (15..31).each do |d|
348
+ assert_not_nil(Date.__send__(valid_civil_p, 1582,10,d,Date::ITALY))
349
+ end
350
+ (32..100).each do |d|
351
+ assert_nil(Date.__send__(valid_civil_p, 1582,10,d,Date::ITALY))
352
+ end
353
+ (-31..-22).each do |d|
354
+ assert_nil(Date.__send__(valid_civil_p, 1582,10,d,Date::ITALY))
355
+ end
356
+ (-21..-1).each do |d|
357
+ assert_not_nil(Date.__send__(valid_civil_p, 1582,10,d,Date::ITALY))
358
+ end
359
+ end
360
+
361
+ # September 1752
362
+ # S M Tu W Th F S
363
+ # 1 2 14 15 16
364
+ # 17 18 19 20 21 22 23
365
+ # 24 25 26 27 28 29 30
366
+
367
+ def test_valid_civil__england
368
+ valid_civil_p = :_valid_civil?
369
+ skip unless Date.respond_to?(valid_civil_p, true)
370
+ (1..2).each do |d|
371
+ assert_not_nil(Date.__send__(valid_civil_p, 1752,9,d,Date::ENGLAND))
372
+ end
373
+ (3..13).each do |d|
374
+ assert_nil(Date.__send__(valid_civil_p, 1752,9,d,Date::ENGLAND))
375
+ end
376
+ (14..30).each do |d|
377
+ assert_not_nil(Date.__send__(valid_civil_p, 1752,9,d,Date::ENGLAND))
378
+ end
379
+ (31..100).each do |d|
380
+ assert_nil(Date.__send__(valid_civil_p, 1752,9,d,Date::ENGLAND))
381
+ end
382
+ (-31..-20).each do |d|
383
+ assert_nil(Date.__send__(valid_civil_p, 1752,9,d,Date::ENGLAND))
384
+ end
385
+ (-19..-1).each do |d|
386
+ assert_not_nil(Date.__send__(valid_civil_p, 1752,9,d,Date::ENGLAND))
387
+ end
388
+ end
389
+
390
+ def test_valid_commercial
391
+ valid_commercial_p = :_valid_commercial?
392
+ skip unless Date.respond_to?(valid_commercial_p, true)
393
+ assert_nil(Date.__send__(valid_commercial_p, 1999,53,1))
394
+ assert_equal(2453367, Date.__send__(valid_commercial_p, 2004,53,1))
395
+ assert_nil(Date.__send__(valid_commercial_p, 1999,-53,-1))
396
+ assert_equal(2453009, Date.__send__(valid_commercial_p, 2004,-53,-1))
397
+ assert_equal(2452348, Date.__send__(valid_commercial_p, 2002,11,4))
398
+ end
399
+
400
+ def test_valid_weeknum
401
+ valid_weeknum_p = :_valid_weeknum?
402
+ skip unless Date.respond_to?(valid_weeknum_p, true)
403
+ assert_nil(Date.__send__(valid_weeknum_p, 1999,53,0, 0))
404
+ assert_equal(2454101, Date.__send__(valid_weeknum_p, 2006,53,0, 0))
405
+ assert_nil(Date.__send__(valid_weeknum_p, 1999,-53,-1, 0))
406
+ assert_equal(2453743, Date.__send__(valid_weeknum_p, 2006,-53,-1, 0))
407
+ assert_equal(2452355, Date.__send__(valid_weeknum_p, 2002,11,4, 0))
408
+ assert_nil(Date.__send__(valid_weeknum_p, 1999,53,0, 1))
409
+ assert_equal(2454101, Date.__send__(valid_weeknum_p, 2006,52,6, 1))
410
+ assert_nil(Date.__send__(valid_weeknum_p, 1999,-53,-1, 1))
411
+ assert_equal(2453743, Date.__send__(valid_weeknum_p, 2006,-52,-2, 1))
412
+ assert_equal(2452355, Date.__send__(valid_weeknum_p, 2002,11,3, 1))
413
+ end
414
+
415
+ def test_valid_nth_kday
416
+ valid_nth_kday_p = :_valid_nth_kday?
417
+ skip unless Date.respond_to?(valid_nth_kday_p, true)
418
+ assert_nil(Date.__send__(valid_nth_kday_p, 1992,2, 5,0))
419
+ assert_equal(2448682, Date.__send__(valid_nth_kday_p, 1992,2, 5,6))
420
+ assert_equal(2448682, Date.__send__(valid_nth_kday_p, 1992,2, 5,-1))
421
+ assert_equal(2448682, Date.__send__(valid_nth_kday_p, 1992,2, -1,6))
422
+ assert_equal(2448682, Date.__send__(valid_nth_kday_p, 1992,2, -1,-1))
423
+ end
424
+
425
+ def test_valid_time
426
+ valid_time_p = :_valid_time?
427
+ skip unless Date.respond_to?(valid_time_p, true)
428
+ assert_equal(Rational(0), DateTime.__send__(valid_time_p, 0,0,0))
429
+ assert_nil(DateTime.__send__(valid_time_p, 25,59,59))
430
+ assert_nil(DateTime.__send__(valid_time_p, 23,60,59))
431
+ assert_nil(DateTime.__send__(valid_time_p, 23,59,60))
432
+ assert_equal(Rational(86399, 86400),
433
+ DateTime.__send__(valid_time_p, 23,59,59))
434
+ assert_equal(Rational(86399, 86400),
435
+ DateTime.__send__(valid_time_p, -1,-1,-1))
436
+ assert_equal(Rational(1), DateTime.__send__(valid_time_p, 24,0,0))
437
+ assert_nil(DateTime.__send__(valid_time_p, 24,0,1))
438
+ assert_nil(DateTime.__send__(valid_time_p, 24,1,0))
439
+ assert_nil(DateTime.__send__(valid_time_p, 24,1,1))
440
+ end
441
+
442
+ end