date-constructor 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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