when_exe 0.3.6 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +171 -0
  3. data/lib/when_exe.rb +78 -47
  4. data/lib/when_exe/basictypes.rb +752 -747
  5. data/lib/when_exe/calendarnote.rb +805 -801
  6. data/lib/when_exe/calendartypes.rb +1583 -1531
  7. data/lib/when_exe/coordinates.rb +16 -15
  8. data/lib/when_exe/core/duration.rb +114 -110
  9. data/lib/when_exe/core/extension.rb +504 -504
  10. data/lib/when_exe/ephemeris.rb +1917 -1913
  11. data/lib/when_exe/ephemeris/moon.rb +333 -333
  12. data/lib/when_exe/ephemeris/notes.rb +389 -387
  13. data/lib/when_exe/ephemeris/planets.rb +585 -585
  14. data/lib/when_exe/ephemeris/sun.rb +214 -214
  15. data/lib/when_exe/googlecalendar.rb +144 -140
  16. data/lib/when_exe/icalendar.rb +1636 -1636
  17. data/lib/when_exe/inspect.rb +46 -22
  18. data/lib/when_exe/locales/akt.rb +176 -176
  19. data/lib/when_exe/locales/encoding_conversion.rb +134 -126
  20. data/lib/when_exe/locales/iast.rb +90 -90
  21. data/lib/when_exe/locales/locale.rb +750 -746
  22. data/lib/when_exe/locales/transliteration_table.rb +62 -62
  23. data/lib/when_exe/mini_application.rb +307 -305
  24. data/lib/when_exe/parts/enumerator.rb +2 -2
  25. data/lib/when_exe/parts/geometric_complex.rb +397 -397
  26. data/lib/when_exe/parts/method_cash.rb +224 -224
  27. data/lib/when_exe/parts/resource.rb +1069 -1071
  28. data/lib/when_exe/parts/timezone.rb +240 -230
  29. data/lib/when_exe/region/armenian.rb +56 -56
  30. data/lib/when_exe/region/babylonian.rb +405 -0
  31. data/lib/when_exe/region/bahai.rb +146 -146
  32. data/lib/when_exe/region/balinese.rb +622 -622
  33. data/lib/when_exe/region/chinese.rb +95 -25
  34. data/lib/when_exe/region/chinese/calendars.rb +1016 -1016
  35. data/lib/when_exe/region/chinese/epochs.rb +1 -1
  36. data/lib/when_exe/region/chinese/twins.rb +803 -795
  37. data/lib/when_exe/region/christian.rb +824 -824
  38. data/lib/when_exe/region/coptic.rb +106 -87
  39. data/lib/when_exe/region/discordian.rb +225 -225
  40. data/lib/when_exe/region/far_east.rb +188 -188
  41. data/lib/when_exe/region/french.rb +56 -56
  42. data/lib/when_exe/region/geologicalage.rb +639 -639
  43. data/lib/when_exe/region/goddess.rb +58 -58
  44. data/lib/when_exe/region/indian.rb +1254 -1251
  45. data/lib/when_exe/region/iranian.rb +8 -8
  46. data/lib/when_exe/region/islamic.rb +3 -3
  47. data/lib/when_exe/region/japanese.rb +93 -99
  48. data/lib/when_exe/region/japanese/calendars.rb +396 -397
  49. data/lib/when_exe/region/japanese/epochs.rb +26 -26
  50. data/lib/when_exe/region/japanese/nihon_shoki.rb +71 -71
  51. data/lib/when_exe/region/japanese/notes.rb +1383 -1386
  52. data/lib/when_exe/region/japanese/residues.rb +1306 -1306
  53. data/lib/when_exe/region/japanese/twins.rb +225 -225
  54. data/lib/when_exe/region/japanese/weeks.rb +112 -0
  55. data/lib/when_exe/region/javanese.rb +230 -230
  56. data/lib/when_exe/region/jewish.rb +126 -126
  57. data/lib/when_exe/region/korean.rb +378 -378
  58. data/lib/when_exe/region/m17n.rb +114 -113
  59. data/lib/when_exe/region/martian.rb +258 -255
  60. data/lib/when_exe/region/mayan.rb +32 -32
  61. data/lib/when_exe/region/residue.rb +89 -89
  62. data/lib/when_exe/region/roman.rb +36 -24
  63. data/lib/when_exe/region/ryukyu.rb +97 -97
  64. data/lib/when_exe/region/shire.rb +240 -240
  65. data/lib/when_exe/region/soviet.rb +209 -0
  66. data/lib/when_exe/region/symmetry.rb +50 -50
  67. data/lib/when_exe/region/thai.rb +336 -335
  68. data/lib/when_exe/region/tibetan.rb +316 -315
  69. data/lib/when_exe/region/vietnamese.rb +440 -439
  70. data/lib/when_exe/region/weekdate.rb +80 -80
  71. data/lib/when_exe/region/world.rb +175 -175
  72. data/lib/when_exe/region/yerm.rb +14 -14
  73. data/lib/when_exe/region/zoroastrian.rb +203 -203
  74. data/lib/when_exe/timestandard.rb +707 -681
  75. data/lib/when_exe/tmduration.rb +338 -330
  76. data/lib/when_exe/tmobjects.rb +1346 -1325
  77. data/lib/when_exe/tmposition.rb +2115 -2072
  78. data/lib/when_exe/tmreference.rb +1693 -1669
  79. data/lib/when_exe/version.rb +1 -1
  80. data/link_to_online_documents +1 -1
  81. data/test/examples/JapanHolidaysRFC6350.ics +1 -1
  82. data/test/test.rb +67 -61
  83. data/test/test/basictypes.rb +409 -409
  84. data/test/test/calendarnote.rb +86 -69
  85. data/test/test/calendartypes.rb +97 -97
  86. data/test/test/coordinates.rb +396 -396
  87. data/test/test/ephemeris.rb +83 -74
  88. data/test/test/ephemeris/moon.rb +14 -14
  89. data/test/test/ephemeris/planets.rb +14 -14
  90. data/test/test/ephemeris/sun.rb +14 -14
  91. data/test/test/googlecalendar.rb +194 -176
  92. data/test/test/icalendar.rb +867 -858
  93. data/test/test/inspect.rb +117 -117
  94. data/test/test/parts.rb +487 -487
  95. data/test/test/region/balinese.rb +34 -0
  96. data/test/test/region/chinese.rb +218 -206
  97. data/test/test/region/christian.rb +245 -245
  98. data/test/test/region/coptic.rb +27 -27
  99. data/test/test/region/french.rb +33 -33
  100. data/test/test/region/geologicalage.rb +17 -17
  101. data/test/test/region/indian.rb +57 -57
  102. data/test/test/region/iran.rb +54 -54
  103. data/test/test/region/islamic.rb +18 -18
  104. data/test/test/region/japanese.rb +237 -219
  105. data/test/test/region/jewish.rb +61 -61
  106. data/test/test/region/m17n.rb +184 -184
  107. data/test/test/region/mayan.rb +195 -195
  108. data/test/test/region/residue.rb +147 -139
  109. data/test/test/region/thai.rb +116 -116
  110. data/test/test/region/tibetan.rb +30 -30
  111. data/test/test/region/vietnamese.rb +102 -102
  112. data/test/test/region/yerm.rb +146 -146
  113. data/test/test/timestandard.rb +81 -81
  114. data/test/test/tmobjects.rb +328 -328
  115. data/test/test/tmposition.rb +397 -284
  116. data/test/test/tmreference.rb +157 -157
  117. metadata +13 -10
@@ -1,245 +1,245 @@
1
- # -*- coding: utf-8 -*-
2
- =begin
3
- Copyright (C) 2012-2014 Takashi SUGA
4
-
5
- You may use and/or modify this file according to the license
6
- described in the LICENSE.txt file included in this archive.
7
- =end
8
-
9
- module Test
10
-
11
- class ChristianVariation < Test::Unit::TestCase
12
-
13
- def verify_built_in_date(calendar, start, length)
14
- date = Date.new(start, 1, 1)
15
- diff = {}
16
- while date.year < start + length
17
- cal_date = [date.year, date.month, date.day]
18
- cal_jdn = date.jd
19
- fdate = When.TemporalPosition(date.year, date.month, date.day, {:frame=>calendar})
20
- rdate = calendar ^ cal_jdn
21
- [fdate, rdate].each do |tdate|
22
- [[cal_date, tdate.cal_date], [cal_jdn, tdate.to_i]].each do |verify|
23
- unless verify.uniq.size == 1
24
- diff[cal_date] ||= []
25
- diff[cal_date] << verify[1]
26
- end
27
- end
28
- end
29
- date = yield(date)
30
- end
31
- diff
32
- end
33
-
34
- def test__verify_to_built_in_date
35
-
36
- sample = [{}, {}, {}, {}, {}, {[2900, 1, 1]=>[2780263, [2900, 1, 2]]}]
37
-
38
- %w(Gregorian RevisedJulian).each do |name|
39
- calendar = When.Calendar(name)
40
- assert_equal(sample.shift, verify_built_in_date(calendar, 1900, 8) {|date| date + 1})
41
- assert_equal(sample.shift, verify_built_in_date(calendar, 2000,400) {|date| date >> 1})
42
- assert_equal(sample.shift, verify_built_in_date(calendar, 2400,900) {|date| date >> 1200})
43
- end
44
- end
45
-
46
- def test__gregorian_date
47
-
48
- calendar = When.Calendar('Gregorian')
49
-
50
- dates = [When.when?('1900-02-28', {:frame=>calendar})]
51
- 9.times do
52
- dates << dates.last + When::P1Y * 100
53
- end
54
- assert_equal([2415079, 2451603, 2488128, 2524652, 2561176,
55
- 2597700, 2634225, 2670749, 2707273, 2743797], dates.map {|date| date.to_i})
56
- assert_equal(%w(1900-02-28 2000-02-28 2100-02-28 2200-02-28 2300-02-28
57
- 2400-02-28 2500-02-28 2600-02-28 2700-02-28 2800-02-28), dates.map {|date| (calendar ^ date.to_i).to_s})
58
- assert_equal([28, 29, 28, 28, 28, 29, 28, 28, 28, 29], dates.map {|date| date.length(When::MONTH)})
59
-
60
- dates = [When.when?('1900-03-01', {:frame=>calendar})]
61
- 9.times do
62
- dates << dates.last + When::P1Y * 100
63
- end
64
- assert_equal([2415080, 2451605, 2488129, 2524653, 2561177,
65
- 2597702, 2634226, 2670750, 2707274, 2743799], dates.map {|date| date.to_i})
66
- assert_equal(%w(1900-03-01 2000-03-01 2100-03-01 2200-03-01 2300-03-01
67
- 2400-03-01 2500-03-01 2600-03-01 2700-03-01 2800-03-01), dates.map {|date| (calendar ^ date.to_i).to_s})
68
- assert_equal([1], dates.map {|date| calendar._century_from_jdn(date.to_i) - calendar._century_from_jdn(date.to_i-1)}.uniq)
69
- end
70
-
71
- def test__revised_julian_date
72
-
73
- calendar = When.Calendar('RevisedJulian')
74
-
75
- dates = [When.when?('1900-02-28', {:frame=>calendar})]
76
- 9.times do
77
- dates << dates.last + When::P1Y * 100
78
- end
79
- assert_equal([2415079, 2451603, 2488128, 2524652, 2561176,
80
- 2597700, 2634225, 2670749, 2707273, 2743797], dates.map {|date| date.to_i})
81
- assert_equal(%w(1900-02-28 2000-02-28 2100-02-28 2200-02-28 2300-02-28
82
- 2400-02-28 2500-02-28 2600-02-28 2700-02-28 2800-02-28), dates.map {|date| (calendar ^ date.to_i).to_s})
83
- assert_equal([28, 29, 28, 28, 28, 29, 28, 28, 28, 28], dates.map {|date| date.length(When::MONTH)})
84
-
85
- dates = [When.when?('1900-03-01', {:frame=>calendar})]
86
- 9.times do
87
- dates << dates.last + When::P1Y * 100
88
- end
89
- assert_equal([2415080, 2451605, 2488129, 2524653, 2561177,
90
- 2597702, 2634226, 2670750, 2707274, 2743798], dates.map {|date| date.to_i})
91
- assert_equal(%w(1900-03-01 2000-03-01 2100-03-01 2200-03-01 2300-03-01
92
- 2400-03-01 2500-03-01 2600-03-01 2700-03-01 2800-03-01), dates.map {|date| (calendar ^ date.to_i).to_s})
93
- assert_equal([1], dates.map {|date| calendar._century_from_jdn(date.to_i) - calendar._century_from_jdn(date.to_i-1)}.uniq)
94
- end
95
- end
96
-
97
- class Swedish < Test::Unit::TestCase
98
- def test__swedish_date
99
-
100
- dates = []
101
- jdns = []
102
- [2342042, 2346424].each do |base|
103
- (-3..+3).each do |diff|
104
- jdn = base + diff
105
- jdate = When::Julian ^ jdn
106
- s1date = When::Swedish ^ jdn
107
- s2date = When.tm_pos(*(s1date.cal_date + [{:frame=>When::Swedish}]))
108
- dates << s1date.to_s
109
- jdns << [s1date.to_s == s2date.to_s, s1date.to_i == jdn, s2date.to_i == jdn].uniq
110
- end
111
- end
112
-
113
- assert_equal(%w(1700-02-26 1700-02-27 1700-02-28 1700-03-01 1700-03-02 1700-03-03 1700-03-04
114
- 1712-02-26 1712-02-27 1712-02-28 1712-02-29 1712-02-30 1712-03-01 1712-03-02), dates)
115
- assert_equal([[true]], jdns.uniq)
116
- end
117
-
118
- def test__swedish_easter
119
-
120
- dates = []
121
- civil = When.Calendar('Civil?old=Swedish&reform_date=1753-03-01')
122
- ((1700..1711).to_a + (1740..1752).to_a+[1802,1805,1818]).each do |year|
123
- dates << When.tm_pos(year, {:frame=>civil}).easter.to_s
124
- end
125
- assert_equal(%w(1700-04-01 1701-04-21 1702-04-06 1703-03-29 1704-04-17 1705-04-02 1706-03-25
126
- 1707-04-14 1708-04-05 1709-04-18 1710-04-10 1711-03-26 1740-04-06 1741-03-22
127
- 1742-03-14 1743-04-03 1744-03-18 1745-04-07 1746-03-30 1747-03-22 1748-04-03
128
- 1749-03-26 1750-03-18 1751-03-31 1752-03-22 1802-04-25 1805-04-21 1818-03-29), dates)
129
- end
130
- end
131
-
132
- class Civil < Test::Unit::TestCase
133
- def test__border
134
- frame = When.Calendar('Civil?reform=1752-9-14&border=0-3-25(1753)0-1-1')
135
- assert_equal("1641=03-24", (frame ^ When.when?('1642-4-3') ).to_s)
136
- assert_equal("1642-03-25", (frame ^ When.when?('1642-4-4') ).to_s)
137
- assert_equal("1752-12-31", (frame ^ When.when?('1752-12-31')).to_s)
138
- assert_equal("1753-01-01", (frame ^ When.when?('1753-1-1') ).to_s)
139
- assert_equal("1753-03-24", (frame ^ When.when?('1753-3-24') ).to_s)
140
- assert_equal("1753-03-25", (frame ^ When.when?('1753-3-25') ).to_s)
141
- end
142
-
143
- def test__reform_inc
144
- sample = %w(
145
- 1582-09-30 1582-10-01 1582-10-02 1582-10-03 1582-10-04 1582-10-15 1582-10-16 1582-10-17
146
- 1582-10-18 1582-10-19 1582-10-20 1582-10-21 1582-10-22 1582-10-23 1582-10-24 1582-10-25
147
- 1582-10-26 1582-10-27 1582-10-28 1582-10-29 1582-10-30 1582-10-31 1582-11-01 1582-11-02
148
- 1582-11-03)
149
- date = When.when?('1582-9-30', :frame=>'Civil?reform=1582-10-15')
150
- 25.times do
151
- assert_equal(sample.shift, date.to_s)
152
- date = date + When::P1D
153
- end
154
- end
155
-
156
- def test__reform_dec
157
- sample = %w(
158
- 1582-11-01 1582-10-31 1582-10-30 1582-10-29 1582-10-28 1582-10-27 1582-10-26 1582-10-25
159
- 1582-10-24 1582-10-23 1582-10-22 1582-10-21 1582-10-20 1582-10-19 1582-10-18 1582-10-17
160
- 1582-10-16 1582-10-15 1582-10-04 1582-10-03 1582-10-02 1582-10-01 1582-09-30 1582-09-29
161
- 1582-09-28)
162
- date = When.when?('1582-11-01', :frame=>'Civil?reform=1582-10-15')
163
- 25.times do
164
- assert_equal(sample.shift, date.to_s)
165
- date = date - When::P1D
166
- end
167
- end
168
-
169
- def test__reform_year
170
- date = When.when?('1752^^Civil?reform=1752-9-14&border=(1000)0-3-25(1753)0-1-1')
171
- assert_equal(
172
- [[1752,
173
- [[3,
174
- ["*", 1, 2, 3, 4, 5, 6, 7],
175
- ["*", 8, 9, 10, 11, 12, 13, 14],
176
- ["*", 15, 16, 17, 18, 19, 20, 21],
177
- ["*", 22, 23, 24, 25, 26, 27, 28],
178
- ["*", 29, 30, 31, "*", "*", "*", "*"]]],
179
- [[4,
180
- ["*", "*", "*", "*", 1, 2, 3, 4],
181
- ["*", 5, 6, 7, 8, 9, 10, 11],
182
- ["*", 12, 13, 14, 15, 16, 17, 18],
183
- ["*", 19, 20, 21, 22, 23, 24, 25],
184
- ["*", 26, 27, 28, 29, 30, "*", "*"]]],
185
- [[5,
186
- ["*", "*", "*", "*", "*", "*", 1, 2],
187
- ["*", 3, 4, 5, 6, 7, 8, 9],
188
- ["*", 10, 11, 12, 13, 14, 15, 16],
189
- ["*", 17, 18, 19, 20, 21, 22, 23],
190
- ["*", 24, 25, 26, 27, 28, 29, 30],
191
- ["*", 31, "*", "*", "*", "*", "*", "*"]]],
192
- [[6,
193
- ["*", "*", 1, 2, 3, 4, 5, 6],
194
- ["*", 7, 8, 9, 10, 11, 12, 13],
195
- ["*", 14, 15, 16, 17, 18, 19, 20],
196
- ["*", 21, 22, 23, 24, 25, 26, 27],
197
- ["*", 28, 29, 30, "*", "*", "*", "*"]]],
198
- [[7,
199
- ["*", "*", "*", "*", 1, 2, 3, 4],
200
- ["*", 5, 6, 7, 8, 9, 10, 11],
201
- ["*", 12, 13, 14, 15, 16, 17, 18],
202
- ["*", 19, 20, 21, 22, 23, 24, 25],
203
- ["*", 26, 27, 28, 29, 30, 31, "*"]]],
204
- [[8,
205
- ["*", "*", "*", "*", "*", "*", "*", 1],
206
- ["*", 2, 3, 4, 5, 6, 7, 8],
207
- ["*", 9, 10, 11, 12, 13, 14, 15],
208
- ["*", 16, 17, 18, 19, 20, 21, 22],
209
- ["*", 23, 24, 25, 26, 27, 28, 29],
210
- ["*", 30, 31, "*", "*", "*", "*", "*"]]],
211
- [[9,
212
- ["*", "*", "*", 1, 2, 14, 15, 16],
213
- ["*", 17, 18, 19, 20, 21, 22, 23],
214
- ["*", 24, 25, 26, 27, 28, 29, 30]]],
215
- [[10,
216
- ["*", 1, 2, 3, 4, 5, 6, 7],
217
- ["*", 8, 9, 10, 11, 12, 13, 14],
218
- ["*", 15, 16, 17, 18, 19, 20, 21],
219
- ["*", 22, 23, 24, 25, 26, 27, 28],
220
- ["*", 29, 30, 31, "*", "*", "*", "*"]]],
221
- [[11,
222
- ["*", "*", "*", "*", 1, 2, 3, 4],
223
- ["*", 5, 6, 7, 8, 9, 10, 11],
224
- ["*", 12, 13, 14, 15, 16, 17, 18],
225
- ["*", 19, 20, 21, 22, 23, 24, 25],
226
- ["*", 26, 27, 28, 29, 30, "*", "*"]]],
227
- [[12,
228
- ["*", "*", "*", "*", "*", "*", 1, 2],
229
- ["*", 3, 4, 5, 6, 7, 8, 9],
230
- ["*", 10, 11, 12, 13, 14, 15, 16],
231
- ["*", 17, 18, 19, 20, 21, 22, 23],
232
- ["*", 24, 25, 26, 27, 28, 29, 30],
233
- ["*", 31, "*", "*", "*", "*", "*", "*"]]]]],
234
- date.year_included('Sunday') {|d,b|
235
- case b
236
- when When::YEAR ; d[When::YEAR]
237
- when When::MONTH ; d[When::MONTH]
238
- when When::DAY ; d[When::DAY]
239
- else ; '*'
240
- end
241
- }
242
- )
243
- end
244
- end
245
- end
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2012-2014 Takashi SUGA
4
+
5
+ You may use and/or modify this file according to the license
6
+ described in the LICENSE.txt file included in this archive.
7
+ =end
8
+
9
+ module MiniTest
10
+
11
+ class ChristianVariation < MiniTest::TestCase
12
+
13
+ def verify_built_in_date(calendar, start, length)
14
+ date = Date.new(start, 1, 1)
15
+ diff = {}
16
+ while date.year < start + length
17
+ cal_date = [date.year, date.month, date.day]
18
+ cal_jdn = date.jd
19
+ fdate = When.TemporalPosition(date.year, date.month, date.day, {:frame=>calendar})
20
+ rdate = calendar ^ cal_jdn
21
+ [fdate, rdate].each do |tdate|
22
+ [[cal_date, tdate.cal_date], [cal_jdn, tdate.to_i]].each do |verify|
23
+ unless verify.uniq.size == 1
24
+ diff[cal_date] ||= []
25
+ diff[cal_date] << verify[1]
26
+ end
27
+ end
28
+ end
29
+ date = yield(date)
30
+ end
31
+ diff
32
+ end
33
+
34
+ def test__verify_to_built_in_date
35
+
36
+ sample = [{}, {}, {}, {}, {}, {[2900, 1, 1]=>[2780263, [2900, 1, 2]]}]
37
+
38
+ %w(Gregorian RevisedJulian).each do |name|
39
+ calendar = When.Calendar(name)
40
+ assert_equal(sample.shift, verify_built_in_date(calendar, 1900, 8) {|date| date + 1})
41
+ assert_equal(sample.shift, verify_built_in_date(calendar, 2000,400) {|date| date >> 1})
42
+ assert_equal(sample.shift, verify_built_in_date(calendar, 2400,900) {|date| date >> 1200})
43
+ end
44
+ end
45
+
46
+ def test__gregorian_date
47
+
48
+ calendar = When.Calendar('Gregorian')
49
+
50
+ dates = [When.when?('1900-02-28', {:frame=>calendar})]
51
+ 9.times do
52
+ dates << dates.last + When::P1Y * 100
53
+ end
54
+ assert_equal([2415079, 2451603, 2488128, 2524652, 2561176,
55
+ 2597700, 2634225, 2670749, 2707273, 2743797], dates.map {|date| date.to_i})
56
+ assert_equal(%w(1900-02-28 2000-02-28 2100-02-28 2200-02-28 2300-02-28
57
+ 2400-02-28 2500-02-28 2600-02-28 2700-02-28 2800-02-28), dates.map {|date| (calendar ^ date.to_i).to_s})
58
+ assert_equal([28, 29, 28, 28, 28, 29, 28, 28, 28, 29], dates.map {|date| date.length(When::MONTH)})
59
+
60
+ dates = [When.when?('1900-03-01', {:frame=>calendar})]
61
+ 9.times do
62
+ dates << dates.last + When::P1Y * 100
63
+ end
64
+ assert_equal([2415080, 2451605, 2488129, 2524653, 2561177,
65
+ 2597702, 2634226, 2670750, 2707274, 2743799], dates.map {|date| date.to_i})
66
+ assert_equal(%w(1900-03-01 2000-03-01 2100-03-01 2200-03-01 2300-03-01
67
+ 2400-03-01 2500-03-01 2600-03-01 2700-03-01 2800-03-01), dates.map {|date| (calendar ^ date.to_i).to_s})
68
+ assert_equal([1], dates.map {|date| calendar._century_from_jdn(date.to_i) - calendar._century_from_jdn(date.to_i-1)}.uniq)
69
+ end
70
+
71
+ def test__revised_julian_date
72
+
73
+ calendar = When.Calendar('RevisedJulian')
74
+
75
+ dates = [When.when?('1900-02-28', {:frame=>calendar})]
76
+ 9.times do
77
+ dates << dates.last + When::P1Y * 100
78
+ end
79
+ assert_equal([2415079, 2451603, 2488128, 2524652, 2561176,
80
+ 2597700, 2634225, 2670749, 2707273, 2743797], dates.map {|date| date.to_i})
81
+ assert_equal(%w(1900-02-28 2000-02-28 2100-02-28 2200-02-28 2300-02-28
82
+ 2400-02-28 2500-02-28 2600-02-28 2700-02-28 2800-02-28), dates.map {|date| (calendar ^ date.to_i).to_s})
83
+ assert_equal([28, 29, 28, 28, 28, 29, 28, 28, 28, 28], dates.map {|date| date.length(When::MONTH)})
84
+
85
+ dates = [When.when?('1900-03-01', {:frame=>calendar})]
86
+ 9.times do
87
+ dates << dates.last + When::P1Y * 100
88
+ end
89
+ assert_equal([2415080, 2451605, 2488129, 2524653, 2561177,
90
+ 2597702, 2634226, 2670750, 2707274, 2743798], dates.map {|date| date.to_i})
91
+ assert_equal(%w(1900-03-01 2000-03-01 2100-03-01 2200-03-01 2300-03-01
92
+ 2400-03-01 2500-03-01 2600-03-01 2700-03-01 2800-03-01), dates.map {|date| (calendar ^ date.to_i).to_s})
93
+ assert_equal([1], dates.map {|date| calendar._century_from_jdn(date.to_i) - calendar._century_from_jdn(date.to_i-1)}.uniq)
94
+ end
95
+ end
96
+
97
+ class Swedish < MiniTest::TestCase
98
+ def test__swedish_date
99
+
100
+ dates = []
101
+ jdns = []
102
+ [2342042, 2346424].each do |base|
103
+ (-3..+3).each do |diff|
104
+ jdn = base + diff
105
+ jdate = When::Julian ^ jdn
106
+ s1date = When::Swedish ^ jdn
107
+ s2date = When.tm_pos(*(s1date.cal_date + [{:frame=>When::Swedish}]))
108
+ dates << s1date.to_s
109
+ jdns << [s1date.to_s == s2date.to_s, s1date.to_i == jdn, s2date.to_i == jdn].uniq
110
+ end
111
+ end
112
+
113
+ assert_equal(%w(1700-02-26 1700-02-27 1700-02-28 1700-03-01 1700-03-02 1700-03-03 1700-03-04
114
+ 1712-02-26 1712-02-27 1712-02-28 1712-02-29 1712-02-30 1712-03-01 1712-03-02), dates)
115
+ assert_equal([[true]], jdns.uniq)
116
+ end
117
+
118
+ def test__swedish_easter
119
+
120
+ dates = []
121
+ civil = When.Calendar('Civil?old=Swedish&reform_date=1753-03-01')
122
+ ((1700..1711).to_a + (1740..1752).to_a+[1802,1805,1818]).each do |year|
123
+ dates << When.tm_pos(year, {:frame=>civil}).easter.to_s
124
+ end
125
+ assert_equal(%w(1700-04-01 1701-04-21 1702-04-06 1703-03-29 1704-04-17 1705-04-02 1706-03-25
126
+ 1707-04-14 1708-04-05 1709-04-18 1710-04-10 1711-03-26 1740-04-06 1741-03-22
127
+ 1742-03-14 1743-04-03 1744-03-18 1745-04-07 1746-03-30 1747-03-22 1748-04-03
128
+ 1749-03-26 1750-03-18 1751-03-31 1752-03-22 1802-04-25 1805-04-21 1818-03-29), dates)
129
+ end
130
+ end
131
+
132
+ class Civil < MiniTest::TestCase
133
+ def test__border
134
+ frame = When.Calendar('Civil?reform=1752-9-14&border=0-3-25(1753)0-1-1')
135
+ assert_equal("1641=03-24", (frame ^ When.when?('1642-4-3') ).to_s)
136
+ assert_equal("1642-03-25", (frame ^ When.when?('1642-4-4') ).to_s)
137
+ assert_equal("1752-12-31", (frame ^ When.when?('1752-12-31')).to_s)
138
+ assert_equal("1753-01-01", (frame ^ When.when?('1753-1-1') ).to_s)
139
+ assert_equal("1753-03-24", (frame ^ When.when?('1753-3-24') ).to_s)
140
+ assert_equal("1753-03-25", (frame ^ When.when?('1753-3-25') ).to_s)
141
+ end
142
+
143
+ def test__reform_inc
144
+ sample = %w(
145
+ 1582-09-30 1582-10-01 1582-10-02 1582-10-03 1582-10-04 1582-10-15 1582-10-16 1582-10-17
146
+ 1582-10-18 1582-10-19 1582-10-20 1582-10-21 1582-10-22 1582-10-23 1582-10-24 1582-10-25
147
+ 1582-10-26 1582-10-27 1582-10-28 1582-10-29 1582-10-30 1582-10-31 1582-11-01 1582-11-02
148
+ 1582-11-03)
149
+ date = When.when?('1582-9-30', :frame=>'Civil?reform=1582-10-15')
150
+ 25.times do
151
+ assert_equal(sample.shift, date.to_s)
152
+ date = date + When::P1D
153
+ end
154
+ end
155
+
156
+ def test__reform_dec
157
+ sample = %w(
158
+ 1582-11-01 1582-10-31 1582-10-30 1582-10-29 1582-10-28 1582-10-27 1582-10-26 1582-10-25
159
+ 1582-10-24 1582-10-23 1582-10-22 1582-10-21 1582-10-20 1582-10-19 1582-10-18 1582-10-17
160
+ 1582-10-16 1582-10-15 1582-10-04 1582-10-03 1582-10-02 1582-10-01 1582-09-30 1582-09-29
161
+ 1582-09-28)
162
+ date = When.when?('1582-11-01', :frame=>'Civil?reform=1582-10-15')
163
+ 25.times do
164
+ assert_equal(sample.shift, date.to_s)
165
+ date = date - When::P1D
166
+ end
167
+ end
168
+
169
+ def test__reform_year
170
+ date = When.when?('1752^^Civil?reform=1752-9-14&border=(1000)0-3-25(1753)0-1-1')
171
+ assert_equal(
172
+ [[1752,
173
+ [[3,
174
+ ["*", 1, 2, 3, 4, 5, 6, 7],
175
+ ["*", 8, 9, 10, 11, 12, 13, 14],
176
+ ["*", 15, 16, 17, 18, 19, 20, 21],
177
+ ["*", 22, 23, 24, 25, 26, 27, 28],
178
+ ["*", 29, 30, 31, "*", "*", "*", "*"]]],
179
+ [[4,
180
+ ["*", "*", "*", "*", 1, 2, 3, 4],
181
+ ["*", 5, 6, 7, 8, 9, 10, 11],
182
+ ["*", 12, 13, 14, 15, 16, 17, 18],
183
+ ["*", 19, 20, 21, 22, 23, 24, 25],
184
+ ["*", 26, 27, 28, 29, 30, "*", "*"]]],
185
+ [[5,
186
+ ["*", "*", "*", "*", "*", "*", 1, 2],
187
+ ["*", 3, 4, 5, 6, 7, 8, 9],
188
+ ["*", 10, 11, 12, 13, 14, 15, 16],
189
+ ["*", 17, 18, 19, 20, 21, 22, 23],
190
+ ["*", 24, 25, 26, 27, 28, 29, 30],
191
+ ["*", 31, "*", "*", "*", "*", "*", "*"]]],
192
+ [[6,
193
+ ["*", "*", 1, 2, 3, 4, 5, 6],
194
+ ["*", 7, 8, 9, 10, 11, 12, 13],
195
+ ["*", 14, 15, 16, 17, 18, 19, 20],
196
+ ["*", 21, 22, 23, 24, 25, 26, 27],
197
+ ["*", 28, 29, 30, "*", "*", "*", "*"]]],
198
+ [[7,
199
+ ["*", "*", "*", "*", 1, 2, 3, 4],
200
+ ["*", 5, 6, 7, 8, 9, 10, 11],
201
+ ["*", 12, 13, 14, 15, 16, 17, 18],
202
+ ["*", 19, 20, 21, 22, 23, 24, 25],
203
+ ["*", 26, 27, 28, 29, 30, 31, "*"]]],
204
+ [[8,
205
+ ["*", "*", "*", "*", "*", "*", "*", 1],
206
+ ["*", 2, 3, 4, 5, 6, 7, 8],
207
+ ["*", 9, 10, 11, 12, 13, 14, 15],
208
+ ["*", 16, 17, 18, 19, 20, 21, 22],
209
+ ["*", 23, 24, 25, 26, 27, 28, 29],
210
+ ["*", 30, 31, "*", "*", "*", "*", "*"]]],
211
+ [[9,
212
+ ["*", "*", "*", 1, 2, 14, 15, 16],
213
+ ["*", 17, 18, 19, 20, 21, 22, 23],
214
+ ["*", 24, 25, 26, 27, 28, 29, 30]]],
215
+ [[10,
216
+ ["*", 1, 2, 3, 4, 5, 6, 7],
217
+ ["*", 8, 9, 10, 11, 12, 13, 14],
218
+ ["*", 15, 16, 17, 18, 19, 20, 21],
219
+ ["*", 22, 23, 24, 25, 26, 27, 28],
220
+ ["*", 29, 30, 31, "*", "*", "*", "*"]]],
221
+ [[11,
222
+ ["*", "*", "*", "*", 1, 2, 3, 4],
223
+ ["*", 5, 6, 7, 8, 9, 10, 11],
224
+ ["*", 12, 13, 14, 15, 16, 17, 18],
225
+ ["*", 19, 20, 21, 22, 23, 24, 25],
226
+ ["*", 26, 27, 28, 29, 30, "*", "*"]]],
227
+ [[12,
228
+ ["*", "*", "*", "*", "*", "*", 1, 2],
229
+ ["*", 3, 4, 5, 6, 7, 8, 9],
230
+ ["*", 10, 11, 12, 13, 14, 15, 16],
231
+ ["*", 17, 18, 19, 20, 21, 22, 23],
232
+ ["*", 24, 25, 26, 27, 28, 29, 30],
233
+ ["*", 31, "*", "*", "*", "*", "*", "*"]]]]],
234
+ date.year_included('Sunday') {|d,b|
235
+ case b
236
+ when When::YEAR ; d[When::YEAR]
237
+ when When::MONTH ; d[When::MONTH]
238
+ when When::DAY ; d[When::DAY]
239
+ else ; '*'
240
+ end
241
+ }
242
+ )
243
+ end
244
+ end
245
+ end