home_run 0.9.0-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. data/CHANGELOG +3 -0
  2. data/LICENSE +19 -0
  3. data/README.rdoc +314 -0
  4. data/Rakefile +136 -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,52 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "Date#gregorian?" do
4
+ it "should return true" do
5
+ Date.civil(1007, 2, 27).gregorian?.should == true
6
+ Date.civil(1907, 2, 27, Date.civil(2000, 1, 1).jd).gregorian?.should == true
7
+ end
8
+
9
+ ruby_version_is "" ... "1.9" do
10
+ it "ns? should be same as gregorian?" do
11
+ Date.civil(1007, 2, 27).ns?.should == true
12
+ end
13
+ end
14
+ end
15
+
16
+ describe "Date.gregorian_leap?" do
17
+
18
+ it "should be able to determine whether a year is a leap year in the Gregorian calendar" do
19
+ Date.gregorian_leap?(1900).should == false
20
+ Date.gregorian_leap?(1999).should == false
21
+ Date.gregorian_leap?(2000).should == true
22
+ Date.gregorian_leap?(2002).should == false
23
+ Date.gregorian_leap?(2004).should == true
24
+ Date.gregorian_leap?(1901).should == false
25
+ Date.gregorian_leap?(1899).should == false
26
+ Date.gregorian_leap?(1904).should == true
27
+ Date.gregorian_leap?(1896).should == true
28
+ Date.gregorian_leap?(1999).should == false
29
+ Date.gregorian_leap?(2001).should == false
30
+ end
31
+
32
+ it ".leap? should be the same as gregorian_leap" do
33
+ Date.leap?(1900).should == Date.gregorian_leap?(1900)
34
+ Date.leap?(2000).should == Date.gregorian_leap?(2000)
35
+ end
36
+ end
37
+
38
+ ruby_version_is "" ... "1.9" do
39
+ describe "Date" do
40
+ it ".gregorian? should return whether the first argument is greater than or equal the second" do
41
+ Date.gregorian?(1, 2).should == false
42
+ Date.gregorian?(2, 1).should == true
43
+ Date.gregorian?(1, 1).should == true
44
+ end
45
+
46
+ it ".ns? should be the same as gregorian?" do
47
+ Date.ns?(2, 1).should == Date.gregorian?(2, 1)
48
+ Date.ns?(1, 2).should == Date.gregorian?(1, 2)
49
+ Date.ns?(1, 1).should == Date.gregorian?(1, 1)
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "Date#hash" do
4
+ it "should use the same hash value for equal dates" do
5
+ Date.civil(2004, 7, 12).hash.should == Date.civil(2004, 7, 12).hash
6
+ end
7
+
8
+ it "should use a different hash value for different dates" do
9
+ Date.civil(2004, 7, 12).hash.should_not == Date.civil(2004, 7, 13).hash
10
+ end
11
+ end
@@ -0,0 +1,129 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "Date.jd" do
4
+ it "should be able to construct a Date object based on the Julian day" do
5
+ Date.jd(2454482).should == Date.civil(2008, 1, 16)
6
+ end
7
+
8
+ it "should be able to determine the Julian day for a Date object" do
9
+ Date.civil(2008, 1, 16).jd.should == 2454482
10
+ end
11
+
12
+ it "should have defaults" do
13
+ Date.jd.should == Date.jd(0)
14
+ Date.jd(2008).should == Date.jd(2008)
15
+ Date.jd(2008, 1).should == Date.jd(2008)
16
+ end
17
+
18
+ it "should not accept more than 2 arguments" do
19
+ proc{Date.jd(2008, 1, 1)}.should raise_error(ArgumentError)
20
+ end
21
+
22
+ it "should raise ArgumentError for invalid dates" do
23
+ proc{Date.jd(Date::GREGORIAN)}.should raise_error
24
+ proc{Date.jd(Date::JULIAN)}.should raise_error
25
+ end
26
+
27
+ ruby_version_is "" ... "1.9" do
28
+ it ".new1 should be the same as jd" do
29
+ Date.new1(2454156).should == Date.jd(2454156)
30
+ end
31
+ end
32
+ end
33
+
34
+ describe "Date.new!" do
35
+ it "should be the same as jd" do
36
+ Date.new!(2454156).should == Date.jd(2454156)
37
+ end
38
+
39
+ it "should accept extra arguments" do
40
+ Date.new!.should == Date.jd(0)
41
+ Date.new!(2008).should == Date.jd(2008)
42
+ Date.new!(2008, 1).should == Date.jd(2008)
43
+ Date.new!(2008, 1, 1).should == Date.jd(2008)
44
+ end
45
+
46
+ it "should not accept more than 3 arguments" do
47
+ proc{Date.new!(2008, 1, 1, 1)}.should raise_error(ArgumentError)
48
+ end
49
+
50
+ ruby_version_is "" ... "1.9" do
51
+ it "#new0 should be the same as new!" do
52
+ Date.new0(2454156).should == Date.new!(2454156)
53
+ end
54
+ end
55
+ end
56
+
57
+ describe "Date#julian?" do
58
+ it "should return false" do
59
+ Date.civil(1007, 2, 27).julian?.should == false
60
+ Date.civil(1907, 2, 27, Date.civil(2000, 1, 1).jd).julian?.should == false
61
+ end
62
+
63
+ ruby_version_is "" ... "1.9" do
64
+ it "os? should be same as julian?" do
65
+ Date.civil(1007, 2, 27).os?.should == false
66
+ end
67
+ end
68
+ end
69
+
70
+ describe "Date.julian_leap?" do
71
+
72
+ it "should be able to determine whether a year is a leap year in the Julian calendar" do
73
+ Date.julian_leap?(1900).should == true
74
+ Date.julian_leap?(1999).should == false
75
+ Date.julian_leap?(2000).should == true
76
+ Date.julian_leap?(2002).should == false
77
+ Date.julian_leap?(2004).should == true
78
+ Date.julian_leap?(1901).should == false
79
+ Date.julian_leap?(1899).should == false
80
+ Date.julian_leap?(1904).should == true
81
+ Date.julian_leap?(1896).should == true
82
+ Date.julian_leap?(1999).should == false
83
+ Date.julian_leap?(2001).should == false
84
+ end
85
+
86
+ end
87
+
88
+ describe "Date.valid_jd?" do
89
+ ruby_version_is "" ... "1.9" do
90
+ it "should be able to determine if a day number is a valid Julian day number, true for all numbers" do
91
+ # This might need to check the type of the jd parameter. Date.valid_jd?(:number) is of course
92
+ # bogus but returns itself with the current implementation
93
+ Date.valid_jd?(-100).should == -100
94
+ Date.valid_jd?(0).should == 0
95
+ Date.valid_jd?(100).should == 100
96
+ Date.valid_jd?(2454156).should == 2454156
97
+ Date.valid_jd?(2454156, 1).should == 2454156
98
+ end
99
+
100
+ it "#exist1? should be the same as valid_jd?" do
101
+ Date.exist1?(2454156, 1).should == Date.valid_jd?(2454156, 1)
102
+ end
103
+ end
104
+
105
+ ruby_version_is "1.9" do
106
+ it "should be able to determine if a day number is a valid Julian day number, true for all numbers" do
107
+ # This might need to check the type of the jd parameter. Date.valid_jd?(:number) is of course
108
+ # bogus but returns itself with the current implementation
109
+ Date.valid_jd?(-100).should == true
110
+ Date.valid_jd?(0).should == true
111
+ Date.valid_jd?(100).should == true
112
+ Date.valid_jd?(2454156).should == true
113
+ Date.valid_jd?(2454156, 1).should == true
114
+ end
115
+ end
116
+ end
117
+
118
+ ruby_version_is "" ... "1.9" do
119
+ describe "Date" do
120
+ it ".julian? should return whether the first argument is less than the second" do
121
+ Date.julian?(1, 1).should == false
122
+ Date.julian?(1, 2).should == true
123
+ end
124
+
125
+ it ".os? should be the same as julian?" do
126
+ Date.os?(1, 2).should == Date.julian?(1, 2)
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,19 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
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,25 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
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(TypeError)
21
+ lambda { Date.civil(2007,2,27) << Date.new }.should raise_error(TypeError)
22
+ lambda { Date.civil(2007,2,27) << Object.new }.should raise_error(TypeError)
23
+ end
24
+
25
+ end
@@ -0,0 +1,51 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
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 be able to compute the difference between a Date and a DateTime" do
42
+ (Date.civil(2007, 4, 19) - DateTime.civil(2007, 4, 18, 12)).should == 0.5
43
+ end
44
+
45
+ it "should raise an error on non numeric parameters" do
46
+ lambda { Date.civil(2007,2,27) - :hello }.should raise_error(TypeError)
47
+ lambda { Date.civil(2007,2,27) - "hello" }.should raise_error(TypeError)
48
+ lambda { Date.civil(2007,2,27) - Object.new }.should raise_error(TypeError)
49
+ end
50
+
51
+ end
@@ -0,0 +1,108 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ ruby_version_is "1.9" do
4
+ describe "Date#next_day" do
5
+ it "should add a single day to a Date if no arguments" do
6
+ (Date.civil(2007,2,27).next_day).should == Date.civil(2007, 2, 28)
7
+ end
8
+
9
+ it "should add the given number of days to a Date if an argument" do
10
+ (Date.civil(2007,2,27).next_day(2)).should == Date.civil(2007, 3, 1)
11
+ end
12
+
13
+ it "should handle a negative argument by subtracting days" do
14
+ (Date.civil(2007,2,27).next_day(-2)).should == Date.civil(2007, 2, 25)
15
+ end
16
+ end
17
+
18
+ describe "Date#prev_day" do
19
+ it "should subtract a single day to a Date if no arguments" do
20
+ (Date.civil(2007,2,27).prev_day).should == Date.civil(2007, 2, 26)
21
+ end
22
+
23
+ it "should subtract the given number of days to a Date if an argument" do
24
+ (Date.civil(2007,2,27).prev_day(2)).should == Date.civil(2007, 2, 25)
25
+ end
26
+
27
+ it "should handle a negative argument by adding days" do
28
+ (Date.civil(2007,2,27).prev_day(-2)).should == Date.civil(2007, 3, 1)
29
+ end
30
+ end
31
+
32
+ describe "Date#next_month" do
33
+ it "should add a single month to a Date if no arguments" do
34
+ (Date.civil(2007,2,27).next_month).should == Date.civil(2007, 3, 27)
35
+ end
36
+
37
+ it "should add the given number of months to a Date if an argument" do
38
+ (Date.civil(2007,2,27).next_month(2)).should == Date.civil(2007, 4, 27)
39
+ end
40
+
41
+ it "should handle a negative argument by subtracting months" do
42
+ (Date.civil(2007,2,27).next_month(-2)).should == Date.civil(2006, 12, 27)
43
+ end
44
+
45
+ it "should handle adding a month where the new date is not a valid date" do
46
+ (Date.civil(2007,1,31).next_month).should == Date.civil(2007, 2, 28)
47
+ (Date.civil(2008,1,31).next_month).should == Date.civil(2008, 2, 29)
48
+ (Date.civil(2007,1,31).next_month(3)).should == Date.civil(2007, 4, 30)
49
+ end
50
+ end
51
+
52
+ describe "Date#prev_month" do
53
+ it "should subtract a single month to a Date if no arguments" do
54
+ (Date.civil(2007,2,27).prev_month).should == Date.civil(2007, 1, 27)
55
+ end
56
+
57
+ it "should subtract the given number of months to a Date if an argument" do
58
+ (Date.civil(2007,2,27).prev_month(2)).should == Date.civil(2006, 12, 27)
59
+ end
60
+
61
+ it "should handle a negative argument by adding months" do
62
+ (Date.civil(2007,2,27).prev_month(-2)).should == Date.civil(2007, 4, 27)
63
+ end
64
+
65
+ it "should handle subtracting a month where the new date is not a valid date" do
66
+ (Date.civil(2007,3,31).prev_month).should == Date.civil(2007, 2, 28)
67
+ (Date.civil(2008,3,31).prev_month).should == Date.civil(2008, 2, 29)
68
+ (Date.civil(2007,3,31).prev_month(4)).should == Date.civil(2006, 11, 30)
69
+ end
70
+ end
71
+
72
+ describe "Date#next_year" do
73
+ it "should add a single year to a Date if no arguments" do
74
+ (Date.civil(2007,2,27).next_year).should == Date.civil(2008, 2, 27)
75
+ end
76
+
77
+ it "should add the given number of years to a Date if an argument" do
78
+ (Date.civil(2007,2,27).next_year(2)).should == Date.civil(2009, 2, 27)
79
+ end
80
+
81
+ it "should handle a negative argument by subtracting years" do
82
+ (Date.civil(2007,2,27).next_year(-2)).should == Date.civil(2005, 2, 27)
83
+ end
84
+
85
+ it "should handle adding a year where the new date is not a valid date" do
86
+ (Date.civil(2008,2,29).next_year).should == Date.civil(2009, 2, 28)
87
+ end
88
+ end
89
+
90
+ describe "Date#prev_year" do
91
+ it "should add a single year to a Date if no arguments" do
92
+ (Date.civil(2007,2,27).prev_year).should == Date.civil(2006, 2, 27)
93
+ end
94
+
95
+ it "should add the given number of years to a Date if an argument" do
96
+ (Date.civil(2007,2,27).prev_year(2)).should == Date.civil(2005, 2, 27)
97
+ end
98
+
99
+ it "should handle a negative argument by subtracting years" do
100
+ (Date.civil(2007,2,27).prev_year(-2)).should == Date.civil(2009, 2, 27)
101
+ end
102
+
103
+ it "should handle adding a year where the new date is not a valid date" do
104
+ (Date.civil(2008,2,29).prev_year).should == Date.civil(2007, 2, 28)
105
+ end
106
+ end
107
+
108
+ end
@@ -0,0 +1,83 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe "Date.ordinal" do
4
+
5
+ it "should be able to construct a Date object from an ordinal date" do
6
+ Date.ordinal(1582, 274).should == Date.civil(1582, 10, 1)
7
+ Date.ordinal(1582, 277).should == Date.civil(1582, 10, 4)
8
+ Date.ordinal(1582, 288).should == Date.civil(1582, 10, 15)
9
+ Date.ordinal(1582, 287, Date::ENGLAND).should == Date.civil(1582, 10, 14, Date::ENGLAND)
10
+ end
11
+
12
+ it "should have defaults and an optional sg value" do
13
+ Date.ordinal.should == Date.jd
14
+ Date.ordinal(2008).should == Date.ordinal(2008, 1)
15
+ Date.ordinal(2008, 1, 1).should == Date.ordinal(2008, 1)
16
+ end
17
+
18
+ it "should not accept more than 3 arguments" do
19
+ proc{Date.ordinal(2008, 1, 1, 1)}.should raise_error(ArgumentError)
20
+ end
21
+
22
+ it "raises errors for invalid dates" do
23
+ lambda { Date.ordinal(2007, 366) }.should raise_error(ArgumentError)
24
+ lambda { Date.ordinal(2008, 366) }.should_not raise_error(ArgumentError)
25
+ lambda { Date.ordinal(2008, 367) }.should raise_error(ArgumentError)
26
+ end
27
+
28
+ ruby_version_is "" ... "1.9" do
29
+ it ".new2 should be the same as ordinal" do
30
+ Date.new2(2008, 10).should == Date.ordinal(2008, 10)
31
+ end
32
+ end
33
+ end
34
+
35
+ describe "Date.valid_ordinal?" do
36
+
37
+ ruby_version_is "" ... "1.9" do
38
+ it "should be able to determine if the date is a valid ordinal date" do
39
+ Date.valid_ordinal?(1582, 277).should == Date.civil(1582, 10, 4).jd
40
+ Date.valid_ordinal?(1582, 278).should == Date.civil(1582, 10, 5).jd
41
+ Date.valid_ordinal?(1582, 287).should == Date.civil(1582, 10, 14).jd
42
+ Date.valid_ordinal?(1582, 288).should == Date.civil(1582, 10, 15).jd
43
+ Date.valid_ordinal?(1582, 287, Date::ENGLAND).should_not == nil
44
+ Date.valid_ordinal?(1582, 287, Date::ENGLAND).should == Date.civil(1582, 10, 14, Date::ENGLAND).jd
45
+
46
+ Date.valid_ordinal?(2007, 55).should == 2454156
47
+ Date.valid_ordinal?(2007, 55, 1).should == 2454156
48
+ Date.valid_ordinal?(2007, 367, 1).should == nil
49
+ end
50
+
51
+ it "#exist2? should be the same as valid_ordinal?" do
52
+ Date.exist2?(2007, 55, 1).should == Date.valid_ordinal?(2007, 55)
53
+ end
54
+
55
+ it "should be able to handle negative day numbers" do
56
+ Date.valid_ordinal?(1582, -89).should == Date.civil(1582, 10, 4).jd
57
+ Date.valid_ordinal?(1582, -88).should == Date.civil(1582, 10, 5).jd
58
+ Date.valid_ordinal?(1582, -79).should == Date.civil(1582, 10, 14).jd
59
+ Date.valid_ordinal?(1582, -78).should == Date.civil(1582, 10, 15).jd
60
+ Date.valid_ordinal?(2007, -100).should == Date.valid_ordinal?(2007, 266)
61
+ end
62
+ end
63
+
64
+ ruby_version_is "1.9" do
65
+ it "should be able to determine if the date is a valid ordinal date" do
66
+ Date.valid_ordinal?(1582, 277).should == true
67
+ Date.valid_ordinal?(1582, 278).should == true
68
+ Date.valid_ordinal?(1582, 287).should == true
69
+ Date.valid_ordinal?(1582, 288).should == true
70
+
71
+ Date.valid_ordinal?(2007, 55).should == true
72
+ Date.valid_ordinal?(2007, 55, 1).should == true
73
+ Date.valid_ordinal?(2007, 367, 1).should == false
74
+ end
75
+
76
+ it "should be able to handle negative day numbers" do
77
+ Date.valid_ordinal?(1582, -79).should == true
78
+ Date.valid_ordinal?(1582, -78).should == true
79
+ Date.valid_ordinal?(2007, -100).should == true
80
+ end
81
+ end
82
+
83
+ end