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
@@ -56,6 +56,8 @@ module MiniTest
56
56
  assert_equal("BCE3761(-3760).10.07",
57
57
  (When.era('BCE')[0] ^ When.Calendar('Jewish').domain[''].first).to_s)
58
58
 
59
+ date = When.when?('4861-06-21^^Jewish')
60
+ assert_equal('4862-06*21', (date + When::P1Y).to_s)
59
61
  end
60
62
  end
61
63
  end
@@ -179,6 +179,15 @@ module MiniTest
179
179
  end
180
180
  end
181
181
  end
182
+
183
+ assert_equal({:Frame=>"http://hosi.org/When/CalendarTypes/Gregorian",
184
+ :Precision=>0,
185
+ :Sdn=>2456388,
186
+ :Calendar=>["http://hosi.org/When/CalendarTypes/Gregorian"],
187
+ :Notes=>[[{:Note=>"Month", :Value=>"April"}],
188
+ [{:Note=>"Week", :Value=>"Friday(4)"}]],
189
+ :CalDate=>[2013, 4, 5]},
190
+ When.when?('2013-4-5').to_h(:method=>:to_m17n, :locale=>'en', :camel=>true))
182
191
  end
183
192
  end
184
193
  end
@@ -0,0 +1,121 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 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 World < MiniTest::TestCase
12
+ def test_world
13
+ date = When.when? '2001.1.1'
14
+ 400.times do
15
+ assert_equal(date.cal_date, (When::World ^ date).cal_date)
16
+ date += When::P1Y
17
+ end
18
+ end
19
+ end
20
+
21
+ class Positivist < MiniTest::TestCase
22
+ def test_positivist
23
+ date = When.when? '2001.1.1'
24
+ 400.times do |i|
25
+ assert_equal([2001+i-1788,1,1], (When::Positivist ^ date).cal_date)
26
+ date += When::P1Y
27
+ end
28
+ end
29
+ end
30
+
31
+ class InternationalFixed < MiniTest::TestCase
32
+ def test_international_fixed
33
+ date = When.when? '2001.1.1'
34
+ 400.times do |i|
35
+ assert_equal([2001+i,1,1], (When::InternationalFixed ^ date).cal_date)
36
+ date += When::P1Y
37
+ end
38
+ end
39
+ end
40
+
41
+ class Tranquility < MiniTest::TestCase
42
+ def test_tranquility
43
+ date = When.when? '1969.7.21'
44
+ 400.times do |i|
45
+ assert_equal([1+i,1,1], (When::Tranquility ^ date).cal_date)
46
+ date += When::P1Y
47
+ end
48
+ end
49
+ end
50
+
51
+ class WorldSeason < MiniTest::TestCase
52
+ def test_world_season
53
+ date = When.when? '2000.12.21'
54
+ 400.times do |i|
55
+ assert_equal([2001+i,1,1], (When::WorldSeason ^ date).cal_date)
56
+ date += When::P1Y
57
+ end
58
+ end
59
+ end
60
+
61
+ class Pax < MiniTest::TestCase
62
+ def test_pax
63
+
64
+ samples = [
65
+ %w(2014-01-01 2013-12-29),
66
+ %w(2015-01-01 2014-12-28),
67
+ %w(2016-01-01 2015-12-27),
68
+ %w(2017-01-01 2016-12-25),
69
+ %w(2018-01-01 2017-12-24),
70
+ %w(2019-01-01 2018-12-30),
71
+ %w(2020-01-01 2019-12-29),
72
+ %w(2021-01-01 2020-12-27),
73
+ %w(2022-01-01 2021-12-26),
74
+ %w(2023-01-01 2022-12-25),
75
+
76
+ %w(2018-02-01 2018-01-21),
77
+ %w(2018-03-01 2018-02-18),
78
+ %w(2018-04-01 2018-03-18),
79
+ %w(2018-05-01 2018-04-15),
80
+ %w(2018-06-01 2018-05-13),
81
+ %w(2018-07-01 2018-06-10),
82
+ %w(2018-08-01 2018-07-08),
83
+ %w(2018-09-01 2018-08-05),
84
+ %w(2018-10-01 2018-09-02),
85
+ %w(2018-11-01 2018-09-30),
86
+ %w(2018-12-01 2018-10-28),
87
+ %w(2018-12=01 2018-11-25),
88
+ %w(2018-13-01 2018-12-02)]
89
+
90
+ date = When.when? '2014.1.1^^Pax'
91
+ 10.times do
92
+ assert_equal(samples.shift, [date.to_s, (When::Gregorian ^ date).to_s])
93
+ date += When::P1Y
94
+ end
95
+
96
+ date = When.when? '2018.1.1^^Pax'
97
+ 13.times do
98
+ date += When::P1M
99
+ assert_equal(samples.shift, [date.to_s, (When::Gregorian ^ date).to_s])
100
+ end
101
+ end
102
+ end
103
+
104
+ class HankeHenry < MiniTest::TestCase
105
+ def test_hanke_henry
106
+ assert_equal(When.when?('2012.1.1').to_i, When.when?('2012.1.1^^HankeHenry').to_i)
107
+ count = 0
108
+ (2000...2400).each do |year|
109
+ first = When.tm_pos(year, 1, 1)
110
+ last = When.tm_pos(year,12,31)
111
+ if (first.to_i % 7) == 3 || (last.to_i % 7) == 3
112
+ assert_equal(371, When.tm_pos(year, :frame=>When::HankeHenry).length(When::YEAR))
113
+ count += 1
114
+ else
115
+ assert_equal(364, When.tm_pos(year, :frame=>When::HankeHenry).length(When::YEAR))
116
+ end
117
+ end
118
+ assert_equal(71, count)
119
+ end
120
+ end
121
+ end
@@ -92,6 +92,7 @@ module MiniTest
92
92
  def test__epoch_in_CE
93
93
  cals = [
94
94
  'Gregorian',
95
+ 'Gregorian?border=1959-2-23',
95
96
  'Dee',
96
97
  'DeeCecil',
97
98
  'Coptic?Epoch=284Y',
@@ -105,6 +106,7 @@ module MiniTest
105
106
  'IndianNationalSolar',
106
107
  'Nanakshahi',
107
108
  'RevisedBengali',
109
+ 'Fasli',
108
110
  'HinduSolar?type=SBV',
109
111
  'HinduSolar?type=SBVZ',
110
112
  'HinduSolar?type=SBS',
@@ -113,14 +115,14 @@ module MiniTest
113
115
  'HinduSolar?type=SBBZ',
114
116
  'HinduSolar?type=SBH',
115
117
  'HinduSolar?type=SBHZ',
116
- # 'HinduLuniSolar?type=SBVA',
117
- # 'HinduLuniSolar?type=SBVZA',
118
- # 'HinduLuniSolar?type=SBSA',
119
- # 'HinduLuniSolar?type=SBSZA',
120
- # 'HinduLuniSolar?type=SBB',
121
- # 'HinduLuniSolar?type=SBBZ',
122
- # 'HinduLuniSolar?type=SBH',
123
- # 'HinduLuniSolar?type=SBHZ',
118
+ 'HinduLuniSolar?type=SBVA',
119
+ # 'HinduLuniSolar?type=SBVZA',
120
+ # 'HinduLuniSolar?type=SBSA',
121
+ # 'HinduLuniSolar?type=SBSZA',
122
+ # 'HinduLuniSolar?type=SBBA',
123
+ # 'HinduLuniSolar?type=SBBZA',
124
+ # 'HinduLuniSolar?type=SBHA',
125
+ # 'HinduLuniSolar?type=SBHZA',
124
126
  'FrenchRepublican',
125
127
  'Jalali',
126
128
  'SolarHijri',
@@ -128,17 +130,21 @@ module MiniTest
128
130
  'Borji',
129
131
  'Jewish',
130
132
  'Thai',
131
- # 'ThaiC',
133
+ 'ThaiT',
132
134
  'Tibetan',
135
+ 'Discordian',
136
+ 'Positivist',
137
+ 'InternationalFixed',
138
+ 'VanishingLeprechaun'
133
139
  ]
134
140
  eto = When.Resource('_co:Common::干支').to('year')
135
- today = When.when?('2012-06-16')
141
+ today = When.when?('2012-06-15')
136
142
  assert_equal([[28, 246778, 246778]],
137
143
  cals.map { |list|
138
144
  cal, shift = list
139
145
  shift ||= 0
140
146
  date = When.Calendar(cal) ^ today
141
- [date % eto - shift, ((eto & date).to_i/10).to_i + 37*shift, ((date & eto).to_i/10).to_i + 37*shift]
147
+ [+(date % eto - shift), ((eto & date).to_i/10).to_i + 37*shift, ((date & eto).to_i/10).to_i + 37*shift]
142
148
  }.uniq
143
149
  )
144
150
  end
@@ -0,0 +1,58 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 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 Shire < MiniTest::TestCase
12
+ def test_shire
13
+ date = When.when? '2001.1.1^^Shire?time_basis=+09:00'
14
+ [["2001-01-01", 2451901],
15
+ ["2002-01-01", 2452266],
16
+ ["2003-01-01", 2452632],
17
+ ["2004-01-01", 2452997],
18
+ ["2005-01-01", 2453362],
19
+ ["2006-01-01", 2453727],
20
+ ["2007-01-01", 2454093],
21
+ ["2008-01-01", 2454458],
22
+ ["2009-01-01", 2454823],
23
+ ["2010-01-01", 2455188],
24
+ ["2011-01-01", 2455554],
25
+ ["2012-01-01", 2455919],
26
+ ["2013-01-01", 2456284],
27
+ ["2014-01-01", 2456649],
28
+ ["2015-01-01", 2457015],
29
+ ["2016-01-01", 2457380],
30
+ ["2017-01-01", 2457745],
31
+ ["2018-01-01", 2458110],
32
+ ["2019-01-01", 2458476],
33
+ ["2020-01-01", 2458841],
34
+ ["2021-01-01", 2459206],
35
+ ["2022-01-01", 2459571],
36
+ ["2023-01-01", 2459936],
37
+ ["2024-01-01", 2460302],
38
+ ["2025-01-01", 2460667],
39
+ ["2026-01-01", 2461032],
40
+ ["2027-01-01", 2461397],
41
+ ["2028-01-01", 2461763],
42
+ ["2029-01-01", 2462128],
43
+ ["2030-01-01", 2462493],
44
+ ["2031-01-01", 2462858],
45
+ ["2032-01-01", 2463224],
46
+ ["2033-01-01", 2463589]].each do |sample|
47
+ assert_equal(sample, [date.to_s, date.to_i])
48
+ date += When::P1Y
49
+ end
50
+
51
+ date = When.when? '2001.1.1'
52
+ 400.times do
53
+ assert_equal([1,9], (When.Calendar('Shire') ^ date).cal_date[1..2])
54
+ date += When::P1Y
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,45 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 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 Swedish < MiniTest::TestCase
12
+ def test__swedish_date
13
+
14
+ dates = []
15
+ jdns = []
16
+ [2342042, 2346424].each do |base|
17
+ (-3..+3).each do |diff|
18
+ jdn = base + diff
19
+ jdate = When::Julian ^ jdn
20
+ s1date = When::Swedish ^ jdn
21
+ s2date = When.tm_pos(*(s1date.cal_date + [{:frame=>When::Swedish}]))
22
+ dates << s1date.to_s
23
+ jdns << [s1date.to_s == s2date.to_s, s1date.to_i == jdn, s2date.to_i == jdn].uniq
24
+ end
25
+ end
26
+
27
+ assert_equal(%w(1700-02-26 1700-02-27 1700-02-28 1700-03-01 1700-03-02 1700-03-03 1700-03-04
28
+ 1712-02-26 1712-02-27 1712-02-28 1712-02-29 1712-02-30 1712-03-01 1712-03-02), dates)
29
+ assert_equal([[true]], jdns.uniq)
30
+ end
31
+
32
+ def test__swedish_easter
33
+
34
+ dates = []
35
+ civil = When.Calendar('Civil?old=Swedish&reform_date=1753-03-01')
36
+ ((1700..1711).to_a + (1740..1752).to_a+[1802,1805,1818]).each do |year|
37
+ dates << When.tm_pos(year, {:frame=>civil}).easter.to_s
38
+ end
39
+ assert_equal(%w(1700-04-01 1701-04-21 1702-04-06 1703-03-29 1704-04-17 1705-04-02 1706-03-25
40
+ 1707-04-14 1708-04-05 1709-04-18 1710-04-10 1711-03-26 1740-04-06 1741-03-22
41
+ 1742-03-14 1743-04-03 1744-03-18 1745-04-07 1746-03-30 1747-03-22 1748-04-03
42
+ 1749-03-26 1750-03-18 1751-03-31 1752-03-22 1802-04-25 1805-04-21 1818-03-29), dates)
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,58 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 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 Zoroastrian < MiniTest::TestCase
12
+ def test_fasli
13
+ date = When.when? '1366.1.1^^Fasli?location=(_co:Iranian::Tehran)'
14
+ [["1366-01-01", "1996-03-20", 2450163],
15
+ ["1367-01-01", "1997-03-20", 2450528],
16
+ ["1368-01-01", "1998-03-21", 2450894],
17
+ ["1369-01-01", "1999-03-21", 2451259],
18
+ ["1370-01-01", "2000-03-20", 2451624],
19
+ ["1371-01-01", "2001-03-20", 2451989],
20
+ ["1372-01-01", "2002-03-21", 2452355],
21
+ ["1373-01-01", "2003-03-21", 2452720],
22
+ ["1374-01-01", "2004-03-20", 2453085],
23
+ ["1375-01-01", "2005-03-20", 2453450],
24
+ ["1376-01-01", "2006-03-21", 2453816],
25
+ ["1377-01-01", "2007-03-21", 2454181],
26
+ ["1378-01-01", "2008-03-20", 2454546],
27
+ ["1379-01-01", "2009-03-20", 2454911],
28
+ ["1380-01-01", "2010-03-21", 2455277],
29
+ ["1381-01-01", "2011-03-21", 2455642],
30
+ ["1382-01-01", "2012-03-20", 2456007],
31
+ ["1383-01-01", "2013-03-20", 2456372],
32
+ ["1384-01-01", "2014-03-21", 2456738],
33
+ ["1385-01-01", "2015-03-21", 2457103],
34
+ ["1386-01-01", "2016-03-20", 2457468],
35
+ ["1387-01-01", "2017-03-20", 2457833],
36
+ ["1388-01-01", "2018-03-21", 2458199],
37
+ ["1389-01-01", "2019-03-21", 2458564],
38
+ ["1390-01-01", "2020-03-20", 2458929],
39
+ ["1391-01-01", "2021-03-20", 2459294],
40
+ ["1392-01-01", "2022-03-21", 2459660],
41
+ ["1393-01-01", "2023-03-21", 2460025],
42
+ ["1394-01-01", "2024-03-20", 2460390],
43
+ ["1395-01-01", "2025-03-20", 2460755],
44
+ ["1396-01-01", "2026-03-20", 2461120],
45
+ ["1397-01-01", "2027-03-21", 2461486],
46
+ ["1398-01-01", "2028-03-20", 2461851]].each do |sample|
47
+ assert_equal(sample, [date.to_s, (When::Gregorian ^ date).to_s, date.to_i])
48
+ date += When::P1Y
49
+ end
50
+
51
+ date = When.when? '2001.3.21'
52
+ 400.times do
53
+ assert_equal([1,1], (When.Calendar('Fasli') ^ date).cal_date[-2..-1])
54
+ date += When::P1Y
55
+ end
56
+ end
57
+ end
58
+ end
@@ -310,6 +310,60 @@ module MiniTest::TM
310
310
  assert_equal(sample[1], period[sample[0]])
311
311
  end
312
312
  end
313
+
314
+ def test__period_duration_diff
315
+ date1 = When.when?('2012-07-01')
316
+ date2 = When.when?('2012-07-02')
317
+ duration = date2 - date1
318
+ assert_equal('P1D', duration.to_s)
319
+ assert_equal(When::TM::PeriodDuration, duration.class)
320
+
321
+ if Object.const_defined?(:TZInfo)
322
+ time = When.when?('2013-03-10T01:00:00', :tz=>'America/New_York')
323
+ assert_equal('2013-03-10T02:30:00-04:00', (time + When.Duration('PT1.5H')).to_s) # ��ʂ�1.5����
324
+ else
325
+ puts
326
+ puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
327
+ end
328
+
329
+ vcal = When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
330
+ time = When.when?('2013-03-10T01:00:00', :clock=>vcal['America/New_York'])
331
+ assert_equal('2013-03-10T02:30:00-04:00', (time + When.Duration('PT1.5H')).to_s) # ��ʂ�1.5����
332
+ end
333
+
334
+ Sample10 = %w(2013-01-31 2013-02-28 2013-03-31 2013-04-30 2013-05-31
335
+ 2013-06-30 2013-07-31 2013-08-31 2013-09-30 2013-10-31)
336
+
337
+ Sample12 = %w(2013-01-31 2013-02-28 2013-03-31 2013-04-30 2013-05-31 2013-06-30
338
+ 2013-07-31 2013-08-31 2013-09-30 2013-10-31 2013-11-30 2013-12-31)
339
+
340
+ def test__duration_each
341
+ sample = Sample10.dup
342
+ When::P1M.enum_for(When.when?('2013-01-31'), :forward, 10).each do |date|
343
+ assert_equal(sample.shift, date.to_s)
344
+ end
345
+
346
+ count = 0
347
+ (When.when?('2013-01-31') ^ When::P1M).each({:count_limit=>0}) do |date|
348
+ count += 1
349
+ end
350
+ assert_equal(0, count)
351
+
352
+ sample = Sample10.dup
353
+ (When.when?('2013-01-31') ^ When::P1M).each({:count_limit=>10}) do |date|
354
+ assert_equal(sample.shift, date.to_s)
355
+ end
356
+
357
+ sample = Sample12.dup
358
+ (When.when?('2013-01-31') ^ When::P1M).each({:until=>When.when?('2013-12-31')}) do |date|
359
+ assert_equal(sample.shift, date.to_s)
360
+ end
361
+
362
+ sample = Sample12.reverse
363
+ (When.when?('2013-12-31') ^ -When::P1M).each({:until=>When.when?('2013-01-31')}) do |date|
364
+ assert_equal(sample.shift, date.to_s)
365
+ end
366
+ end
313
367
  end
314
368
 
315
369
  class IntervalLength < MiniTest::TestCase
@@ -324,5 +378,25 @@ module MiniTest::TM
324
378
  assert_equal(sample[1..5], [interval.value, interval.factor, interval.radix, interval.unit, interval.to_s])
325
379
  end
326
380
  end
381
+
382
+ def test__interval_length_diff
383
+ time1 = When.when?('2012-07-01T01:23:45+09:00')
384
+ time2 = When.when?('2012-07-02T01:23:45+09:00')
385
+ duration = time2 - time1
386
+ assert_equal('86401.0s', duration.to_s)
387
+ assert_equal(When::TM::IntervalLength, duration.class)
388
+
389
+ if Object.const_defined?(:TZInfo)
390
+ time = When.when?('2013-03-10T01:00:00', :tz=>'America/New_York')
391
+ assert_equal('2013-03-10T03:30:00-04:00', (time + When.Duration('1.5h')).to_s) # �����I��1.5����
392
+ else
393
+ puts
394
+ puts "Tests for TZInfo have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
395
+ end
396
+
397
+ vcal = When.Resource("examples/USA-DST.ics?C=New_York&Z=E&D=04&DZ=06&S=05&SZ=07")
398
+ time = When.when?('2013-03-10T01:00:00', :clock=>vcal['America/New_York'])
399
+ assert_equal('2013-03-10T03:30:00-04:00', (time + When.Duration('1.5h')).to_s) # �����I��1.5����
400
+ end
327
401
  end
328
402
  end