when_exe 0.3.6 → 0.3.7

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