when_exe 0.3.6 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +171 -0
  3. data/lib/when_exe.rb +78 -47
  4. data/lib/when_exe/basictypes.rb +752 -747
  5. data/lib/when_exe/calendarnote.rb +805 -801
  6. data/lib/when_exe/calendartypes.rb +1583 -1531
  7. data/lib/when_exe/coordinates.rb +16 -15
  8. data/lib/when_exe/core/duration.rb +114 -110
  9. data/lib/when_exe/core/extension.rb +504 -504
  10. data/lib/when_exe/ephemeris.rb +1917 -1913
  11. data/lib/when_exe/ephemeris/moon.rb +333 -333
  12. data/lib/when_exe/ephemeris/notes.rb +389 -387
  13. data/lib/when_exe/ephemeris/planets.rb +585 -585
  14. data/lib/when_exe/ephemeris/sun.rb +214 -214
  15. data/lib/when_exe/googlecalendar.rb +144 -140
  16. data/lib/when_exe/icalendar.rb +1636 -1636
  17. data/lib/when_exe/inspect.rb +46 -22
  18. data/lib/when_exe/locales/akt.rb +176 -176
  19. data/lib/when_exe/locales/encoding_conversion.rb +134 -126
  20. data/lib/when_exe/locales/iast.rb +90 -90
  21. data/lib/when_exe/locales/locale.rb +750 -746
  22. data/lib/when_exe/locales/transliteration_table.rb +62 -62
  23. data/lib/when_exe/mini_application.rb +307 -305
  24. data/lib/when_exe/parts/enumerator.rb +2 -2
  25. data/lib/when_exe/parts/geometric_complex.rb +397 -397
  26. data/lib/when_exe/parts/method_cash.rb +224 -224
  27. data/lib/when_exe/parts/resource.rb +1069 -1071
  28. data/lib/when_exe/parts/timezone.rb +240 -230
  29. data/lib/when_exe/region/armenian.rb +56 -56
  30. data/lib/when_exe/region/babylonian.rb +405 -0
  31. data/lib/when_exe/region/bahai.rb +146 -146
  32. data/lib/when_exe/region/balinese.rb +622 -622
  33. data/lib/when_exe/region/chinese.rb +95 -25
  34. data/lib/when_exe/region/chinese/calendars.rb +1016 -1016
  35. data/lib/when_exe/region/chinese/epochs.rb +1 -1
  36. data/lib/when_exe/region/chinese/twins.rb +803 -795
  37. data/lib/when_exe/region/christian.rb +824 -824
  38. data/lib/when_exe/region/coptic.rb +106 -87
  39. data/lib/when_exe/region/discordian.rb +225 -225
  40. data/lib/when_exe/region/far_east.rb +188 -188
  41. data/lib/when_exe/region/french.rb +56 -56
  42. data/lib/when_exe/region/geologicalage.rb +639 -639
  43. data/lib/when_exe/region/goddess.rb +58 -58
  44. data/lib/when_exe/region/indian.rb +1254 -1251
  45. data/lib/when_exe/region/iranian.rb +8 -8
  46. data/lib/when_exe/region/islamic.rb +3 -3
  47. data/lib/when_exe/region/japanese.rb +93 -99
  48. data/lib/when_exe/region/japanese/calendars.rb +396 -397
  49. data/lib/when_exe/region/japanese/epochs.rb +26 -26
  50. data/lib/when_exe/region/japanese/nihon_shoki.rb +71 -71
  51. data/lib/when_exe/region/japanese/notes.rb +1383 -1386
  52. data/lib/when_exe/region/japanese/residues.rb +1306 -1306
  53. data/lib/when_exe/region/japanese/twins.rb +225 -225
  54. data/lib/when_exe/region/japanese/weeks.rb +112 -0
  55. data/lib/when_exe/region/javanese.rb +230 -230
  56. data/lib/when_exe/region/jewish.rb +126 -126
  57. data/lib/when_exe/region/korean.rb +378 -378
  58. data/lib/when_exe/region/m17n.rb +114 -113
  59. data/lib/when_exe/region/martian.rb +258 -255
  60. data/lib/when_exe/region/mayan.rb +32 -32
  61. data/lib/when_exe/region/residue.rb +89 -89
  62. data/lib/when_exe/region/roman.rb +36 -24
  63. data/lib/when_exe/region/ryukyu.rb +97 -97
  64. data/lib/when_exe/region/shire.rb +240 -240
  65. data/lib/when_exe/region/soviet.rb +209 -0
  66. data/lib/when_exe/region/symmetry.rb +50 -50
  67. data/lib/when_exe/region/thai.rb +336 -335
  68. data/lib/when_exe/region/tibetan.rb +316 -315
  69. data/lib/when_exe/region/vietnamese.rb +440 -439
  70. data/lib/when_exe/region/weekdate.rb +80 -80
  71. data/lib/when_exe/region/world.rb +175 -175
  72. data/lib/when_exe/region/yerm.rb +14 -14
  73. data/lib/when_exe/region/zoroastrian.rb +203 -203
  74. data/lib/when_exe/timestandard.rb +707 -681
  75. data/lib/when_exe/tmduration.rb +338 -330
  76. data/lib/when_exe/tmobjects.rb +1346 -1325
  77. data/lib/when_exe/tmposition.rb +2115 -2072
  78. data/lib/when_exe/tmreference.rb +1693 -1669
  79. data/lib/when_exe/version.rb +1 -1
  80. data/link_to_online_documents +1 -1
  81. data/test/examples/JapanHolidaysRFC6350.ics +1 -1
  82. data/test/test.rb +67 -61
  83. data/test/test/basictypes.rb +409 -409
  84. data/test/test/calendarnote.rb +86 -69
  85. data/test/test/calendartypes.rb +97 -97
  86. data/test/test/coordinates.rb +396 -396
  87. data/test/test/ephemeris.rb +83 -74
  88. data/test/test/ephemeris/moon.rb +14 -14
  89. data/test/test/ephemeris/planets.rb +14 -14
  90. data/test/test/ephemeris/sun.rb +14 -14
  91. data/test/test/googlecalendar.rb +194 -176
  92. data/test/test/icalendar.rb +867 -858
  93. data/test/test/inspect.rb +117 -117
  94. data/test/test/parts.rb +487 -487
  95. data/test/test/region/balinese.rb +34 -0
  96. data/test/test/region/chinese.rb +218 -206
  97. data/test/test/region/christian.rb +245 -245
  98. data/test/test/region/coptic.rb +27 -27
  99. data/test/test/region/french.rb +33 -33
  100. data/test/test/region/geologicalage.rb +17 -17
  101. data/test/test/region/indian.rb +57 -57
  102. data/test/test/region/iran.rb +54 -54
  103. data/test/test/region/islamic.rb +18 -18
  104. data/test/test/region/japanese.rb +237 -219
  105. data/test/test/region/jewish.rb +61 -61
  106. data/test/test/region/m17n.rb +184 -184
  107. data/test/test/region/mayan.rb +195 -195
  108. data/test/test/region/residue.rb +147 -139
  109. data/test/test/region/thai.rb +116 -116
  110. data/test/test/region/tibetan.rb +30 -30
  111. data/test/test/region/vietnamese.rb +102 -102
  112. data/test/test/region/yerm.rb +146 -146
  113. data/test/test/timestandard.rb +81 -81
  114. data/test/test/tmobjects.rb +328 -328
  115. data/test/test/tmposition.rb +397 -284
  116. data/test/test/tmreference.rb +157 -157
  117. metadata +13 -10
@@ -0,0 +1,34 @@
1
+ # -*- coding: utf-8 -*-
2
+ =begin
3
+ Copyright (C) 2011 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 Balenese< MiniTest::TestCase
12
+ def test_balinese_note
13
+ note = When::CalendarNote('Balinese')
14
+ b_date = When::Calendar('BalineseLuniSolar2003') ^ When.when?('2012-6-19')
15
+ g_date = When::Calendar('Gregorian')^b_date
16
+ assert_equal(["Ulat/Lidi" ], [note.hari(b_date).to_s, note.hari(g_date).to_s ].uniq) # hari
17
+ assert_equal(["Pepet" ], [note.dwiwara(b_date).to_s, note.dwiwara(g_date).to_s ].uniq) # dwiwara
18
+ assert_equal(["Kajeng(2)" ], [note.triwara(b_date).to_s, note.triwara(g_date).to_s ].uniq) # triwara
19
+ assert_equal(["Jaya" ], [note.tjaturwara(b_date).to_s, note.tjaturwara(g_date).to_s].uniq) # tjaturwara
20
+ assert_equal(["Wage(2)" ], [note.pantjawara(b_date).to_s, note.pantjawara(g_date).to_s].uniq) # pantjawara
21
+ assert_equal(["Urukung(2)" ], [note.perinkelan(b_date).to_s, note.perinkelan(g_date).to_s].uniq) # perinkelan
22
+ assert_equal(["Sato(2)" ], [note.sadwara(b_date).to_s, note.sadwara(g_date).to_s ].uniq) # sadwara
23
+ assert_equal(["Anggara(2)" ], [note.septawara(b_date).to_s, note.septawara(g_date).to_s ].uniq) # septawara
24
+ assert_equal(["Guru" ], [note.astawara(b_date).to_s, note.astawara(g_date).to_s ].uniq) # astawara
25
+ assert_equal(["Dangu" ], [note.sangawara(b_date).to_s, note.sangawara(g_date).to_s ].uniq) # sangawara
26
+ assert_equal(["Raja" ], [note.dasawara(b_date).to_s, note.dasawara(g_date).to_s ].uniq) # dasawara
27
+ assert_equal(["Wong(2)" ], [note.ingkel(b_date).to_s, note.ingkel(g_date).to_s ].uniq) # ingkel
28
+ assert_equal(["Watu-Lembu" ], [note.watek(b_date).to_s, note.watek(g_date).to_s ].uniq) # watek
29
+ assert_equal(["Jong Sarat(2)"], [note.lintang(b_date).to_s, note.lintang(g_date).to_s ].uniq) # lintang
30
+ assert_equal(["Sinta(2)" ], [note.wuku(b_date).to_s, note.wuku(g_date).to_s ].uniq) # wuku
31
+ end
32
+ end
33
+ end
34
+
@@ -1,206 +1,218 @@
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 Test
10
-
11
- class Chinese < Test::Unit::TestCase
12
- def test_chinese_date
13
-
14
- emd = When.Resource('_c:EphemerisBasedSolar?time_basis=+09:00')
15
- date = When.when?('2009-01-01', {:frame=>emd})
16
- [
17
- ["2009-01-01", 2454867],
18
- ["2009-02-01", 2454896],
19
- ["2009-03-01", 2454927],
20
- ["2009-04-01", 2454957],
21
- ["2009-05-01", 2454988],
22
- ["2009-06-01", 2455020],
23
- ["2009-07-01", 2455051],
24
- ["2009-08-01", 2455082],
25
- ["2009-09-01", 2455113],
26
- ["2009-10-01", 2455143],
27
- ["2009-11-01", 2455173],
28
- ["2009-12-01", 2455202]
29
- ].each do |sample|
30
- assert_equal(sample, [date.to_s, date.to_i])
31
- date += When.Duration('P1M')
32
- end
33
-
34
- cc = When::CalendarTypes::ChineseLuniSolar.new({'time_basis'=>'+09:00'})
35
- date = When.when?('2009-01-01', {:frame=>cc})
36
- [
37
- ["2009-01-01", 2454858],
38
- ["2009-02-01", 2454888],
39
- ["2009-03-01", 2454918],
40
- ["2009-04-01", 2454947],
41
- ["2009-05-01", 2454976],
42
- ["2009-05=01", 2455006],
43
- ["2009-06-01", 2455035],
44
- ["2009-07-01", 2455064],
45
- ["2009-08-01", 2455094],
46
- ["2009-09-01", 2455123],
47
- ["2009-10-01", 2455153],
48
- ["2009-11-01", 2455182],
49
- ["2009-12-01", 2455212]
50
- ].each do |sample|
51
- assert_equal(sample, [date.to_s, date.to_i])
52
- date += When.Duration('P1M')
53
- end
54
-
55
- date = When.when?('2032-11-01', {:frame=>cc})
56
- [
57
- ["2032-11-01", 2463570],
58
- ["2032-12-01", 2463599],
59
- ["2033-01-01", 2463629],
60
- ["2033-02-01", 2463658],
61
- ["2033-03-01", 2463688],
62
- ["2033-04-01", 2463717],
63
- ["2033-05-01", 2463746],
64
- ["2033-06-01", 2463776],
65
- ["2033-07-01", 2463805],
66
- ["2033-08-01", 2463835],
67
- ["2033-09-01", 2463864],
68
- ["2033-10-01", 2463894],
69
- ["2033-11-01", 2463924],
70
- ["2033-11=01", 2463954],
71
- ["2033-12-01", 2463983],
72
- ["2034-01-01", 2464013],
73
- ["2034-02-01", 2464042],
74
- ["2034-03-01", 2464072]
75
- ].each do |sample|
76
- assert_equal(sample, [date.to_s, date.to_i])
77
- date += When.Duration('P1M')
78
- end
79
-
80
- date = When.when?('2728-11-01', {:frame=>cc})
81
- [
82
- ["2728-11-01", 2717768],
83
- ["2728-11=01", 2717798],
84
- ["2728-12-01", 2717827],
85
- ["2729-01-01", 2717857],
86
- ["2729-02-01", 2717887],
87
- ["2729-03-01", 2717916],
88
- ["2729-04-01", 2717946]
89
- ].each do |sample|
90
- assert_equal(sample, [date.to_s, date.to_i])
91
- date += When.Duration('P1M')
92
- end
93
-
94
- cc = When::CalendarTypes::ChineseLuniSolar.new({'time_basis'=>'+09:00', 'intercalary_span'=>3})
95
- date = When.when?('2728-11-01', {:frame=>cc})
96
- [
97
- ["2728-11-01", 2717768],
98
- ["2728-12-01", 2717798],
99
- ["2729-01-01", 2717827],
100
- ["2729-02-01", 2717857],
101
- ["2729-02=01", 2717887],
102
- ["2729-03-01", 2717916],
103
- ["2729-04-01", 2717946]
104
- ].each do |sample|
105
- assert_equal(sample, [date.to_s, date.to_i])
106
- date += When.Duration('P1M')
107
- end
108
- end
109
-
110
- def test_chinese_epoch
111
- date = When.when?('天保2.10.01')
112
- assert_equal([2390126, "天保02(1831).10.01", "神無月"],
113
- [date.to_i, date.to_s, date.name('Month')])
114
- assert_equal("1831-11-04", (When.Calendar('Gregorian') ^ When.when?('天保02.10.01')).to_s)
115
-
116
- #=begin
117
- date = When.when?('天保2.10.01', {:count=>2})
118
- assert_equal([1926999, "天保02(0563).10.01", "十月"],
119
- [date.to_i, date.to_s, date.name('Month')])
120
-
121
- date = When.when?('天保3(564).10.01')
122
- assert_equal([1927353, "天保03(0564).10.01", "十月"],
123
- [date.to_i, date.to_s, date.name('Month')])
124
-
125
- date = When.when?('天保3.10.01', {'period'=>/梁/})
126
- assert_equal([1927353, "天保03(0564).10.01", "十月"],
127
- [date.to_i, date.to_s, date.name('Month')])
128
-
129
- assert_equal(["江戸時代", "後梁", "北斉"],
130
- When::era('天保').map {|v| v.parent.label}) # v.iri
131
-
132
- assert_raises(ArgumentError) { When.when?('天保3(0563).10.01') }
133
-
134
- date = When.when?('始皇帝26*10.01')
135
- assert_equal([1640641, "始皇帝26(-220)*10.01", "十月"],
136
- [date.to_i, date.to_s, date.name('Month')])
137
-
138
- cc_221 = When.Resource('_c:Chinese_221')
139
- [
140
- ["-220*10-01", 1640641, "-00220*10-01", "十月"],
141
- ["-220*11-01", 1640671, "-00220*11-01", "十一月"],
142
- ["-220*12-01", 1640700, "-00220*12-01", "十二月"],
143
- ["-220-01-01", 1640730, "-00220-01-01", "正月"],
144
- ["-220-02-01", 1640759, "-00220-02-01", "二月"],
145
- ["-220-03-01", 1640789, "-00220-03-01", "三月"],
146
- ["-220-04-01", 1640818, "-00220-04-01", "四月"],
147
- ["-220-05-01", 1640848, "-00220-05-01", "五月"],
148
- ["-220-06-01", 1640877, "-00220-06-01", "六月"],
149
- ["-220-07-01", 1640907, "-00220-07-01", "七月"],
150
- ["-220-08-01", 1640937, "-00220-08-01", "八月"],
151
- ["-220-09-01", 1640966, "-00220-09-01", "九月"],
152
- ["-220-09=01", 1640996, "-00220-09=01", "閏九月"]
153
- ].each do |sample|
154
- date = When.when?(sample[0], {:frame=>cc_221})
155
- assert_equal(sample[1..-1],
156
- [date.to_i, date.to_s, date.name('Month')])
157
- end
158
- #=end
159
- end
160
-
161
- def test_daien_lunation
162
- sample = [
163
- 2938, 2993, 2708, 2760, 2573, 2691, 2622,
164
- 2626, 2637, 2523, 2551, 2637, 2625, 2886,
165
- 2703, 2764, 2791, 2680, 2792, 2764, 2797,
166
- 1402, 2626, 2380, 2807, 3003, 23, 2698]
167
-
168
- %w(0765-02-01 0765-12-01 0768-09-01 0769-04-01 0769-07-01 0771-05-01 0772-04-01
169
- 0772-09-01 0774-06-01 0775-02-01 0776-03-01 0780-05-01 0781-09-01 0784-10=01
170
- 0786-03-01 0788-04-01 0791-02-01 0791-09-01 0792-05-01 0813-12-01 0816-03-01
171
- 0820-02-01 0820-03-01 0822-02-01 0835-04-01 0836-04-01 0841-11-01 0853-02-01).each do |ptn|
172
- date = When.when?(ptn+ '^^ChineseTwin::大衍暦')
173
- formula = date.frame.formula[-1]
174
- m = When::Coordinates::Residue.mod(date.to_i+1) {|cn| formula.cn_to_time(cn)}
175
- t = formula.cn_to_time(m[0]) + Rational(1,2)
176
- assert_equal(sample.shift, (t - t.floor) * formula.denominator)
177
- end
178
- end
179
-
180
- def test_solar_terms_for_chinese_true_lunation
181
- date = When.when?('1690-1-1^^JapaneseTwin::貞享暦(節月)')
182
- formula = date.frame.formula[0]
183
- class << formula
184
- attr_reader :day_shift, :longitude_shift, :year_delta
185
- end
186
- assert_equal(["12S", Rational(-1,4), 2336118.19, 1.0e-06, 1684.0, 365.241696],
187
- [formula.formula, formula.longitude_shift, formula.day_epoch, formula.year_delta, formula.year_epoch, formula.year_length.to_f])
188
- m = When::Coordinates::Residue.mod(date.to_i+1) {|cn| formula.cn_to_time(cn)}
189
- t = formula.cn_to_time(m[0]) + Rational(1,2)
190
- # assert_equal(["1690-01-01", 2338355, 20278, [15.923047, 30.436807, 2338340.576953]],
191
- # [date.to_s, date.to_i, m[0], [m[1], m[2], t].map {|x| (x*1000000).round / 1000000.0}])
192
-
193
- date = When.when?('1801-1-1^^JapaneseTwin::寛政暦(節月)')
194
- formula = date.frame.formula[0]
195
- class << formula
196
- attr_reader :day_epoch, :day_shift, :year_delta, :year_epoch, :year_length, :longitude_shift
197
- end
198
- assert_equal(["12S", Rational(-1,4), 2377390.607112, 1797.0, 365.242347071],
199
- [formula.formula, formula.longitude_shift, formula.day_epoch, formula.year_epoch, formula.year_length.to_f])
200
- m = When::Coordinates::Residue.mod(date.to_i+1) {|cn| formula.cn_to_time(cn)}
201
- t = formula.cn_to_time(m[0]) + Rational(1,2)
202
- # assert_equal(["1801-01-01", 2378897, 21610, [15.986637, 30.436862, 2378882.513363]],
203
- # [date.to_s, date.to_i, m[0], [m[1], m[2], t].map {|x| (x*1000000).round / 1000000.0}])
204
- end
205
- end
206
- 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
10
+
11
+ class Chinese < MiniTest::TestCase
12
+ def test_chinese_date
13
+
14
+ emd = When.Resource('_c:EphemerisBasedSolar?time_basis=+09:00')
15
+ date = When.when?('2009-01-01', {:frame=>emd})
16
+ [
17
+ ["2009-01-01", 2454867],
18
+ ["2009-02-01", 2454896],
19
+ ["2009-03-01", 2454927],
20
+ ["2009-04-01", 2454957],
21
+ ["2009-05-01", 2454988],
22
+ ["2009-06-01", 2455020],
23
+ ["2009-07-01", 2455051],
24
+ ["2009-08-01", 2455082],
25
+ ["2009-09-01", 2455113],
26
+ ["2009-10-01", 2455143],
27
+ ["2009-11-01", 2455173],
28
+ ["2009-12-01", 2455202]
29
+ ].each do |sample|
30
+ assert_equal(sample, [date.to_s, date.to_i])
31
+ date += When.Duration('P1M')
32
+ end
33
+
34
+ cc = When::CalendarTypes::ChineseLuniSolar.new({'time_basis'=>'+09:00'})
35
+ date = When.when?('2009-01-01', {:frame=>cc})
36
+ [
37
+ ["2009-01-01", 2454858],
38
+ ["2009-02-01", 2454888],
39
+ ["2009-03-01", 2454918],
40
+ ["2009-04-01", 2454947],
41
+ ["2009-05-01", 2454976],
42
+ ["2009-05=01", 2455006],
43
+ ["2009-06-01", 2455035],
44
+ ["2009-07-01", 2455064],
45
+ ["2009-08-01", 2455094],
46
+ ["2009-09-01", 2455123],
47
+ ["2009-10-01", 2455153],
48
+ ["2009-11-01", 2455182],
49
+ ["2009-12-01", 2455212]
50
+ ].each do |sample|
51
+ assert_equal(sample, [date.to_s, date.to_i])
52
+ date += When.Duration('P1M')
53
+ end
54
+
55
+ date = When.when?('2032-11-01', {:frame=>cc})
56
+ [
57
+ ["2032-11-01", 2463570],
58
+ ["2032-12-01", 2463599],
59
+ ["2033-01-01", 2463629],
60
+ ["2033-02-01", 2463658],
61
+ ["2033-03-01", 2463688],
62
+ ["2033-04-01", 2463717],
63
+ ["2033-05-01", 2463746],
64
+ ["2033-06-01", 2463776],
65
+ ["2033-07-01", 2463805],
66
+ ["2033-08-01", 2463835],
67
+ ["2033-09-01", 2463864],
68
+ ["2033-10-01", 2463894],
69
+ ["2033-11-01", 2463924],
70
+ ["2033-11=01", 2463954],
71
+ ["2033-12-01", 2463983],
72
+ ["2034-01-01", 2464013],
73
+ ["2034-02-01", 2464042],
74
+ ["2034-03-01", 2464072]
75
+ ].each do |sample|
76
+ assert_equal(sample, [date.to_s, date.to_i])
77
+ date += When.Duration('P1M')
78
+ end
79
+
80
+ date = When.when?('2728-11-01', {:frame=>cc})
81
+ [
82
+ ["2728-11-01", 2717768],
83
+ ["2728-11=01", 2717798],
84
+ ["2728-12-01", 2717827],
85
+ ["2729-01-01", 2717857],
86
+ ["2729-02-01", 2717887],
87
+ ["2729-03-01", 2717916],
88
+ ["2729-04-01", 2717946]
89
+ ].each do |sample|
90
+ assert_equal(sample, [date.to_s, date.to_i])
91
+ date += When.Duration('P1M')
92
+ end
93
+
94
+ cc = When::CalendarTypes::ChineseLuniSolar.new({'time_basis'=>'+09:00', 'intercalary_span'=>3})
95
+ date = When.when?('2728-11-01', {:frame=>cc})
96
+ [
97
+ ["2728-11-01", 2717768],
98
+ ["2728-12-01", 2717798],
99
+ ["2729-01-01", 2717827],
100
+ ["2729-02-01", 2717857],
101
+ ["2729-02=01", 2717887],
102
+ ["2729-03-01", 2717916],
103
+ ["2729-04-01", 2717946]
104
+ ].each do |sample|
105
+ assert_equal(sample, [date.to_s, date.to_i])
106
+ date += When.Duration('P1M')
107
+ end
108
+ end
109
+
110
+ def test_chinese_epoch
111
+ date = When.when?('天保2.10.01')
112
+ assert_equal([2390126, "天保02(1831).10.01", "神無月"],
113
+ [date.to_i, date.to_s, date.name('Month')])
114
+ assert_equal("1831-11-04", (When.Calendar('Gregorian') ^ When.when?('天保02.10.01')).to_s)
115
+
116
+ #=begin
117
+ date = When.when?('天保2.10.01', {:count=>2})
118
+ assert_equal([1926999, "天保02(0563).10.01", "十月"],
119
+ [date.to_i, date.to_s, date.name('Month')])
120
+
121
+ date = When.when?('天保3(564).10.01')
122
+ assert_equal([1927353, "天保03(0564).10.01", "十月"],
123
+ [date.to_i, date.to_s, date.name('Month')])
124
+
125
+ date = When.when?('天保3.10.01', {'period'=>/梁/})
126
+ assert_equal([1927353, "天保03(0564).10.01", "十月"],
127
+ [date.to_i, date.to_s, date.name('Month')])
128
+
129
+ assert_equal(["江戸時代", "後梁", "北斉"],
130
+ When::era('天保').map {|v| v.parent.label}) # v.iri
131
+
132
+ assert_raises(ArgumentError) { When.when?('天保3(0563).10.01') }
133
+
134
+ date = When.when?('始皇帝26*10.01')
135
+ assert_equal([1640641, "始皇帝26(-220)*10.01", "十月"],
136
+ [date.to_i, date.to_s, date.name('Month')])
137
+
138
+ cc_221 = When.Resource('_c:Chinese_221')
139
+ [
140
+ ["-220*10-01", 1640641, "-00220*10-01", "十月"],
141
+ ["-220*11-01", 1640671, "-00220*11-01", "十一月"],
142
+ ["-220*12-01", 1640700, "-00220*12-01", "十二月"],
143
+ ["-220-01-01", 1640730, "-00220-01-01", "正月"],
144
+ ["-220-02-01", 1640759, "-00220-02-01", "二月"],
145
+ ["-220-03-01", 1640789, "-00220-03-01", "三月"],
146
+ ["-220-04-01", 1640818, "-00220-04-01", "四月"],
147
+ ["-220-05-01", 1640848, "-00220-05-01", "五月"],
148
+ ["-220-06-01", 1640877, "-00220-06-01", "六月"],
149
+ ["-220-07-01", 1640907, "-00220-07-01", "七月"],
150
+ ["-220-08-01", 1640937, "-00220-08-01", "八月"],
151
+ ["-220-09-01", 1640966, "-00220-09-01", "九月"],
152
+ ["-220-09=01", 1640996, "-00220-09=01", "閏九月"]
153
+ ].each do |sample|
154
+ date = When.when?(sample[0], {:frame=>cc_221})
155
+ assert_equal(sample[1..-1],
156
+ [date.to_i, date.to_s, date.name('Month')])
157
+ end
158
+ #=end
159
+ end
160
+
161
+ def test_daien_lunation
162
+ sample = [
163
+ 2938, 2993, 2708, 2760, 2573, 2691, 2622,
164
+ 2626, 2637, 2523, 2551, 2637, 2625, 2886,
165
+ 2703, 2764, 2791, 2680, 2792, 2764, 2797,
166
+ 1402, 2626, 2380, 2807, 3003, 23, 2698]
167
+
168
+ %w(0765-02-01 0765-12-01 0768-09-01 0769-04-01 0769-07-01 0771-05-01 0772-04-01
169
+ 0772-09-01 0774-06-01 0775-02-01 0776-03-01 0780-05-01 0781-09-01 0784-10=01
170
+ 0786-03-01 0788-04-01 0791-02-01 0791-09-01 0792-05-01 0813-12-01 0816-03-01
171
+ 0820-02-01 0820-03-01 0822-02-01 0835-04-01 0836-04-01 0841-11-01 0853-02-01).each do |ptn|
172
+ date = When.when?(ptn+ '^^ChineseTwin::大衍暦')
173
+ formula = date.frame.formula[-1]
174
+ m = When::Coordinates::Residue.mod(date.to_i+1) {|cn| formula.cn_to_time(cn)}
175
+ t = formula.cn_to_time(m[0]) + Rational(1,2)
176
+ assert_equal(sample.shift, (t - t.floor) * formula.denominator)
177
+ end
178
+ end
179
+
180
+ def test_solar_terms_for_chinese_true_lunation
181
+ date = When.when?('1690-1-1^^JapaneseTwin::貞享暦(節月)')
182
+ formula = date.frame.formula[0]
183
+ class << formula
184
+ attr_reader :day_shift, :longitude_shift, :year_delta
185
+ end
186
+ assert_equal(["12S", Rational(-1,4), 2336118.19, 1.0e-06, 1684.0, 365.241696],
187
+ [formula.formula, formula.longitude_shift, formula.day_epoch, formula.year_delta, formula.year_epoch, formula.year_length.to_f])
188
+ m = When::Coordinates::Residue.mod(date.to_i+1) {|cn| formula.cn_to_time(cn)}
189
+ t = formula.cn_to_time(m[0]) + Rational(1,2)
190
+ # assert_equal(["1690-01-01", 2338355, 20278, [15.923047, 30.436807, 2338340.576953]],
191
+ # [date.to_s, date.to_i, m[0], [m[1], m[2], t].map {|x| (x*1000000).round / 1000000.0}])
192
+
193
+ date = When.when?('1801-1-1^^JapaneseTwin::寛政暦(節月)')
194
+ formula = date.frame.formula[0]
195
+ class << formula
196
+ attr_reader :day_epoch, :day_shift, :year_delta, :year_epoch, :year_length, :longitude_shift
197
+ end
198
+ assert_equal(["12S", Rational(-1,4), 2377390.607112, 1797.0, 365.242347071],
199
+ [formula.formula, formula.longitude_shift, formula.day_epoch, formula.year_epoch, formula.year_length.to_f])
200
+ m = When::Coordinates::Residue.mod(date.to_i+1) {|cn| formula.cn_to_time(cn)}
201
+ t = formula.cn_to_time(m[0]) + Rational(1,2)
202
+ # assert_equal(["1801-01-01", 2378897, 21610, [15.986637, 30.436862, 2378882.513363]],
203
+ # [date.to_s, date.to_i, m[0], [m[1], m[2], t].map {|x| (x*1000000).round / 1000000.0}])
204
+ end
205
+
206
+ def test_chinese_era
207
+ assert_equal("慶元03(1197).01.10", When.when?('慶元3.1.10').to_s) # , {'period'=>/清/})
208
+ assert_equal("紹熙03(1192).01.10", When.when?('紹煕3.1.10').to_s) # , {'period'=>/清/})
209
+ assert_equal("康熙03(1664).01.10", When.when?('康煕3.1.10').to_s) # , {'period'=>/清/})
210
+ assert_equal("紹熙03(1192).01.10", When.when?('紹熙3.1.10').to_s) # , {'period'=>/清/})
211
+ assert_equal("崇徳03(1638).01.30", When.when?('崇徳3.1.30', {'period'=>/清/}).to_s)
212
+ assert_raises(ArgumentError) {When.when?('崇徳3.1.30', {'period'=>/後金/})}
213
+ assert_equal("正徳16(1521).03.14", When.TemporalPosition("正徳", 16, 3, 14, {"period"=>/明/}).to_s)
214
+ assert_equal("正徳16(1521).03.14", When.when?('正徳16.3.14', {'period'=>/明/}).to_s)
215
+ assert_equal("明::崇禎11(1638).01.30", When.when?('崇禎11.1.30', {'period'=>/明/}).to_s)
216
+ end
217
+ end
218
+ end