third_base 1.0.0
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.
- data/LICENSE +19 -0
- data/README +261 -0
- data/benchmark/date.rb +18 -0
- data/benchmark/datetime.rb +18 -0
- data/bin/third_base +4 -0
- data/lib/third_base/compat/date/format.rb +3 -0
- data/lib/third_base/compat/date.rb +3 -0
- data/lib/third_base/compat.rb +405 -0
- data/lib/third_base/date.rb +674 -0
- data/lib/third_base/datetime.rb +385 -0
- data/lib/third_base.rb +2 -0
- data/spec/compat/compat_class_methods_spec.rb +208 -0
- data/spec/compat/compat_instance_methods_spec.rb +54 -0
- data/spec/compat/date_spec.rb +56 -0
- data/spec/compat/datetime_spec.rb +77 -0
- data/spec/compat_spec_helper.rb +2 -0
- data/spec/date/accessor_spec.rb +134 -0
- data/spec/date/add_month_spec.rb +28 -0
- data/spec/date/add_spec.rb +24 -0
- data/spec/date/boat_spec.rb +31 -0
- data/spec/date/civil_spec.rb +47 -0
- data/spec/date/commercial_spec.rb +34 -0
- data/spec/date/constants_spec.rb +18 -0
- data/spec/date/downto_spec.rb +17 -0
- data/spec/date/eql_spec.rb +9 -0
- data/spec/date/hash_spec.rb +13 -0
- data/spec/date/julian_spec.rb +13 -0
- data/spec/date/leap_spec.rb +19 -0
- data/spec/date/minus_month_spec.rb +26 -0
- data/spec/date/minus_spec.rb +47 -0
- data/spec/date/ordinal_spec.rb +13 -0
- data/spec/date/parse_spec.rb +227 -0
- data/spec/date/step_spec.rb +55 -0
- data/spec/date/strftime_spec.rb +132 -0
- data/spec/date/strptime_spec.rb +118 -0
- data/spec/date/succ_spec.rb +16 -0
- data/spec/date/today_spec.rb +11 -0
- data/spec/date/upto_spec.rb +17 -0
- data/spec/date_spec_helper.rb +3 -0
- data/spec/datetime/accessor_spec.rb +53 -0
- data/spec/datetime/add_spec.rb +36 -0
- data/spec/datetime/boat_spec.rb +43 -0
- data/spec/datetime/constructor_spec.rb +58 -0
- data/spec/datetime/eql_spec.rb +11 -0
- data/spec/datetime/minus_spec.rb +65 -0
- data/spec/datetime/now_spec.rb +14 -0
- data/spec/datetime/parse_spec.rb +338 -0
- data/spec/datetime/strftime_spec.rb +102 -0
- data/spec/datetime/strptime_spec.rb +84 -0
- data/spec/datetime_spec_helper.rb +3 -0
- data/spec/spec_helper.rb +54 -0
- metadata +107 -0
@@ -0,0 +1,56 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'compat_spec_helper'))
|
2
|
+
|
3
|
+
describe Date do
|
4
|
+
|
5
|
+
it "._strptime should be the same as strptime with a no default date" do
|
6
|
+
Date._strptime('2008-10-11').should == Date.strptime('2008-10-11')
|
7
|
+
Date._strptime('2008-10-11', '%Y-%m-%d').should == Date.strptime('2008-10-11', '%Y-%m-%d')
|
8
|
+
end
|
9
|
+
|
10
|
+
it ".civil should have defaults and an optional sg value" do
|
11
|
+
Date.civil(2008, 1, 1, 1).should == Date.civil(2008, 1, 1)
|
12
|
+
Date.civil.should == Date.civil(-4712, 1, 1)
|
13
|
+
end
|
14
|
+
|
15
|
+
it ".commercial should have defaults and an optional sg value" do
|
16
|
+
Date.commercial(2008, 1, 1, 1).should == Date.commercial(2008, 1, 1)
|
17
|
+
Date.commercial.should == Date.commercial(1582, 41, 5)
|
18
|
+
end
|
19
|
+
|
20
|
+
it ".jd should have defaults and an optional sg value" do
|
21
|
+
Date.jd(2008, 1).should == Date.jd(2008)
|
22
|
+
Date.jd.should == Date.jd(0)
|
23
|
+
end
|
24
|
+
|
25
|
+
it ".ordinal should have defaults and an optional sg value" do
|
26
|
+
Date.ordinal(2008, 1, 1).should == Date.ordinal(2008, 1)
|
27
|
+
Date.ordinal.should == Date.ordinal(-4712, 1)
|
28
|
+
end
|
29
|
+
|
30
|
+
it ".parse should have defaults and an optional sg value" do
|
31
|
+
Date.parse('2008-10-11').should == Date.civil(2008, 10, 11)
|
32
|
+
Date.parse('2008-10-11', true).should == Date.civil(2008, 10, 11)
|
33
|
+
Date.parse('2008-10-11', true, 1).should == Date.civil(2008, 10, 11)
|
34
|
+
Date.parse.should == Date.civil(-4712, 1, 1)
|
35
|
+
end
|
36
|
+
|
37
|
+
it ".strptime should have defaults and an optional sg value" do
|
38
|
+
Date.strptime('2008-10-11').should == Date.civil(2008, 10, 11)
|
39
|
+
Date.strptime('2008-10-11', '%Y-%m-%d').should == Date.civil(2008, 10, 11)
|
40
|
+
Date.strptime('2008-10-11', '%Y-%m-%d', 1).should == Date.civil(2008, 10, 11)
|
41
|
+
Date.strptime.should == Date.civil(-4712, 1, 1)
|
42
|
+
end
|
43
|
+
|
44
|
+
it ".today should have an optional sg value" do
|
45
|
+
Date.today(1).should == Date.today
|
46
|
+
end
|
47
|
+
|
48
|
+
it "#asctime and #ctime should be a string with the date formatted" do
|
49
|
+
Date.new(2008, 1, 1).asctime.should == 'Tue Jan 1 00:00:00 2008'
|
50
|
+
Date.new(2008, 1, 1).ctime.should == 'Tue Jan 1 00:00:00 2008'
|
51
|
+
end
|
52
|
+
|
53
|
+
it "#day_fraction should be 0.0" do
|
54
|
+
Date.new(2008, 1, 1).day_fraction.should == 0.0
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'compat_spec_helper'))
|
2
|
+
|
3
|
+
describe DateTime do
|
4
|
+
|
5
|
+
it "._strptime should be the same as strptime with no default date" do
|
6
|
+
DateTime._strptime('2008-10-11T01:00:02+0000').should == DateTime.strptime('2008-10-11T01:00:02+0000')
|
7
|
+
DateTime._strptime('2008-10-11', '%Y-%m-%d').should == DateTime.strptime('2008-10-11', '%Y-%m-%d')
|
8
|
+
end
|
9
|
+
|
10
|
+
it ".civil should have defaults and an optional sg value" do
|
11
|
+
DateTime.civil(2008, 1, 1, 1, 1, 1, 0.5, 1).should == DateTime.civil(2008, 1, 1, 1, 1, 1, 0.5)
|
12
|
+
DateTime.civil.should == DateTime.civil(-4712, 1, 1, 0, 0, 0, 0)
|
13
|
+
end
|
14
|
+
|
15
|
+
it ".commercial should have defaults and an optional sg value" do
|
16
|
+
DateTime.commercial(2008, 1, 1, 1, 1, 1, 0.5, 1).should == DateTime.commercial(2008, 1, 1, 1, 1, 1, 0.5)
|
17
|
+
DateTime.commercial.should == DateTime.commercial(1582, 41, 5, 0, 0, 0, 0)
|
18
|
+
end
|
19
|
+
|
20
|
+
it ".jd should have defaults and an optional sg value" do
|
21
|
+
DateTime.jd(2008, 1, 1, 1, 0.5, 1).should == DateTime.jd(2008, 1, 1, 1, 0.5)
|
22
|
+
DateTime.jd.should == DateTime.jd(0, 0, 0, 0, 0)
|
23
|
+
end
|
24
|
+
|
25
|
+
it ".ordinal should have defaults and an optional sg value" do
|
26
|
+
DateTime.ordinal(2008, 1, 1, 1, 1, 0.5, 1).should == DateTime.ordinal(2008, 1, 1, 1, 1, 0.5)
|
27
|
+
DateTime.ordinal.should == DateTime.ordinal(-4712, 1, 0, 0, 0, 0)
|
28
|
+
end
|
29
|
+
|
30
|
+
it ".parse should have defaults and an optional sg value" do
|
31
|
+
DateTime.parse('2008-10-11').should == DateTime.civil(2008, 10, 11)
|
32
|
+
DateTime.parse('2008-10-11', true).should == DateTime.civil(2008, 10, 11)
|
33
|
+
DateTime.parse('2008-10-11', true, 1).should == DateTime.civil(2008, 10, 11)
|
34
|
+
DateTime.parse.should == DateTime.civil(-4712, 1, 1)
|
35
|
+
end
|
36
|
+
|
37
|
+
it ".strptime should have defaults and an optional sg value" do
|
38
|
+
DateTime.strptime('2008-10-11T00:00:00+00:00').should == DateTime.civil(2008, 10, 11)
|
39
|
+
DateTime.strptime('2008-10-11', '%Y-%m-%d').should == DateTime.civil(2008, 10, 11)
|
40
|
+
DateTime.strptime('2008-10-11', '%Y-%m-%d', 1).should == DateTime.civil(2008, 10, 11)
|
41
|
+
DateTime.strptime.should == DateTime.civil(-4712, 1, 1)
|
42
|
+
end
|
43
|
+
|
44
|
+
it ".now should have an optional sg value" do
|
45
|
+
DateTime.now(1).to_s.should == DateTime.now.to_s
|
46
|
+
end
|
47
|
+
|
48
|
+
it "#asctime and #ctime should be a string with the date formatted" do
|
49
|
+
DateTime.new(2008, 1, 1).asctime.should == 'Tue Jan 1 00:00:00 2008'
|
50
|
+
DateTime.new(2008, 1, 1).ctime.should == 'Tue Jan 1 00:00:00 2008'
|
51
|
+
end
|
52
|
+
|
53
|
+
it "#day_fraction should be the fraction of the day" do
|
54
|
+
DateTime.new(2008, 1, 1).day_fraction.should == 0.0
|
55
|
+
DateTime.new(2008, 1, 1, 12).day_fraction.should == 0.5
|
56
|
+
end
|
57
|
+
|
58
|
+
it "#new_offset and #newof should be a separate datetime with a modified offset" do
|
59
|
+
DateTime.new(2008, 1, 1).new_offset(0.5).should == DateTime.new(2008, 1, 1, 0, 0, 0, 0.5)
|
60
|
+
DateTime.new(2008, 1, 1).newof(0.5).should == DateTime.new(2008, 1, 1, 0, 0, 0, 0.5)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "#offset and #of should be the offset as a float fraction of the day" do
|
64
|
+
DateTime.parse('2008-01-01 00:00:00+12:00').offset.should == 0.5
|
65
|
+
DateTime.parse('2008-01-01 00:00:00+12:00').of.should == 0.5
|
66
|
+
end
|
67
|
+
|
68
|
+
it "#offset_sec offset from UTC in seconds" do
|
69
|
+
DateTime.parse('2008-01-01 00:00:00+02:00').offset_sec.should == 7200
|
70
|
+
end
|
71
|
+
|
72
|
+
it "#sec_fraction should be the fraction of a second as a fraction of the day" do
|
73
|
+
DateTime.new(2008, 1, 1).sec_fraction.should == 0.0
|
74
|
+
DateTime.parse('12:13:15.678900').sec_fraction.should be_close(7.85763888888889e-06, 0.0000000000001)
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -0,0 +1,134 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'date_spec_helper'))
|
2
|
+
|
3
|
+
describe "Date#cwday" do
|
4
|
+
it "should be able to determine the commercial week day for a date" do
|
5
|
+
Date.civil(2007, 1, 17).cwday.should == 3
|
6
|
+
Date.civil(2008, 10, 26).cwday.should == 7
|
7
|
+
Date.commercial(2008, 1, 1).cwday.should == 1
|
8
|
+
Date.commercial(2008, 10, 5).cwday.should == 5
|
9
|
+
Date.jd(2454782).cwday.should == 2
|
10
|
+
Date.jd(2454786).cwday.should == 6
|
11
|
+
Date.ordinal(2008, 1).cwday.should == 2
|
12
|
+
Date.ordinal(2008, 317).cwday.should == 3
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "Date#cweek" do
|
17
|
+
it "should be able to determine the commercial week for a date" do
|
18
|
+
Date.civil(2007, 1, 17).cweek.should == 3
|
19
|
+
Date.civil(2008, 10, 28).cweek.should == 44
|
20
|
+
Date.civil(2007, 12, 31).cweek.should == 1
|
21
|
+
Date.civil(2010, 1, 1).cweek.should == 53
|
22
|
+
Date.commercial(2008, 1, 1).cweek.should == 1
|
23
|
+
Date.commercial(2008, 10, 5).cweek.should == 10
|
24
|
+
Date.jd(2454782).cweek.should == 46
|
25
|
+
Date.jd(2454789).cweek.should == 47
|
26
|
+
Date.ordinal(2008, 1).cweek.should == 1
|
27
|
+
Date.ordinal(2008, 359).cweek.should == 52
|
28
|
+
Date.ordinal(2008, 366).cweek.should == 1
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "Date#cwyear" do
|
33
|
+
it "should be able to determine the commercial year for a date" do
|
34
|
+
Date.civil(2007, 1, 17).cwyear.should == 2007
|
35
|
+
Date.civil(2008, 10, 28).cwyear.should == 2008
|
36
|
+
Date.civil(2007, 12, 31).cwyear.should == 2008
|
37
|
+
Date.civil(2010, 1, 1).cwyear.should == 2009
|
38
|
+
Date.commercial(2008, 1, 1).cwyear.should == 2008
|
39
|
+
Date.commercial(2008, 52, 1).cwyear.should == 2008
|
40
|
+
Date.jd(2454782).cwyear.should == 2008
|
41
|
+
Date.jd(2454832).cwyear.should == 2009
|
42
|
+
Date.ordinal(2008, 1).cwyear.should == 2008
|
43
|
+
Date.ordinal(2008, 359).cwyear.should == 2008
|
44
|
+
Date.ordinal(2008, 366).cwyear.should == 2009
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe "Date#day and #mday" do
|
49
|
+
it "should be able to determine the month for a date" do
|
50
|
+
Date.civil(2007, 1, 17).day.should == 17
|
51
|
+
Date.civil(2008, 10, 28).day.should == 28
|
52
|
+
Date.civil(2007, 1, 17).mday.should == 17
|
53
|
+
Date.civil(2008, 10, 28).mday.should == 28
|
54
|
+
Date.commercial(2008, 1, 1).day.should == 31
|
55
|
+
Date.commercial(2008, 52, 1).day.should == 22
|
56
|
+
Date.jd(2454782).day.should == 11
|
57
|
+
Date.jd(2454832).day.should == 31
|
58
|
+
Date.ordinal(2008, 1).day.should == 1
|
59
|
+
Date.ordinal(2008, 359).day.should == 24
|
60
|
+
Date.ordinal(2008, 366).day.should == 31
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "Date#jd" do
|
65
|
+
it "should be able to determine the month for a date" do
|
66
|
+
Date.civil(2007, 1, 17).jd.should == 2454118
|
67
|
+
Date.civil(2008, 10, 28).jd.should == 2454768
|
68
|
+
Date.commercial(2008, 1, 1).jd.should == 2454466
|
69
|
+
Date.commercial(2008, 52, 1).jd.should == 2454823
|
70
|
+
Date.jd(2454782).jd.should == 2454782
|
71
|
+
Date.jd(2454832).jd.should == 2454832
|
72
|
+
Date.ordinal(2008, 1).jd.should == 2454467
|
73
|
+
Date.ordinal(2008, 359).jd.should == 2454825
|
74
|
+
Date.ordinal(2008, 366).jd.should == 2454832
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "Date#mon and #month" do
|
79
|
+
it "should be able to determine the month for a date" do
|
80
|
+
Date.civil(2007, 1, 17).mon.should == 1
|
81
|
+
Date.civil(2008, 10, 28).mon.should == 10
|
82
|
+
Date.civil(2007, 1, 17).month.should == 1
|
83
|
+
Date.civil(2008, 10, 28).month.should == 10
|
84
|
+
Date.commercial(2008, 1, 1).mon.should == 12
|
85
|
+
Date.commercial(2008, 52, 1).mon.should == 12
|
86
|
+
Date.jd(2454782).mon.should == 11
|
87
|
+
Date.jd(2454832).mon.should == 12
|
88
|
+
Date.ordinal(2008, 1).mon.should == 1
|
89
|
+
Date.ordinal(2008, 170).mon.should == 6
|
90
|
+
Date.ordinal(2008, 366).mon.should == 12
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe "Date#wday" do
|
95
|
+
it "should be able to determine the week day for a date" do
|
96
|
+
Date.civil(2007, 1, 17).wday.should == 3
|
97
|
+
Date.civil(2008, 10, 26).wday.should == 0
|
98
|
+
Date.commercial(2008, 1, 1).wday.should == 1
|
99
|
+
Date.commercial(2008, 52, 1).wday.should == 1
|
100
|
+
Date.jd(2454782).wday.should == 2
|
101
|
+
Date.jd(2454832).wday.should == 3
|
102
|
+
Date.ordinal(2008, 1).wday.should == 2
|
103
|
+
Date.ordinal(2008, 170).wday.should == 3
|
104
|
+
Date.ordinal(2008, 366).wday.should == 3
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe "Date#yday" do
|
109
|
+
it "should be able to determine the year for a date" do
|
110
|
+
Date.civil(2007, 1, 17).yday.should == 17
|
111
|
+
Date.civil(2008, 10, 28).yday.should == 302
|
112
|
+
Date.commercial(2008, 1, 1).yday.should == 365
|
113
|
+
Date.commercial(2008, 52, 1).yday.should == 357
|
114
|
+
Date.jd(2454782).yday.should == 316
|
115
|
+
Date.jd(2454832).yday.should == 366
|
116
|
+
Date.ordinal(2008, 1).yday.should == 1
|
117
|
+
Date.ordinal(2008, 170).yday.should == 170
|
118
|
+
Date.ordinal(2008, 366).yday.should == 366
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe "Date#year" do
|
123
|
+
it "should be able to determine the year for a date" do
|
124
|
+
Date.civil(2007, 1, 17).year.should == 2007
|
125
|
+
Date.civil(2008, 1, 17).year.should == 2008
|
126
|
+
Date.commercial(2008, 1, 1).year.should == 2007
|
127
|
+
Date.commercial(2008, 52, 1).year.should == 2008
|
128
|
+
Date.jd(2454782).year.should == 2008
|
129
|
+
Date.jd(2454833).year.should == 2009
|
130
|
+
Date.ordinal(2008, 1).year.should == 2008
|
131
|
+
Date.ordinal(2008, 170).year.should == 2008
|
132
|
+
Date.ordinal(2008, 366).year.should == 2008
|
133
|
+
end
|
134
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'date_spec_helper'))
|
2
|
+
|
3
|
+
describe "Date#>>" do
|
4
|
+
|
5
|
+
it "should add a number of months to a Date" do
|
6
|
+
(Date.civil(2007,2,27) >> 10).should == Date.civil(2007, 12, 27)
|
7
|
+
(Date.civil(2007,2,27) >> 10).should == Date.civil(2007, 12, 27)
|
8
|
+
(Date.commercial(2007,2,2) >> 10).should == Date.commercial(2007, 45, 5)
|
9
|
+
(Date.jd(2454782) >> 10).should == Date.jd(2455086)
|
10
|
+
(Date.ordinal(2008, 10) >> 10).should == Date.ordinal(2008, 315)
|
11
|
+
(Date.civil(2007,2,27) >> 22).should == Date.civil(2008, 12, 27)
|
12
|
+
(Date.civil(2007,2,27) >> -2).should == Date.civil(2006, 12, 27)
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
it "should result in the last day of a month if the day doesn't exist" do
|
17
|
+
d = Date.civil(2008,3,31) >> 1
|
18
|
+
d.should == Date.civil(2008, 4, 30)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should raise an error on non numeric parameters" do
|
22
|
+
lambda { Date.civil(2007,2,27) >> :hello }.should raise_error(TypeError)
|
23
|
+
lambda { Date.civil(2007,2,27) >> "hello" }.should raise_error(TypeError)
|
24
|
+
lambda { Date.civil(2007,2,27) >> Date.new(2007,2,27) }.should raise_error(TypeError)
|
25
|
+
lambda { Date.civil(2007,2,27) >> Object.new }.should raise_error(TypeError)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'date_spec_helper'))
|
2
|
+
|
3
|
+
describe "Date#+" do
|
4
|
+
|
5
|
+
it "should add a number of days to a Date" do
|
6
|
+
(Date.civil(2007,2,27) + 315).should == Date.civil(2008, 1, 8)
|
7
|
+
(Date.commercial(2007,2,2) + 315).should == Date.commercial(2007, 47, 2)
|
8
|
+
(Date.jd(2454782) + 315).should == Date.jd(2455097)
|
9
|
+
(Date.ordinal(2008, 10) + 315).should == Date.ordinal(2008, 325)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should add a negative number of days to a Date" do
|
13
|
+
d = Date.civil(2007,2,27).+(-10)
|
14
|
+
d.should == Date.civil(2007, 2, 17)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should raise an error on non numeric parameters" do
|
18
|
+
lambda { Date.civil(2007,2,27) + :hello }.should raise_error(TypeError)
|
19
|
+
lambda { Date.civil(2007,2,27) + "hello" }.should raise_error(TypeError)
|
20
|
+
lambda { Date.civil(2007,2,27) + Date.new(2007,2,27) }.should raise_error(TypeError)
|
21
|
+
lambda { Date.civil(2007,2,27) + Object.new }.should raise_error(TypeError)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'date_spec_helper'))
|
2
|
+
|
3
|
+
describe "Date#<=>" do
|
4
|
+
|
5
|
+
it "should be able to compare two same dates" do
|
6
|
+
(Date.civil(2000, 04, 06) <=> Date.civil(2000, 04, 06)).should == 0
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should be able to compute the difference between two dates" do
|
10
|
+
(Date.civil(2000, 04, 05) <=> Date.civil(2000, 04, 06)).should == -1
|
11
|
+
(Date.civil(2001, 04, 05) <=> Date.civil(2000, 04, 06)).should == 1
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should be able to compare to another numeric" do
|
15
|
+
(Date.civil(2000, 04, 05) <=> Date.civil(2000, 04, 06).jd).should == -1
|
16
|
+
(Date.civil(2001, 04, 05) <=> Date.civil(2000, 04, 06).jd).should == 1
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "Date#between?" do
|
22
|
+
it "should be true if the date falls in between the two given dates" do
|
23
|
+
(Date.civil(2000, 04, 06).between?(Date.civil(2000, 04, 05), Date.civil(2000, 04, 07))).should == true
|
24
|
+
(Date.civil(2000, 04, 06).between?(Date.civil(2000, 04, 06), Date.civil(2000, 04, 07))).should == true
|
25
|
+
(Date.civil(2000, 04, 06).between?(Date.civil(2000, 04, 05), Date.civil(2000, 04, 06))).should == true
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should be false if the date does not fall in between the two given dates" do
|
29
|
+
(Date.civil(2000, 04, 05).between?(Date.civil(2000, 04, 06), Date.civil(2000, 04, 07))).should == false
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'date_spec_helper'))
|
2
|
+
|
3
|
+
describe :date_civil, :shared => true do
|
4
|
+
it "creates a date with arguments" do
|
5
|
+
d = Date.send(@method, 2000, 3, 5)
|
6
|
+
d.year.should == 2000
|
7
|
+
d.month.should == 3
|
8
|
+
d.day.should == 5
|
9
|
+
d.jd.should == 2451609
|
10
|
+
|
11
|
+
# Should also work with years far in the past and future
|
12
|
+
|
13
|
+
d = Date.send(@method, -9000, 7, 5)
|
14
|
+
d.year.should == -9000
|
15
|
+
d.month.should == 7
|
16
|
+
d.day.should == 5
|
17
|
+
d.jd.should == -1565937
|
18
|
+
|
19
|
+
d = Date.send(@method, 9000, 10, 14)
|
20
|
+
d.year.should == 9000
|
21
|
+
d.month.should == 10
|
22
|
+
d.day.should == 14
|
23
|
+
d.jd.should == 5008529
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
it "doesn't create dates for invalid arguments" do
|
28
|
+
lambda { Date.send(@method, 2000, 13, 31) }.should raise_error(ArgumentError)
|
29
|
+
lambda { Date.send(@method, 2000, 12, 32) }.should raise_error(ArgumentError)
|
30
|
+
lambda { Date.send(@method, 2000, 2, 30) }.should raise_error(ArgumentError)
|
31
|
+
lambda { Date.send(@method, 1900, 2, 29) }.should raise_error(ArgumentError)
|
32
|
+
lambda { Date.send(@method, 2000, 2, 29) }.should_not raise_error(ArgumentError)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
describe "Date#civil" do
|
38
|
+
|
39
|
+
it_behaves_like(:date_civil, :civil)
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "Date#new" do
|
44
|
+
|
45
|
+
it_behaves_like(:date_civil, :new)
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'date_spec_helper'))
|
2
|
+
|
3
|
+
describe "Date#commercial" do
|
4
|
+
it "Creates a Date for the friday in the year and week given" do
|
5
|
+
d = Date.commercial(2000, 1)
|
6
|
+
d.year.should == 2000
|
7
|
+
d.month.should == 1
|
8
|
+
d.day.should == 7
|
9
|
+
d.cwday.should == 5
|
10
|
+
end
|
11
|
+
|
12
|
+
it "Creates a Date for the correct day given the year, week and day number" do
|
13
|
+
d = Date.commercial(2004, 1, 1)
|
14
|
+
d.year.should == 2003
|
15
|
+
d.month.should == 12
|
16
|
+
d.day.should == 29
|
17
|
+
d.cwday.should == 1
|
18
|
+
d.cweek.should == 1
|
19
|
+
d.cwyear.should == 2004
|
20
|
+
end
|
21
|
+
|
22
|
+
it "creates only Date objects for valid weeks" do
|
23
|
+
lambda { Date.commercial(2004, 53, 1) }.should_not raise_error(ArgumentError)
|
24
|
+
lambda { Date.commercial(2004, 53, 0) }.should raise_error(ArgumentError)
|
25
|
+
lambda { Date.commercial(2004, 53, 8) }.should raise_error(ArgumentError)
|
26
|
+
lambda { Date.commercial(2004, 54, 1) }.should raise_error(ArgumentError)
|
27
|
+
lambda { Date.commercial(2004, 0, 1) }.should raise_error(ArgumentError)
|
28
|
+
|
29
|
+
lambda { Date.commercial(2003, 52, 1) }.should_not raise_error(ArgumentError)
|
30
|
+
lambda { Date.commercial(2003, 53, 1) }.should raise_error(ArgumentError)
|
31
|
+
lambda { Date.commercial(2003, 52, 0) }.should raise_error(ArgumentError)
|
32
|
+
lambda { Date.commercial(2003, 52, 8) }.should raise_error(ArgumentError)
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'date_spec_helper'))
|
2
|
+
|
3
|
+
describe "Date constants" do
|
4
|
+
|
5
|
+
it "should define MONTHNAMES" do
|
6
|
+
Date::MONTHNAMES.should == [nil] + %w(January February March April May June July
|
7
|
+
August September October November December)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should define DAYNAMES" do
|
11
|
+
Date::DAYNAMES.should == %w(Sunday Monday Tuesday Wednesday Thursday Friday Saturday)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should define ABBR_MONTHNAMES" do
|
15
|
+
Date::ABBR_DAYNAMES.should == %w(Sun Mon Tue Wed Thu Fri Sat)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'date_spec_helper'))
|
2
|
+
|
3
|
+
describe "Date#downto" do
|
4
|
+
|
5
|
+
it "should be able to step backward in time" do
|
6
|
+
ds = Date.civil(2000, 4, 14)
|
7
|
+
de = Date.civil(2000, 3, 29)
|
8
|
+
count = 0
|
9
|
+
ds.step(de, -1) do |d|
|
10
|
+
d.should <= ds
|
11
|
+
d.should >= de
|
12
|
+
count += 1
|
13
|
+
end
|
14
|
+
count.should == 17
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'date_spec_helper'))
|
2
|
+
|
3
|
+
describe "Date#eql?" do
|
4
|
+
it "should be able determine equality between date objects" do
|
5
|
+
Date.civil(2007, 10, 11).should eql(Date.civil(2007, 10, 11))
|
6
|
+
Date.civil(2007, 10, 11).should eql(Date.civil(2007, 10, 12) - 1)
|
7
|
+
Date.civil(2007, 10, 11).should_not eql(Date.civil(2007, 10, 12))
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'date_spec_helper'))
|
2
|
+
|
3
|
+
describe "Date#hash" do
|
4
|
+
|
5
|
+
it "should be able determine the hash value for a date" do
|
6
|
+
Date.civil(2004, 7, 12).respond_to?(:hash).should == true
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should be the case that the same date results in the same hash" do
|
10
|
+
Date.civil(2004, 7, 12).hash.should == Date.civil(2004, 7, 12).hash
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'date_spec_helper'))
|
2
|
+
|
3
|
+
describe "Date#jd" do
|
4
|
+
|
5
|
+
it "should be able to construct a Date object based on the Julian day" do
|
6
|
+
Date.jd(2454482).should == Date.civil(2008, 1, 16)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should be able to determine the Julian day for a Date object" do
|
10
|
+
Date.civil(2008, 1, 16).jd.should == 2454482
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'date_spec_helper'))
|
2
|
+
|
3
|
+
describe "Date#leap?" do
|
4
|
+
it "should be true if the current date is a leap year and no argument is given" do
|
5
|
+
Date.civil(2000, 10, 11).leap?.should == true
|
6
|
+
Date.civil(2004, 10, 11).leap?.should == true
|
7
|
+
Date.civil(2008, 10, 11).leap?.should == true
|
8
|
+
Date.civil(1996, 10, 11).leap?.should == true
|
9
|
+
Date.civil(1600, 10, 11).leap?.should == true
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should be false if the current date is not a leap year and no argument is given" do
|
13
|
+
Date.civil(1700, 10, 11).leap?.should == false
|
14
|
+
Date.civil(1800, 10, 11).leap?.should == false
|
15
|
+
Date.civil(1900, 10, 11).leap?.should == false
|
16
|
+
Date.civil(1999, 10, 11).leap?.should == false
|
17
|
+
Date.civil(2001, 10, 11).leap?.should == false
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'date_spec_helper'))
|
2
|
+
|
3
|
+
describe "Date#<<" do
|
4
|
+
|
5
|
+
it "should substract a number of months from a date" do
|
6
|
+
(Date.civil(2007, 12, 27) << 10).should == Date.civil(2007,2,27)
|
7
|
+
(Date.commercial(2007, 45, 5) << 10).should == Date.commercial(2007,2,2)
|
8
|
+
(Date.jd(2455086) << 10).should == Date.jd(2454782)
|
9
|
+
(Date.ordinal(2008, 315) << 10).should == Date.ordinal(2008, 10)
|
10
|
+
(Date.civil(2007, 12, 27) << 12).should == Date.civil(2006,12,27)
|
11
|
+
(Date.civil(2007, 12, 27) << -12).should == Date.civil(2008,12,27)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should result in the last day of a month if the day doesn't exist" do
|
15
|
+
d = Date.civil(2008,3,31) << 1
|
16
|
+
d.should == Date.civil(2008, 2, 29)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should raise an error on non numeric parameters" do
|
20
|
+
lambda { Date.civil(2007,2,27) << :hello }.should raise_error(NoMethodError)
|
21
|
+
lambda { Date.civil(2007,2,27) << "hello" }.should raise_error(NoMethodError)
|
22
|
+
lambda { Date.civil(2007,2,27) << Date.new(2007,10,27) }.should raise_error(NoMethodError)
|
23
|
+
lambda { Date.civil(2007,2,27) << Object.new }.should raise_error(NoMethodError)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'date_spec_helper'))
|
2
|
+
|
3
|
+
describe "Date#-" do
|
4
|
+
|
5
|
+
it "should substract a number of days from a Date" do
|
6
|
+
(Date.civil(2008, 1, 8) - 315).should == Date.civil(2007,2,27)
|
7
|
+
(Date.commercial(2007, 47, 2) - 315).should == Date.commercial(2007,2,2)
|
8
|
+
(Date.jd(2455097) - 315).should == Date.jd(2454782)
|
9
|
+
(Date.ordinal(2008, 325) - 315).should == Date.ordinal(2008, 10)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should substract a negative number of days from a Date" do
|
13
|
+
d = Date.civil(2007, 4, 19).-(-13)
|
14
|
+
d.should == Date.civil(2007, 5 ,2)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should be able to compute the different between two dates" do
|
18
|
+
(Date.civil(2007,2,27) - Date.civil(2007,2,27)).should == 0
|
19
|
+
(Date.civil(2007,2,27) - Date.civil(2007,2,26)).should == 1
|
20
|
+
(Date.civil(2006,2,27) - Date.civil(2007,2,27)).should == -365
|
21
|
+
(Date.civil(2008,2,27) - Date.civil(2007,2,27)).should == 365
|
22
|
+
(Date.civil(2009,2,27) - Date.civil(2008,2,27)).should == 366
|
23
|
+
|
24
|
+
(Date.civil(2009,2,27) - Date.commercial(2008,2,1)).should == 417
|
25
|
+
(Date.civil(2009,2,27) - Date.jd(2454782)).should == 108
|
26
|
+
(Date.civil(2009,2,27) - Date.ordinal(2008, 10)).should == 414
|
27
|
+
|
28
|
+
(Date.commercial(2008,2,1) - Date.civil(2008,2,27)).should == -51
|
29
|
+
(Date.commercial(2008,2,1) - Date.jd(2454782)).should == -309
|
30
|
+
(Date.commercial(2008,2,1) - Date.ordinal(2008, 10)).should == -3
|
31
|
+
|
32
|
+
(Date.jd(2454782) - Date.commercial(2008,2,1)).should == 309
|
33
|
+
(Date.jd(2454782) - Date.civil(2009,2,27)).should == -108
|
34
|
+
(Date.jd(2454782) - Date.ordinal(2008, 10)).should == 306
|
35
|
+
|
36
|
+
(Date.ordinal(2008, 10) - Date.commercial(2008,2,1)).should == 3
|
37
|
+
(Date.ordinal(2008, 10) - Date.jd(2454782)).should == -306
|
38
|
+
(Date.ordinal(2008, 10) - Date.civil(2009,2,27)).should == -414
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should raise an error on non numeric parameters" do
|
42
|
+
lambda { Date.civil(2007,2,27) - :hello }.should raise_error(TypeError)
|
43
|
+
lambda { Date.civil(2007,2,27) - "hello" }.should raise_error(TypeError)
|
44
|
+
lambda { Date.civil(2007,2,27) - Object.new }.should raise_error(TypeError)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require(File.join(File.dirname(__FILE__), '..', 'date_spec_helper'))
|
2
|
+
|
3
|
+
describe "Date#ordinal" do
|
4
|
+
|
5
|
+
it "should be able to construct a Date object from an ordinal date" do
|
6
|
+
lambda { Date.ordinal(1900, 366) }.should raise_error(ArgumentError)
|
7
|
+
lambda { Date.ordinal(1900, 365) }.should_not raise_error(ArgumentError)
|
8
|
+
lambda { Date.ordinal(2000, 366) }.should_not raise_error(ArgumentError)
|
9
|
+
lambda { Date.ordinal(2000, 367) }.should raise_error(ArgumentError)
|
10
|
+
Date.ordinal(2000, 288).should == Date.civil(2000, 10, 14)
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|