when_exe 0.3.7 → 0.3.8

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 (108) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +210 -171
  3. data/bin/irb.rc +1 -0
  4. data/lib/when_exe.rb +78 -53
  5. data/lib/when_exe/basictypes.rb +27 -8
  6. data/lib/when_exe/calendarnote.rb +848 -805
  7. data/lib/when_exe/calendartypes.rb +110 -240
  8. data/lib/when_exe/coordinates.rb +2440 -2175
  9. data/lib/when_exe/core/compatibility.rb +1 -1
  10. data/lib/when_exe/core/duration.rb +13 -11
  11. data/lib/when_exe/core/extension.rb +38 -45
  12. data/lib/when_exe/ephemeris.rb +43 -14
  13. data/lib/when_exe/ephemeris/eclipse.rb +149 -0
  14. data/lib/when_exe/ephemeris/notes.rb +39 -7
  15. data/lib/when_exe/icalendar.rb +2 -6
  16. data/lib/when_exe/inspect.rb +1408 -1399
  17. data/lib/when_exe/parts/enumerator.rb +486 -477
  18. data/lib/when_exe/parts/resource.rb +1101 -1069
  19. data/lib/when_exe/parts/timezone.rb +6 -5
  20. data/lib/when_exe/region/babylonian.rb +405 -405
  21. data/lib/when_exe/region/bahai.rb +21 -61
  22. data/lib/when_exe/region/chinese/epochs.rb +81 -81
  23. data/lib/when_exe/region/chinese/twins.rb +51 -51
  24. data/lib/when_exe/region/christian.rb +7 -2
  25. data/lib/when_exe/region/coptic.rb +1 -1
  26. data/lib/when_exe/region/discordian.rb +9 -16
  27. data/lib/when_exe/region/french.rb +1 -1
  28. data/lib/when_exe/region/hanke_henry.rb +57 -0
  29. data/lib/when_exe/region/indian.rb +41 -73
  30. data/lib/when_exe/region/international_fixed.rb +97 -0
  31. data/lib/when_exe/region/iranian.rb +203 -203
  32. data/lib/when_exe/region/japanese.rb +13 -13
  33. data/lib/when_exe/region/japanese/eclipses.rb +1194 -0
  34. data/lib/when_exe/region/japanese/notes.rb +1482 -1383
  35. data/lib/when_exe/region/japanese/residues.rb +726 -721
  36. data/lib/when_exe/region/japanese/twins.rb +37 -37
  37. data/lib/when_exe/region/jewish.rb +2 -2
  38. data/lib/when_exe/region/pax.rb +60 -0
  39. data/lib/when_exe/region/positivist.rb +100 -0
  40. data/lib/when_exe/region/roman.rb +333 -334
  41. data/lib/when_exe/region/shire.rb +3 -20
  42. data/lib/when_exe/region/thai.rb +2 -2
  43. data/lib/when_exe/region/tibetan.rb +3 -3
  44. data/lib/when_exe/region/tranquility.rb +208 -0
  45. data/lib/when_exe/region/vanishing_leprechaun.rb +53 -0
  46. data/lib/when_exe/region/vietnamese.rb +4 -4
  47. data/lib/when_exe/region/world.rb +9 -13
  48. data/lib/when_exe/region/world_season.rb +89 -0
  49. data/lib/when_exe/region/zoroastrian.rb +4 -2
  50. data/lib/when_exe/tmobjects.rb +14 -4
  51. data/lib/when_exe/tmposition.rb +239 -81
  52. data/lib/when_exe/tmreference.rb +57 -28
  53. data/lib/when_exe/version.rb +1 -1
  54. data/link_to_online_documents +6 -3
  55. data/test/examples/today.rb +1 -1
  56. data/test/scripts.rb +23 -0
  57. data/test/scripts/2.ext.rb +169 -0
  58. data/test/scripts/2.rb +169 -0
  59. data/test/scripts/3.ext.rb +133 -0
  60. data/test/scripts/3.rb +134 -0
  61. data/test/scripts/4.ext.rb +112 -0
  62. data/test/scripts/4.min.rb +65 -0
  63. data/test/scripts/4.rb +136 -0
  64. data/test/scripts/5.ext.rb +78 -0
  65. data/test/scripts/5.rb +81 -0
  66. data/test/scripts/6.gcal.rb +131 -0
  67. data/test/scripts/6.rb +205 -0
  68. data/test/scripts/6.tz.rb +105 -0
  69. data/test/scripts/7.phase.rb +109 -0
  70. data/test/scripts/7.rb +95 -0
  71. data/test/scripts/7.term.rb +128 -0
  72. data/test/scripts/7.week.rb +84 -0
  73. data/test/scripts/8.ext.rb +61 -0
  74. data/test/scripts/8.rb +62 -0
  75. data/test/scripts/9.ext.rb +131 -0
  76. data/test/scripts/9.rb +130 -0
  77. data/test/scripts/chinese-luni-solar.rb +52 -0
  78. data/test/{examples → scripts}/geometric_complex.rb +41 -41
  79. data/test/scripts/geometric_complex.txt +18 -0
  80. data/test/scripts/korea.rb +59 -0
  81. data/test/scripts/thai-reviewed.txt +211 -0
  82. data/test/scripts/thai.rb +36 -0
  83. data/test/scripts/thai.txt +210 -0
  84. data/test/test.rb +7 -0
  85. data/test/test/basictypes.rb +22 -0
  86. data/test/test/coordinates.rb +2 -1
  87. data/test/test/ephemeris.rb +34 -2
  88. data/test/test/icalendar.rb +12 -0
  89. data/test/test/inspect.rb +37 -1
  90. data/test/test/parts.rb +4 -3
  91. data/test/test/region/armenian.rb +20 -0
  92. data/test/test/region/bahai.rb +58 -0
  93. data/test/test/region/chinese.rb +14 -3
  94. data/test/test/region/christian.rb +16 -35
  95. data/test/test/region/discordian.rb +20 -0
  96. data/test/test/region/indian.rb +30 -2
  97. data/test/test/region/japanese.rb +24 -0
  98. data/test/test/region/jewish.rb +2 -0
  99. data/test/test/region/m17n.rb +9 -0
  100. data/test/test/region/reforms.rb +121 -0
  101. data/test/test/region/residue.rb +17 -11
  102. data/test/test/region/shire.rb +58 -0
  103. data/test/test/region/swedish.rb +45 -0
  104. data/test/test/region/zoroastrian.rb +58 -0
  105. data/test/test/tmobjects.rb +74 -0
  106. data/test/test/tmposition.rb +468 -397
  107. data/when_exe.gemspec +2 -2
  108. metadata +49 -6
@@ -1,397 +1,468 @@
1
- # -*- coding: utf-8 -*-
2
- =begin
3
- Copyright (C) 2011-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::TM
10
-
11
- #
12
- # (5.4) Temporal Position Package
13
- #
14
- #
15
-
16
- class IndeterminateValue < MiniTest::TestCase
17
- def test_nothing
18
- end
19
- end
20
-
21
- class Position < MiniTest::TestCase
22
- def test__forward
23
- pos = When::TM::Position.new('2013-11-12')
24
- assert_equal(2456609, pos.to_i)
25
- end
26
- end
27
-
28
- class TemporalPosition < MiniTest::TestCase
29
- def test__instance
30
- [["19800203T234512.33+0900", "1980-02-03T23:45:12.33+09:00"],
31
- ["19800203T234512.33Z", "1980-02-03T23:45:12.33Z"],
32
- ["19800203T234512", "1980-02-03T23:45:12Z"],
33
- ["19800203T2345", "1980-02-03T23:45Z"],
34
- ["19800203T23", "1980-02-03T23Z"],
35
- ["19800203T", "1980-02-03TZ"],
36
- ["19800203", "1980-02-03"],
37
- ["1980-02", "1980-02"],
38
- ["S33.07.31", "S33(1958).07.31"],
39
- ["S33.07.31/", "S33(1958).07.31"],
40
- ["1980T-0700", "1980T-07:00"],
41
- ["T234512-0700", "T23:45:12-07:00"],
42
- ["H2(1990)-05-11T23:45:12-07:00", "H02(1990).05.11T23:45:12-07:00"],
43
- ["T3(1914)=05-11T23:45:12-07:00", "T03(1914)=05.11T23:45:12-07:00"], # TODO
44
- ["S64.01.07", "S64(1989).01.07"],
45
- ["2001-08-02/After", "2001-08-02"],
46
- ["Before/2001-09-10", "2001-09-10"]].each do |sample|
47
- assert_equal(sample[1], When.when?(sample[0]).to_s)
48
- end
49
- assert_equal(["1980-02-03","1980-02-05","1980-02-06","1980-02-09"], When.when?(<<LIST).map {|date| date.to_s})
50
- 19800203
51
- 19800205
52
- 19800206
53
- 19800209
54
- LIST
55
- assert_equal("2001-08-02..2001-09-10", When.when?("2001-08-02/09-10").to_s)
56
- assert_equal("1980-02-01", When.when?("800201", {:abbr=>1970}).to_s)
57
- # assert_equal(nil, When.TemporalPosition(2011,2,29))
58
- assert_equal('2011-03-01', When.TemporalPosition(2011,2,29).to_s)
59
- assert_equal(nil, When.TemporalPosition(2011,2,29, {:invalid=>:check}))
60
- assert_raises(ArgumentError) { When.TemporalPosition(2011,2,29, {:invalid=>:raise}) }
61
- end
62
-
63
- def test__to_date
64
- if ::Object.const_defined?(:Date) && Date.respond_to?(:civil)
65
- assert(/\ATue Jun 7 00:00:00 (\+00:00|Z) 2011\z/ =~ When.when?("2011-06-07").to_date.strftime('%+'))
66
- end
67
- end
68
-
69
- def test__to_date_time
70
- if ::Object.const_defined?(:Date) && Date.respond_to?(:civil)
71
- assert(/Tue Jun 7 16:17:36 \+09:?00 2011\z/ =~ When.when?("2011-06-07T16:17:36+09:00").to_date_time.strftime('%+'))
72
- end
73
- end
74
- end
75
-
76
- class Coordinate < MiniTest::TestCase
77
- def test_nothing
78
- end
79
- end
80
-
81
- class JulianDate < MiniTest::TestCase
82
- def test_nothing
83
- end
84
- end
85
-
86
- class OrdinalPosition < MiniTest::TestCase
87
- def test_nothing
88
- end
89
- end
90
-
91
- class ClockTime < MiniTest::TestCase
92
- def test_nothing
93
- end
94
- end
95
-
96
- class CalDate < MiniTest::TestCase
97
- def test__floor
98
- date4 = When.when?("19820606^^Julian")
99
- [[-2, "1982"],
100
- [-1, "1982-06"],
101
- [ 0, "1982-06-06"]].each do |sample|
102
- assert_equal(sample[1], date4.floor(sample[0]).to_s)
103
- end
104
- end
105
-
106
- def test__week
107
- date = When.when?('20110517')
108
- assert_equal("2011-05-16...2011-05-23", date.week_included.to_s)
109
- [
110
- ['MO', "2011-05-16...2011-05-23"],
111
- ['TU', "2011-05-17...2011-05-24"],
112
- ['WE', "2011-05-11...2011-05-18"],
113
- ['TH', "2011-05-12...2011-05-19"],
114
- ['FR', "2011-05-13...2011-05-20"],
115
- ['SA', "2011-05-14...2011-05-21"],
116
- ['SU', "2011-05-15...2011-05-22"]
117
- ].each do |sample|
118
- assert_equal(sample[1], date.week_included(sample[0]).to_s)
119
- end
120
- [
121
- [-1, "2011-05-09...2011-05-16"],
122
- [ 0, "2011-05-16...2011-05-23"],
123
- [+1, "2011-05-23...2011-05-30"],
124
- ].each do |sample|
125
- assert_equal(sample[1], date.week_included(sample[0]).to_s)
126
- end
127
- end
128
- end
129
-
130
- class DateAndTime < MiniTest::TestCase
131
- def test__caret
132
- week = When.Resource("_co:Residue?divisor=7")
133
- date = When.TemporalPosition(2010,11,30, 6, 30)
134
- assert_equal("2010-11-30T06:30Z", date.to_s)
135
- it = date ^ week
136
- assert_equal("2010-12-06T06:30Z", it.next.to_s)
137
- assert_equal("2010-12-13T06:30Z", it.next.to_s)
138
- assert_equal("2010-12-20T06:30Z", it.next.to_s)
139
- it = date ^ When.Duration(2 * When::TM::Duration::DAY)
140
- assert_equal("2010-11-30T06:30Z", it.next.to_s)
141
- assert_equal("2010-12-02T06:30Z", it.next.to_s)
142
- assert_equal("2010-12-04T06:30Z", it.next.to_s)
143
- end
144
-
145
- def test__modulo
146
- week = When.Resource("_co:Residue?divisor=7")
147
- weekName = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
148
- obj1 = When.when?("20100928T234512.33+0900^^Gregorian")
149
- assert_equal("Tue", weekName[obj1 % week])
150
- obj2 = When.when?("20100928T234512.33-0600^^Gregorian")
151
- assert_equal("Tue", weekName[obj2 % week])
152
- end
153
-
154
- def test__minus
155
- obj1 = When.when?("20100928T234512.33+0900^^Gregorian")
156
- obj2 = When.when?("20100928T234512.33-0600^^Gregorian")
157
- assert_equal("2010-08-28T23:45:12.33+09:00", (obj1 - When::Duration("P1M")).to_s)
158
- assert_equal(0.625 * When::TM::Duration::DAY, (obj2 - obj1).duration)
159
- assert_equal("2010-09-13T23:45:12.33-06:00", (obj2 - 15).to_s)
160
- end
161
-
162
- def test__plus
163
- obj1 = When.when?("20100928T234512.33+0900^^Gregorian")
164
- [["P3D", "2010-10-01T23:45:12.33+09:00"],
165
- ["P1Y", "2011-09-28T23:45:12.33+09:00"],
166
- ["P1M", "2010-10-28T23:45:12.33+09:00"],
167
- ["PT3H", "2010-09-29T02:45:12.33+09:00"],
168
- ["P3W", "2010-10-19T23:45:12.33+09:00"]].each do |sample|
169
- assert_equal(sample[1], (obj1 + When::Duration(sample[0])).to_s)
170
- end
171
-
172
- obj2 = When.when?("19820606T1234^^Julian")
173
- [["PT2H15M", "1982-06-06T14:49Z"],
174
- ["PT3H", "1982-06-06T15:34Z"]].each do |sample|
175
- assert_equal(sample[1], (obj2 + When::Duration(sample[0])).to_s)
176
- end
177
-
178
- ic = When.Resource("examples/NewYork.ics")
179
- tz1 = When::V::Timezone["America/New_York"]
180
-
181
- [tz1].each do |tz|
182
- When::TM::Clock.local_time = tz
183
- obj3 = When.when?("1997-04-06T00:00:00", {:clock=>tz})
184
- [["PT1H", "1997-04-06T01:00:00-05:00"],
185
- ["PT2H", "1997-04-06T02:00:00-04:00"],
186
- ["PT3H", "1997-04-06T03:00:00-04:00"],
187
- [1 * When::TM::Duration::HOUR, "1997-04-06T01:00:00-05:00"],
188
- [2 * When::TM::Duration::HOUR, "1997-04-06T03:00:00-04:00"],
189
- [3 * When::TM::Duration::HOUR, "1997-04-06T04:00:00-04:00"]].each do |sample|
190
- assert_equal(sample[1], (obj3 + When::Duration(sample[0])).to_s)
191
- end
192
-
193
- obj4 = When.when?("1997-10-26T00:00:00", {:clock=>tz})
194
- [["PT1H", "1997-10-26T01:00:00-04:00"],
195
- ["PT2H", "1997-10-26T02:00:00-05:00"], # *
196
- ["PT3H", "1997-10-26T03:00:00-05:00"],
197
- [1 * When::TM::Duration::HOUR, "1997-10-26T01:00:00-04:00"],
198
- [2 * When::TM::Duration::HOUR, "1997-10-26T01:00:00-05:00"], # *
199
- [3 * When::TM::Duration::HOUR, "1997-10-26T02:00:00-05:00"]].each do |sample|
200
- assert_equal(sample[1], (obj4 + When::Duration(sample[0])).to_s)
201
- end
202
- end
203
- end
204
-
205
- def test__trans
206
- ic = When.Resource("examples/NewYork.ics")
207
- tz = When::V::Timezone["America/New_York"]
208
-
209
- sample = %w(1997-04-06T00:00:00-05:00 1997-04-06T01:00:00-05:00
210
- 1997-04-06T03:00:00-04:00 1997-04-06T04:00:00-04:00
211
- 1997-04-05T23:00:00-05:00 1997-04-06T00:00:00-05:00
212
- 1997-04-06T01:00:00-05:00 1997-04-06T03:00:00-04:00
213
- 1997-10-26T00:00:00-04:00 1997-10-26T01:00:00-04:00
214
- 1997-10-26T01:00:00-05:00 1997-10-26T02:00:00-05:00
215
- 1997-10-26T01:00:00-04:00 1997-10-26T01:00:00-05:00
216
- 1997-10-26T02:00:00-05:00 1997-10-26T03:00:00-05:00)
217
-
218
- %w(1997-04-06T00:00:00-05:00 1997-04-06T00:00:00-04:00
219
- 1997-10-26T00:00:00-04:00 1997-10-26T00:00:00-05:00).each do |time|
220
- date = When.when?(time)
221
- 4.times do
222
- assert_equal(sample.shift, (tz ^ date).to_s)
223
- date += When::Duration('PT1H')
224
- end
225
- end
226
- end
227
-
228
- if Object.const_defined?(:TZInfo)
229
- def test__trans_tzinfo
230
- tz = When::Parts::Timezone["America/New_York"]
231
-
232
- sample = %w(1997-04-06T00:00:00-05:00 1997-04-06T01:00:00-05:00
233
- 1997-04-06T03:00:00-04:00 1997-04-06T04:00:00-04:00
234
- 1997-04-05T23:00:00-05:00 1997-04-06T00:00:00-05:00
235
- 1997-04-06T01:00:00-05:00 1997-04-06T03:00:00-04:00
236
- 1997-10-26T00:00:00-04:00 1997-10-26T01:00:00-04:00
237
- 1997-10-26T01:00:00-05:00 1997-10-26T02:00:00-05:00
238
- 1997-10-26T01:00:00-04:00 1997-10-26T01:00:00-05:00
239
- 1997-10-26T02:00:00-05:00 1997-10-26T03:00:00-05:00)
240
-
241
- %w(1997-04-06T00:00:00-05:00 1997-04-06T00:00:00-04:00
242
- 1997-10-26T00:00:00-04:00 1997-10-26T00:00:00-05:00).each do |time|
243
- date = When.when?(time)
244
- 4.times do
245
- assert_equal(sample.shift, (tz ^ date).to_s)
246
- date += When::Duration('PT1H')
247
- end
248
- end
249
- end
250
-
251
- def test__plus_tzinfo
252
- obj4 = When.when?("1997-10-26T00:00:00", {:clock=>When::Parts::Timezone["America/New_York"]})
253
- [["PT59M","1997-10-26T00:59:00-04:00"],
254
- ["PT1H", "1997-10-26T01:00:00-04:00"],
255
- ["PT2H", "1997-10-26T02:00:00-05:00"], # "1997-10-26T02:00:00-04:00" - TODO !!
256
- ["PT3H", "1997-10-26T03:00:00-05:00"],
257
- [1 * When::TM::Duration::HOUR, "1997-10-26T01:00:00-04:00"],
258
- [2 * When::TM::Duration::HOUR, "1997-10-26T01:00:00-05:00"], # *
259
- [3 * When::TM::Duration::HOUR, "1997-10-26T02:00:00-05:00"]].each do |sample|
260
- assert_equal(sample[1], (obj4 + When::Duration(sample[0])).to_s)
261
- end
262
- end
263
- else
264
- puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
265
- end
266
-
267
- def test__floor_date_and_time
268
- date5 = When.when?("1982-06-06T12:34:56.78^^Julian")
269
- sample = [
270
- "1982TZ",
271
- "1982-06TZ",
272
- "1982-06-06TZ",
273
- "1982-06-06T12Z",
274
- "1982-06-06T12:34Z",
275
- "1982-06-06T12:34:56Z",
276
- "1982-06-06T12:34:56.7Z",
277
- "1982-06-06T12:34:56.78Z"
278
- ]
279
- (-2..5).each do |i|
280
- assert_equal(sample.shift, date5.floor(i).to_s)
281
- end
282
- end
283
-
284
- def test__floor_year_bordered_date
285
- sample = [
286
- %w(AM6497(0989)*09.01 AM6497(0989)*09.01),
287
- %w(AM6497(0989)*10.01 AM6497(0989)*09.01),
288
- %w(AM6497(0989)*11.01 AM6497(0989)*09.01),
289
- %w(AM6497(0989)*12.01 AM6497(0989)*09.01),
290
- %w(AM6497(0989).01.01 AM6497(0989)*09.01),
291
- %w(AM6497(0989).02.01 AM6497(0989)*09.01),
292
- %w(AM6497(0989).03.01 AM6497(0989)*09.01),
293
- %w(AM6497(0989).04.01 AM6497(0989)*09.01),
294
- %w(AM6497(0989).05.01 AM6497(0989)*09.01),
295
- %w(AM6497(0989).06.01 AM6497(0989)*09.01),
296
- %w(AM6497(0989).07.01 AM6497(0989)*09.01),
297
- %w(AM6497(0989).08.01 AM6497(0989)*09.01),
298
- %w(AM6498(0990)*09.01 AM6498(0990)*09.01)
299
- ]
300
-
301
- date = When.when?(sample[0][0])
302
- 13.times do
303
- assert_equal(sample.shift, [date.to_s, date.floor(When::YEAR, When::DAY).to_s])
304
- date += When::P1M
305
- end
306
-
307
- date = When.when?('AM6500(0992).02.29')
308
- assert_equal(%w(AM6500(0992).02.29 0992-02-29), [date.to_s, (When::Julian ^ date).to_s])
309
-
310
- date = When.Calendar('Gregorian?border=1959-2-23') ^ When.tm_pos(2014,2,22)
311
- assert_equal([When.Pair(54,1), 2, 22], date.cal_date)
312
- assert_equal('0054-02-23', date.floor(When::YEAR, When::DAY).to_s)
313
-
314
- date = When.Calendar('Gregorian?border=1959-2-23') ^ When.tm_pos(2014,2,23)
315
- assert_equal([55, 2, 23], date.cal_date)
316
- assert_equal('0055-02-23', date.floor(When::YEAR, When::DAY).to_s)
317
-
318
- date = When.Calendar('Gregorian?border=1959-2-23') ^ When.tm_pos(2014,2,24)
319
- assert_equal([55, 2, 24], date.cal_date)
320
- assert_equal('0055-02-23', date.floor(When::YEAR, When::DAY).to_s)
321
-
322
- greg = When.Calendar('Gregorian?border=Easter')
323
- assert_equal('2012=03-30', (greg ^ When.tm_pos(2013, 3, 30)).to_s)
324
- assert_equal('2013-03-31', (greg ^ When.tm_pos(2013, 3, 31)).to_s)
325
- assert_equal('2013=03-31', (greg ^ When.tm_pos(2014, 3, 31)).to_s)
326
- assert_equal('2014-04-20', (greg ^ When.tm_pos(2014, 4, 20)).to_s)
327
- end
328
-
329
- def test__floor_day_bordered_date
330
- sample1 = %w(
331
- Nabopolassar21(-604).12.30T=05:54:00+03:00
332
- Nabopolassar21(-604).12.30T=05:55:00+03:00
333
- NebuchadnezzarII01(-603).01.01T:05:56:00+03:00
334
- NebuchadnezzarII01(-603).01.01T:05:57:00+03:00)
335
-
336
- date = When.when?('Nabopolassar21.12.30T=05:54:00', :clock=>'+03:00?border=0-5-55-10')
337
- 4.times do
338
- assert_equal(sample1.shift, date.to_s)
339
- date += When::PT1M
340
- end
341
-
342
- sample2 = %w(
343
- NebuchadnezzarII01(-603).01.01T:18:13:00+03:00
344
- NebuchadnezzarII01(-603).01.01T:18:14:00+03:00
345
- NebuchadnezzarII01(-603).01.02T*18:15:00+03:00
346
- NebuchadnezzarII01(-603).01.02T*18:16:00+03:00)
347
-
348
- date = When.when?('NebuchadnezzarII1.1.1T18:13:00', :clock=>'+03:00?border=0*18-14-18')
349
- 4.times do
350
- assert_equal(sample2.shift, date.to_s)
351
- date += When::PT1M
352
- end
353
-
354
- sample3 = %w(
355
- Nabopolassar21(-604).12.30T=05:54:00+03:00
356
- Nabopolassar21(-604).12.30T=05:55:00+03:00
357
- NebuchadnezzarII01(-603).01.01T:05:56:00+03:00
358
- NebuchadnezzarII01(-603).01.01T:05:57:00+03:00)
359
-
360
- date = When.when?('Nabopolassar21.12.30T=05:54:00', :clock=>'+03:00?long=45&lat=32&border=Sunrise')
361
- 4.times do
362
- assert_equal(sample3.shift, date.to_s)
363
- date += When::PT1M
364
- end
365
-
366
- sample4 = %w(
367
- NebuchadnezzarII01(-603).01.01T:18:13:00+03:00
368
- NebuchadnezzarII01(-603).01.01T:18:14:00+03:00
369
- NebuchadnezzarII01(-603).01.02T*18:15:00+03:00
370
- NebuchadnezzarII01(-603).01.02T*18:16:00+03:00)
371
-
372
- date = When.when?('NebuchadnezzarII1.1.1T18:13:00', :clock=>'+03:00?long=45&lat=32&border=Sunset')
373
- 4.times do
374
- assert_equal(sample4.shift, date.to_s)
375
- date += When::PT1M
376
- end
377
-
378
- date = When.when?('NebuchadnezzarII1.1.1T:05:50:00', :clock=>'+03:00?border=0-06')
379
- assert_equal([1500903, 'Nabopolassar21(-604).12.30T:06:00+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
380
- date = When.when?('NebuchadnezzarII1.1.1T:06:00:00', :clock=>'+03:00?border=0-06')
381
- assert_equal([1500904, 'NebuchadnezzarII01(-603).01.01T:06:00+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
382
- date = When.when?('NebuchadnezzarII1.1.1T:05:50:00', :clock=>'+03:00?long=45&lat=32&border=Sunrise')
383
- assert_equal([1500903, 'Nabopolassar21(-604).12.30T:05:56+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
384
- date = When.when?('NebuchadnezzarII1.1.1T:06:00:00', :clock=>'+03:00?long=45&lat=32&border=Sunrise')
385
- assert_equal([1500904, 'NebuchadnezzarII01(-603).01.01T:05:55+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
386
-
387
- date = When.when?('NebuchadnezzarII1.1.1T:18:10:00', :clock=>'+03:00?border=0*18-15')
388
- assert_equal([1500904, 'NebuchadnezzarII01(-603).01.01T*18:15+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
389
- date = When.when?('NebuchadnezzarII1.1.2T*18:20:00', :clock=>'+03:00?border=0*18-15')
390
- assert_equal([1500905, 'NebuchadnezzarII01(-603).01.02T*18:15+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
391
- date = When.when?('NebuchadnezzarII1.1.1T:18:10:00', :clock=>'+03:00?long=45&lat=32&border=Sunset')
392
- assert_equal([1500904, 'NebuchadnezzarII01(-603).01.01T*18:13+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
393
- date = When.when?('NebuchadnezzarII1.1.2T*18:20:00', :clock=>'+03:00?long=45&lat=32&border=Sunset')
394
- assert_equal([1500905, 'NebuchadnezzarII01(-603).01.02T*18:14+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
395
- end
396
- end
397
- end
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2011-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::TM
10
+
11
+ #
12
+ # (5.4) Temporal Position Package
13
+ #
14
+ #
15
+
16
+ class IndeterminateValue < MiniTest::TestCase
17
+ def test_nothing
18
+ end
19
+ end
20
+
21
+ class Position < MiniTest::TestCase
22
+ def test__forward
23
+ pos = When::TM::Position.new('2013-11-12')
24
+ assert_equal(2456609, pos.to_i)
25
+ end
26
+ end
27
+
28
+ class TemporalPosition < MiniTest::TestCase
29
+ def test__instance
30
+ [["19800203T234512.33+0900", "1980-02-03T23:45:12.33+09:00"],
31
+ ["19800203T234512.33Z", "1980-02-03T23:45:12.33Z"],
32
+ ["19800203T234512", "1980-02-03T23:45:12Z"],
33
+ ["19800203T2345", "1980-02-03T23:45Z"],
34
+ ["19800203T23", "1980-02-03T23Z"],
35
+ ["19800203T", "1980-02-03TZ"],
36
+ ["19800203", "1980-02-03"],
37
+ ["1980-02", "1980-02"],
38
+ ["S33.07.31", "S33(1958).07.31"],
39
+ ["S33.07.31/", "S33(1958).07.31"],
40
+ ["1980T-0700", "1980T-07:00"],
41
+ ["T234512-0700", "T23:45:12-07:00"],
42
+ ["H2(1990)-05-11T23:45:12-07:00", "H02(1990).05.11T23:45:12-07:00"],
43
+ ["T3(1914)=05-11T23:45:12-07:00", "T03(1914)=05.11T23:45:12-07:00"], # TODO
44
+ ["S64.01.07", "S64(1989).01.07"],
45
+ ["2001-08-02/After", "2001-08-02"],
46
+ ["Before/2001-09-10", "2001-09-10"]].each do |sample|
47
+ assert_equal(sample[1], When.when?(sample[0]).to_s)
48
+ end
49
+ assert_equal(["1980-02-03","1980-02-05","1980-02-06","1980-02-09"], When.when?(<<LIST).map {|date| date.to_s})
50
+ 19800203
51
+ 19800205
52
+ 19800206
53
+ 19800209
54
+ LIST
55
+ assert_equal("2001-08-02..2001-09-10", When.when?("2001-08-02/09-10").to_s)
56
+ assert_equal(364, When.when?('20130101/1230').count) if Enumerable.method_defined?(:count)
57
+ assert_equal("1980-02-01", When.when?("800201", {:abbr=>1970}).to_s)
58
+ # assert_equal(nil, When.TemporalPosition(2011,2,29))
59
+ assert_equal('2011-03-01', When.TemporalPosition(2011,2,29).to_s)
60
+ assert_equal(nil, When.TemporalPosition(2011,2,29, {:invalid=>:check}))
61
+ assert_raises(ArgumentError) { When.TemporalPosition(2011,2,29, {:invalid=>:raise}) }
62
+ end
63
+
64
+ def test__to_date
65
+ if ::Object.const_defined?(:Date) && Date.respond_to?(:civil)
66
+ assert(/\ATue Jun 7 00:00:00 (\+00:00|Z) 2011\z/ =~ When.when?("2011-06-07").to_date.strftime('%+'))
67
+ end
68
+ end
69
+
70
+ def test__to_datetime
71
+ if ::Object.const_defined?(:Date) && Date.respond_to?(:civil)
72
+ assert(/Tue Jun 7 16:17:36 \+09:?00 2011\z/ =~ When.when?("2011-06-07T16:17:36+09:00").to_datetime.strftime('%+'))
73
+ end
74
+ end
75
+ end
76
+
77
+ class Coordinate < MiniTest::TestCase
78
+ def test_nothing
79
+ end
80
+ end
81
+
82
+ class JulianDate < MiniTest::TestCase
83
+ def test_nothing
84
+ end
85
+ end
86
+
87
+ class OrdinalPosition < MiniTest::TestCase
88
+ def test_nothing
89
+ end
90
+ end
91
+
92
+ class ClockTime < MiniTest::TestCase
93
+ def test_nothing
94
+ end
95
+ end
96
+
97
+ class CalDate < MiniTest::TestCase
98
+ def test__floor
99
+ date4 = When.when?("19820606^^Julian")
100
+ [[-2, "1982"],
101
+ [-1, "1982-06"],
102
+ [ 0, "1982-06-06"]].each do |sample|
103
+ assert_equal(sample[1], date4.floor(sample[0]).to_s)
104
+ end
105
+ end
106
+
107
+ def test__length
108
+ assert_equal(445, When.when?('AUC708.8.1').length(When::YEAR))
109
+ assert_equal(442, When.when?('太初1.6.1').length(When::YEAR))
110
+ end
111
+
112
+ def test__week
113
+ date = When.when?('20110517')
114
+ assert_equal("2011-05-16...2011-05-23", date.week_included.to_s)
115
+ [
116
+ ['MO', "2011-05-16...2011-05-23"],
117
+ ['TU', "2011-05-17...2011-05-24"],
118
+ ['WE', "2011-05-11...2011-05-18"],
119
+ ['TH', "2011-05-12...2011-05-19"],
120
+ ['FR', "2011-05-13...2011-05-20"],
121
+ ['SA', "2011-05-14...2011-05-21"],
122
+ ['SU', "2011-05-15...2011-05-22"]
123
+ ].each do |sample|
124
+ assert_equal(sample[1], date.week_included(sample[0]).to_s)
125
+ end
126
+ [
127
+ [-1, "2011-05-09...2011-05-16"],
128
+ [ 0, "2011-05-16...2011-05-23"],
129
+ [+1, "2011-05-23...2011-05-30"],
130
+ ].each do |sample|
131
+ assert_equal(sample[1], date.week_included(sample[0]).to_s)
132
+ end
133
+ end
134
+
135
+ def test__residue
136
+ assert_equal('2014-08-02', When.when?('2014-8-{SA}').to_s)
137
+ assert_equal('2014-08-30', When.when?('2014-8-{SA:-1}').to_s)
138
+ assert_equal('2014-08-21', When.when?('2014-{甲子&TH}').to_s)
139
+ assert_equal('2014-08-21', When.when?('2014.8.{甲子}').to_s)
140
+ assert_equal('2014-08-21', When.when?('{甲午}.8.{甲子}', :abbr=>2000).to_s)
141
+ assert_equal('平成26(2014).08.21', When.when?('平成{甲午}.8.{甲子}').to_s)
142
+
143
+ assert_equal('2014-08-02', When.tm_pos(2014, 8, When.Residue('SA')).to_s)
144
+ assert_equal('2014-08-30', When.tm_pos(2014, 8, When.Residue('SA:-1')).to_s)
145
+ assert_equal('2014-08-21', When.tm_pos(2014, When.Residue('甲子&TH')).to_s)
146
+ assert_equal('2014-08-21', When.tm_pos(2014, 8, When.Residue('甲子')).to_s)
147
+ assert_equal('2014-08-21', When.tm_pos(When.Residue('甲午'), 8, When.Residue('甲子'), :abbr=>2000).to_s)
148
+ assert_equal('平成26(2014).08.21', When.tm_pos('平成', When.Residue('甲午'), 8, When.Residue('甲子')).to_s)
149
+
150
+ assert_equal('2014-09-06', When.tm_pos(2014, 8, When.Residue('SA:6')).to_s)
151
+ assert_equal(nil, When.tm_pos(2014, 8, When.Residue('SA:6'), :invalid=>:check))
152
+ assert_raises(ArgumentError) {When.tm_pos(2014, 8, When.Residue('SA:6'), :invalid=>:raise)}
153
+ end
154
+
155
+ def test__calendar_reform_in_japan
156
+ date0 = When.when?('明治5.12.1')
157
+ date1 = date0 + When::P1M
158
+ sample = [%w(明治06(1873).01.01 1873-01-01),
159
+ %w(明治05(1872).12.02 1872-12-31),
160
+ %w(明治05(1872).12.01 1872-12-30)]
161
+ [date1, date1.prev, date1.prev.prev].each do |date|
162
+ assert_equal(sample.shift, [date.to_s, (When::Gregorian^date).to_s])
163
+ end
164
+
165
+ sample = %w(明治05(1872).12.01 明治05(1872).12.02)
166
+ date = When.when?('明治5.12.1')
167
+ date.month_included('Sun') do |d,b|
168
+ assert_equal(sample.shift, d.to_s) if b==When::DAY
169
+ end
170
+ end
171
+
172
+ def test__calendar_reform_in_england
173
+ frame = When.Calendar('Civil?reform=1752-9-14&border=0-3-25(1753)0-1-1')
174
+
175
+ assert_equal('1641=03-24', (frame ^ When.when?('1642-4-3')).to_s)
176
+ assert_equal('1642-03-25', (frame ^ When.when?('1642-4-4')).to_s)
177
+ assert_equal('1752-12-31', (frame ^ When.when?('1752-12-31')).to_s)
178
+ assert_equal('1753-01-01', (frame ^ When.when?('1753-1-1')).to_s)
179
+ assert_equal('1753-03-24', (frame ^ When.when?('1753-3-24')).to_s)
180
+ assert_equal('1753-03-25', (frame ^ When.when?('1753-3-25')).to_s)
181
+
182
+ # frame = When.Calendar('Civil?reform=1752-9-14&old=(Julian?border=0-3-25)')
183
+ sample = %w(1752-08-31 1752-09-01 1752-09-02 1752-09-14 1752-09-15 1752-09-16 1752-09-17 1752-09-18
184
+ 1752-09-19 1752-09-20 1752-09-21 1752-09-22 1752-09-23 1752-09-24 1752-09-25 1752-09-26)
185
+ date = When.when?('1752-8-31', :frame=>frame)
186
+ 16.times do
187
+ assert_equal(sample.shift, date.to_s)
188
+ date = date + When::P1D
189
+ end
190
+
191
+ sample = %w(1751-12-01 1751=01-01 1751=02-01 1751=03-01 1752-04-01 1752-05-01 1752-06-01 1752-07-01
192
+ 1752-08-01 1752-09-01 1752-10-01 1752-11-01 1752-12-01 1753-01-01 1753-02-01 1753-03-01)
193
+ date = When.when?('1751-12-1', :frame=>frame)
194
+ 16.times do
195
+ assert_equal(sample.shift, date.to_s)
196
+ date = date + When::P1M
197
+ end
198
+ end
199
+ end
200
+
201
+ class DateAndTime < MiniTest::TestCase
202
+ def test__caret
203
+ week = When.Resource("_co:Residue?divisor=7")
204
+ date = When.TemporalPosition(2010,11,30, 6, 30)
205
+ assert_equal("2010-11-30T06:30Z", date.to_s)
206
+ it = date ^ week
207
+ assert_equal("2010-12-06T06:30Z", it.next.to_s)
208
+ assert_equal("2010-12-13T06:30Z", it.next.to_s)
209
+ assert_equal("2010-12-20T06:30Z", it.next.to_s)
210
+ it = date ^ When.Duration(2 * When::TM::Duration::DAY)
211
+ assert_equal("2010-11-30T06:30Z", it.next.to_s)
212
+ assert_equal("2010-12-02T06:30Z", it.next.to_s)
213
+ assert_equal("2010-12-04T06:30Z", it.next.to_s)
214
+ end
215
+
216
+ def test__modulo
217
+ week = When.Resource("_co:Residue?divisor=7")
218
+ weekName = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
219
+ obj1 = When.when?("20100928T234512.33+0900^^Gregorian")
220
+ assert_equal("Tue", weekName[obj1 % week])
221
+ obj2 = When.when?("20100928T234512.33-0600^^Gregorian")
222
+ assert_equal("Tue", weekName[obj2 % week])
223
+ end
224
+
225
+ def test__minus
226
+ obj1 = When.when?("20100928T234512.33+0900^^Gregorian")
227
+ obj2 = When.when?("20100928T234512.33-0600^^Gregorian")
228
+ assert_equal("2010-08-28T23:45:12.33+09:00", (obj1 - When::Duration("P1M")).to_s)
229
+ assert_equal(0.625 * When::TM::Duration::DAY, (obj2 - obj1).duration)
230
+ assert_equal("2010-09-13T23:45:12.33-06:00", (obj2 - 15).to_s)
231
+ end
232
+
233
+ def test__plus
234
+ obj1 = When.when?("20100928T234512.33+0900^^Gregorian")
235
+ [["P3D", "2010-10-01T23:45:12.33+09:00"],
236
+ ["P1Y", "2011-09-28T23:45:12.33+09:00"],
237
+ ["P1M", "2010-10-28T23:45:12.33+09:00"],
238
+ ["PT3H", "2010-09-29T02:45:12.33+09:00"],
239
+ ["P3W", "2010-10-19T23:45:12.33+09:00"]].each do |sample|
240
+ assert_equal(sample[1], (obj1 + When::Duration(sample[0])).to_s)
241
+ end
242
+
243
+ obj2 = When.when?("19820606T1234^^Julian")
244
+ [["PT2H15M", "1982-06-06T14:49Z"],
245
+ ["PT3H", "1982-06-06T15:34Z"]].each do |sample|
246
+ assert_equal(sample[1], (obj2 + When::Duration(sample[0])).to_s)
247
+ end
248
+
249
+ ic = When.Resource("examples/NewYork.ics")
250
+ tz1 = When::V::Timezone["America/New_York"]
251
+
252
+ [tz1].each do |tz|
253
+ When::TM::Clock.local_time = tz
254
+ obj3 = When.when?("1997-04-06T00:00:00", {:clock=>tz})
255
+ [["PT1H", "1997-04-06T01:00:00-05:00"],
256
+ ["PT2H", "1997-04-06T02:00:00-04:00"],
257
+ ["PT3H", "1997-04-06T03:00:00-04:00"],
258
+ [1 * When::TM::Duration::HOUR, "1997-04-06T01:00:00-05:00"],
259
+ [2 * When::TM::Duration::HOUR, "1997-04-06T03:00:00-04:00"],
260
+ [3 * When::TM::Duration::HOUR, "1997-04-06T04:00:00-04:00"]].each do |sample|
261
+ assert_equal(sample[1], (obj3 + When::Duration(sample[0])).to_s)
262
+ end
263
+
264
+ obj4 = When.when?("1997-10-26T00:00:00", {:clock=>tz})
265
+ [["PT1H", "1997-10-26T01:00:00-04:00"],
266
+ ["PT2H", "1997-10-26T02:00:00-05:00"], # *
267
+ ["PT3H", "1997-10-26T03:00:00-05:00"],
268
+ [1 * When::TM::Duration::HOUR, "1997-10-26T01:00:00-04:00"],
269
+ [2 * When::TM::Duration::HOUR, "1997-10-26T01:00:00-05:00"], # *
270
+ [3 * When::TM::Duration::HOUR, "1997-10-26T02:00:00-05:00"]].each do |sample|
271
+ assert_equal(sample[1], (obj4 + When::Duration(sample[0])).to_s)
272
+ end
273
+ end
274
+ end
275
+
276
+ def test__trans
277
+ ic = When.Resource("examples/NewYork.ics")
278
+ tz = When::V::Timezone["America/New_York"]
279
+
280
+ sample = %w(1997-04-06T00:00:00-05:00 1997-04-06T01:00:00-05:00
281
+ 1997-04-06T03:00:00-04:00 1997-04-06T04:00:00-04:00
282
+ 1997-04-05T23:00:00-05:00 1997-04-06T00:00:00-05:00
283
+ 1997-04-06T01:00:00-05:00 1997-04-06T03:00:00-04:00
284
+ 1997-10-26T00:00:00-04:00 1997-10-26T01:00:00-04:00
285
+ 1997-10-26T01:00:00-05:00 1997-10-26T02:00:00-05:00
286
+ 1997-10-26T01:00:00-04:00 1997-10-26T01:00:00-05:00
287
+ 1997-10-26T02:00:00-05:00 1997-10-26T03:00:00-05:00)
288
+
289
+ %w(1997-04-06T00:00:00-05:00 1997-04-06T00:00:00-04:00
290
+ 1997-10-26T00:00:00-04:00 1997-10-26T00:00:00-05:00).each do |time|
291
+ date = When.when?(time)
292
+ 4.times do
293
+ assert_equal(sample.shift, (tz ^ date).to_s)
294
+ date += When::Duration('PT1H')
295
+ end
296
+ end
297
+ end
298
+
299
+ if Object.const_defined?(:TZInfo)
300
+ def test__trans_tzinfo
301
+ tz = When::Parts::Timezone["America/New_York"]
302
+
303
+ sample = %w(1997-04-06T00:00:00-05:00 1997-04-06T01:00:00-05:00
304
+ 1997-04-06T03:00:00-04:00 1997-04-06T04:00:00-04:00
305
+ 1997-04-05T23:00:00-05:00 1997-04-06T00:00:00-05:00
306
+ 1997-04-06T01:00:00-05:00 1997-04-06T03:00:00-04:00
307
+ 1997-10-26T00:00:00-04:00 1997-10-26T01:00:00-04:00
308
+ 1997-10-26T01:00:00-05:00 1997-10-26T02:00:00-05:00
309
+ 1997-10-26T01:00:00-04:00 1997-10-26T01:00:00-05:00
310
+ 1997-10-26T02:00:00-05:00 1997-10-26T03:00:00-05:00)
311
+
312
+ %w(1997-04-06T00:00:00-05:00 1997-04-06T00:00:00-04:00
313
+ 1997-10-26T00:00:00-04:00 1997-10-26T00:00:00-05:00).each do |time|
314
+ date = When.when?(time)
315
+ 4.times do
316
+ assert_equal(sample.shift, (tz ^ date).to_s)
317
+ date += When::Duration('PT1H')
318
+ end
319
+ end
320
+ end
321
+
322
+ def test__plus_tzinfo
323
+ obj4 = When.when?("1997-10-26T00:00:00", {:clock=>When::Parts::Timezone["America/New_York"]})
324
+ [["PT59M","1997-10-26T00:59:00-04:00"],
325
+ ["PT1H", "1997-10-26T01:00:00-04:00"],
326
+ ["PT2H", "1997-10-26T02:00:00-05:00"], # "1997-10-26T02:00:00-04:00" - TODO !!
327
+ ["PT3H", "1997-10-26T03:00:00-05:00"],
328
+ [1 * When::TM::Duration::HOUR, "1997-10-26T01:00:00-04:00"],
329
+ [2 * When::TM::Duration::HOUR, "1997-10-26T01:00:00-05:00"], # *
330
+ [3 * When::TM::Duration::HOUR, "1997-10-26T02:00:00-05:00"]].each do |sample|
331
+ assert_equal(sample[1], (obj4 + When::Duration(sample[0])).to_s)
332
+ end
333
+ end
334
+ else
335
+ puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
336
+ end
337
+
338
+ def test__floor_date_and_time
339
+ date5 = When.when?("1982-06-06T12:34:56.78^^Julian")
340
+ sample = [
341
+ "1982TZ",
342
+ "1982-06TZ",
343
+ "1982-06-06TZ",
344
+ "1982-06-06T12Z",
345
+ "1982-06-06T12:34Z",
346
+ "1982-06-06T12:34:56Z",
347
+ "1982-06-06T12:34:56.7Z",
348
+ "1982-06-06T12:34:56.78Z"
349
+ ]
350
+ (-2..5).each do |i|
351
+ assert_equal(sample.shift, date5.floor(i).to_s)
352
+ end
353
+ end
354
+
355
+ def test__floor_year_bordered_date
356
+ sample = [
357
+ %w(AM6497(0989)*09.01 AM6497(0989)*09.01),
358
+ %w(AM6497(0989)*10.01 AM6497(0989)*09.01),
359
+ %w(AM6497(0989)*11.01 AM6497(0989)*09.01),
360
+ %w(AM6497(0989)*12.01 AM6497(0989)*09.01),
361
+ %w(AM6497(0989).01.01 AM6497(0989)*09.01),
362
+ %w(AM6497(0989).02.01 AM6497(0989)*09.01),
363
+ %w(AM6497(0989).03.01 AM6497(0989)*09.01),
364
+ %w(AM6497(0989).04.01 AM6497(0989)*09.01),
365
+ %w(AM6497(0989).05.01 AM6497(0989)*09.01),
366
+ %w(AM6497(0989).06.01 AM6497(0989)*09.01),
367
+ %w(AM6497(0989).07.01 AM6497(0989)*09.01),
368
+ %w(AM6497(0989).08.01 AM6497(0989)*09.01),
369
+ %w(AM6498(0990)*09.01 AM6498(0990)*09.01)
370
+ ]
371
+
372
+ date = When.when?(sample[0][0])
373
+ 13.times do
374
+ assert_equal(sample.shift, [date.to_s, date.floor(When::YEAR, When::DAY).to_s])
375
+ date += When::P1M
376
+ end
377
+
378
+ date = When.when?('AM6500(0992).02.29')
379
+ assert_equal(%w(AM6500(0992).02.29 0992-02-29), [date.to_s, (When::Julian ^ date).to_s])
380
+
381
+ date = When.Calendar('Gregorian?border=1959-2-23') ^ When.tm_pos(2014,2,22)
382
+ assert_equal([When.Pair(54,1), 2, 22], date.cal_date)
383
+ assert_equal('0054-02-23', date.floor(When::YEAR, When::DAY).to_s)
384
+
385
+ date = When.Calendar('Gregorian?border=1959-2-23') ^ When.tm_pos(2014,2,23)
386
+ assert_equal([55, 2, 23], date.cal_date)
387
+ assert_equal('0055-02-23', date.floor(When::YEAR, When::DAY).to_s)
388
+
389
+ date = When.Calendar('Gregorian?border=1959-2-23') ^ When.tm_pos(2014,2,24)
390
+ assert_equal([55, 2, 24], date.cal_date)
391
+ assert_equal('0055-02-23', date.floor(When::YEAR, When::DAY).to_s)
392
+
393
+ greg = When.Calendar('Gregorian?border=Easter')
394
+ assert_equal('2012=03-30', (greg ^ When.tm_pos(2013, 3, 30)).to_s)
395
+ assert_equal('2013-03-31', (greg ^ When.tm_pos(2013, 3, 31)).to_s)
396
+ assert_equal('2013=03-31', (greg ^ When.tm_pos(2014, 3, 31)).to_s)
397
+ assert_equal('2014-04-20', (greg ^ When.tm_pos(2014, 4, 20)).to_s)
398
+ end
399
+
400
+ def test__floor_day_bordered_date
401
+ sample1 = %w(
402
+ Nabopolassar21(-604).12.30T=05:54:00+03:00
403
+ Nabopolassar21(-604).12.30T=05:55:00+03:00
404
+ NebuchadnezzarII01(-603).01.01T:05:56:00+03:00
405
+ NebuchadnezzarII01(-603).01.01T:05:57:00+03:00)
406
+
407
+ date = When.when?('Nabopolassar21.12.30T=05:54:00', :clock=>'+03:00?border=0-5-55-10')
408
+ 4.times do
409
+ assert_equal(sample1.shift, date.to_s)
410
+ date += When::PT1M
411
+ end
412
+
413
+ sample2 = %w(
414
+ NebuchadnezzarII01(-603).01.01T:18:13:00+03:00
415
+ NebuchadnezzarII01(-603).01.01T:18:14:00+03:00
416
+ NebuchadnezzarII01(-603).01.02T*18:15:00+03:00
417
+ NebuchadnezzarII01(-603).01.02T*18:16:00+03:00)
418
+
419
+ date = When.when?('NebuchadnezzarII1.1.1T18:13:00', :clock=>'+03:00?border=0*18-14-18')
420
+ 4.times do
421
+ assert_equal(sample2.shift, date.to_s)
422
+ date += When::PT1M
423
+ end
424
+
425
+ sample3 = %w(
426
+ Nabopolassar21(-604).12.30T=05:54:00+03:00
427
+ Nabopolassar21(-604).12.30T=05:55:00+03:00
428
+ NebuchadnezzarII01(-603).01.01T:05:56:00+03:00
429
+ NebuchadnezzarII01(-603).01.01T:05:57:00+03:00)
430
+
431
+ date = When.when?('Nabopolassar21.12.30T=05:54:00', :clock=>'+03:00?long=45&lat=32&border=Sunrise')
432
+ 4.times do
433
+ assert_equal(sample3.shift, date.to_s)
434
+ date += When::PT1M
435
+ end
436
+
437
+ sample4 = %w(
438
+ NebuchadnezzarII01(-603).01.01T:18:13:00+03:00
439
+ NebuchadnezzarII01(-603).01.01T:18:14:00+03:00
440
+ NebuchadnezzarII01(-603).01.02T*18:15:00+03:00
441
+ NebuchadnezzarII01(-603).01.02T*18:16:00+03:00)
442
+
443
+ date = When.when?('NebuchadnezzarII1.1.1T18:13:00', :clock=>'+03:00?long=45&lat=32&border=Sunset')
444
+ 4.times do
445
+ assert_equal(sample4.shift, date.to_s)
446
+ date += When::PT1M
447
+ end
448
+
449
+ date = When.when?('NebuchadnezzarII1.1.1T:05:50:00', :clock=>'+03:00?border=0-06')
450
+ assert_equal([1500903, 'Nabopolassar21(-604).12.30T:06:00+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
451
+ date = When.when?('NebuchadnezzarII1.1.1T:06:00:00', :clock=>'+03:00?border=0-06')
452
+ assert_equal([1500904, 'NebuchadnezzarII01(-603).01.01T:06:00+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
453
+ date = When.when?('NebuchadnezzarII1.1.1T:05:50:00', :clock=>'+03:00?long=45&lat=32&border=Sunrise')
454
+ assert_equal([1500903, 'Nabopolassar21(-604).12.30T:05:56+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
455
+ date = When.when?('NebuchadnezzarII1.1.1T:06:00:00', :clock=>'+03:00?long=45&lat=32&border=Sunrise')
456
+ assert_equal([1500904, 'NebuchadnezzarII01(-603).01.01T:05:55+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
457
+
458
+ date = When.when?('NebuchadnezzarII1.1.1T:18:10:00', :clock=>'+03:00?border=0*18-15')
459
+ assert_equal([1500904, 'NebuchadnezzarII01(-603).01.01T*18:15+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
460
+ date = When.when?('NebuchadnezzarII1.1.2T*18:20:00', :clock=>'+03:00?border=0*18-15')
461
+ assert_equal([1500905, 'NebuchadnezzarII01(-603).01.02T*18:15+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
462
+ date = When.when?('NebuchadnezzarII1.1.1T:18:10:00', :clock=>'+03:00?long=45&lat=32&border=Sunset')
463
+ assert_equal([1500904, 'NebuchadnezzarII01(-603).01.01T*18:13+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
464
+ date = When.when?('NebuchadnezzarII1.1.2T*18:20:00', :clock=>'+03:00?long=45&lat=32&border=Sunset')
465
+ assert_equal([1500905, 'NebuchadnezzarII01(-603).01.02T*18:14+03:00'], [date.to_i, date.floor(When::DAY, When::MINUTE).to_s])
466
+ end
467
+ end
468
+ end