home_run 0.9.0-x86-mingw32 → 0.9.1-x86-mingw32
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/CHANGELOG +46 -0
- data/README.rdoc +45 -33
- data/Rakefile +26 -67
- data/bench/cpu_bench.rb +1 -54
- data/bench/cpu_bench_util.rb +55 -0
- data/bench/parser_bench.rb +20 -0
- data/bin/home_run +14 -17
- data/default.mspec +1 -1
- data/ext/{date_ext.c → date_ext/date_ext.c} +95 -208
- data/ext/date_ext/date_ext.h +187 -0
- data/ext/date_ext/date_parser.c +852 -0
- data/ext/date_ext/date_parser.rl +352 -0
- data/ext/{datetime.c → date_ext/datetime.c} +120 -77
- data/ext/date_ext/extconf.rb +6 -0
- data/lib/1.8/date_ext.so +0 -0
- data/lib/1.9/date_ext.so +0 -0
- data/{ext → lib}/date/format.rb +1 -1
- data/lib/date.rb +7 -0
- data/lib/home_run.rb +5 -0
- data/spec/date/allocate_spec.rb +7 -0
- data/spec/date/encoding_spec.rb +42 -0
- data/spec/date/limits_spec.rb +121 -0
- data/spec/date/parse_spec.rb +154 -0
- data/spec/date/parsing_spec.rb +11 -0
- data/spec/date/step_spec.rb +22 -0
- data/spec/date/strptime_spec.rb +35 -3
- data/spec/datetime/add_spec.rb +4 -4
- data/spec/datetime/allocate_spec.rb +7 -0
- data/spec/datetime/encoding_spec.rb +42 -0
- data/spec/datetime/limits_spec.rb +170 -0
- data/spec/datetime/parse_spec.rb +73 -0
- data/spec/datetime/parsing_spec.rb +4 -0
- data/spec/datetime/step_spec.rb +22 -0
- data/spec/datetime/strptime_spec.rb +10 -0
- metadata +24 -14
- data/ext/1.8/date_ext.so +0 -0
- data/ext/1.9/date_ext.so +0 -0
- data/ext/date.rb +0 -7
- data/ext/date_parser.c +0 -367
- data/ext/date_parser.rl +0 -134
- data/ext/extconf.rb +0 -6
@@ -0,0 +1,170 @@
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe "DateTime limits: " do
|
4
|
+
before do
|
5
|
+
@d1 = DateTime.jd(DateTime::JULIAN - 1)
|
6
|
+
@d2 = DateTime.jd(DateTime::GREGORIAN + 1)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "#+ and #- should raise RangeError for dates that are too large or small" do
|
10
|
+
proc{DateTime.jd(@d1.jd) + 1}.should raise_error(RangeError)
|
11
|
+
proc{DateTime.jd(@d2.jd) - 1}.should raise_error(RangeError)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "#<< and #>> should raise RangeError for dates that are too large or small" do
|
15
|
+
proc{DateTime.jd(@d1.jd) >> 1}.should raise_error(RangeError)
|
16
|
+
proc{DateTime.jd(@d2.jd) << 1}.should raise_error(RangeError)
|
17
|
+
end
|
18
|
+
|
19
|
+
ruby_version_is "1.9" do
|
20
|
+
it "#next_year and #prev_year should raise RangeError for dates that are too large or small" do
|
21
|
+
proc{DateTime.jd(@d1.jd).next_year}.should raise_error(RangeError)
|
22
|
+
proc{DateTime.jd(@d2.jd).prev_year}.should raise_error(RangeError)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it ".jd should raise RangeError for dates that are too large or small" do
|
27
|
+
proc{DateTime.jd(@d1.jd + 1)}.should raise_error(RangeError)
|
28
|
+
proc{DateTime.jd(@d2.jd - 1)}.should raise_error(RangeError)
|
29
|
+
end
|
30
|
+
|
31
|
+
it ".jd should not raise for dates that are not too large or small" do
|
32
|
+
proc{DateTime.jd(@d1.jd)}.should_not raise_error
|
33
|
+
proc{DateTime.jd(@d2.jd)}.should_not raise_error
|
34
|
+
end
|
35
|
+
|
36
|
+
it ".new! should raise RangeError for dates that are too large or small" do
|
37
|
+
proc{DateTime.new!(@d1.jd + 1)}.should raise_error(RangeError)
|
38
|
+
# Need to use 1.5 instead of 1 because new! adds a half day
|
39
|
+
proc{DateTime.new!(@d2.jd - 1.5)}.should raise_error(RangeError)
|
40
|
+
end
|
41
|
+
|
42
|
+
it ".new! should not raise for dates that are not too large or small" do
|
43
|
+
proc{DateTime.new!(@d1.jd)}.should_not raise_error
|
44
|
+
proc{DateTime.new!(@d2.jd)}.should_not raise_error
|
45
|
+
end
|
46
|
+
|
47
|
+
it ".civil should raise RangeError for dates that are too large or small" do
|
48
|
+
proc{DateTime.civil(@d1.year, @d1.month, @d1.day + 1)}.should raise_error(RangeError)
|
49
|
+
proc{DateTime.civil(@d2.year, @d2.month, @d2.day - 1)}.should raise_error(RangeError)
|
50
|
+
end
|
51
|
+
|
52
|
+
it ".civil should not raise for dates that are not too large or small" do
|
53
|
+
proc{DateTime.civil(@d1.year, @d1.month, @d1.day)}.should_not raise_error
|
54
|
+
proc{DateTime.civil(@d2.year, @d2.month, @d2.day)}.should_not raise_error
|
55
|
+
end
|
56
|
+
|
57
|
+
it ".civil should correctly convert dates within limits to JD" do
|
58
|
+
DateTime.civil(@d1.year, @d1.month, @d1.day).jd.should == @d1.jd
|
59
|
+
DateTime.civil(@d2.year, @d2.month, @d2.day).jd.should == @d2.jd
|
60
|
+
end
|
61
|
+
|
62
|
+
it ".commercial should raise RangeError for dates that are too large or small" do
|
63
|
+
proc{DateTime.commercial(@d1.cwyear, @d1.cwday == 6 ? @d1.cweek + 1 : @d1.cweek, @d1.cwday == 6 ? 1 : @d1.cwday + 1)}.should raise_error(RangeError)
|
64
|
+
proc{DateTime.commercial(@d2.cwyear, @d2.cwday == 1 ? @d2.cweek - 1 : @d2.cweek, @d2.cwday == 1 ? 7 : @d2.cwday - 1)}.should raise_error(RangeError)
|
65
|
+
end
|
66
|
+
|
67
|
+
it ".commercial should not raise for dates that are not too large or small" do
|
68
|
+
proc{DateTime.commercial(@d1.cwyear, @d1.cweek, @d1.cwday)}.should_not raise_error
|
69
|
+
proc{DateTime.commercial(@d2.cwyear, @d2.cweek, @d2.cwday)}.should_not raise_error
|
70
|
+
end
|
71
|
+
|
72
|
+
it ".commercial should correctly convert dates within limits to JD" do
|
73
|
+
DateTime.commercial(@d1.cwyear, @d1.cweek, @d1.cwday).jd.should == @d1.jd
|
74
|
+
DateTime.commercial(@d2.cwyear, @d2.cweek, @d2.cwday).jd.should == @d2.jd
|
75
|
+
end
|
76
|
+
|
77
|
+
it ".ordinal should raise RangeError for dates that are too large or small" do
|
78
|
+
proc{DateTime.ordinal(@d1.year, @d1.yday + 1)}.should raise_error(RangeError)
|
79
|
+
proc{DateTime.ordinal(@d2.year, @d2.yday - 1)}.should raise_error(RangeError)
|
80
|
+
end
|
81
|
+
|
82
|
+
it ".ordinal should not raise for dates that are not too large or small" do
|
83
|
+
proc{DateTime.ordinal(@d1.year, @d1.yday)}.should_not raise_error
|
84
|
+
proc{DateTime.ordinal(@d2.year, @d2.yday)}.should_not raise_error
|
85
|
+
end
|
86
|
+
|
87
|
+
it ".ordinal should correctly convert dates within limits to JD" do
|
88
|
+
DateTime.ordinal(@d1.year, @d1.yday).jd.should == @d1.jd
|
89
|
+
DateTime.ordinal(@d2.year, @d2.yday).jd.should == @d2.jd
|
90
|
+
end
|
91
|
+
|
92
|
+
it ".parse should raise RangeError for civil dates that are too large or small" do
|
93
|
+
proc{DateTime.parse("#{@d1.year}-#{@d1.month}-#{@d1.day+1}")}.should raise_error(RangeError)
|
94
|
+
proc{DateTime.parse("#{@d2.year}-#{@d2.month}-#{@d2.day-1}")}.should raise_error(RangeError)
|
95
|
+
end
|
96
|
+
|
97
|
+
it ".parse should not raise for civil dates that are not too large or small" do
|
98
|
+
proc{DateTime.parse("#{@d1.year}-#{@d1.month}-#{@d1.day}")}.should_not raise_error
|
99
|
+
proc{DateTime.parse("#{@d2.year}-#{@d2.month}-#{@d2.day}")}.should_not raise_error
|
100
|
+
end
|
101
|
+
|
102
|
+
it ".parse should correctly convert civil dates within limits to JD" do
|
103
|
+
DateTime.parse("#{@d1.year}-#{@d1.month}-#{@d1.day}").jd.should == @d1.jd
|
104
|
+
DateTime.parse("#{@d2.year}-#{@d2.month}-#{@d2.day}").jd.should == @d2.jd
|
105
|
+
end
|
106
|
+
|
107
|
+
it ".strptime should raise RangeError for civil dates that are too large or small" do
|
108
|
+
proc{DateTime.strptime("#{@d1.year}-#{@d1.month}-#{@d1.day+1}", "%Y-%m-%d")}.should raise_error(RangeError)
|
109
|
+
proc{DateTime.strptime("#{@d2.year}-#{@d2.month}-#{@d2.day-1}", "%Y-%m-%d")}.should raise_error(RangeError)
|
110
|
+
end
|
111
|
+
|
112
|
+
it ".strptime should not raise for civil dates that are not too large or small" do
|
113
|
+
proc{DateTime.strptime("#{@d1.year}-#{@d1.month}-#{@d1.day}", "%Y-%m-%d")}.should_not raise_error
|
114
|
+
proc{DateTime.strptime("#{@d2.year}-#{@d2.month}-#{@d2.day}", "%Y-%m-%d")}.should_not raise_error
|
115
|
+
end
|
116
|
+
|
117
|
+
it ".strptime should correctly convert civil dates within limits to JD" do
|
118
|
+
DateTime.strptime("#{@d1.year}-#{@d1.month}-#{@d1.day}", "%Y-%m-%d").jd.should == @d1.jd
|
119
|
+
DateTime.strptime("#{@d2.year}-#{@d2.month}-#{@d2.day}", "%Y-%m-%d").jd.should == @d2.jd
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
describe "DateTime offset limits: " do
|
125
|
+
it "methods should raise ArgumentError for offets that are too large or small" do
|
126
|
+
max = (14 + 1.0/60)/24
|
127
|
+
min = -(14 + 1.0/60)/24
|
128
|
+
proc{DateTime.civil(2009, 1, 1, 0, 0, 0, max)}.should raise_error(ArgumentError)
|
129
|
+
proc{DateTime.civil(2009, 1, 1, 0, 0, 0, min)}.should raise_error(ArgumentError)
|
130
|
+
proc{DateTime.commercial(2009, 1, 1, 0, 0, 0, max)}.should raise_error(ArgumentError)
|
131
|
+
proc{DateTime.commercial(2009, 1, 1, 0, 0, 0, min)}.should raise_error(ArgumentError)
|
132
|
+
proc{DateTime.ordinal(2009, 1, 0, 0, 0, max)}.should raise_error(ArgumentError)
|
133
|
+
proc{DateTime.ordinal(2009, 1, 0, 0, 0, min)}.should raise_error(ArgumentError)
|
134
|
+
proc{DateTime.jd(2009, 0, 0, 0, max)}.should raise_error(ArgumentError)
|
135
|
+
proc{DateTime.jd(2009, 0, 0, 0, min)}.should raise_error(ArgumentError)
|
136
|
+
proc{DateTime.new!(2009, max)}.should raise_error(ArgumentError)
|
137
|
+
proc{DateTime.new!(2009, min)}.should raise_error(ArgumentError)
|
138
|
+
proc{DateTime.parse("00:00:00+14:01", "%H:%M:%S%z")}.should raise_error(ArgumentError)
|
139
|
+
proc{DateTime.parse("00:00:00-14:01", "%H:%M:%S%z")}.should raise_error(ArgumentError)
|
140
|
+
proc{DateTime.strptime("00:00:00+14:01", "%H:%M:%S%z")}.should raise_error(ArgumentError)
|
141
|
+
proc{DateTime.strptime("00:00:00-14:01", "%H:%M:%S%z")}.should raise_error(ArgumentError)
|
142
|
+
|
143
|
+
d = DateTime.jd(2009)
|
144
|
+
proc{d.new_offset(max)}.should raise_error(ArgumentError)
|
145
|
+
proc{d.new_offset(min)}.should raise_error(ArgumentError)
|
146
|
+
end
|
147
|
+
|
148
|
+
it "methods should not raise for offsets that are not too large or small" do
|
149
|
+
max = 14.0/24
|
150
|
+
min = -14.0/24
|
151
|
+
proc{DateTime.civil(2009, 1, 1, 0, 0, 0, max)}.should_not raise_error
|
152
|
+
proc{DateTime.civil(2009, 1, 1, 0, 0, 0, min)}.should_not raise_error
|
153
|
+
proc{DateTime.commercial(2009, 1, 1, 0, 0, 0, max)}.should_not raise_error
|
154
|
+
proc{DateTime.commercial(2009, 1, 1, 0, 0, 0, min)}.should_not raise_error
|
155
|
+
proc{DateTime.ordinal(2009, 1, 0, 0, 0, max)}.should_not raise_error
|
156
|
+
proc{DateTime.ordinal(2009, 1, 0, 0, 0, min)}.should_not raise_error
|
157
|
+
proc{DateTime.jd(2009, 0, 0, 0, max)}.should_not raise_error
|
158
|
+
proc{DateTime.jd(2009, 0, 0, 0, min)}.should_not raise_error
|
159
|
+
proc{DateTime.new!(2009, max)}.should_not raise_error
|
160
|
+
proc{DateTime.new!(2009, min)}.should_not raise_error
|
161
|
+
proc{DateTime.parse("00:00:00+14:00", "%H:%M:%S%z")}.should_not raise_error
|
162
|
+
proc{DateTime.parse("00:00:00-14:00", "%H:%M:%S%z")}.should_not raise_error
|
163
|
+
proc{DateTime.strptime("00:00:00+14:00", "%H:%M:%S%z")}.should_not raise_error
|
164
|
+
proc{DateTime.strptime("00:00:00-14:00", "%H:%M:%S%z")}.should_not raise_error
|
165
|
+
|
166
|
+
d = DateTime.jd(2009)
|
167
|
+
proc{d.new_offset(max)}.should_not raise_error
|
168
|
+
proc{d.new_offset(min)}.should_not raise_error
|
169
|
+
end
|
170
|
+
end
|
data/spec/datetime/parse_spec.rb
CHANGED
@@ -82,40 +82,113 @@ describe "DateTime#parse" do
|
|
82
82
|
proc{DateTime.parse(Time.now.to_s)}.should_not raise_error
|
83
83
|
end
|
84
84
|
|
85
|
+
it "can handle a leftover DD as an hour if the day has already been parsed" do
|
86
|
+
DateTime.parse("2009-12-13 10").should == DateTime.civil(2009, 12, 13, 10)
|
87
|
+
end
|
88
|
+
|
85
89
|
it "can handle DD as month day number" do
|
86
90
|
DateTime.parse("10").should == DateTime.civil(Date.today.year, Date.today.month, 10)
|
87
91
|
DateTime.parse("10 01:02:03").should == DateTime.civil(Date.today.year, Date.today.month, 10, 1, 2, 3)
|
88
92
|
end
|
89
93
|
|
94
|
+
it "can handle DDz as day and zone" do
|
95
|
+
DateTime.parse("10z").should == DateTime.civil(Date.today.year, Date.today.month, 10)
|
96
|
+
end
|
97
|
+
|
98
|
+
it "can handle DD+DD as day and zone" do
|
99
|
+
DateTime.parse("10+11").should == DateTime.civil(Date.today.year, Date.today.month, 10, 0, 0, 0, 11/24.0)
|
100
|
+
end
|
101
|
+
|
102
|
+
it "can handle DD[DDDD] as day and zone" do
|
103
|
+
DateTime.parse("10[1112]").should == DateTime.civil(Date.today.year, Date.today.month, 10, 0, 0, 0, 11.2/24.0)
|
104
|
+
end
|
105
|
+
|
106
|
+
it "can handle DD.D as second" do
|
107
|
+
DateTime.parse("11.1").should == DateTime.civil(Date.today.year, Date.today.month, Date.today.day, 0, 0, 11) + 0.1/86400
|
108
|
+
end
|
109
|
+
|
110
|
+
it "can handle DDtDD as hour" do
|
111
|
+
DateTime.parse("11t12").should == DateTime.civil(Date.today.year, Date.today.month, 11, 12, 0, 0)
|
112
|
+
end
|
113
|
+
|
114
|
+
it "can handle DDtDDDD as hour and minute" do
|
115
|
+
DateTime.parse("11t1213").should == DateTime.civil(Date.today.year, Date.today.month, 11, 12, 13, 0)
|
116
|
+
end
|
117
|
+
|
118
|
+
it "can handle DDtDDDDDD as hour, minute, and second" do
|
119
|
+
DateTime.parse("11t121314").should == DateTime.civil(Date.today.year, Date.today.month, 11, 12, 13, 14)
|
120
|
+
end
|
121
|
+
|
122
|
+
it "can handle DDtDDDDDD.D as hour, minute, and second" do
|
123
|
+
DateTime.parse("11t121314.1").should == DateTime.civil(Date.today.year, Date.today.month, 11, 12, 13, 14) + 0.1/86400
|
124
|
+
end
|
125
|
+
|
90
126
|
it "can handle DDD as year day number" do
|
91
127
|
DateTime.parse("050").should == DateTime.civil(Date.today.year, 2, 19)
|
92
128
|
DateTime.parse("050 1:02:03").should == DateTime.civil(Date.today.year, 2, 19, 1, 2, 3)
|
93
129
|
end
|
94
130
|
|
131
|
+
it "can handle DDD.D as minute and second" do
|
132
|
+
DateTime.parse("211.1").should == DateTime.civil(Date.today.year, Date.today.month, Date.today.day, 0, 2, 11) + 0.1/86400
|
133
|
+
end
|
134
|
+
|
95
135
|
it "can handle MMDD as month and day" do
|
96
136
|
DateTime.parse("1108").should == DateTime.civil(Date.today.year, 11, 8)
|
97
137
|
DateTime.parse("1108 10:02:03").should == DateTime.civil(Date.today.year, 11, 8, 10, 2, 3)
|
98
138
|
end
|
99
139
|
|
140
|
+
it "can handle DDDD.D as minute and second" do
|
141
|
+
DateTime.parse("1211.1").should == DateTime.civil(Date.today.year, Date.today.month, Date.today.day, 0, 12, 11) + 0.1/86400
|
142
|
+
end
|
143
|
+
|
100
144
|
it "can handle YYDDD as year and day number" do
|
101
145
|
DateTime.parse("10100").should == DateTime.civil(2010, 4, 10)
|
102
146
|
DateTime.parse("10100 23:02:03").should == DateTime.civil(2010, 4, 10, 23, 2, 3)
|
103
147
|
end
|
104
148
|
|
149
|
+
it "can handle DDDDD.D as hour, minute, and second" do
|
150
|
+
DateTime.parse("31211.1").should == DateTime.civil(Date.today.year, Date.today.month, Date.today.day, 3, 12, 11) + 0.1/86400
|
151
|
+
end
|
152
|
+
|
105
153
|
it "can handle YYMMDD as year month and day" do
|
106
154
|
DateTime.parse("201023").should == DateTime.civil(2020, 10, 23)
|
107
155
|
DateTime.parse("201023 23:02:03 +0800").should == DateTime.civil(2020, 10, 23, 23, 2, 3, 8/24.0)
|
108
156
|
end
|
109
157
|
|
158
|
+
it "can handle DDDDDD.D as hour, minute, and second" do
|
159
|
+
DateTime.parse("131211.1").should == DateTime.civil(Date.today.year, Date.today.month, Date.today.day, 13, 12, 11) + 0.1/86400
|
160
|
+
end
|
161
|
+
|
110
162
|
it "can handle YYYYDDD as year and day number" do
|
111
163
|
DateTime.parse("1910100").should == DateTime.civil(1910, 4, 10)
|
112
164
|
DateTime.parse("1910100 23:02:03 -0101").should == DateTime.civil(1910, 4, 10, 23, 2, 3, -61/1440.0)
|
113
165
|
end
|
114
166
|
|
167
|
+
it "can handle DDDDDDD.D as day, hour, minute, and second" do
|
168
|
+
DateTime.parse("4131211.1").should == DateTime.civil(Date.today.year, Date.today.month, 4, 13, 12, 11) + 0.1/86400
|
169
|
+
end
|
170
|
+
|
115
171
|
it "can handle YYYYMMDD as year and day number" do
|
116
172
|
DateTime.parse("19101101").should == DateTime.civil(1910, 11, 1)
|
117
173
|
DateTime.parse("19101101T23:02:03 +0000").should == DateTime.civil(1910, 11, 1, 23, 2, 3)
|
118
174
|
end
|
175
|
+
|
176
|
+
it "can handle DDDDDDDD.D as day, hour, minute, and second" do
|
177
|
+
DateTime.parse("14131211.1").should == DateTime.civil(Date.today.year, Date.today.month, 14, 13, 12, 11) + 0.1/86400
|
178
|
+
end
|
179
|
+
|
180
|
+
it "can handle DDDDDDDD.D as month, day, hour, minute, and second" do
|
181
|
+
DateTime.parse("1014131211.1").should == DateTime.civil(Date.today.year, 10, 14, 13, 12, 11) + 0.1/86400
|
182
|
+
end
|
183
|
+
|
184
|
+
it "can handle DDDDDDDDDD.D as year, month, day, hour, minute, and second" do
|
185
|
+
DateTime.parse("091014131211.1").should == DateTime.civil(2009, 10, 14, 13, 12, 11) + 0.1/86400
|
186
|
+
end
|
187
|
+
|
188
|
+
it "can handle DDDDDDDDDDDD.D as year, month, day, hour, minute, and second" do
|
189
|
+
DateTime.parse("20091014131211.1").should == DateTime.civil(2009, 10, 14, 13, 12, 11) + 0.1/86400
|
190
|
+
end
|
191
|
+
|
119
192
|
end
|
120
193
|
|
121
194
|
describe :date_parse, :shared => true do
|
@@ -9,6 +9,8 @@ ruby_version_is "1.9" do
|
|
9
9
|
|
10
10
|
it "._iso8601 should parse an ISO8601 format" do
|
11
11
|
DateTime._iso8601("2009-01-02T03:04:05+12:00").should == {:year=>2009, :mon=>1, :mday=>2, :hour=>3, :min=>4, :sec=>5, :offset=>43200, :zone=>'+12:00'}
|
12
|
+
DateTime._iso8601("03:04:05+12:00").should == {:hour=>3, :min=>4, :sec=>5, :offset=>43200, :zone=>'+12:00'}
|
13
|
+
DateTime._iso8601(" 030405.1+1200").should == {:hour=>3, :min=>4, :sec=>5, :offset=>43200, :zone=>'+1200', :sec_fraction=>0.1}
|
12
14
|
end
|
13
15
|
|
14
16
|
it "._jisx03010 should parse an JIS X 0301 format" do
|
@@ -38,6 +40,8 @@ ruby_version_is "1.9" do
|
|
38
40
|
|
39
41
|
it "._xmlschema should parse an ISO8601 format" do
|
40
42
|
DateTime._xmlschema("2009-01-02T03:04:05+12:00").should == {:year=>2009, :mon=>1, :mday=>2, :hour=>3, :min=>4, :sec=>5, :offset=>43200, :zone=>'+12:00'}
|
43
|
+
DateTime._xmlschema("03:04:05+12:00").should == {:hour=>3, :min=>4, :sec=>5, :offset=>43200, :zone=>'+12:00'}
|
44
|
+
DateTime._xmlschema("---01+12:00").should == {:mday=>1, :offset=>43200, :zone=>'+12:00'}
|
41
45
|
end
|
42
46
|
|
43
47
|
it ".httpdate should parse an HTTP format" do
|
data/spec/datetime/step_spec.rb
CHANGED
@@ -2,6 +2,28 @@ require File.expand_path('../../spec_helper', __FILE__)
|
|
2
2
|
|
3
3
|
describe "DateTime#step" do
|
4
4
|
|
5
|
+
ruby_version_is "" ... "1.9" do
|
6
|
+
it "should require a block" do
|
7
|
+
proc{DateTime.now.step(DateTime.now)}.should raise_error(LocalJumpError)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
ruby_version_is "1.9" do
|
12
|
+
it "should return an enumerator without a block" do
|
13
|
+
ds = DateTime.civil(2008, 10, 11)
|
14
|
+
de = DateTime.civil(2008, 9, 29)
|
15
|
+
e = de.step(ds)
|
16
|
+
e.should be_kind_of(Enumerator)
|
17
|
+
count = 0
|
18
|
+
e.each do |d|
|
19
|
+
d.should <= ds
|
20
|
+
d.should >= de
|
21
|
+
count += 1
|
22
|
+
end.should == de
|
23
|
+
count.should == 13
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
5
27
|
it "should be able to step forward in time" do
|
6
28
|
ds = DateTime.civil(2008, 10, 11)
|
7
29
|
de = DateTime.civil(2008, 9, 29)
|
@@ -48,6 +48,11 @@ describe "DateTime.strptime" do
|
|
48
48
|
DateTime.strptime("10 500", '%M %L').should == DateTime.civil(@t.year, @t.mon, @t.day, 0, 10, 0) + (0.5/86400)
|
49
49
|
end
|
50
50
|
|
51
|
+
it "should be able to parse the number of milliseconds of the second with trailing numbers" do
|
52
|
+
DateTime.strptime("10 0000", '%M %L0').should == DateTime.civil(@t.year, @t.mon, @t.day, 0, 10, 0)
|
53
|
+
DateTime.strptime("10 50012", '%M %L%m').should == DateTime.civil(@t.year, 12, 1, 0, 10, 0) + (0.5/86400)
|
54
|
+
end
|
55
|
+
|
51
56
|
it "should be able to parse the minute with leading zero" do
|
52
57
|
DateTime.strptime("10", '%M').should == DateTime.civil(@t.year, @t.mon, @t.day, 0, 10, 0)
|
53
58
|
DateTime.strptime("09", '%M').should == DateTime.civil(@t.year, @t.mon, @t.day, 0, 9, 0)
|
@@ -58,6 +63,11 @@ describe "DateTime.strptime" do
|
|
58
63
|
DateTime.strptime("10 500000000", '%M %N').should == DateTime.civil(@t.year, @t.mon, @t.day, 0, 10, 0) + (0.5/86400)
|
59
64
|
end
|
60
65
|
|
66
|
+
it "should be able to parse the number of nanoseconds of the second with trailing numbers" do
|
67
|
+
DateTime.strptime("10 0000000000", '%M %N0').should == DateTime.civil(@t.year, @t.mon, @t.day, 0, 10, 0)
|
68
|
+
DateTime.strptime("10 50000000012", '%M %N%m').should == DateTime.civil(@t.year, 12, 1, 0, 10, 0) + (0.5/86400)
|
69
|
+
end
|
70
|
+
|
61
71
|
it "should be able to parse the number of seconds since the unix epoch" do
|
62
72
|
Date.strptime("954979200", "%s").should == Date.civil(2000, 4, 6)
|
63
73
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: home_run
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 57
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.9.
|
9
|
+
- 1
|
10
|
+
version: 0.9.1
|
11
11
|
platform: x86-mingw32
|
12
12
|
authors:
|
13
13
|
- Jeremy Evans
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-08-
|
18
|
+
date: 2010-08-31 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -40,19 +40,23 @@ files:
|
|
40
40
|
- Rakefile
|
41
41
|
- default.mspec
|
42
42
|
- bin/home_run
|
43
|
-
-
|
44
|
-
-
|
45
|
-
-
|
46
|
-
- ext/
|
47
|
-
- ext/date_parser.c
|
48
|
-
- ext/
|
49
|
-
- ext/
|
43
|
+
- lib/date/format.rb
|
44
|
+
- lib/home_run.rb
|
45
|
+
- lib/date.rb
|
46
|
+
- ext/date_ext/date_ext.c
|
47
|
+
- ext/date_ext/date_parser.c
|
48
|
+
- ext/date_ext/datetime.c
|
49
|
+
- ext/date_ext/date_ext.h
|
50
|
+
- ext/date_ext/extconf.rb
|
51
|
+
- ext/date_ext/date_parser.rl
|
52
|
+
- spec/date/limits_spec.rb
|
50
53
|
- spec/date/strptime_spec.rb
|
51
54
|
- spec/date/next_prev_spec.rb
|
52
55
|
- spec/date/downto_spec.rb
|
53
56
|
- spec/date/leap_spec.rb
|
54
57
|
- spec/date/minus_spec.rb
|
55
58
|
- spec/date/minus_month_spec.rb
|
59
|
+
- spec/date/encoding_spec.rb
|
56
60
|
- spec/date/format_spec.rb
|
57
61
|
- spec/date/add_month_spec.rb
|
58
62
|
- spec/date/add_spec.rb
|
@@ -72,16 +76,19 @@ files:
|
|
72
76
|
- spec/date/conversions_spec.rb
|
73
77
|
- spec/date/civil_spec.rb
|
74
78
|
- spec/date/hash_spec.rb
|
79
|
+
- spec/date/allocate_spec.rb
|
75
80
|
- spec/date/constants_spec.rb
|
76
81
|
- spec/date/today_spec.rb
|
77
82
|
- spec/date/ordinal_spec.rb
|
78
83
|
- spec/date/strftime_spec.rb
|
84
|
+
- spec/datetime/limits_spec.rb
|
79
85
|
- spec/datetime/strptime_spec.rb
|
80
86
|
- spec/datetime/next_prev_spec.rb
|
81
87
|
- spec/datetime/downto_spec.rb
|
82
88
|
- spec/datetime/leap_spec.rb
|
83
89
|
- spec/datetime/minus_spec.rb
|
84
90
|
- spec/datetime/minus_month_spec.rb
|
91
|
+
- spec/datetime/encoding_spec.rb
|
85
92
|
- spec/datetime/format_spec.rb
|
86
93
|
- spec/datetime/add_month_spec.rb
|
87
94
|
- spec/datetime/add_spec.rb
|
@@ -99,6 +106,7 @@ files:
|
|
99
106
|
- spec/datetime/succ_spec.rb
|
100
107
|
- spec/datetime/conversions_spec.rb
|
101
108
|
- spec/datetime/hash_spec.rb
|
109
|
+
- spec/datetime/allocate_spec.rb
|
102
110
|
- spec/datetime/strftime_spec.rb
|
103
111
|
- spec/spec_helper.rb
|
104
112
|
- bench/dt_mem_bench.rb
|
@@ -106,8 +114,10 @@ files:
|
|
106
114
|
- bench/cpu_bench.rb
|
107
115
|
- bench/dt_garbage_bench.rb
|
108
116
|
- bench/mem_bench.rb
|
109
|
-
-
|
110
|
-
-
|
117
|
+
- bench/parser_bench.rb
|
118
|
+
- bench/cpu_bench_util.rb
|
119
|
+
- lib/1.8/date_ext.so
|
120
|
+
- lib/1.9/date_ext.so
|
111
121
|
has_rdoc: true
|
112
122
|
homepage: http://github.com/jeremyevans/home_run
|
113
123
|
licenses: []
|
@@ -122,7 +132,7 @@ rdoc_options:
|
|
122
132
|
- --main
|
123
133
|
- README.rdoc
|
124
134
|
require_paths:
|
125
|
-
-
|
135
|
+
- lib
|
126
136
|
required_ruby_version: !ruby/object:Gem::Requirement
|
127
137
|
none: false
|
128
138
|
requirements:
|
data/ext/1.8/date_ext.so
DELETED
Binary file
|
data/ext/1.9/date_ext.so
DELETED
Binary file
|