home_run 0.9.0-x86-mswin32

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.
Files changed (75) hide show
  1. data/CHANGELOG +3 -0
  2. data/LICENSE +19 -0
  3. data/README.rdoc +314 -0
  4. data/Rakefile +135 -0
  5. data/bench/cpu_bench.rb +279 -0
  6. data/bench/dt_garbage_bench.rb +11 -0
  7. data/bench/dt_mem_bench.rb +14 -0
  8. data/bench/garbage_bench.rb +11 -0
  9. data/bench/mem_bench.rb +14 -0
  10. data/bin/home_run +91 -0
  11. data/default.mspec +12 -0
  12. data/ext/1.8/date_ext.so +0 -0
  13. data/ext/1.9/date_ext.so +0 -0
  14. data/ext/date.rb +7 -0
  15. data/ext/date/format.rb +842 -0
  16. data/ext/date_ext.c +4548 -0
  17. data/ext/date_parser.c +367 -0
  18. data/ext/date_parser.rl +134 -0
  19. data/ext/datetime.c +2804 -0
  20. data/ext/extconf.rb +6 -0
  21. data/spec/date/accessor_spec.rb +176 -0
  22. data/spec/date/add_month_spec.rb +26 -0
  23. data/spec/date/add_spec.rb +23 -0
  24. data/spec/date/boat_spec.rb +38 -0
  25. data/spec/date/civil_spec.rb +147 -0
  26. data/spec/date/commercial_spec.rb +153 -0
  27. data/spec/date/constants_spec.rb +44 -0
  28. data/spec/date/conversions_spec.rb +246 -0
  29. data/spec/date/day_spec.rb +73 -0
  30. data/spec/date/downto_spec.rb +17 -0
  31. data/spec/date/eql_spec.rb +16 -0
  32. data/spec/date/format_spec.rb +52 -0
  33. data/spec/date/gregorian_spec.rb +52 -0
  34. data/spec/date/hash_spec.rb +11 -0
  35. data/spec/date/julian_spec.rb +129 -0
  36. data/spec/date/leap_spec.rb +19 -0
  37. data/spec/date/minus_month_spec.rb +25 -0
  38. data/spec/date/minus_spec.rb +51 -0
  39. data/spec/date/next_prev_spec.rb +108 -0
  40. data/spec/date/ordinal_spec.rb +83 -0
  41. data/spec/date/parse_spec.rb +442 -0
  42. data/spec/date/parsing_spec.rb +77 -0
  43. data/spec/date/relationship_spec.rb +28 -0
  44. data/spec/date/step_spec.rb +109 -0
  45. data/spec/date/strftime_spec.rb +223 -0
  46. data/spec/date/strptime_spec.rb +201 -0
  47. data/spec/date/succ_spec.rb +20 -0
  48. data/spec/date/today_spec.rb +15 -0
  49. data/spec/date/upto_spec.rb +17 -0
  50. data/spec/datetime/accessor_spec.rb +218 -0
  51. data/spec/datetime/add_month_spec.rb +26 -0
  52. data/spec/datetime/add_spec.rb +36 -0
  53. data/spec/datetime/boat_spec.rb +43 -0
  54. data/spec/datetime/constructor_spec.rb +142 -0
  55. data/spec/datetime/conversions_spec.rb +54 -0
  56. data/spec/datetime/day_spec.rb +73 -0
  57. data/spec/datetime/downto_spec.rb +39 -0
  58. data/spec/datetime/eql_spec.rb +17 -0
  59. data/spec/datetime/format_spec.rb +59 -0
  60. data/spec/datetime/hash_spec.rb +11 -0
  61. data/spec/datetime/leap_spec.rb +19 -0
  62. data/spec/datetime/minus_month_spec.rb +25 -0
  63. data/spec/datetime/minus_spec.rb +77 -0
  64. data/spec/datetime/next_prev_spec.rb +138 -0
  65. data/spec/datetime/now_spec.rb +18 -0
  66. data/spec/datetime/parse_spec.rb +390 -0
  67. data/spec/datetime/parsing_spec.rb +77 -0
  68. data/spec/datetime/relationship_spec.rb +28 -0
  69. data/spec/datetime/step_spec.rb +155 -0
  70. data/spec/datetime/strftime_spec.rb +118 -0
  71. data/spec/datetime/strptime_spec.rb +117 -0
  72. data/spec/datetime/succ_spec.rb +24 -0
  73. data/spec/datetime/upto_spec.rb +39 -0
  74. data/spec/spec_helper.rb +59 -0
  75. metadata +154 -0
@@ -0,0 +1,28 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "Date#===" do
4
+
5
+ it "should be true for the two same dates" do
6
+ (Date.civil(2000, 04, 06) === Date.civil(2000, 04, 06)).should == true
7
+ end
8
+
9
+ it "should be true if comparison is a DateTime on the same date" do
10
+ (Date.civil(2000, 04, 06) === DateTime.civil(2000, 04, 06, 10)).should == true
11
+ end
12
+
13
+ it "should be true if comparison is a Numeric with the same integer value as JD" do
14
+ (Date.civil(2000, 04, 06) === Date.civil(2000, 04, 06).jd).should == true
15
+ end
16
+
17
+ it "should be false for different dates" do
18
+ (Date.civil(2000, 04, 05) === Date.civil(2000, 04, 06)).should == false
19
+ end
20
+
21
+ it "should be false if comparison is a DateTime with a different date" do
22
+ (Date.civil(2000, 04, 06) === DateTime.civil(2000, 04, 07, 10)).should == false
23
+ end
24
+
25
+ it "should be false if comparison is a Numeric with the different integer value as JD" do
26
+ (Date.civil(2000, 04, 06) === Date.civil(2000, 04, 07).jd).should == false
27
+ end
28
+ end
@@ -0,0 +1,109 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "Date#step" do
4
+
5
+ it "should be able to step forward in time" do
6
+ ds = Date.civil(2008, 10, 11)
7
+ de = Date.civil(2008, 9, 29)
8
+ count = 0
9
+ de.step(ds) do |d|
10
+ d.should <= ds
11
+ d.should >= de
12
+ count += 1
13
+ end.should == de
14
+ count.should == 13
15
+
16
+ count = 0
17
+ de.step(ds, 5) do |d|
18
+ d.should <= ds
19
+ d.should >= de
20
+ count += 1
21
+ end.should == de
22
+ count.should == 3
23
+
24
+ count = 0
25
+ ds.step(de) do |d|; count += 1; end.should == ds
26
+ count.should == 0
27
+
28
+ end
29
+
30
+ it "should be able to step backward in time" do
31
+ ds = Date.civil(2000, 4, 14)
32
+ de = Date.civil(2000, 3, 29)
33
+ count = 0
34
+ ds.step(de, -1) do |d|
35
+ d.should <= ds
36
+ d.should >= de
37
+ count += 1
38
+ end.should == ds
39
+ count.should == 17
40
+
41
+ count = 0
42
+ ds.step(de, -5) do |d|
43
+ d.should <= ds
44
+ d.should >= de
45
+ count += 1
46
+ end.should == ds
47
+ count.should == 4
48
+
49
+ count = 0
50
+ de.step(ds, -1) do |d|; count += 1; end.should == de
51
+ count.should == 0
52
+
53
+ end
54
+
55
+ it "should yield once if the dates are the same, regardless of step" do
56
+ ds = Date.civil(2008, 10, 11)
57
+ count = 0
58
+ ds.step(ds, 1) do |d|
59
+ d.should == ds
60
+ count += 1
61
+ end.should == ds
62
+ count.should == 1
63
+
64
+ count = 0
65
+ ds.step(ds, 0) do |d|
66
+ d.should == ds
67
+ count += 1
68
+ end.should == ds
69
+ count.should == 1
70
+
71
+ count = 0
72
+ ds.step(ds, -1) do |d|
73
+ d.should == ds
74
+ count += 1
75
+ end.should == ds
76
+ count.should == 1
77
+ end
78
+
79
+ it "should not yield if the target date is greater than the receiver, and step is not positive" do
80
+ ds = Date.civil(2008, 10, 11)
81
+ count = 0
82
+ ds.step(ds.next, 0) do |d|
83
+ count += 1
84
+ end.should == ds
85
+ count.should == 0
86
+
87
+ count = 0
88
+ ds.step(ds.next, -1) do |d|
89
+ count += 1
90
+ end.should == ds
91
+ count.should == 0
92
+ end
93
+
94
+ it "should not yield if the target date is less than the receiver, and step is not negative" do
95
+ ds = Date.civil(2008, 10, 11)
96
+ count = 0
97
+ ds.next.step(ds, 0) do |d|
98
+ count += 1
99
+ end.should == ds.next
100
+ count.should == 0
101
+
102
+ count = 0
103
+ ds.next.step(ds, 1) do |d|
104
+ count += 1
105
+ end.should == ds.next
106
+ count.should == 0
107
+ end
108
+
109
+ end
@@ -0,0 +1,223 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "Date#strftime" do
4
+
5
+ it "should be able to print the date" do
6
+ Date.civil(2000, 4, 6).strftime.should == "2000-04-06"
7
+ Date.civil(2000, 4, 6).strftime.should == Date.civil(2000, 4, 6).to_s
8
+ end
9
+
10
+ it "should be able to print the full day name" do
11
+ Date.civil(2000, 4, 6).strftime("%A").should == "Thursday"
12
+ end
13
+
14
+ it "should be able to print the short day name" do
15
+ Date.civil(2000, 4, 6).strftime("%a").should == "Thu"
16
+ end
17
+
18
+ it "should be able to print the full month name" do
19
+ Date.civil(2000, 4, 6).strftime("%B").should == "April"
20
+ end
21
+
22
+ it "should be able to print the short month name" do
23
+ Date.civil(2000, 4, 6).strftime("%b").should == "Apr"
24
+ Date.civil(2000, 4, 6).strftime("%h").should == "Apr"
25
+ Date.civil(2000, 4, 6).strftime("%b").should == Date.civil(2000, 4, 6).strftime("%h")
26
+ end
27
+
28
+ it "should be able to print the century" do
29
+ Date.civil(2000, 4, 6).strftime("%C").should == "20"
30
+ end
31
+
32
+ it "should be able to print the month day with leading zeroes" do
33
+ Date.civil(2000, 4, 6).strftime("%d").should == "06"
34
+ end
35
+
36
+ it "should be able to print the month day with leading spaces" do
37
+ Date.civil(2000, 4, 6).strftime("%e").should == " 6"
38
+ end
39
+
40
+ it "should be able to print the commercial year with leading zeroes" do
41
+ Date.civil(2000, 4, 6).strftime("%G").should == "2000"
42
+ Date.civil( 200, 4, 6).strftime("%G").should == "0200"
43
+ end
44
+
45
+ it "should be able to print the commercial year with only two digits" do
46
+ Date.civil(2000, 4, 6).strftime("%g").should == "00"
47
+ Date.civil( 200, 4, 6).strftime("%g").should == "00"
48
+ end
49
+
50
+ it "should be able to print the hour with leading zeroes (hour is always 00)" do
51
+ Date.civil(2000, 4, 6).strftime("%H").should == "00"
52
+ end
53
+
54
+ it "should be able to print the hour in 12 hour notation with leading zeroes" do
55
+ Date.civil(2000, 4, 6).strftime("%I").should == "12"
56
+ end
57
+
58
+ it "should be able to print the year day with leading zeroes" do
59
+ Date.civil(2000, 4, 6).strftime("%j").should == "097"
60
+ end
61
+
62
+ it "should be able to print the hour in 24 hour notation with leading spaces" do
63
+ Date.civil(2000, 4, 6).strftime("%k").should == " 0"
64
+ end
65
+
66
+ it "should be able to print the hour in 12 hour notation with leading spaces" do
67
+ Date.civil(2000, 4, 6).strftime("%l").should == "12"
68
+ end
69
+
70
+ it "should be able to print the milliseconds of the second with leading zeroes" do
71
+ Date.civil(2000, 4, 6).strftime("%L").should == "000"
72
+ end
73
+
74
+ it "should be able to print the minutes with leading zeroes" do
75
+ Date.civil(2000, 4, 6).strftime("%M").should == "00"
76
+ end
77
+
78
+ it "should be able to print the month with leading zeroes" do
79
+ Date.civil(2000, 4, 6).strftime("%m").should == "04"
80
+ end
81
+
82
+ it "should be able to print the nanoseconds of the second with leading zeroes" do
83
+ Date.civil(2000, 4, 6).strftime("%N").should == "000000000"
84
+ end
85
+
86
+ it "should be able to add a newline" do
87
+ Date.civil(2000, 4, 6).strftime("%n").should == "\n"
88
+ end
89
+
90
+ it "should be able to show AM/PM" do
91
+ Date.civil(2000, 4, 6).strftime("%P").should == "am"
92
+ end
93
+
94
+ it "should be able to show am/pm" do
95
+ Date.civil(2000, 4, 6).strftime("%p").should == "AM"
96
+ end
97
+
98
+ it "should be able to show the number of milliseconds since the unix epoch" do
99
+ Date.civil(2000, 4, 6).strftime("%Q").should == "954979200000"
100
+ Date.civil(3000, 4, 6).strftime("%Q").should == "32511888000000"
101
+ end
102
+
103
+ it "should be able to show the number of seconds with leading zeroes" do
104
+ Date.civil(2000, 4, 6).strftime("%S").should == "00"
105
+ end
106
+
107
+ it "should be able to show the number of seconds since the unix epoch" do
108
+ Date.civil(2000, 4, 6).strftime("%s").should == "954979200"
109
+ Date.civil(3000, 4, 6).strftime("%s").should == "32511888000"
110
+ end
111
+
112
+ it "should be able to add a tab" do
113
+ Date.civil(2000, 4, 6).strftime("%t").should == "\t"
114
+ end
115
+
116
+ it "should be able to show the week number with the week starting on sunday and monday" do
117
+ Date.civil(2000, 4, 6).strftime("%U").should == "14"
118
+ Date.civil(2000, 4, 6).strftime("%W").should == "14"
119
+ Date.civil(2000, 4, 6).strftime("%U").should == Date.civil(2000, 4, 6).strftime("%W")
120
+ Date.civil(2000, 4, 9).strftime("%U").should == "15"
121
+ Date.civil(2000, 4, 9).strftime("%W").should == "14"
122
+ Date.civil(2000, 4, 9).strftime("%U").should_not == Date.civil(2000, 4, 9).strftime("%W")
123
+ end
124
+
125
+ it "should be able to show the commercial week day" do
126
+ Date.civil(2000, 4, 9).strftime("%u").should == "7"
127
+ Date.civil(2000, 4, 10).strftime("%u").should == "1"
128
+ end
129
+
130
+ it "should be able to show the commercial week" do
131
+ Date.civil(2000, 4, 9).strftime("%V").should == "14"
132
+ Date.civil(2000, 4, 10).strftime("%V").should == "15"
133
+ end
134
+
135
+ it "should be able to show the week day" do
136
+ Date.civil(2000, 4, 9).strftime("%w").should == "0"
137
+ Date.civil(2000, 4, 10).strftime("%w").should == "1"
138
+ end
139
+
140
+ it "should be able to show the year in YYYY format" do
141
+ Date.civil(2000, 4, 9).strftime("%Y").should == "2000"
142
+ end
143
+
144
+ it "should be able to show the year in YY format" do
145
+ Date.civil(2000, 4, 9).strftime("%y").should == "00"
146
+ end
147
+
148
+ it "should be able to show the timezone of the date with a : separator" do
149
+ Date.civil(2000, 4, 9).strftime("%Z").should == "+00:00"
150
+ end
151
+
152
+ it "should be able to show the timezone of the date with a : separator" do
153
+ Date.civil(2000, 4, 9).strftime("%z").should == "+0000"
154
+ end
155
+
156
+ it "should be able to escape the % character" do
157
+ Date.civil(2000, 4, 9).strftime("%%").should == "%"
158
+ end
159
+
160
+ it "should remove % from other %X sequences if it doesn't have a conversion" do
161
+ Date.civil(2000, 4, 9).strftime("%5").should == "5"
162
+ Date.civil(2000, 4, 9).strftime("%f").should == "f"
163
+ end
164
+
165
+ it "should leave other text alone if it doesn't have a conversion" do
166
+ Date.civil(2000, 4, 9).strftime("15").should == "15"
167
+ end
168
+
169
+ ############################
170
+ # Specs that combine stuff #
171
+ ############################
172
+
173
+ it "should be able to print the date in full" do
174
+ Date.civil(2000, 4, 6).strftime("%c").should == "Thu Apr 6 00:00:00 2000"
175
+ Date.civil(2000, 4, 6).strftime("%c").should == Date.civil(2000, 4, 6).strftime('%a %b %e %H:%M:%S %Y')
176
+ end
177
+
178
+ it "should be able to print the date with slashes" do
179
+ Date.civil(2000, 4, 6).strftime("%D").should == "04/06/00"
180
+ Date.civil(2000, 4, 6).strftime("%D").should == Date.civil(2000, 4, 6).strftime('%m/%d/%y')
181
+ end
182
+
183
+ it "should be able to print the date as YYYY-MM-DD" do
184
+ Date.civil(2000, 4, 6).strftime("%F").should == "2000-04-06"
185
+ Date.civil(2000, 4, 6).strftime("%F").should == Date.civil(2000, 4, 6).strftime('%Y-%m-%d')
186
+ end
187
+
188
+ it "should be able to show HH:MM" do
189
+ Date.civil(2000, 4, 6).strftime("%R").should == "00:00"
190
+ Date.civil(2000, 4, 6).strftime("%R").should == Date.civil(2000, 4, 6).strftime('%H:%M')
191
+ end
192
+
193
+ it "should be able to show HH:MM:SS AM/PM" do
194
+ Date.civil(2000, 4, 6).strftime("%r").should == "12:00:00 AM"
195
+ Date.civil(2000, 4, 6).strftime("%r").should == Date.civil(2000, 4, 6).strftime('%I:%M:%S %p')
196
+ end
197
+
198
+ it "should be able to show HH:MM:SS" do
199
+ Date.civil(2000, 4, 6).strftime("%T").should == "00:00:00"
200
+ Date.civil(2000, 4, 6).strftime("%T").should == Date.civil(2000, 4, 6).strftime('%H:%M:%S')
201
+ end
202
+
203
+ it "should be able to show the commercial week" do
204
+ Date.civil(2000, 4, 9).strftime("%v").should == " 9-Apr-2000"
205
+ Date.civil(2000, 4, 9).strftime("%v").should == Date.civil(2000, 4, 9).strftime('%e-%b-%Y')
206
+ end
207
+
208
+ it "should be able to show HH:MM:SS" do
209
+ Date.civil(2000, 4, 6).strftime("%X").should == "00:00:00"
210
+ Date.civil(2000, 4, 6).strftime("%X").should == Date.civil(2000, 4, 6).strftime('%H:%M:%S')
211
+ end
212
+
213
+ it "should be able to show MM/DD/YY" do
214
+ Date.civil(2000, 4, 6).strftime("%x").should == "04/06/00"
215
+ Date.civil(2000, 4, 6).strftime("%x").should == Date.civil(2000, 4, 6).strftime('%m/%d/%y')
216
+ end
217
+
218
+ it "should be able to show a full notation" do
219
+ Date.civil(2000, 4, 9).strftime("%+").should == "Sun Apr 9 00:00:00 +00:00 2000"
220
+ Date.civil(2000, 4, 9).strftime("%+").should == Date.civil(2000, 4, 9).strftime('%a %b %e %H:%M:%S %Z %Y')
221
+ end
222
+
223
+ end
@@ -0,0 +1,201 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "Date#strptime" do
4
+
5
+ it "._strptime should not accept less than 1 arguments" do
6
+ proc{Date._strptime}.should raise_error(ArgumentError)
7
+ end
8
+
9
+ it "._strptime should not accept more than 2 arguments" do
10
+ proc{Date._strptime('2008-10-11', '%Y-%m-%d', '1')}.should raise_error(ArgumentError)
11
+ end
12
+
13
+ it "._strptime should be a hash of values" do
14
+ Date._strptime('2008-10-11').should == {:year=>2008, :mon=>10, :mday=>11}
15
+ Date._strptime('2008-10-11', '%Y-%m-%d').should == {:year=>2008, :mon=>10, :mday=>11}
16
+ end
17
+
18
+ it "should have defaults and an optional sg value" do
19
+ Date.strptime.should == Date.jd
20
+ Date.strptime('2008-10-11').should == Date.civil(2008, 10, 11)
21
+ Date.strptime('2008-10-11', '%Y-%m-%d').should == Date.civil(2008, 10, 11)
22
+ Date.strptime('2008-10-11', '%Y-%m-%d', 1).should == Date.civil(2008, 10, 11)
23
+ end
24
+
25
+ it "raises errors for invalid dates" do
26
+ lambda { Date.strptime("") }.should raise_error(ArgumentError)
27
+ lambda { Date.strptime("", "") }.should raise_error(ArgumentError)
28
+ lambda { Date.strptime("2009-02-29") }.should raise_error(ArgumentError)
29
+ end
30
+
31
+ it "uses the default format when not given a date format" do
32
+ Date.strptime("2000-04-06").should == Date.civil(2000, 4, 6)
33
+ Date.civil(2000, 4, 6).strftime.should == Date.civil(2000, 4, 6).to_s
34
+ end
35
+
36
+ it "parses a full day name" do
37
+ d = Date.today
38
+ expected_date = Date.commercial(d.cwyear, d.cweek, 4)
39
+ # strptime assumed week that start on sunday, not monday
40
+ expected_date += 7 if d.cwday == 7
41
+ Date.strptime("Thursday", "%A").should == expected_date
42
+ end
43
+
44
+ it "parses a short day name" do
45
+ d = Date.today
46
+ expected_date = Date.commercial(d.cwyear, d.cweek, 4)
47
+ # strptime assumed week that start on sunday, not monday
48
+ expected_date += 7 if d.cwday == 7
49
+ Date.strptime("Thu", "%a").should == expected_date
50
+ end
51
+
52
+ it "parses only the short part of the day name" do
53
+ Date._strptime("Friday", "%aday").should == {:wday=>5}
54
+ end
55
+
56
+ it "parses a full month name" do
57
+ d = Date.today
58
+ Date.strptime("April", "%B").should == Date.civil(d.year, 4, 1)
59
+ end
60
+
61
+ it "parses a short month name" do
62
+ d = Date.today
63
+ Date.strptime("Apr", "%b").should == Date.civil(d.year, 4, 1)
64
+ Date.strptime("Apr", "%h").should == Date.civil(d.year, 4, 1)
65
+ end
66
+
67
+ it "parses only the short part of the month name" do
68
+ d = Date.today
69
+ Date.strptime("April", "%bil").should == Date.civil(d.year, 4, 1)
70
+ Date.strptime("April", "%hil").should == Date.civil(d.year, 4, 1)
71
+ end
72
+
73
+ it "parses a century" do
74
+ Date.strptime("06 20", "%y %C").should == Date.civil(2006, 1, 1)
75
+ end
76
+
77
+ it "parses a month day with leading zeroes" do
78
+ d = Date.today
79
+ Date.strptime("06", "%d").should == Date.civil(d.year, d.month, 6)
80
+ end
81
+
82
+ it "parses a month day with leading spaces" do
83
+ d = Date.today
84
+ Date.strptime(" 6", "%e").should == Date.civil(d.year, d.month, 6)
85
+ end
86
+
87
+ it "parses a commercial year with leading zeroes" do
88
+ Date.strptime("2000", "%G").should == Date.civil(2000, 1, 3)
89
+ Date.strptime("2002", "%G").should == Date.civil(2001, 12, 31)
90
+ end
91
+
92
+ it "parses a commercial year with only two digits" do
93
+ Date.strptime("68", "%g").should == Date.civil(2068, 1, 2)
94
+ Date.strptime("69", "%g").should == Date.civil(1968, 12, 30)
95
+ end
96
+
97
+ it "parses a year day with leading zeroes" do
98
+ d = Date.today
99
+ if Date.gregorian_leap?(Date.today.year)
100
+ Date.strptime("097", "%j").should == Date.civil(d.year, 4, 6)
101
+ else
102
+ Date.strptime("097", "%j").should == Date.civil(d.year, 4, 7)
103
+ end
104
+ end
105
+
106
+ it "parses a month with leading zeroes" do
107
+ d = Date.today
108
+ Date.strptime("04", "%m").should == Date.civil(d.year, 4, 1)
109
+ end
110
+
111
+ it "should be able to parse the number of seconds since the unix epoch" do
112
+ Date.strptime("954979200000", "%Q").should == Date.civil(2000, 4, 6)
113
+ Date.strptime("32511888000000", "%Q").should == Date.civil(3000, 4, 6)
114
+ end
115
+
116
+ it "should be able to parse the number of seconds since the unix epoch" do
117
+ Date.strptime("954979200", "%s").should == Date.civil(2000, 4, 6)
118
+ Date.strptime("32511888000", "%s").should == Date.civil(3000, 4, 6)
119
+ end
120
+
121
+ it "should be able to pase the commercial day" do
122
+ Date.strptime("1", "%u").should == Date.commercial(Date.today.year, 1, 1)
123
+ Date.strptime("15 3", "%V %u").should == Date.commercial(Date.today.year, 15, 3)
124
+ end
125
+
126
+ it "should be able to show the commercial week" do
127
+ d = Date.commercial(Date.today.year,1,1)
128
+ Date.strptime("1", "%V").should == d
129
+ Date.strptime("15", "%V").should == Date.commercial(d.cwyear, 15, 1)
130
+ end
131
+
132
+ it "parses a week number for a week starting on Sunday" do
133
+ Date.strptime("2010/1", "%Y/%U").should == Date.civil(2010, 1, 3)
134
+ end
135
+
136
+ it "parses a week number for a week starting on Monday" do
137
+ Date.strptime("2010/1", "%Y/%W").should == Date.civil(2010, 1, 4)
138
+ end
139
+
140
+ it "parses a commercial week day" do
141
+ Date.strptime("2008 1", "%G %u").should == Date.civil(2007, 12, 31)
142
+ end
143
+
144
+ it "parses a commercial week" do
145
+ d = Date.commercial(Date.today.cwyear,1,1)
146
+ Date.strptime("1", "%V").should == d
147
+ Date.strptime("15", "%V").should == Date.commercial(d.cwyear, 15, 1)
148
+ end
149
+
150
+ it "parses a week day" do
151
+ d = Date.today
152
+ Date.strptime("2007 4", "%Y %w").should == Date.civil(2007, 1, 4)
153
+ end
154
+
155
+ it "parses a year in YYYY format" do
156
+ Date.strptime("2007", "%Y").should == Date.civil(2007, 1, 1)
157
+ end
158
+
159
+ it "parses a year in YY format" do
160
+ Date.strptime("00", "%y").should == Date.civil(2000, 1, 1)
161
+ end
162
+
163
+ it "should be able to parse escapes" do
164
+ Date.strptime("00 % \n \t %1", "%y %% %n %t %%1").should == Date.civil(2000, 1, 1)
165
+ end
166
+
167
+ ############################
168
+ # Specs that combine stuff #
169
+ ############################
170
+
171
+ it "parses a full date" do
172
+ Date.strptime("Thu Apr 6 00:00:00 2000", "%c").should == Date.civil(2000, 4, 6)
173
+ Date.strptime("Thu Apr 6 00:00:00 2000", "%a %b %e %H:%M:%S %Y").should == Date.civil(2000, 4, 6)
174
+ end
175
+
176
+ it "parses a date with slashes" do
177
+ Date.strptime("04/06/00", "%D").should == Date.civil(2000, 4, 6)
178
+ Date.strptime("04/06/00", "%m/%d/%y").should == Date.civil(2000, 4, 6)
179
+ end
180
+
181
+ it "parses a date given as YYYY-MM-DD" do
182
+ Date.strptime("2000-04-06", "%F").should == Date.civil(2000, 4, 6)
183
+ Date.strptime("2000-04-06", "%Y-%m-%d").should == Date.civil(2000, 4, 6)
184
+ end
185
+
186
+ it "parses a commercial week" do
187
+ Date.strptime(" 9-Apr-2000", "%v").should == Date.civil(2000, 4, 9)
188
+ Date.strptime(" 9-Apr-2000", "%e-%b-%Y").should == Date.civil(2000, 4, 9)
189
+ end
190
+
191
+ it "parses a date given MM/DD/YY" do
192
+ Date.strptime("04/06/00", "%x").should == Date.civil(2000, 4, 6)
193
+ Date.strptime("04/06/00", "%m/%d/%y").should == Date.civil(2000, 4, 6)
194
+ end
195
+
196
+ it "parses a date given in full notation" do
197
+ Date.strptime("Sun Apr 9 00:00:00 +00:00 2000", "%+").should == Date.civil(2000, 4, 9)
198
+ Date.strptime("Sun Apr 9 00:00:00 +00:00 2000", "%a %b %e %H:%M:%S %Z %Y").should == Date.civil(2000, 4, 9)
199
+ end
200
+
201
+ end