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,54 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "DateTime conversions" do
4
+ it "#new_offset should be a separate datetime with a modified offset" do
5
+ DateTime.new(2008, 1, 1).new_offset(0.5).to_s.should == DateTime.new(2008, 1, 1, 12, 0, 0, 0.5).to_s
6
+ end
7
+
8
+ it "#new_offset result should be equal to the receiver" do
9
+ DateTime.new(2008, 1, 1).new_offset(0.5).should == DateTime.new(2008, 1, 1)
10
+ end
11
+
12
+ ruby_version_is "" ... "1.9" do
13
+ it "#newof should be a separate datetime with a modified offset" do
14
+ DateTime.new(2008, 1, 1).newof(0.5).to_s.should == DateTime.new(2008, 1, 1, 12, 0, 0, 0.5).to_s
15
+ end
16
+ end
17
+ end
18
+
19
+ describe "DateTime marshalling" do
20
+ it "should marshal and unmarshal correctly" do
21
+ Marshal.load(Marshal.dump(DateTime.jd)).should == DateTime.civil
22
+ d = DateTime.now
23
+ Marshal.load(Marshal.dump(d)).should == d
24
+ Marshal.load(Marshal.dump(DateTime.civil(2010, 2, 4, 1, 2, 4, 4/24.0))).should == DateTime.civil(2010, 2, 4, 1, 2, 4, 4/24.0)
25
+ end
26
+ end
27
+
28
+ ruby_version_is "1.9" do
29
+ describe "DateTime#to_datetime" do
30
+ it " should return the receiver" do
31
+ DateTime.new(2009, 1, 2, 3, 4, 5, 0.5).to_datetime.should == DateTime.new(2009, 1, 2, 3, 4, 5, 0.5)
32
+ end
33
+ end
34
+
35
+ describe "DateTime#to_date" do
36
+ it " should return a Date with the same date as receiver" do
37
+ DateTime.new(2009, 1, 2, 12).to_date.should == Date.new(2009, 1, 2)
38
+ end
39
+ end
40
+
41
+ describe "DateTime#to_time" do
42
+ it " should return a Time in local time with the same year, month, day as the receiver" do
43
+ DateTime.new(2009, 1, 2, 3, 4, 5).to_time.should == Time.utc(2009, 1, 2, 3, 4, 5).getlocal
44
+ end
45
+ end
46
+
47
+ describe "Time#to_datetime" do
48
+ it " should return a Date with the same year, month, and day as the receiver" do
49
+ Time.utc(2009, 1, 2, 3, 4, 5).to_datetime.should == DateTime.new(2009, 1, 2, 3, 4, 5)
50
+ Time.utc(2009, 1, 2, 3, 4, 5).getlocal.to_datetime.should == DateTime.new(2009, 1, 2, 3, 4, 5)
51
+ end
52
+ end
53
+ end
54
+
@@ -0,0 +1,73 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ ruby_version_is "1.9" do
4
+ describe "DateTime#sunday?" do
5
+ it "should return true if the day is a Sunday" do
6
+ DateTime.civil(2009,1,4).sunday?.should == true
7
+ end
8
+
9
+ it "should return false if the day is not a Sunday" do
10
+ DateTime.civil(2009,1,2).sunday?.should == false
11
+ end
12
+ end
13
+
14
+ describe "DateTime#monday?" do
15
+ it "should return true if the day is a Monday" do
16
+ DateTime.civil(2009,1,5).monday?.should == true
17
+ end
18
+
19
+ it "should return false if the day is not a Monday" do
20
+ DateTime.civil(2009,1,2).monday?.should == false
21
+ end
22
+ end
23
+
24
+ describe "DateTime#tuesday?" do
25
+ it "should return true if the day is a Tuesday" do
26
+ DateTime.civil(2009,1,6).tuesday?.should == true
27
+ end
28
+
29
+ it "should return false if the day is not a Tuesday" do
30
+ DateTime.civil(2009,1,2).tuesday?.should == false
31
+ end
32
+ end
33
+
34
+ describe "DateTime#wednesday?" do
35
+ it "should return true if the day is a Wednesday" do
36
+ DateTime.civil(2009,1,7).wednesday?.should == true
37
+ end
38
+
39
+ it "should return false if the day is not a Tuesday" do
40
+ DateTime.civil(2009,1,2).wednesday?.should == false
41
+ end
42
+ end
43
+
44
+ describe "DateTime#thursday?" do
45
+ it "should return true if the day is a Thursday" do
46
+ DateTime.civil(2009,1,1).thursday?.should == true
47
+ end
48
+
49
+ it "should return false if the day is not a Thursday" do
50
+ DateTime.civil(2009,1,2).thursday?.should == false
51
+ end
52
+ end
53
+
54
+ describe "DateTime#friday?" do
55
+ it "should return true if the day is a Friday" do
56
+ DateTime.civil(2009,1,2).friday?.should == true
57
+ end
58
+
59
+ it "should return false if the day is not a Friday" do
60
+ DateTime.civil(2009,1,1).friday?.should == false
61
+ end
62
+ end
63
+
64
+ describe "DateTime#saturday?" do
65
+ it "should return true if the day is a Saturday" do
66
+ DateTime.civil(2009,1,3).saturday?.should == true
67
+ end
68
+
69
+ it "should return false if the day is not a Saturday" do
70
+ DateTime.civil(2009,1,2).saturday?.should == false
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,39 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "DateTime#downto" do
4
+
5
+ it "should be able to step backward in time" do
6
+ ds = DateTime.civil(2000, 4, 14)
7
+ de = DateTime.civil(2000, 3, 29)
8
+ count = 0
9
+ ds.downto(de) do |d|
10
+ d.should <= ds
11
+ d.should >= de
12
+ count += 1
13
+ end
14
+ count.should == 17
15
+ end
16
+
17
+ it "should respect fractional days" do
18
+ ds = DateTime.civil(2000, 4, 14, 0)
19
+ de = DateTime.civil(2000, 3, 29, 12)
20
+ count = 0
21
+ ds.downto(de) do |d|
22
+ d.should <= ds
23
+ d.should >= de
24
+ count += 1
25
+ end
26
+ count.should == 16
27
+
28
+ ds = DateTime.civil(2000, 4, 14, 12)
29
+ de = DateTime.civil(2000, 3, 29, 0)
30
+ count = 0
31
+ ds.downto(de) do |d|
32
+ d.should <= ds
33
+ d.should >= de
34
+ count += 1
35
+ end
36
+ count.should == 17
37
+ end
38
+
39
+ end
@@ -0,0 +1,17 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "DateTime#eql?" do
4
+ it "should be able determine equality between date objects" do
5
+ DateTime.civil(2007, 10, 11).should eql(DateTime.civil(2007, 10, 11))
6
+ DateTime.civil(2007, 10, 11, 10, 11, 12, 0.5).should eql(DateTime.civil(2007, 10, 11, 10, 11, 12, 0.5))
7
+ DateTime.civil(2007, 10, 11, 10, 11, 12, 0.5).should eql(DateTime.civil(2007, 10, 12, 10, 11, 12, 0.5) - 1)
8
+ DateTime.civil(2007, 10, 11, 10, 11, 12, 0.5).should_not eql(DateTime.civil(2007, 10, 11, 10, 11, 12, 0.4))
9
+ end
10
+
11
+ it "should be able determine equality between a date and a datetime objects" do
12
+ DateTime.civil(2007, 10, 11).should eql(Date.civil(2007, 10, 11))
13
+ DateTime.civil(2007, 10, 11).should eql(Date.civil(2007, 10, 12) - 1)
14
+ DateTime.civil(2007, 10, 11).should_not eql(Date.civil(2007, 10, 12))
15
+ DateTime.civil(2007, 10, 11, 1).should_not eql(Date.civil(2007, 10, 11))
16
+ end
17
+ end
@@ -0,0 +1,59 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "DateTime formatting methods" do
4
+ it "#asctime and #ctime should use a format similar to Time" do
5
+ DateTime.new(2008, 1, 2, 10, 20, 30).asctime.should == 'Wed Jan 2 10:20:30 2008'
6
+ DateTime.new(2008, 1, 2, 10, 20, 30).ctime.should == 'Wed Jan 2 10:20:30 2008'
7
+ end
8
+
9
+ it "#to_s should use an ISO8601 format" do
10
+ DateTime.new(2008, 1, 2, 10, 20, 30, 8/24.0).to_s.should == '2008-01-02T10:20:30+08:00'
11
+ end
12
+
13
+ it "#inspect should use an ISO8601 format" do
14
+ DateTime.new(2008, 1, 2, 10, 20, 30, 8/24.0).inspect.should == '#<DateTime 2008-01-02T10:20:30+08:00>'
15
+ end
16
+
17
+ ruby_version_is "1.9" do
18
+ it "#httpdate should use an HTTP format" do
19
+ DateTime.new(2009, 1, 2, 3, 4, 5).httpdate.should == "Fri, 02 Jan 2009 03:04:05 GMT"
20
+ end
21
+
22
+ it "#iso8601 should use an ISO8601 format" do
23
+ DateTime.new(2009, 1, 2, 3, 4, 5, 0.5).iso8601.should == "2009-01-02T03:04:05+12:00"
24
+ end
25
+
26
+ it "#jisx03010 should use an JIS X 0301 format" do
27
+ DateTime.new(2009, 1, 2, 3, 4, 5, 0.5).jisx0301.should == "H21.01.02T03:04:05+12:00"
28
+ DateTime.new(1988, 1, 2, 3, 4, 5, 0.5).jisx0301.should == "S63.01.02T03:04:05+12:00"
29
+ DateTime.new(1925, 1, 2, 3, 4, 5, 0.5).jisx0301.should == "T14.01.02T03:04:05+12:00"
30
+ DateTime.new(1911, 1, 2, 3, 4, 5, 0.5).jisx0301.should == "M44.01.02T03:04:05+12:00"
31
+ DateTime.new(1873, 1, 2, 3, 4, 5, 0.5).jisx0301.should == "M06.01.02T03:04:05+12:00"
32
+ DateTime.new(1872, 1, 2, 3, 4, 5, 0.5).jisx0301.should == "1872-01-02T03:04:05+12:00"
33
+ DateTime.new(1867, 1, 2, 3, 4, 5, 0.5).jisx0301.should == "1867-01-02T03:04:05+12:00"
34
+ end
35
+
36
+ it "#rfc2822 should use an RFC2822 format" do
37
+ DateTime.new(2009, 1, 2, 3, 4, 5, 0.5).rfc2822.should == "Fri, 2 Jan 2009 03:04:05 +1200"
38
+ end
39
+
40
+ it "#rfc822 should use an RFC822 format" do
41
+ DateTime.new(2009, 1, 2, 3, 4, 5, 0.5).rfc822.should == "Fri, 2 Jan 2009 03:04:05 +1200"
42
+ end
43
+
44
+ it "#rfc3339 should use an RFC3339 format" do
45
+ DateTime.new(2009, 1, 2, 3, 4, 5, 0.5).rfc3339.should == "2009-01-02T03:04:05+12:00"
46
+ end
47
+
48
+ it "#xmlschema should use an ISO8601 format" do
49
+ DateTime.new(2009, 1, 2, 3, 4, 5, 0.5).xmlschema.should == "2009-01-02T03:04:05+12:00"
50
+ end
51
+
52
+ it "should handle fractional seconds if given an argument for iso8601, jisx0301, rfc3339, and xmlschema" do
53
+ DateTime.new(2009, 1, 2, 3, 4, 5, 0.5).iso8601(4).should == "2009-01-02T03:04:05.0000+12:00"
54
+ DateTime.new(2009, 1, 2, 3, 4, 5, 0.5).jisx0301(4).should == "H21.01.02T03:04:05.0000+12:00"
55
+ DateTime.new(2009, 1, 2, 3, 4, 5, 0.5).rfc3339(4).should == "2009-01-02T03:04:05.0000+12:00"
56
+ DateTime.new(2009, 1, 2, 3, 4, 5, 0.5).xmlschema(4).should == "2009-01-02T03:04:05.0000+12:00"
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "DateTime#hash" do
4
+ it "should use the same hash value for equal datetimes" do
5
+ DateTime.civil(2004, 7, 12, 13, 14, 15).hash.should == DateTime.civil(2004, 7, 12, 13, 14, 15).hash
6
+ end
7
+
8
+ it "should use a different hash value for different dates" do
9
+ DateTime.civil(2004, 7, 12, 13, 14, 15).hash.should_not == DateTime.civil(2004, 7, 12, 13, 14, 16).hash
10
+ end
11
+ end
@@ -0,0 +1,19 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "DateTime#leap?" do
4
+ it "should be true if the current date is a leap year and no argument is given" do
5
+ DateTime.civil(2000, 10, 11).leap?.should == true
6
+ DateTime.civil(2004, 10, 11).leap?.should == true
7
+ DateTime.civil(2008, 10, 11).leap?.should == true
8
+ DateTime.civil(1996, 10, 11).leap?.should == true
9
+ DateTime.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
+ DateTime.civil(1700, 10, 11).leap?.should == false
14
+ DateTime.civil(1800, 10, 11).leap?.should == false
15
+ DateTime.civil(1900, 10, 11).leap?.should == false
16
+ DateTime.civil(1999, 10, 11).leap?.should == false
17
+ DateTime.civil(2001, 10, 11).leap?.should == false
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "DateTime#<<" do
4
+
5
+ it "should substract a number of months from a date" do
6
+ (DateTime.civil(2007, 12, 27) << 10).should == DateTime.civil(2007,2,27)
7
+ (DateTime.commercial(2007, 45, 5) << 10).should == DateTime.commercial(2007,2,2)
8
+ (DateTime.jd(2455086) << 10).should == DateTime.jd(2454782)
9
+ (DateTime.ordinal(2008, 315) << 10).should == DateTime.ordinal(2008, 10)
10
+ (DateTime.civil(2007, 12, 27) << 12).should == DateTime.civil(2006,12,27)
11
+ (DateTime.civil(2007, 12, 27) << -12).should == DateTime.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 = DateTime.civil(2008,3,31) << 1
16
+ d.should == DateTime.civil(2008, 2, 29)
17
+ end
18
+
19
+ it "should raise an error on non numeric parameters" do
20
+ lambda { DateTime.civil(2007,2,27) << "hello" }.should raise_error(TypeError)
21
+ lambda { DateTime.civil(2007,2,27) << DateTime.new }.should raise_error(TypeError)
22
+ lambda { DateTime.civil(2007,2,27) << Object.new }.should raise_error(TypeError)
23
+ end
24
+
25
+ end
@@ -0,0 +1,77 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "DateTime#-" do
4
+
5
+ it "should substract a number of days from a DateTime" do
6
+ (DateTime.civil(2008, 1, 8) - 315).should == DateTime.civil(2007,2,27)
7
+ (DateTime.commercial(2007, 47, 2) - 315).should == DateTime.commercial(2007,2,2)
8
+ (DateTime.jd(2455097) - 315).should == DateTime.jd(2454782)
9
+ (DateTime.ordinal(2008, 325) - 315).should == DateTime.ordinal(2008, 10)
10
+ end
11
+
12
+ it "should subtract a fractional number of days to a Date" do
13
+ (DateTime.civil(2008, 1, 8, 12) - 315.5).should == DateTime.civil(2007,2,27)
14
+ (DateTime.commercial(2007, 47, 2, 18) - 315.75).should == DateTime.commercial(2007,2,2)
15
+ (DateTime.jd(2455097, 6) - 315.25).should == DateTime.jd(2454782)
16
+ (DateTime.ordinal(2008, 325, 6) - 315.25).should == DateTime.ordinal(2008, 10)
17
+ end
18
+
19
+ it "should substract a negative number of days from a DateTime" do
20
+ d = DateTime.civil(2007, 4, 19).-(-13)
21
+ d.should == DateTime.civil(2007, 5 ,2)
22
+ end
23
+
24
+ it "should subtract a fractional negative number of days to a Date" do
25
+ d = DateTime.civil(2007, 2, 16, 12).-(-10.5)
26
+ d.should == DateTime.civil(2007,2,27)
27
+ end
28
+
29
+ it "should be able to compute the different between two DateTimes" do
30
+ (DateTime.civil(2007,2,27) - DateTime.civil(2007,2,27)).should be_close(0.0, 0.00000001)
31
+ (DateTime.civil(2007,2,27) - DateTime.civil(2007,2,26)).should be_close(1.0, 0.00000001)
32
+ (DateTime.civil(2006,2,27) - DateTime.civil(2007,2,27)).should be_close(-365.0, 0.00000001)
33
+ (DateTime.civil(2008,2,27) - DateTime.civil(2007,2,27)).should be_close(365.0, 0.00000001)
34
+ (DateTime.civil(2009,2,27) - DateTime.civil(2008,2,27)).should be_close(366.0, 0.00000001)
35
+
36
+ (DateTime.civil(2009,2,27) - DateTime.commercial(2008,2,1)).should be_close(417.0, 0.00000001)
37
+ (DateTime.civil(2009,2,27) - DateTime.jd(2454782)).should be_close(108.0, 0.00000001)
38
+ (DateTime.civil(2009,2,27) - DateTime.ordinal(2008, 10)).should be_close(414.0, 0.00000001)
39
+
40
+ (DateTime.commercial(2008,2,1) - DateTime.civil(2008,2,27)).should be_close(-51.0, 0.00000001)
41
+ (DateTime.commercial(2008,2,1) - DateTime.jd(2454782)).should be_close(-309.0, 0.00000001)
42
+ (DateTime.commercial(2008,2,1) - DateTime.ordinal(2008, 10)).should be_close(-3.0, 0.00000001)
43
+
44
+ (DateTime.jd(2454782) - DateTime.commercial(2008,2,1)).should be_close(309.0, 0.00000001)
45
+ (DateTime.jd(2454782) - DateTime.civil(2009,2,27)).should be_close(-108.0, 0.00000001)
46
+ (DateTime.jd(2454782) - DateTime.ordinal(2008, 10)).should be_close(306.0, 0.00000001)
47
+
48
+ (DateTime.ordinal(2008, 10) - DateTime.commercial(2008,2,1)).should be_close(3.0, 0.00000001)
49
+ (DateTime.ordinal(2008, 10) - DateTime.jd(2454782)).should be_close(-306.0, 0.00000001)
50
+ (DateTime.ordinal(2008, 10) - DateTime.civil(2009,2,27)).should be_close(-414.0, 0.00000001)
51
+ end
52
+
53
+ it "should consider the offset when computing the different between two DateTimes" do
54
+ (DateTime.civil(2007,2,27, 0, 0, 0, 0.5) - DateTime.civil(2007,2,27,0,0,0)).should be_close(-0.5, 0.00000001)
55
+ (DateTime.civil(2007,2,27, 0, 0, 0, -0.5) - DateTime.civil(2007,2,27,12,0,0)).should be_close(0.0, 0.00000001)
56
+ (DateTime.civil(2007,2,27,0,0,0,-0.5) - DateTime.civil(2007,2,27,0,0,0,0.5)).should be_close(1.0, 0.00000001)
57
+ end
58
+
59
+ it "should be able to subtract a Date from a DateTime" do
60
+ (DateTime.ordinal(2008, 10) - Date.commercial(2008,2,1)).should be_close(3.0, 0.00000001)
61
+ (DateTime.ordinal(2008, 10) - Date.jd(2454782)).should be_close(-306.0, 0.00000001)
62
+ (DateTime.ordinal(2008, 10) - Date.civil(2009,2,27)).should be_close(-414.0, 0.00000001)
63
+ end
64
+
65
+ it "should assume a Date is in the same offset as the receiver" do
66
+ (DateTime.ordinal(2008, 10, 0, 0, 0, 0.5) - Date.commercial(2008,2,1)).should be_close(3.0, 0.00000001)
67
+ (DateTime.ordinal(2008, 10, 0, 0, 0, 0.1) - Date.jd(2454782)).should be_close(-306.0, 0.00000001)
68
+ (DateTime.ordinal(2008, 10, 0, 0, 0, -0.5) - Date.civil(2009,2,27)).should be_close(-414.0, 0.00000001)
69
+ end
70
+
71
+ it "should raise an error on non numeric parameters" do
72
+ lambda { DateTime.civil(2007,2,27) - :hello }.should raise_error(TypeError)
73
+ lambda { DateTime.civil(2007,2,27) - "hello" }.should raise_error(TypeError)
74
+ lambda { DateTime.civil(2007,2,27) - Object.new }.should raise_error(TypeError)
75
+ end
76
+
77
+ end
@@ -0,0 +1,138 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ ruby_version_is "1.9" do
4
+ describe "DateTime#next_day" do
5
+ it "should add a single day to a DateTime if no arguments" do
6
+ (DateTime.civil(2007,2,27).next_day).should == DateTime.civil(2007, 2, 28)
7
+ end
8
+
9
+ it "should add the given number of days to a DateTime if an argument" do
10
+ (DateTime.civil(2007,2,27).next_day(2)).should == DateTime.civil(2007, 3, 1)
11
+ end
12
+
13
+ it "should handle a negative argument by subtracting days" do
14
+ (DateTime.civil(2007,2,27).next_day(-2)).should == DateTime.civil(2007, 2, 25)
15
+ end
16
+
17
+ it "should keep the same fractional part and offset" do
18
+ (DateTime.civil(2007,2,27, 12, 0, 0, 0.5).next_day).day_fraction.should == 0.5
19
+ (DateTime.civil(2007,2,27, 12, 0, 0, 0.5).next_day).offset.should == 0.5
20
+ end
21
+ end
22
+
23
+ describe "DateTime#prev_day" do
24
+ it "should subtract a single day to a DateTime if no arguments" do
25
+ (DateTime.civil(2007,2,27).prev_day).should == DateTime.civil(2007, 2, 26)
26
+ end
27
+
28
+ it "should subtract the given number of days to a DateTime if an argument" do
29
+ (DateTime.civil(2007,2,27).prev_day(2)).should == DateTime.civil(2007, 2, 25)
30
+ end
31
+
32
+ it "should handle a negative argument by adding days" do
33
+ (DateTime.civil(2007,2,27).prev_day(-2)).should == DateTime.civil(2007, 3, 1)
34
+ end
35
+
36
+ it "should keep the same fractional part and offset" do
37
+ (DateTime.civil(2007,2,27, 12, 0, 0, 0.5).prev_day).day_fraction.should == 0.5
38
+ (DateTime.civil(2007,2,27, 12, 0, 0, 0.5).prev_day).offset.should == 0.5
39
+ end
40
+ end
41
+
42
+ describe "DateTime#next_month" do
43
+ it "should add a single month to a DateTime if no arguments" do
44
+ (DateTime.civil(2007,2,27).next_month).should == DateTime.civil(2007, 3, 27)
45
+ end
46
+
47
+ it "should add the given number of months to a DateTime if an argument" do
48
+ (DateTime.civil(2007,2,27).next_month(2)).should == DateTime.civil(2007, 4, 27)
49
+ end
50
+
51
+ it "should handle a negative argument by subtracting months" do
52
+ (DateTime.civil(2007,2,27).next_month(-2)).should == DateTime.civil(2006, 12, 27)
53
+ end
54
+
55
+ it "should handle adding a month where the new date is not a valid date" do
56
+ (DateTime.civil(2007,1,31).next_month).should == DateTime.civil(2007, 2, 28)
57
+ (DateTime.civil(2008,1,31).next_month).should == DateTime.civil(2008, 2, 29)
58
+ (DateTime.civil(2007,1,31).next_month(3)).should == DateTime.civil(2007, 4, 30)
59
+ end
60
+
61
+ it "should keep the same fractional part and offset" do
62
+ (DateTime.civil(2007,2,27, 12, 0, 0, 0.5).next_month).day_fraction.should == 0.5
63
+ (DateTime.civil(2007,2,27, 12, 0, 0, 0.5).next_month).offset.should == 0.5
64
+ end
65
+ end
66
+
67
+ describe "DateTime#prev_month" do
68
+ it "should subtract a single month to a DateTime if no arguments" do
69
+ (DateTime.civil(2007,2,27).prev_month).should == DateTime.civil(2007, 1, 27)
70
+ end
71
+
72
+ it "should subtract the given number of months to a DateTime if an argument" do
73
+ (DateTime.civil(2007,2,27).prev_month(2)).should == DateTime.civil(2006, 12, 27)
74
+ end
75
+
76
+ it "should handle a negative argument by adding months" do
77
+ (DateTime.civil(2007,2,27).prev_month(-2)).should == DateTime.civil(2007, 4, 27)
78
+ end
79
+
80
+ it "should handle subtracting a month where the new date is not a valid date" do
81
+ (DateTime.civil(2007,3,31).prev_month).should == DateTime.civil(2007, 2, 28)
82
+ (DateTime.civil(2008,3,31).prev_month).should == DateTime.civil(2008, 2, 29)
83
+ (DateTime.civil(2007,3,31).prev_month(4)).should == DateTime.civil(2006, 11, 30)
84
+ end
85
+
86
+ it "should keep the same fractional part and offset" do
87
+ (DateTime.civil(2007,2,27, 12, 0, 0, 0.5).prev_month).day_fraction.should == 0.5
88
+ (DateTime.civil(2007,2,27, 12, 0, 0, 0.5).prev_month).offset.should == 0.5
89
+ end
90
+ end
91
+
92
+ describe "DateTime#next_year" do
93
+ it "should add a single year to a DateTime if no arguments" do
94
+ (DateTime.civil(2007,2,27).next_year).should == DateTime.civil(2008, 2, 27)
95
+ end
96
+
97
+ it "should add the given number of years to a DateTime if an argument" do
98
+ (DateTime.civil(2007,2,27).next_year(2)).should == DateTime.civil(2009, 2, 27)
99
+ end
100
+
101
+ it "should handle a negative argument by subtracting years" do
102
+ (DateTime.civil(2007,2,27).next_year(-2)).should == DateTime.civil(2005, 2, 27)
103
+ end
104
+
105
+ it "should handle adding a year where the new date is not a valid date" do
106
+ (DateTime.civil(2008,2,29).next_year).should == DateTime.civil(2009, 2, 28)
107
+ end
108
+
109
+ it "should keep the same fractional part and offset" do
110
+ (DateTime.civil(2007,2,27, 12, 0, 0, 0.5).next_year).day_fraction.should == 0.5
111
+ (DateTime.civil(2007,2,27, 12, 0, 0, 0.5).next_year).offset.should == 0.5
112
+ end
113
+ end
114
+
115
+ describe "DateTime#prev_year" do
116
+ it "should add a single year to a DateTime if no arguments" do
117
+ (DateTime.civil(2007,2,27).prev_year).should == DateTime.civil(2006, 2, 27)
118
+ end
119
+
120
+ it "should add the given number of years to a DateTime if an argument" do
121
+ (DateTime.civil(2007,2,27).prev_year(2)).should == DateTime.civil(2005, 2, 27)
122
+ end
123
+
124
+ it "should handle a negative argument by subtracting years" do
125
+ (DateTime.civil(2007,2,27).prev_year(-2)).should == DateTime.civil(2009, 2, 27)
126
+ end
127
+
128
+ it "should handle adding a year where the new date is not a valid date" do
129
+ (DateTime.civil(2008,2,29).prev_year).should == DateTime.civil(2007, 2, 28)
130
+ end
131
+
132
+ it "should keep the same fractional part and offset" do
133
+ (DateTime.civil(2007,2,27, 12, 0, 0, 0.5).prev_year).day_fraction.should == 0.5
134
+ (DateTime.civil(2007,2,27, 12, 0, 0, 0.5).prev_year).offset.should == 0.5
135
+ end
136
+ end
137
+
138
+ end