hebcal 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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