when_exe 0.3.7 → 0.3.8

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