hebcal 0.0.2

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.
@@ -0,0 +1,7 @@
1
+ require "hebcal/version"
2
+ require 'hebcal/engine'
3
+ require 'hebcal/passover'
4
+ require 'hebcal/holidays'
5
+
6
+ module HebCal
7
+ end
@@ -0,0 +1,28 @@
1
+ module HebCal
2
+ module PassoverConstants
3
+ HALAKIM_PER_HOUR = 1080
4
+ HALAKIM_PER_DAY = 24 * HALAKIM_PER_HOUR
5
+ ANNUAL_DRIFT = 10 * HALAKIM_PER_DAY + 21 * HALAKIM_PER_HOUR + 204
6
+ JULIAN_ANNUAL_CALENDAR_DRIFT = HALAKIM_PER_HOUR * 6
7
+ JULIAN_YEAR = 365.25 * HALAKIM_PER_DAY
8
+
9
+ LUNAR_CYCLE = 29 * HALAKIM_PER_DAY + 12 * HALAKIM_PER_HOUR + 793
10
+ HALAKIM_PER_19_YEAR_CYCLE = 235 * LUNAR_CYCLE
11
+
12
+ JULIAN_ERROR_PER_19_YEAR_CYCLE = JULIAN_YEAR * 19 - HALAKIM_PER_19_YEAR_CYCLE
13
+ EPOCH_TEKUFAH = -(20 * HALAKIM_PER_HOUR + 302)
14
+
15
+ MOLAD_ZAQEN = 6 * HALAKIM_PER_HOUR
16
+ TUTAKPAT = 15 * HALAKIM_PER_HOUR + 589
17
+ TARAD = 9 * HALAKIM_PER_HOUR + 204
18
+ end
19
+
20
+ module HolidayConstants
21
+ SHAVUOT_DISTANCE = 50
22
+ SUKKOT_DISTANCE = 59 * 3
23
+ PURIM_DISTANCE = -30
24
+ FAST_AB_DISTANCE = 59 * 2 - 6
25
+ STANDARD_HANUKAH_DISTANCE = 59 * 4 + 10
26
+ STANDARD_10_TEVET_DISTANCE = 59 * 4 + 30 - 5
27
+ end
28
+ end
@@ -0,0 +1,4 @@
1
+ module HebCal
2
+ class Engine < Rails::Engine
3
+ end
4
+ end
@@ -0,0 +1,175 @@
1
+ require 'hebcal/holidaysHelper'
2
+
3
+ module HebCal
4
+ module Holidays
5
+ private
6
+ H = HolidaysHelper.new
7
+ public
8
+ def IsPesach date
9
+ H.InRange(H.DistanceToPassover(date), 0, 8)
10
+ end
11
+
12
+ def IsShavuot date
13
+ H.InRange(H.DistanceToPassover(date), HolidayConstants::SHAVUOT_DISTANCE, 2)
14
+ end
15
+
16
+ def IsRoshHashanah date
17
+ H.InRange(H.DistanceToPassover(date), HolidayConstants::SUKKOT_DISTANCE - 14, 2)
18
+ end
19
+
20
+ def IsRoshHaShanah date
21
+ IsRoshHashanah date
22
+ end
23
+
24
+ def IsYomKippur date
25
+ H.InRange(H.DistanceToPassover(date), HolidayConstants::SUKKOT_DISTANCE - 5, 1)
26
+ end
27
+
28
+ def IsSukkot date
29
+ H.InRange(H.DistanceToPassover(date), HolidayConstants::SUKKOT_DISTANCE, 9)
30
+ end
31
+
32
+ def IsMoed date
33
+ distance = H.DistanceToPassover(date)
34
+ H.InRange(distance, 2, 4) || H.InRange(distance, HolidayConstants::SUKKOT_DISTANCE + 2, 5)
35
+ end
36
+
37
+ def IsRegel date
38
+ distance = H.DistanceToPassover(date)
39
+ H.InRange(distance, 0, 8) || H.InRange(distance, HolidayConstants::SHAVUOT_DISTANCE, 2) || H.InRange(distance, HolidayConstants::SUKKOT_DISTANCE, 9)
40
+ end
41
+
42
+ def IsYomTov date
43
+ # Note that Yom Kippur is not a Yom Tov
44
+ distance = H.DistanceToPassover(date)
45
+ result = H.InRange(distance, 0, 2) || H.InRange(distance, 6, 2) || H.InRange(distance, HolidayConstants::SHAVUOT_DISTANCE, 2) || H.InRange(distance, HolidayConstants::SUKKOT_DISTANCE - 14, 2) || H.InRange(distance, HolidayConstants::SUKKOT_DISTANCE, 2) || H.InRange(distance, HolidayConstants::SUKKOT_DISTANCE + 7, 2)
46
+ end
47
+
48
+ def IsPurim date
49
+ H.InRange(H.DistanceToPassover(date), HolidayConstants::PURIM_DISTANCE, 1)
50
+ end
51
+
52
+ def IsHanukah date
53
+ hash = H.PesachAndYearLength date
54
+ distance = HolidayConstants::STANDARD_HANUKAH_DISTANCE
55
+ distance = distance + 1 if [355, 385].include?(hash[:length])
56
+ H.InRange(H.Distance(hash[:pesach], date), distance, 8)
57
+ end
58
+
59
+ def IsHanukkah date
60
+ IsHanukah date
61
+ end
62
+
63
+ def IsHanuka date
64
+ IsHanukah date
65
+ end
66
+
67
+ def IsHanukka date
68
+ IsHanukah date
69
+ end
70
+
71
+ def IsChanukah date
72
+ IsHanukah date
73
+ end
74
+
75
+ def IsChanukkah date
76
+ IsHanukah date
77
+ end
78
+
79
+ def IsChanuka date
80
+ IsHanukah date
81
+ end
82
+
83
+ def IsChanukka date
84
+ IsHanukah date
85
+ end
86
+
87
+ def Is10Tevet date
88
+ hash = H.PesachAndYearLength date
89
+ distance = HolidayConstants::STANDARD_10_TEVET_DISTANCE
90
+ distance = distance - 1 if [353, 383].include?(hash[:length])
91
+ distance = distance + 1 if [355, 385].include?(hash[:length])
92
+ H.InRange(H.Distance(hash[:pesach], date), distance, 1)
93
+ end
94
+
95
+ def IsTaanitEster date
96
+ (6 != date.wday && H.InRange(H.DistanceToPassover(date), HolidayConstants::PURIM_DISTANCE - 1, 1)) || (4 == date.wday && H.InRange(H.DistanceToPassover(date), HolidayConstants::PURIM_DISTANCE - 3, 1))
97
+ end
98
+
99
+ def IsTaanitEsther date
100
+ IsTaanitEster date
101
+ end
102
+
103
+ def IsFastWithSundayPostponement date, distance
104
+ (6 != date.wday && H.InRange(H.DistanceToPassover(date), distance, 1)) || (0 == date.wday && H.InRange(H.DistanceToPassover(date), distance + 1, 1))
105
+ end
106
+
107
+ def Is9Ab date
108
+ IsFastWithSundayPostponement date, HolidayConstants::FAST_AB_DISTANCE
109
+ end
110
+
111
+ def Is9Av date
112
+ Is9Ab date
113
+ end
114
+
115
+ def Is17Tammuz date
116
+ IsFastWithSundayPostponement date, HolidayConstants::FAST_AB_DISTANCE - 21
117
+ end
118
+
119
+ def Is17Tamuz date
120
+ Is17Tammuz date
121
+ end
122
+
123
+ def IsFastOfGedalia date
124
+ IsFastWithSundayPostponement date, HolidayConstants::SUKKOT_DISTANCE - 12
125
+ end
126
+
127
+ def IsFastOfGedaliah date
128
+ IsFastOfGedalia date
129
+ end
130
+
131
+ def IsTzomGedalia date
132
+ IsFastOfGedalia date
133
+ end
134
+
135
+ def IsTzomGedaliah date
136
+ IsFastOfGedalia date
137
+ end
138
+
139
+ def IsTaanit date
140
+ return false if 6 == date.wday
141
+ distance = H.DistanceToPassover(date)
142
+ H.InRange(distance, HolidayConstants::FAST_AB_DISTANCE, 1) || H.InRange(distance, HolidayConstants::FAST_AB_DISTANCE - 21, 1) || H.InRange(distance, HolidayConstants::SUKKOT_DISTANCE - 12, 1) || H.InRange(distance, HolidayConstants::PURIM_DISTANCE - 1, 1) || (0 == date.wday && (H.InRange(distance, HolidayConstants::FAST_AB_DISTANCE + 1, 1) || H.InRange(distance, HolidayConstants::FAST_AB_DISTANCE - 21 + 1, 1) || H.InRange(distance, HolidayConstants::SUKKOT_DISTANCE - 12 + 1, 1))) || (4 == date.wday && H.InRange(distance, HolidayConstants::PURIM_DISTANCE - 3, 1)) || Is10Tevet(date)
143
+ end
144
+
145
+ def IsRoshHodesh date
146
+ hash = H.PesachAndYearLength date
147
+ distance = H.Distance(hash[:pesach], date)
148
+ length = hash[:length]
149
+ distances = [ -59 + 15, -59 + 16, -59 + 30 + 15] # Adar(2) Nisan
150
+ distances.concat [ 15, 16, 30 + 15] # Iyar Sivan
151
+ distances.concat [ 59 + 15, 59 + 16, 59 + 30 + 15] # Tamuz Ab
152
+ distances.concat [2 * 59 + 15, 2 * 59 + 16] # Elul
153
+ distances.concat [3 * 59 + 15, 3 * 59 + 16, 3 * 59 + 30 + 15] # Heshvan, 1st day Kislev
154
+ if [353, 383].include? length then
155
+ distances.concat [4 * 59 + 15] # Tevet
156
+ distances.concat [4 * 59 + 30 + 14] # Shevat
157
+ distances.concat [5 * 59 + 14, 5 * 59 + 15] if 383 == length # Adar1
158
+ elsif [354, 384].include? length then
159
+ distances.concat [4 * 59 + 15, 4 * 59 + 16] # Tevet
160
+ distances.concat [4 * 59 + 30 + 15] # Shevat
161
+ distances.concat [5 * 59 + 15, 5 * 59 + 16] if 384 == length # Adar1
162
+ elsif [355, 385].include? length then
163
+ distances.concat [3 * 59 + 30 + 16] # 2nd day Kislev
164
+ distances.concat [4 * 59 + 16, 4 * 59 + 17] # Tevet
165
+ distances.concat [4 * 59 + 30 + 16] # Shevat
166
+ distances.concat [5 * 59 + 16, 5 * 59 + 17] if 385 == length # Adar1
167
+ end
168
+ distances.include? distance
169
+ end
170
+
171
+ def IsRoshChodesh date
172
+ IsRoshHodesh date
173
+ end
174
+ end
175
+ end
@@ -0,0 +1,33 @@
1
+ require 'hebcal/passover'
2
+
3
+ module HebCal
4
+ class HolidaysHelper
5
+ include Passover
6
+
7
+ def Distance date1, date2
8
+ date1 = (date1 + 60*60) if (!date2.dst? && date1.dst?)
9
+ date2 = (date2 + 60*60) if (date2.dst? && !date1.dst?)
10
+ (date2 - date1) / 24 / 60 / 60
11
+ end
12
+
13
+ def DistanceToPassover date
14
+ Distance WhenIsPesach(date.year), date
15
+ end
16
+
17
+ def InRange distance, start, length
18
+ (distance >= start) && (distance <= start + length - 1)
19
+ end
20
+
21
+ def PesachAndYearLength date
22
+ pesach1 = WhenIsPesach(date.year)
23
+ if (Distance(pesach1, date) < -59) then
24
+ pesach2 = pesach1
25
+ pesach1 = WhenIsPesach(pesach1.year - 1)
26
+ else
27
+ pesach2 = WhenIsPesach(pesach1.year + 1)
28
+ end
29
+ length = Distance pesach1, pesach2
30
+ { :pesach => pesach1, :length => length}
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,37 @@
1
+ require 'hebcal/constants'
2
+ require 'hebcal/passoverHelper'
3
+
4
+ module HebCal
5
+ module Passover
6
+ def WhenIsPesach yearG
7
+ _HPD = PassoverConstants::HALAKIM_PER_DAY
8
+ _MZ = PassoverConstants::MOLAD_ZAQEN
9
+
10
+ # CALCULATE MOLAD
11
+ yearH = yearG + 3760
12
+ year_in_julian_cycle = yearG % 4
13
+ molad = PassoverHelper::CalculateMolad yearH
14
+ halakim_into_day = molad % _HPD
15
+
16
+ # CALCULATE CALENDAR DATE OF PESACH
17
+ gregorian_divergence = (yearG/100).floor - (yearG/400).floor - 2
18
+ pesach_julian_day = (molad - halakim_into_day) / _HPD
19
+
20
+ day_of_week = ((3 * yearG) + (5 * year_in_julian_cycle) + pesach_julian_day) % 7
21
+ pesach_day = pesach_julian_day + gregorian_divergence
22
+
23
+ if [1,3,5].include? day_of_week then
24
+ pesach_day += 1
25
+ elsif (0 == day_of_week && !PassoverHelper::PrecedesLeapYear(yearH) && halakim_into_day >= PassoverConstants::TARAD + _MZ)
26
+ pesach_day += 2
27
+ elsif (6 == day_of_week && PassoverHelper::IsLeapYear(yearH) && halakim_into_day >= PassoverConstants::TUTAKPAT + _MZ)
28
+ pesach_day += 1
29
+ end
30
+
31
+ pesach_month = 3
32
+
33
+ pesach = Time.new(yearG, pesach_month, 1) + (pesach_day - 1) * 24 * 60 * 60
34
+ pesach.dst? ? pesach - 60 * 60 : pesach
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,23 @@
1
+ require 'hebcal/constants'
2
+
3
+ module HebCal
4
+ module PassoverHelper
5
+ def PassoverHelper.IsLeapYear year
6
+ [3,6,8,11,14,17,19].include? (year % 19)
7
+ end
8
+
9
+ def PassoverHelper.PrecedesLeapYear year
10
+ IsLeapYear(year+1)
11
+ end
12
+
13
+ def PassoverHelper.CalculateMolad yearH
14
+ _HPD = PassoverConstants::HALAKIM_PER_DAY
15
+ _LC = PassoverConstants::LUNAR_CYCLE
16
+
17
+ year_in_julian_cycle = yearH % 4
18
+ drift_since_epoch = (_LC + PassoverConstants::EPOCH_TEKUFAH + (_LC - PassoverConstants::ANNUAL_DRIFT) * (yearH % 19) - _HPD) % _LC
19
+
20
+ _LC + _HPD + PassoverConstants::MOLAD_ZAQEN + drift_since_epoch + (year_in_julian_cycle * PassoverConstants::JULIAN_ANNUAL_CALENDAR_DRIFT) - (PassoverConstants::JULIAN_ERROR_PER_19_YEAR_CYCLE * (yearH / 19).floor)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,3 @@
1
+ module HebCal
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,782 @@
1
+ require 'hebcal/holidays'
2
+
3
+ describe "holiday test" do
4
+ include HebCal::Holidays
5
+
6
+ it "should know when Pesach is" do
7
+ IsPesach(Time.new(2012, 4, 6)).should == false
8
+ IsPesach(Time.new(2012, 4, 7)).should == true
9
+ IsPesach(Time.new(2012, 4, 8)).should == true
10
+ IsPesach(Time.new(2012, 4, 9)).should == true
11
+ IsPesach(Time.new(2012, 4, 10)).should == true
12
+ IsPesach(Time.new(2012, 4, 11)).should == true
13
+ IsPesach(Time.new(2012, 4, 12)).should == true
14
+ IsPesach(Time.new(2012, 4, 13)).should == true
15
+ IsPesach(Time.new(2012, 4, 14)).should == true
16
+ IsPesach(Time.new(2012, 4, 15)).should == false
17
+ end
18
+
19
+ it "should know when Shavuot is" do
20
+ IsShavuot(Time.new(2012, 5, 26)).should == false
21
+ IsShavuot(Time.new(2012, 5, 27)).should == true
22
+ IsShavuot(Time.new(2012, 5, 28)).should == true
23
+ IsShavuot(Time.new(2012, 5, 29)).should == false
24
+ end
25
+
26
+ it "should know when Rosh HaShanah is" do
27
+ IsRoshHaShanah(Time.new(2012, 9, 16)).should == false
28
+ IsRoshHashanah(Time.new(2012, 9, 17)).should == true
29
+ IsRoshHaShanah(Time.new(2012, 9, 18)).should == true
30
+ IsRoshHashanah(Time.new(2012, 9, 19)).should == false
31
+ end
32
+
33
+ it "should know when Yom Kippur is" do
34
+ IsYomKippur(Time.new(2012, 9, 25)).should == false
35
+ IsYomKippur(Time.new(2012, 9, 26)).should == true
36
+ IsYomKippur(Time.new(2012, 9, 27)).should == false
37
+ end
38
+
39
+ it "should know when Sukkot is" do
40
+ IsSukkot(Time.new(2012, 9, 30)).should == false
41
+ IsSukkot(Time.new(2012, 10, 1)).should == true
42
+ IsSukkot(Time.new(2012, 10, 2)).should == true
43
+ IsSukkot(Time.new(2012, 10, 3)).should == true
44
+ IsSukkot(Time.new(2012, 10, 4)).should == true
45
+ IsSukkot(Time.new(2012, 10, 5)).should == true
46
+ IsSukkot(Time.new(2012, 10, 6)).should == true
47
+ IsSukkot(Time.new(2012, 10, 7)).should == true
48
+ IsSukkot(Time.new(2012, 10, 8)).should == true
49
+ IsSukkot(Time.new(2012, 10, 9)).should == true
50
+ IsSukkot(Time.new(2012, 10, 10)).should == false
51
+ end
52
+
53
+ it "should know which parts of Pesach are Moed" do
54
+ IsMoed(Time.new(2012, 4, 6)).should == false
55
+ IsMoed(Time.new(2012, 4, 7)).should == false
56
+ IsMoed(Time.new(2012, 4, 8)).should == false
57
+ IsMoed(Time.new(2012, 4, 9)).should == true
58
+ IsMoed(Time.new(2012, 4, 10)).should == true
59
+ IsMoed(Time.new(2012, 4, 11)).should == true
60
+ IsMoed(Time.new(2012, 4, 12)).should == true
61
+ IsMoed(Time.new(2012, 4, 13)).should == false
62
+ IsMoed(Time.new(2012, 4, 14)).should == false
63
+ IsMoed(Time.new(2012, 4, 15)).should == false
64
+ end
65
+
66
+ it "should know that Shavuot is not a Moed" do
67
+ IsMoed(Time.new(2012, 5, 26)).should == false
68
+ IsMoed(Time.new(2012, 5, 27)).should == false
69
+ IsMoed(Time.new(2012, 5, 28)).should == false
70
+ IsMoed(Time.new(2012, 5, 29)).should == false
71
+ end
72
+
73
+ it "should know that Rosh HaShanah is not a Moed" do
74
+ IsMoed(Time.new(2012, 9, 16)).should == false
75
+ IsMoed(Time.new(2012, 9, 17)).should == false
76
+ IsMoed(Time.new(2012, 9, 18)).should == false
77
+ IsMoed(Time.new(2012, 9, 19)).should == false
78
+ end
79
+
80
+ it "should know that Yom Kippur is not a Moed" do
81
+ IsMoed(Time.new(2012, 9, 25)).should == false
82
+ IsMoed(Time.new(2012, 9, 26)).should == false
83
+ IsMoed(Time.new(2012, 9, 27)).should == false
84
+ end
85
+
86
+ it "should know which parts of Sukkot are Moed" do
87
+ IsMoed(Time.new(2012, 9, 30)).should == false
88
+ IsMoed(Time.new(2012, 10, 1)).should == false
89
+ IsMoed(Time.new(2012, 10, 2)).should == false
90
+ IsMoed(Time.new(2012, 10, 3)).should == true
91
+ IsMoed(Time.new(2012, 10, 4)).should == true
92
+ IsMoed(Time.new(2012, 10, 5)).should == true
93
+ IsMoed(Time.new(2012, 10, 6)).should == true
94
+ IsMoed(Time.new(2012, 10, 7)).should == true
95
+ IsMoed(Time.new(2012, 10, 8)).should == false
96
+ IsMoed(Time.new(2012, 10, 9)).should == false
97
+ IsMoed(Time.new(2012, 10, 10)).should == false
98
+ end
99
+
100
+ it "should know that Pesach is a Regel" do
101
+ IsRegel(Time.new(2012, 4, 6)).should == false
102
+ IsRegel(Time.new(2012, 4, 7)).should == true
103
+ IsRegel(Time.new(2012, 4, 8)).should == true
104
+ IsRegel(Time.new(2012, 4, 9)).should == true
105
+ IsRegel(Time.new(2012, 4, 10)).should == true
106
+ IsRegel(Time.new(2012, 4, 11)).should == true
107
+ IsRegel(Time.new(2012, 4, 12)).should == true
108
+ IsRegel(Time.new(2012, 4, 13)).should == true
109
+ IsRegel(Time.new(2012, 4, 14)).should == true
110
+ IsRegel(Time.new(2012, 4, 15)).should == false
111
+ end
112
+
113
+ it "should know that Shavuot is a Regel" do
114
+ IsRegel(Time.new(2012, 5, 26)).should == false
115
+ IsRegel(Time.new(2012, 5, 27)).should == true
116
+ IsRegel(Time.new(2012, 5, 28)).should == true
117
+ IsRegel(Time.new(2012, 5, 29)).should == false
118
+ end
119
+
120
+ it "should know that Rosh HaShanah is not a Regel" do
121
+ IsRegel(Time.new(2012, 9, 16)).should == false
122
+ IsRegel(Time.new(2012, 9, 17)).should == false
123
+ IsRegel(Time.new(2012, 9, 18)).should == false
124
+ IsRegel(Time.new(2012, 9, 19)).should == false
125
+ end
126
+
127
+ it "should know that Yom Kippur is not a Regel" do
128
+ IsRegel(Time.new(2012, 9, 25)).should == false
129
+ IsRegel(Time.new(2012, 9, 26)).should == false
130
+ IsRegel(Time.new(2012, 9, 27)).should == false
131
+ end
132
+
133
+ it "should know that Sukkot is a Regel" do
134
+ IsRegel(Time.new(2012, 9, 30)).should == false
135
+ IsRegel(Time.new(2012, 10, 1)).should == true
136
+ IsRegel(Time.new(2012, 10, 2)).should == true
137
+ IsRegel(Time.new(2012, 10, 3)).should == true
138
+ IsRegel(Time.new(2012, 10, 4)).should == true
139
+ IsRegel(Time.new(2012, 10, 5)).should == true
140
+ IsRegel(Time.new(2012, 10, 6)).should == true
141
+ IsRegel(Time.new(2012, 10, 7)).should == true
142
+ IsRegel(Time.new(2012, 10, 8)).should == true
143
+ IsRegel(Time.new(2012, 10, 9)).should == true
144
+ IsRegel(Time.new(2012, 10, 10)).should == false
145
+ end
146
+
147
+ it "should know which parts of Pesach are Yom Tov" do
148
+ IsYomTov(Time.new(2012, 4, 6)).should == false
149
+ IsYomTov(Time.new(2012, 4, 7)).should == true
150
+ IsYomTov(Time.new(2012, 4, 8)).should == true
151
+ IsYomTov(Time.new(2012, 4, 9)).should == false
152
+ IsYomTov(Time.new(2012, 4, 10)).should == false
153
+ IsYomTov(Time.new(2012, 4, 11)).should == false
154
+ IsYomTov(Time.new(2012, 4, 12)).should == false
155
+ IsYomTov(Time.new(2012, 4, 13)).should == true
156
+ IsYomTov(Time.new(2012, 4, 14)).should == true
157
+ IsYomTov(Time.new(2012, 4, 15)).should == false
158
+ end
159
+
160
+ it "should know that Shavuot is Yom Tov" do
161
+ IsYomTov(Time.new(2012, 5, 26)).should == false
162
+ IsYomTov(Time.new(2012, 5, 27)).should == true
163
+ IsYomTov(Time.new(2012, 5, 28)).should == true
164
+ IsYomTov(Time.new(2012, 5, 29)).should == false
165
+ end
166
+
167
+ it "should know that Rosh HaShanah is Yom Tov" do
168
+ IsYomTov(Time.new(2012, 9, 16)).should == false
169
+ IsYomTov(Time.new(2012, 9, 17)).should == true
170
+ IsYomTov(Time.new(2012, 9, 18)).should == true
171
+ IsYomTov(Time.new(2012, 9, 19)).should == false
172
+ end
173
+
174
+ it "should know that Yom Kippur is not Yom Tov" do
175
+ IsYomTov(Time.new(2012, 9, 25)).should == false
176
+ IsYomTov(Time.new(2012, 9, 26)).should == false
177
+ IsYomTov(Time.new(2012, 9, 27)).should == false
178
+ end
179
+
180
+ it "should know which parts of Sukkot are Yom Tov" do
181
+ IsYomTov(Time.new(2012, 9, 30)).should == false
182
+ IsYomTov(Time.new(2012, 10, 1)).should == true
183
+ IsYomTov(Time.new(2012, 10, 2)).should == true
184
+ IsYomTov(Time.new(2012, 10, 3)).should == false
185
+ IsYomTov(Time.new(2012, 10, 4)).should == false
186
+ IsYomTov(Time.new(2012, 10, 5)).should == false
187
+ IsYomTov(Time.new(2012, 10, 6)).should == false
188
+ IsYomTov(Time.new(2012, 10, 7)).should == false
189
+ IsYomTov(Time.new(2012, 10, 8)).should == true
190
+ IsYomTov(Time.new(2012, 10, 9)).should == true
191
+ IsYomTov(Time.new(2012, 10, 10)).should == false
192
+ end
193
+
194
+ it "should know when Purim is" do
195
+ IsPurim(Time.new(2015, 3, 4)).should == false
196
+ IsPurim(Time.new(2015, 3, 5)).should == true
197
+ IsPurim(Time.new(2015, 3, 6)).should == false
198
+ end
199
+
200
+ it "should know when Hanukah is in a 353 day year" do
201
+ IsHanuka(Time.new(2043, 12, 26)).should == false
202
+ IsHanukah(Time.new(2043, 12, 27)).should == true
203
+ IsHanukka(Time.new(2043, 12, 28)).should == true
204
+ IsHanukkah(Time.new(2043, 12, 29)).should == true
205
+ IsChanuka(Time.new(2043, 12, 30)).should == true
206
+ IsChanukka(Time.new(2043, 12, 31)).should == true
207
+ IsChanukah(Time.new(2044, 1, 1)).should == true
208
+ IsChanukka(Time.new(2044, 1, 2)).should == true
209
+ IsHanukka(Time.new(2044, 1, 3)).should == true
210
+ IsHanukka(Time.new(2044, 1, 4)).should == false
211
+ end
212
+
213
+ it "should know when Hanukah is in a 354 day year" do
214
+ IsHanuka(Time.new(2014, 12, 16)).should == false
215
+ IsHanukah(Time.new(2014, 12, 17)).should == true
216
+ IsHanukka(Time.new(2014, 12, 18)).should == true
217
+ IsHanukkah(Time.new(2014, 12, 19)).should == true
218
+ IsChanuka(Time.new(2014, 12, 20)).should == true
219
+ IsChanukah(Time.new(2014, 12, 21)).should == true
220
+ IsChanukka(Time.new(2014, 12, 22)).should == true
221
+ IsChanukkah(Time.new(2014, 12, 23)).should == true
222
+ IsHanukka(Time.new(2014, 12, 24)).should == true
223
+ IsHanukka(Time.new(2014, 12, 25)).should == false
224
+ end
225
+
226
+ it "should know when Hanukah is in a 355 day year" do
227
+ IsHanuka(Time.new(2019, 12, 22)).should == false
228
+ IsHanukah(Time.new(2019, 12, 23)).should == true
229
+ IsHanukka(Time.new(2019, 12, 24)).should == true
230
+ IsHanukkah(Time.new(2019, 12, 25)).should == true
231
+ IsChanuka(Time.new(2019, 12, 26)).should == true
232
+ IsChanukah(Time.new(2019, 12, 27)).should == true
233
+ IsChanukka(Time.new(2019, 12, 28)).should == true
234
+ IsChanukkah(Time.new(2019, 12, 29)).should == true
235
+ IsHanukka(Time.new(2019, 12, 30)).should == true
236
+ IsHanukka(Time.new(2019, 12, 31)).should == false
237
+ end
238
+
239
+ it "should know when Hanukah is in a 383 day year" do
240
+ IsHanuka(Time.new(2023, 12, 7)).should == false
241
+ IsHanukah(Time.new(2023, 12, 8)).should == true
242
+ IsHanukka(Time.new(2023, 12, 9)).should == true
243
+ IsHanukkah(Time.new(2023, 12, 10)).should == true
244
+ IsChanuka(Time.new(2023, 12, 11)).should == true
245
+ IsChanukah(Time.new(2023, 12, 12)).should == true
246
+ IsChanukka(Time.new(2023, 12, 13)).should == true
247
+ IsChanukkah(Time.new(2023, 12, 14)).should == true
248
+ IsHanukka(Time.new(2023, 12, 15)).should == true
249
+ IsHanukka(Time.new(2023, 12, 16)).should == false
250
+ end
251
+
252
+ it "should know when Hanukah is in a 384 day year" do
253
+ IsHanuka(Time.new(2021, 11, 28)).should == false
254
+ IsHanukah(Time.new(2021, 11, 29)).should == true
255
+ IsHanukka(Time.new(2021, 11, 30)).should == true
256
+ IsHanukkah(Time.new(2021, 12, 1)).should == true
257
+ IsChanuka(Time.new(2021, 12, 2)).should == true
258
+ IsChanukah(Time.new(2021, 12, 3)).should == true
259
+ IsChanukka(Time.new(2021, 12, 4)).should == true
260
+ IsChanukkah(Time.new(2021, 12, 5)).should == true
261
+ IsHanukka(Time.new(2021, 12, 6)).should == true
262
+ IsHanukka(Time.new(2021, 12, 7)).should == false
263
+ end
264
+
265
+ it "should know when Hanukah is in a 385 day year" do
266
+ IsHanuka(Time.new(2015, 12, 6)).should == false
267
+ IsHanukah(Time.new(2015, 12, 7)).should == true
268
+ IsHanukka(Time.new(2015, 12, 8)).should == true
269
+ IsHanukkah(Time.new(2015, 12, 9)).should == true
270
+ IsChanuka(Time.new(2015, 12, 10)).should == true
271
+ IsChanukah(Time.new(2015, 12, 11)).should == true
272
+ IsChanukka(Time.new(2015, 12, 12)).should == true
273
+ IsChanukkah(Time.new(2015, 12, 13)).should == true
274
+ IsHanukka(Time.new(2015, 12, 14)).should == true
275
+ IsHanukka(Time.new(2015, 12, 15)).should == false
276
+ end
277
+
278
+ it "should know when 10 Tevet is in a 353 day year" do
279
+ Is10Tevet(Time.new(2044, 1, 9)).should == false
280
+ Is10Tevet(Time.new(2044, 1, 10)).should == true
281
+ Is10Tevet(Time.new(2044, 1, 11)).should == false
282
+ end
283
+
284
+ it "should know when 10 Tevet is in a 354 day year" do
285
+ Is10Tevet(Time.new(2014, 12, 31)).should == false
286
+ Is10Tevet(Time.new(2015, 1, 1)).should == true
287
+ Is10Tevet(Time.new(2015, 1, 2)).should == false
288
+ end
289
+
290
+ it "should know when 10 Tevet is in a 355 day year" do
291
+ Is10Tevet(Time.new(2020, 1, 6)).should == false
292
+ Is10Tevet(Time.new(2020, 1, 7)).should == true
293
+ Is10Tevet(Time.new(2020, 1, 8)).should == false
294
+ end
295
+
296
+ it "should know when 10 Tevet is in a 383 day year" do
297
+ Is10Tevet(Time.new(2023, 12, 21)).should == false
298
+ Is10Tevet(Time.new(2023, 12, 22)).should == true
299
+ Is10Tevet(Time.new(2023, 12, 23)).should == false
300
+ end
301
+
302
+ it "should know when 10 Tevet is in a 384 day year" do
303
+ Is10Tevet(Time.new(2021, 12, 13)).should == false
304
+ Is10Tevet(Time.new(2021, 12, 14)).should == true
305
+ Is10Tevet(Time.new(2021, 12, 15)).should == false
306
+ end
307
+
308
+ it "should know when 10 Tevet is in a 385 day year" do
309
+ Is10Tevet(Time.new(2015, 12, 21)).should == false
310
+ Is10Tevet(Time.new(2015, 12, 22)).should == true
311
+ Is10Tevet(Time.new(2015, 12, 23)).should == false
312
+ end
313
+
314
+ it "should know when Taanit Ester is on a Monday" do
315
+ IsTaanitEster(Time.new(2020, 3, 8)).should == false
316
+ IsTaanitEster(Time.new(2020, 3, 9)).should == true
317
+ IsTaanitEsther(Time.new(2020, 3, 10)).should == false
318
+ end
319
+
320
+ it "should know when Taanit Ester is on a Wednesday" do
321
+ IsTaanitEster(Time.new(2022, 3, 15)).should == false
322
+ IsTaanitEster(Time.new(2022, 3, 16)).should == true
323
+ IsTaanitEsther(Time.new(2022, 3, 17)).should == false
324
+ end
325
+
326
+ it "should know when Taanit Ester is on a Thursday when Purim is on a Friday" do
327
+ IsTaanitEster(Time.new(2021, 2, 24)).should == false
328
+ IsTaanitEster(Time.new(2021, 2, 25)).should == true
329
+ IsTaanitEsther(Time.new(2021, 2, 26)).should == false
330
+ end
331
+
332
+ it "should know when Taanit Ester is on a Thursday when Purim is on a Sunday" do
333
+ IsTaanitEster(Time.new(2024, 3, 20)).should == false
334
+ IsTaanitEster(Time.new(2024, 3, 21)).should == true
335
+ IsTaanitEsther(Time.new(2024, 3, 22)).should == false
336
+ IsTaanitEsther(Time.new(2024, 3, 23)).should == false
337
+ IsTaanitEsther(Time.new(2024, 3, 24)).should == false
338
+ end
339
+
340
+ it "should know when 17 Tammuz is on a Tuesday" do
341
+ Is17Tamuz(Time.new(2024, 7, 22)).should == false
342
+ Is17Tammuz(Time.new(2024, 7, 23)).should == true
343
+ Is17Tamuz(Time.new(2024, 7, 24)).should == false
344
+ end
345
+
346
+ it "should know when 17 Tammuz is on a Thursday" do
347
+ Is17Tammuz(Time.new(2023, 7, 5)).should == false
348
+ Is17Tamuz(Time.new(2023, 7, 6)).should == true
349
+ Is17Tammuz(Time.new(2023, 7, 7)).should == false
350
+ end
351
+
352
+ it "should know when 17 Tammuz is on a Sunday when not postponed" do
353
+ Is17Tamuz(Time.new(2021, 6, 26)).should == false
354
+ Is17Tammuz(Time.new(2021, 6, 27)).should == true
355
+ Is17Tamuz(Time.new(2021, 6, 28)).should == false
356
+ end
357
+
358
+ it "should know when 17 Tammuz is on a Sunday when postponed" do
359
+ Is17Tammuz(Time.new(2022, 7, 15)).should == false
360
+ Is17Tamuz(Time.new(2022, 7, 16)).should == false
361
+ Is17Tammuz(Time.new(2022, 7, 17)).should == true
362
+ Is17Tamuz(Time.new(2022, 7, 18)).should == false
363
+ end
364
+
365
+ it "should know when 9 Ab is on a Tuesday" do
366
+ Is9Ab(Time.new(2024, 8, 12)).should == false
367
+ Is9Av(Time.new(2024, 8, 13)).should == true
368
+ Is9Ab(Time.new(2024, 8, 14)).should == false
369
+ end
370
+
371
+ it "should know when 9 Ab is on a Thursday" do
372
+ Is9Av(Time.new(2023, 7, 26)).should == false
373
+ Is9Ab(Time.new(2023, 7, 27)).should == true
374
+ Is9Av(Time.new(2023, 7, 28)).should == false
375
+ end
376
+
377
+ it "should know when 9 Ab is on a Sunday when not postponed" do
378
+ Is9Ab(Time.new(2021, 7, 17)).should == false
379
+ Is9Av(Time.new(2021, 7, 18)).should == true
380
+ Is9Ab(Time.new(2021, 7, 19)).should == false
381
+ end
382
+
383
+ it "should know when 9 Ab is on a Sunday when postponed" do
384
+ Is9Av(Time.new(2022, 8, 5)).should == false
385
+ Is9Ab(Time.new(2022, 8, 6)).should == false
386
+ Is9Av(Time.new(2022, 8, 7)).should == true
387
+ Is9Ab(Time.new(2022, 8, 8)).should == false
388
+ end
389
+
390
+ it "should know when Tzom Gedalia is on a Monday" do
391
+ IsFastOfGedalia(Time.new(2023, 9, 17)).should == false
392
+ IsFastOfGedaliah(Time.new(2023, 9, 18)).should == true
393
+ IsTzomGedalia(Time.new(2023, 9, 19)).should == false
394
+ end
395
+
396
+ it "should know when Tzom Gedalia is on a Wednesday" do
397
+ IsTzomGedaliah(Time.new(2022, 9, 27)).should == false
398
+ IsFastOfGedalia(Time.new(2022, 9, 28)).should == true
399
+ IsFastOfGedaliah(Time.new(2022, 9, 29)).should == false
400
+ end
401
+
402
+ it "should know when Tzom Gedalia is on a Thursday" do
403
+ IsTzomGedalia(Time.new(2021, 9, 8)).should == false
404
+ IsTzomGedaliah(Time.new(2021, 9, 9)).should == true
405
+ IsFastOfGedalia(Time.new(2021, 9, 10)).should == false
406
+ end
407
+
408
+ it "should know when Tzom Gedalia is on a Sunday when postponed" do
409
+ IsFastOfGedaliah(Time.new(2017, 9, 22)).should == false
410
+ IsTzomGedalia(Time.new(2017, 9, 23)).should == false
411
+ IsTzomGedaliah(Time.new(2017, 9, 24)).should == true
412
+ IsFastOfGedalia(Time.new(2017, 9, 25)).should == false
413
+ end
414
+
415
+ it "should know that 10 Tevet is a Taanit" do
416
+ IsTaanit(Time.new(2044, 1, 9)).should == false
417
+ IsTaanit(Time.new(2044, 1, 10)).should == true
418
+ IsTaanit(Time.new(2044, 1, 11)).should == false
419
+ IsTaanit(Time.new(2014, 12, 31)).should == false
420
+ IsTaanit(Time.new(2015, 1, 1)).should == true
421
+ IsTaanit(Time.new(2015, 1, 2)).should == false
422
+ IsTaanit(Time.new(2020, 1, 6)).should == false
423
+ IsTaanit(Time.new(2020, 1, 7)).should == true
424
+ IsTaanit(Time.new(2020, 1, 8)).should == false
425
+ IsTaanit(Time.new(2023, 12, 21)).should == false
426
+ IsTaanit(Time.new(2023, 12, 22)).should == true
427
+ IsTaanit(Time.new(2023, 12, 23)).should == false
428
+ IsTaanit(Time.new(2021, 12, 13)).should == false
429
+ IsTaanit(Time.new(2021, 12, 14)).should == true
430
+ IsTaanit(Time.new(2021, 12, 15)).should == false
431
+ IsTaanit(Time.new(2015, 12, 21)).should == false
432
+ IsTaanit(Time.new(2015, 12, 22)).should == true
433
+ IsTaanit(Time.new(2015, 12, 23)).should == false
434
+ end
435
+
436
+ it "should know that Taanit Ester is a Taanit" do
437
+ IsTaanit(Time.new(2020, 3, 8)).should == false
438
+ IsTaanit(Time.new(2020, 3, 9)).should == true
439
+ IsTaanit(Time.new(2020, 3, 10)).should == false
440
+ IsTaanit(Time.new(2022, 3, 15)).should == false
441
+ IsTaanit(Time.new(2022, 3, 16)).should == true
442
+ IsTaanit(Time.new(2022, 3, 17)).should == false
443
+ IsTaanit(Time.new(2021, 2, 24)).should == false
444
+ IsTaanit(Time.new(2021, 2, 25)).should == true
445
+ IsTaanit(Time.new(2021, 2, 26)).should == false
446
+ IsTaanit(Time.new(2024, 3, 20)).should == false
447
+ IsTaanit(Time.new(2024, 3, 21)).should == true
448
+ IsTaanit(Time.new(2024, 3, 22)).should == false
449
+ IsTaanit(Time.new(2024, 3, 23)).should == false
450
+ IsTaanit(Time.new(2024, 3, 24)).should == false
451
+ end
452
+
453
+ it "should know that 17 Tammuz is a Taanit" do
454
+ IsTaanit(Time.new(2024, 7, 22)).should == false
455
+ IsTaanit(Time.new(2024, 7, 23)).should == true
456
+ IsTaanit(Time.new(2024, 7, 24)).should == false
457
+ IsTaanit(Time.new(2023, 7, 5)).should == false
458
+ IsTaanit(Time.new(2023, 7, 6)).should == true
459
+ IsTaanit(Time.new(2023, 7, 7)).should == false
460
+ IsTaanit(Time.new(2021, 6, 26)).should == false
461
+ IsTaanit(Time.new(2021, 6, 27)).should == true
462
+ IsTaanit(Time.new(2021, 6, 28)).should == false
463
+ IsTaanit(Time.new(2022, 7, 15)).should == false
464
+ IsTaanit(Time.new(2022, 7, 16)).should == false
465
+ IsTaanit(Time.new(2022, 7, 17)).should == true
466
+ IsTaanit(Time.new(2022, 7, 18)).should == false
467
+ end
468
+
469
+ it "should know that 9 Ab is a Taanit" do
470
+ IsTaanit(Time.new(2024, 8, 12)).should == false
471
+ IsTaanit(Time.new(2024, 8, 13)).should == true
472
+ IsTaanit(Time.new(2024, 8, 14)).should == false
473
+ IsTaanit(Time.new(2023, 7, 26)).should == false
474
+ IsTaanit(Time.new(2023, 7, 27)).should == true
475
+ IsTaanit(Time.new(2023, 7, 28)).should == false
476
+ IsTaanit(Time.new(2021, 7, 17)).should == false
477
+ IsTaanit(Time.new(2021, 7, 18)).should == true
478
+ IsTaanit(Time.new(2021, 7, 19)).should == false
479
+ IsTaanit(Time.new(2022, 8, 5)).should == false
480
+ IsTaanit(Time.new(2022, 8, 6)).should == false
481
+ IsTaanit(Time.new(2022, 8, 7)).should == true
482
+ IsTaanit(Time.new(2022, 8, 8)).should == false
483
+ end
484
+
485
+ it "should know that Tzom Gedalia is a Taanit" do
486
+ IsTaanit(Time.new(2023, 9, 17)).should == false
487
+ IsTaanit(Time.new(2023, 9, 18)).should == true
488
+ IsTaanit(Time.new(2023, 9, 19)).should == false
489
+ IsTaanit(Time.new(2022, 9, 27)).should == false
490
+ IsTaanit(Time.new(2022, 9, 28)).should == true
491
+ IsTaanit(Time.new(2022, 9, 29)).should == false
492
+ IsTaanit(Time.new(2021, 9, 8)).should == false
493
+ IsTaanit(Time.new(2021, 9, 9)).should == true
494
+ IsTaanit(Time.new(2021, 9, 10)).should == false
495
+ IsTaanit(Time.new(2017, 9, 22)).should == false
496
+ IsTaanit(Time.new(2017, 9, 23)).should == false
497
+ IsTaanit(Time.new(2017, 9, 24)).should == true
498
+ IsTaanit(Time.new(2017, 9, 25)).should == false
499
+ end
500
+
501
+ it "should know when Rosh Chodesh is in a 353 day year" do
502
+ IsRoshHodesh(Time.new(2043, 5, 9)).should == false
503
+ IsRoshChodesh(Time.new(2043, 5, 10)).should == true
504
+ IsRoshHodesh(Time.new(2043, 5, 11)).should == true
505
+ IsRoshChodesh(Time.new(2043, 5, 12)).should == false
506
+ IsRoshHodesh(Time.new(2043, 6, 8)).should == false
507
+ IsRoshChodesh(Time.new(2043, 6, 9)).should == true
508
+ IsRoshHodesh(Time.new(2043, 6, 10)).should == false
509
+ IsRoshChodesh(Time.new(2043, 7, 7)).should == false
510
+ IsRoshHodesh(Time.new(2043, 7, 8)).should == true
511
+ IsRoshChodesh(Time.new(2043, 7, 9)).should == true
512
+ IsRoshHodesh(Time.new(2043, 7, 10)).should == false
513
+ IsRoshChodesh(Time.new(2043, 8, 6)).should == false
514
+ IsRoshHodesh(Time.new(2043, 8, 7)).should == true
515
+ IsRoshChodesh(Time.new(2043, 8, 8)).should == false
516
+ IsRoshHodesh(Time.new(2043, 9, 4)).should == false
517
+ IsRoshChodesh(Time.new(2043, 9, 5)).should == true
518
+ IsRoshHodesh(Time.new(2043, 9, 6)).should == true
519
+ IsRoshChodesh(Time.new(2043, 9, 7)).should == false
520
+ IsRoshHodesh(Time.new(2043, 10, 4)).should == false
521
+ IsRoshChodesh(Time.new(2043, 10, 5)).should == false
522
+ IsRoshHodesh(Time.new(2043, 10, 6)).should == false
523
+ IsRoshChodesh(Time.new(2043, 11, 2)).should == false
524
+ IsRoshHodesh(Time.new(2043, 11, 3)).should == true
525
+ IsRoshChodesh(Time.new(2043, 11, 4)).should == true
526
+ IsRoshHodesh(Time.new(2043, 11, 5)).should == false
527
+ IsRoshChodesh(Time.new(2043, 12, 2)).should == false
528
+ IsRoshHodesh(Time.new(2043, 12, 3)).should == true
529
+ IsRoshChodesh(Time.new(2043, 12, 4)).should == false
530
+ IsRoshHodesh(Time.new(2043, 12, 31)).should == false
531
+ IsRoshChodesh(Time.new(2044, 1, 1)).should == true
532
+ IsRoshHodesh(Time.new(2044, 1, 2)).should == false
533
+ IsRoshChodesh(Time.new(2044, 1, 29)).should == false
534
+ IsRoshHodesh(Time.new(2044, 1, 30)).should == true
535
+ IsRoshChodesh(Time.new(2044, 1, 31)).should == false
536
+ IsRoshHodesh(Time.new(2044, 2, 27)).should == false
537
+ IsRoshChodesh(Time.new(2044, 2, 28)).should == true
538
+ IsRoshHodesh(Time.new(2044, 2, 29)).should == true
539
+ IsRoshChodesh(Time.new(2044, 3, 1)).should == false
540
+ IsRoshHodesh(Time.new(2044, 3, 28)).should == false
541
+ IsRoshChodesh(Time.new(2044, 3, 29)).should == true
542
+ IsRoshHodesh(Time.new(2044, 3, 30)).should == false
543
+ end
544
+
545
+ it "should know when Rosh Chodesh is in a 354 day year" do
546
+ IsRoshHodesh(Time.new(2041, 4, 30)).should == false
547
+ IsRoshChodesh(Time.new(2041, 5, 1)).should == true
548
+ IsRoshHodesh(Time.new(2041, 5, 2)).should == true
549
+ IsRoshChodesh(Time.new(2041, 5, 3)).should == false
550
+ IsRoshHodesh(Time.new(2041, 5, 30)).should == false
551
+ IsRoshChodesh(Time.new(2041, 5, 31)).should == true
552
+ IsRoshHodesh(Time.new(2041, 6, 1)).should == false
553
+ IsRoshChodesh(Time.new(2041, 6, 28)).should == false
554
+ IsRoshHodesh(Time.new(2041, 6, 29)).should == true
555
+ IsRoshChodesh(Time.new(2041, 6, 30)).should == true
556
+ IsRoshHodesh(Time.new(2041, 7, 1)).should == false
557
+ IsRoshChodesh(Time.new(2041, 7, 28)).should == false
558
+ IsRoshHodesh(Time.new(2041, 7, 29)).should == true
559
+ IsRoshChodesh(Time.new(2041, 7, 30)).should == false
560
+ IsRoshHodesh(Time.new(2041, 8, 26)).should == false
561
+ IsRoshChodesh(Time.new(2041, 8, 27)).should == true
562
+ IsRoshHodesh(Time.new(2041, 8, 28)).should == true
563
+ IsRoshChodesh(Time.new(2041, 8, 29)).should == false
564
+ IsRoshHodesh(Time.new(2041, 9, 25)).should == false
565
+ IsRoshChodesh(Time.new(2041, 9, 26)).should == false
566
+ IsRoshHodesh(Time.new(2041, 9, 27)).should == false
567
+ IsRoshChodesh(Time.new(2041, 10, 24)).should == false
568
+ IsRoshHodesh(Time.new(2041, 10, 25)).should == true
569
+ IsRoshChodesh(Time.new(2041, 10, 26)).should == true
570
+ IsRoshHodesh(Time.new(2041, 10, 27)).should == false
571
+ IsRoshChodesh(Time.new(2041, 11, 23)).should == false
572
+ IsRoshHodesh(Time.new(2041, 11, 24)).should == true
573
+ IsRoshChodesh(Time.new(2041, 11, 25)).should == false
574
+ IsRoshHodesh(Time.new(2041, 12, 22)).should == false
575
+ IsRoshChodesh(Time.new(2041, 12, 23)).should == true
576
+ IsRoshHodesh(Time.new(2041, 12, 24)).should == true
577
+ IsRoshChodesh(Time.new(2041, 12, 25)).should == false
578
+ IsRoshHodesh(Time.new(2042, 1, 21)).should == false
579
+ IsRoshChodesh(Time.new(2042, 1, 22)).should == true
580
+ IsRoshHodesh(Time.new(2042, 1, 23)).should == false
581
+ IsRoshChodesh(Time.new(2042, 2, 19)).should == false
582
+ IsRoshHodesh(Time.new(2042, 2, 20)).should == true
583
+ IsRoshChodesh(Time.new(2042, 2, 21)).should == true
584
+ IsRoshHodesh(Time.new(2042, 2, 22)).should == false
585
+ IsRoshChodesh(Time.new(2042, 3, 21)).should == false
586
+ IsRoshHodesh(Time.new(2042, 3, 22)).should == true
587
+ IsRoshChodesh(Time.new(2042, 3, 23)).should == false
588
+ end
589
+
590
+ it "should know when Rosh Chodesh is in a 355 day year" do
591
+ IsRoshHodesh(Time.new(2044, 4, 26)).should == false
592
+ IsRoshChodesh(Time.new(2044, 4, 27)).should == true
593
+ IsRoshHodesh(Time.new(2044, 4, 28)).should == true
594
+ IsRoshChodesh(Time.new(2044, 4, 29)).should == false
595
+ IsRoshHodesh(Time.new(2044, 5, 26)).should == false
596
+ IsRoshChodesh(Time.new(2044, 5, 27)).should == true
597
+ IsRoshHodesh(Time.new(2044, 5, 28)).should == false
598
+ IsRoshChodesh(Time.new(2044, 6, 24)).should == false
599
+ IsRoshHodesh(Time.new(2044, 6, 25)).should == true
600
+ IsRoshChodesh(Time.new(2044, 6, 26)).should == true
601
+ IsRoshHodesh(Time.new(2044, 6, 27)).should == false
602
+ IsRoshChodesh(Time.new(2044, 7, 24)).should == false
603
+ IsRoshHodesh(Time.new(2044, 7, 25)).should == true
604
+ IsRoshChodesh(Time.new(2044, 7, 26)).should == false
605
+ IsRoshHodesh(Time.new(2044, 8, 22)).should == false
606
+ IsRoshChodesh(Time.new(2044, 8, 23)).should == true
607
+ IsRoshHodesh(Time.new(2044, 8, 24)).should == true
608
+ IsRoshChodesh(Time.new(2044, 8, 25)).should == false
609
+ IsRoshHodesh(Time.new(2044, 9, 21)).should == false
610
+ IsRoshChodesh(Time.new(2044, 9, 22)).should == false
611
+ IsRoshHodesh(Time.new(2044, 9, 23)).should == false
612
+ IsRoshChodesh(Time.new(2044, 10, 20)).should == false
613
+ IsRoshHodesh(Time.new(2044, 10, 21)).should == true
614
+ IsRoshChodesh(Time.new(2044, 10, 22)).should == true
615
+ IsRoshHodesh(Time.new(2044, 10, 23)).should == false
616
+ IsRoshChodesh(Time.new(2044, 11, 19)).should == false
617
+ IsRoshHodesh(Time.new(2044, 11, 20)).should == true
618
+ IsRoshChodesh(Time.new(2044, 11, 21)).should == true
619
+ IsRoshHodesh(Time.new(2044, 11, 22)).should == false
620
+ IsRoshChodesh(Time.new(2044, 12, 19)).should == false
621
+ IsRoshHodesh(Time.new(2044, 12, 20)).should == true
622
+ IsRoshChodesh(Time.new(2044, 12, 21)).should == true
623
+ IsRoshHodesh(Time.new(2044, 12, 22)).should == false
624
+ IsRoshChodesh(Time.new(2045, 1, 18)).should == false
625
+ IsRoshHodesh(Time.new(2045, 1, 19)).should == true
626
+ IsRoshChodesh(Time.new(2045, 1, 20)).should == false
627
+ IsRoshHodesh(Time.new(2045, 2, 16)).should == false
628
+ IsRoshChodesh(Time.new(2045, 2, 17)).should == true
629
+ IsRoshHodesh(Time.new(2045, 2, 18)).should == true
630
+ IsRoshChodesh(Time.new(2045, 2, 19)).should == false
631
+ IsRoshHodesh(Time.new(2045, 3, 18)).should == false
632
+ IsRoshChodesh(Time.new(2045, 3, 19)).should == true
633
+ IsRoshHodesh(Time.new(2045, 3, 20)).should == false
634
+ end
635
+
636
+ it "should know when Rosh Chodesh is in a 383 day year" do
637
+ IsRoshHodesh(Time.new(2040, 4, 12)).should == false
638
+ IsRoshChodesh(Time.new(2040, 4, 13)).should == true
639
+ IsRoshHodesh(Time.new(2040, 4, 14)).should == true
640
+ IsRoshChodesh(Time.new(2040, 4, 15)).should == false
641
+ IsRoshHodesh(Time.new(2040, 5, 12)).should == false
642
+ IsRoshChodesh(Time.new(2040, 5, 13)).should == true
643
+ IsRoshHodesh(Time.new(2040, 5, 14)).should == false
644
+ IsRoshChodesh(Time.new(2040, 6, 10)).should == false
645
+ IsRoshHodesh(Time.new(2040, 6, 11)).should == true
646
+ IsRoshChodesh(Time.new(2040, 6, 12)).should == true
647
+ IsRoshHodesh(Time.new(2040, 6, 13)).should == false
648
+ IsRoshChodesh(Time.new(2040, 7, 10)).should == false
649
+ IsRoshHodesh(Time.new(2040, 7, 11)).should == true
650
+ IsRoshChodesh(Time.new(2040, 7, 12)).should == false
651
+ IsRoshHodesh(Time.new(2040, 8, 8)).should == false
652
+ IsRoshChodesh(Time.new(2040, 8, 9)).should == true
653
+ IsRoshHodesh(Time.new(2040, 8, 10)).should == true
654
+ IsRoshChodesh(Time.new(2040, 8, 11)).should == false
655
+ IsRoshHodesh(Time.new(2040, 9, 7)).should == false
656
+ IsRoshChodesh(Time.new(2040, 9, 8)).should == false
657
+ IsRoshHodesh(Time.new(2040, 9, 9)).should == false
658
+ IsRoshChodesh(Time.new(2040, 10, 6)).should == false
659
+ IsRoshHodesh(Time.new(2040, 10, 7)).should == true
660
+ IsRoshChodesh(Time.new(2040, 10, 8)).should == true
661
+ IsRoshHodesh(Time.new(2040, 10, 9)).should == false
662
+ IsRoshChodesh(Time.new(2040, 11, 5)).should == false
663
+ IsRoshHodesh(Time.new(2040, 11, 6)).should == true
664
+ IsRoshChodesh(Time.new(2040, 11, 7)).should == false
665
+ IsRoshHodesh(Time.new(2040, 12, 4)).should == false
666
+ IsRoshChodesh(Time.new(2040, 12, 5)).should == true
667
+ IsRoshHodesh(Time.new(2040, 12, 6)).should == false
668
+ IsRoshChodesh(Time.new(2041, 1, 2)).should == false
669
+ IsRoshHodesh(Time.new(2041, 1, 3)).should == true
670
+ IsRoshChodesh(Time.new(2041, 1, 4)).should == false
671
+ IsRoshHodesh(Time.new(2041, 1, 31)).should == false
672
+ IsRoshChodesh(Time.new(2041, 2, 1)).should == true
673
+ IsRoshHodesh(Time.new(2041, 2, 2)).should == true
674
+ IsRoshChodesh(Time.new(2041, 2, 3)).should == false
675
+ IsRoshHodesh(Time.new(2041, 3, 2)).should == false
676
+ IsRoshChodesh(Time.new(2041, 3, 3)).should == true
677
+ IsRoshHodesh(Time.new(2041, 3, 4)).should == true
678
+ IsRoshChodesh(Time.new(2041, 3, 5)).should == false
679
+ IsRoshHodesh(Time.new(2041, 4, 1)).should == false
680
+ IsRoshChodesh(Time.new(2041, 4, 2)).should == true
681
+ IsRoshHodesh(Time.new(2041, 4, 3)).should == false
682
+ end
683
+
684
+ it "should know when Rosh Chodesh is in a 384 day year" do
685
+ IsRoshHodesh(Time.new(2021, 4, 11)).should == false
686
+ IsRoshChodesh(Time.new(2021, 4, 12)).should == true
687
+ IsRoshHodesh(Time.new(2021, 4, 13)).should == true
688
+ IsRoshChodesh(Time.new(2021, 4, 14)).should == false
689
+ IsRoshHodesh(Time.new(2021, 5, 11)).should == false
690
+ IsRoshChodesh(Time.new(2021, 5, 12)).should == true
691
+ IsRoshHodesh(Time.new(2021, 5, 13)).should == false
692
+ IsRoshChodesh(Time.new(2021, 6, 9)).should == false
693
+ IsRoshHodesh(Time.new(2021, 6, 10)).should == true
694
+ IsRoshChodesh(Time.new(2021, 6, 11)).should == true
695
+ IsRoshHodesh(Time.new(2021, 6, 12)).should == false
696
+ IsRoshChodesh(Time.new(2021, 7, 9)).should == false
697
+ IsRoshHodesh(Time.new(2021, 7, 10)).should == true
698
+ IsRoshChodesh(Time.new(2021, 7, 11)).should == false
699
+ IsRoshHodesh(Time.new(2021, 8, 7)).should == false
700
+ IsRoshChodesh(Time.new(2021, 8, 8)).should == true
701
+ IsRoshHodesh(Time.new(2021, 8, 9)).should == true
702
+ IsRoshChodesh(Time.new(2021, 8, 10)).should == false
703
+ IsRoshHodesh(Time.new(2021, 9, 6)).should == false
704
+ IsRoshChodesh(Time.new(2021, 9, 7)).should == false
705
+ IsRoshHodesh(Time.new(2021, 9, 8)).should == false
706
+ IsRoshChodesh(Time.new(2021, 10, 5)).should == false
707
+ IsRoshHodesh(Time.new(2021, 10, 6)).should == true
708
+ IsRoshChodesh(Time.new(2021, 10, 7)).should == true
709
+ IsRoshHodesh(Time.new(2021, 10, 8)).should == false
710
+ IsRoshChodesh(Time.new(2021, 11, 4)).should == false
711
+ IsRoshHodesh(Time.new(2021, 11, 5)).should == true
712
+ IsRoshChodesh(Time.new(2021, 11, 6)).should == false
713
+ IsRoshHodesh(Time.new(2021, 12, 3)).should == false
714
+ IsRoshChodesh(Time.new(2021, 12, 4)).should == true
715
+ IsRoshHodesh(Time.new(2021, 12, 5)).should == true
716
+ IsRoshChodesh(Time.new(2021, 12, 6)).should == false
717
+ IsRoshHodesh(Time.new(2022, 1, 2)).should == false
718
+ IsRoshChodesh(Time.new(2022, 1, 3)).should == true
719
+ IsRoshHodesh(Time.new(2022, 1, 4)).should == false
720
+ IsRoshChodesh(Time.new(2022, 1, 31)).should == false
721
+ IsRoshHodesh(Time.new(2022, 2, 1)).should == true
722
+ IsRoshChodesh(Time.new(2022, 2, 2)).should == true
723
+ IsRoshHodesh(Time.new(2022, 2, 3)).should == false
724
+ IsRoshChodesh(Time.new(2022, 3, 2)).should == false
725
+ IsRoshHodesh(Time.new(2022, 3, 3)).should == true
726
+ IsRoshChodesh(Time.new(2022, 3, 4)).should == true
727
+ IsRoshHodesh(Time.new(2022, 3, 5)).should == false
728
+ IsRoshChodesh(Time.new(2022, 4, 1)).should == false
729
+ IsRoshHodesh(Time.new(2022, 4, 2)).should == true
730
+ IsRoshChodesh(Time.new(2022, 4, 3)).should == false
731
+ end
732
+
733
+ it "should know when Rosh Chodesh is in a 385 day year" do
734
+ IsRoshHodesh(Time.new(2026, 4, 16)).should == false
735
+ IsRoshChodesh(Time.new(2026, 4, 17)).should == true
736
+ IsRoshHodesh(Time.new(2026, 4, 18)).should == true
737
+ IsRoshChodesh(Time.new(2026, 4, 19)).should == false
738
+ IsRoshHodesh(Time.new(2026, 5, 16)).should == false
739
+ IsRoshChodesh(Time.new(2026, 5, 17)).should == true
740
+ IsRoshHodesh(Time.new(2026, 5, 18)).should == false
741
+ IsRoshChodesh(Time.new(2026, 6, 14)).should == false
742
+ IsRoshHodesh(Time.new(2026, 6, 15)).should == true
743
+ IsRoshChodesh(Time.new(2026, 6, 16)).should == true
744
+ IsRoshHodesh(Time.new(2026, 6, 17)).should == false
745
+ IsRoshChodesh(Time.new(2026, 7, 14)).should == false
746
+ IsRoshHodesh(Time.new(2026, 7, 15)).should == true
747
+ IsRoshChodesh(Time.new(2026, 7, 16)).should == false
748
+ IsRoshHodesh(Time.new(2026, 8, 12)).should == false
749
+ IsRoshChodesh(Time.new(2026, 8, 13)).should == true
750
+ IsRoshHodesh(Time.new(2026, 8, 14)).should == true
751
+ IsRoshChodesh(Time.new(2026, 8, 15)).should == false
752
+ IsRoshHodesh(Time.new(2026, 9, 11)).should == false
753
+ IsRoshChodesh(Time.new(2026, 9, 12)).should == false
754
+ IsRoshHodesh(Time.new(2026, 9, 13)).should == false
755
+ IsRoshChodesh(Time.new(2026, 10, 10)).should == false
756
+ IsRoshHodesh(Time.new(2026, 10, 11)).should == true
757
+ IsRoshChodesh(Time.new(2026, 10, 12)).should == true
758
+ IsRoshHodesh(Time.new(2026, 10, 13)).should == false
759
+ IsRoshChodesh(Time.new(2026, 11, 9)).should == false
760
+ IsRoshHodesh(Time.new(2026, 11, 10)).should == true
761
+ IsRoshChodesh(Time.new(2026, 11, 11)).should == true
762
+ IsRoshHodesh(Time.new(2026, 11, 12)).should == false
763
+ IsRoshChodesh(Time.new(2026, 12, 9)).should == false
764
+ IsRoshHodesh(Time.new(2026, 12, 10)).should == true
765
+ IsRoshChodesh(Time.new(2026, 12, 11)).should == true
766
+ IsRoshHodesh(Time.new(2026, 12, 12)).should == false
767
+ IsRoshChodesh(Time.new(2027, 1, 8)).should == false
768
+ IsRoshHodesh(Time.new(2027, 1, 9)).should == true
769
+ IsRoshChodesh(Time.new(2027, 1, 10)).should == false
770
+ IsRoshHodesh(Time.new(2027, 2, 6)).should == false
771
+ IsRoshChodesh(Time.new(2027, 2, 7)).should == true
772
+ IsRoshHodesh(Time.new(2027, 2, 8)).should == true
773
+ IsRoshChodesh(Time.new(2027, 2, 9)).should == false
774
+ IsRoshHodesh(Time.new(2027, 3, 8)).should == false
775
+ IsRoshChodesh(Time.new(2027, 3, 9)).should == true
776
+ IsRoshHodesh(Time.new(2027, 3, 10)).should == true
777
+ IsRoshChodesh(Time.new(2027, 3, 11)).should == false
778
+ IsRoshHodesh(Time.new(2027, 4, 7)).should == false
779
+ IsRoshChodesh(Time.new(2027, 4, 8)).should == true
780
+ IsRoshHodesh(Time.new(2027, 4, 9)).should == false
781
+ end
782
+ end