when_exe 0.4.2 → 0.4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +24 -23
- data/lib/when_exe/ephemeris/moon.rb +333 -333
- data/lib/when_exe/linkeddata.rb +0 -1
- data/lib/when_exe/locales/encoding_conversion.rb +134 -134
- data/lib/when_exe/locales/iast.rb +90 -90
- data/lib/when_exe/locales/transliteration_table.rb +62 -62
- data/lib/when_exe/parts/method_cash.rb +224 -224
- data/lib/when_exe/region/chinese/calendars.rb +1016 -1016
- data/lib/when_exe/region/geologicalage.rb +1 -1
- data/lib/when_exe/region/japanese/calendars.rb +397 -397
- data/lib/when_exe/region/japanese/eclipses.rb +1194 -1194
- data/lib/when_exe/region/japanese/nihon_shoki.rb +70 -70
- data/lib/when_exe/region/korean.rb +384 -384
- data/lib/when_exe/region/ryukyu.rb +101 -101
- data/lib/when_exe/tmposition.rb +2 -2
- data/lib/when_exe/tmreference.rb +3 -3
- data/lib/when_exe/version.rb +1 -1
- data/test/scripts/geometric_complex.rb +41 -41
- data/test/scripts/korea.rb +59 -59
- data/test/scripts/thai.rb +36 -36
- data/test/test/basictypes.rb +431 -431
- data/test/test/calendarnote.rb +86 -86
- data/test/test/calendartypes.rb +97 -97
- data/test/test/coordinates.rb +397 -397
- data/test/test/ephemeris.rb +115 -115
- data/test/test/ephemeris/moon.rb +14 -14
- data/test/test/ephemeris/planets.rb +14 -14
- data/test/test/ephemeris/sun.rb +14 -14
- data/test/test/inspect.rb +153 -153
- data/test/test/parts.rb +488 -488
- data/test/test/region/armenian.rb +20 -20
- data/test/test/region/bahai.rb +58 -58
- data/test/test/region/balinese.rb +34 -34
- data/test/test/region/chinese.rb +229 -229
- data/test/test/region/christian.rb +226 -226
- data/test/test/region/coptic.rb +27 -27
- data/test/test/region/discordian.rb +20 -20
- data/test/test/region/french.rb +33 -33
- data/test/test/region/geologicalage.rb +17 -17
- data/test/test/region/iran.rb +54 -54
- data/test/test/region/islamic.rb +54 -54
- data/test/test/region/japanese.rb +261 -261
- data/test/test/region/jewish.rb +63 -63
- data/test/test/region/shire.rb +58 -58
- data/test/test/region/swedish.rb +45 -45
- data/test/test/region/thai.rb +116 -116
- data/test/test/region/tibetan.rb +30 -30
- data/test/test/region/vietnamese.rb +102 -102
- data/test/test/region/zoroastrian.rb +58 -58
- data/test/test/timestandard.rb +81 -81
- data/test/test/tmobjects.rb +402 -402
- data/test/test/tmreference.rb +157 -157
- metadata +4 -88
data/test/test/calendarnote.rb
CHANGED
@@ -1,86 +1,86 @@
|
|
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::CalendarNote
|
10
|
-
|
11
|
-
class NotesContainer < MiniTest::TestCase
|
12
|
-
|
13
|
-
def test__lunar_phases
|
14
|
-
assert_equal([[{:note=>"月相", :value=>"朔(-233/3040)", :position=>"中段"}]],
|
15
|
-
When.when?('承和2.4.2').notes(:notes=>'月相', :conditions=>{:shoyo=>true}))
|
16
|
-
assert_equal([[{:note=>"月相", :value=>"望(1478.5/3040)", :position=>"中段"}]],
|
17
|
-
When.when?('承和2.4.16').notes(:notes=>'月相', :conditions=>{:shoyo=>true}))
|
18
|
-
all = {}
|
19
|
-
assert_equal([[{:note=>"月相", :value=>"望(1478.5/3040)", :position=>"中段"}]],
|
20
|
-
When.when?('承和2.4.16').notes(:notes=>'月相', :shoyo=>true, :persistence=>all))
|
21
|
-
assert_equal({2026177=>[[{:note=>"月相", :value=>"望(1478.5/3040)", :position=>"中段"}]]}, all)
|
22
|
-
end
|
23
|
-
|
24
|
-
def test__solar_terms
|
25
|
-
term = When.CalendarNote('SolarTerms').copy('term315')
|
26
|
-
assert_equal('2014-02-03', term.term(When.when?('2014-1-1')).to_s)
|
27
|
-
end
|
28
|
-
|
29
|
-
def test__persistence
|
30
|
-
all = {}
|
31
|
-
notes0 = When.when?('平成25.9.22').notes(:persistence=>all)
|
32
|
-
notes1 = When.when?('平成25.9.23').notes(:persistence=>all)
|
33
|
-
notes2 = When.when?('平成25.9.24').notes(:persistence=>all)
|
34
|
-
notes3 = When.when?('平成25.9.23').notes(:persistence=>all)
|
35
|
-
|
36
|
-
[notes1, notes3].each do |notes|
|
37
|
-
assert_equal(
|
38
|
-
[[{:note=>"干支", :value=>"癸巳(29)", :position=>"共通"}],
|
39
|
-
[{:note=>"月名", :value=>"September", :position=>"月建"}],
|
40
|
-
[{:note=>"七曜", :value=>"Monday(0)", :position=>"共通"},
|
41
|
-
{:note=>"干支", :value=>"壬辰(28)", :position=>"共通"},
|
42
|
-
{:note=>"六曜", :value=>"友引", :position=>"民間"},
|
43
|
-
{:note=>"廿四節気", :value=>"秋分(180)", :position=>"時候"},
|
44
|
-
{:note=>"祝祭日", :value=>"秋分の日", :position=>"祝祭日"}]], notes)
|
45
|
-
end
|
46
|
-
|
47
|
-
assert_equal([["癸巳(29)"], ["September"], ["Monday(0)", "壬辰(28)", "友引", "秋分(180)", "秋分の日"]],
|
48
|
-
notes1.simplify[:value])
|
49
|
-
|
50
|
-
assert_equal([[{:note=>"月名", :value=>"September", :position=>"月建"}]], notes1.subset(:note=>/Month/))
|
51
|
-
assert_equal([[{:note=>"干支", :value=>"癸巳(29)", :position=>"共通"}],
|
52
|
-
[{:note=>"干支", :value=>"壬辰(28)", :position=>"共通"}]], notes1.subset(:note=>'干支'))
|
53
|
-
assert_equal([[{:note=>"祝祭日", :value=>"秋分の日", :position=>"祝祭日"}]], notes1.subset(:value=>'秋分の日'))
|
54
|
-
assert_equal(nil, notes1.subset(:value=>'春分の日'))
|
55
|
-
assert_equal([[nil], [nil], [nil, nil, nil, nil, nil]], notes1.subset({:value=>'春分の日'}, false))
|
56
|
-
|
57
|
-
assert_equal([2456558, 2456559, 2456560], all.keys)
|
58
|
-
assert_equal({2456559=>"秋分の日"}, all.subset(:value=>'秋分の日').simplify[:value])
|
59
|
-
end
|
60
|
-
|
61
|
-
def test__holiday
|
62
|
-
date1 = When.when?('平成25.9.23')
|
63
|
-
date2 = When.when?('平成25.9.24')
|
64
|
-
notes1 = date1.notes("祝祭日")
|
65
|
-
assert_equal([[{:note=>"祝祭日", :value=>"秋分の日", :position=>"祝祭日"}]], notes1)
|
66
|
-
assert_equal({:note=>"祝祭日", :value=>"秋分の日", :position=>"祝祭日"}, notes1.simplify)
|
67
|
-
assert_equal(true, date1.is?({:note=>"祝祭日", :value=>"秋分の日"}))
|
68
|
-
assert_equal(true, date1.is?("祝祭日"))
|
69
|
-
assert_equal(true, date1.is?("秋分の日"))
|
70
|
-
assert_equal(false, date2.is?("秋分の日"))
|
71
|
-
|
72
|
-
note = When.CalendarNote('Japanese')
|
73
|
-
assert_equal(true, note.note?(When.when?('2014-9-15'), '祝祭日'))
|
74
|
-
assert_equal(true, note.note?(When.when?('2014-9-15'), {:notes=>'祝祭日', :value=>'敬老の日'}))
|
75
|
-
assert_equal(false, note.note?(When.when?('2014-9-15'), {:notes=>'祝祭日', :value=>'敬老日'}))
|
76
|
-
assert_equal('敬老の日', note.notes(When.when?('2014-9-15'), '祝祭日')[:value].simplify.to_s)
|
77
|
-
|
78
|
-
assert_equal('五黄土星(4)', note.notes(When.when?('2014-1-1'), {:notes=>[['九星'],[],[]], :indices=>-2})[:value].simplify.to_s)
|
79
|
-
assert_equal('一白水星(8)', note.notes(When.when?('2014-1-1'), {:notes=>[[],['九星'],[]], :indices=>-1})[:value].simplify.to_s)
|
80
|
-
assert_equal('九紫火星(0)', note.notes(When.when?('2014-1-1'), {:notes=>'九星', :indices=> 0})[:value].simplify.to_s)
|
81
|
-
|
82
|
-
assert_equal(true, When.CalendarNote('Christian').copy('christmas').include?(When.when?('2012-12-25')))
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
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::CalendarNote
|
10
|
+
|
11
|
+
class NotesContainer < MiniTest::TestCase
|
12
|
+
|
13
|
+
def test__lunar_phases
|
14
|
+
assert_equal([[{:note=>"月相", :value=>"朔(-233/3040)", :position=>"中段"}]],
|
15
|
+
When.when?('承和2.4.2').notes(:notes=>'月相', :conditions=>{:shoyo=>true}))
|
16
|
+
assert_equal([[{:note=>"月相", :value=>"望(1478.5/3040)", :position=>"中段"}]],
|
17
|
+
When.when?('承和2.4.16').notes(:notes=>'月相', :conditions=>{:shoyo=>true}))
|
18
|
+
all = {}
|
19
|
+
assert_equal([[{:note=>"月相", :value=>"望(1478.5/3040)", :position=>"中段"}]],
|
20
|
+
When.when?('承和2.4.16').notes(:notes=>'月相', :shoyo=>true, :persistence=>all))
|
21
|
+
assert_equal({2026177=>[[{:note=>"月相", :value=>"望(1478.5/3040)", :position=>"中段"}]]}, all)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test__solar_terms
|
25
|
+
term = When.CalendarNote('SolarTerms').copy('term315')
|
26
|
+
assert_equal('2014-02-03', term.term(When.when?('2014-1-1')).to_s)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test__persistence
|
30
|
+
all = {}
|
31
|
+
notes0 = When.when?('平成25.9.22').notes(:persistence=>all)
|
32
|
+
notes1 = When.when?('平成25.9.23').notes(:persistence=>all)
|
33
|
+
notes2 = When.when?('平成25.9.24').notes(:persistence=>all)
|
34
|
+
notes3 = When.when?('平成25.9.23').notes(:persistence=>all)
|
35
|
+
|
36
|
+
[notes1, notes3].each do |notes|
|
37
|
+
assert_equal(
|
38
|
+
[[{:note=>"干支", :value=>"癸巳(29)", :position=>"共通"}],
|
39
|
+
[{:note=>"月名", :value=>"September", :position=>"月建"}],
|
40
|
+
[{:note=>"七曜", :value=>"Monday(0)", :position=>"共通"},
|
41
|
+
{:note=>"干支", :value=>"壬辰(28)", :position=>"共通"},
|
42
|
+
{:note=>"六曜", :value=>"友引", :position=>"民間"},
|
43
|
+
{:note=>"廿四節気", :value=>"秋分(180)", :position=>"時候"},
|
44
|
+
{:note=>"祝祭日", :value=>"秋分の日", :position=>"祝祭日"}]], notes)
|
45
|
+
end
|
46
|
+
|
47
|
+
assert_equal([["癸巳(29)"], ["September"], ["Monday(0)", "壬辰(28)", "友引", "秋分(180)", "秋分の日"]],
|
48
|
+
notes1.simplify[:value])
|
49
|
+
|
50
|
+
assert_equal([[{:note=>"月名", :value=>"September", :position=>"月建"}]], notes1.subset(:note=>/Month/))
|
51
|
+
assert_equal([[{:note=>"干支", :value=>"癸巳(29)", :position=>"共通"}],
|
52
|
+
[{:note=>"干支", :value=>"壬辰(28)", :position=>"共通"}]], notes1.subset(:note=>'干支'))
|
53
|
+
assert_equal([[{:note=>"祝祭日", :value=>"秋分の日", :position=>"祝祭日"}]], notes1.subset(:value=>'秋分の日'))
|
54
|
+
assert_equal(nil, notes1.subset(:value=>'春分の日'))
|
55
|
+
assert_equal([[nil], [nil], [nil, nil, nil, nil, nil]], notes1.subset({:value=>'春分の日'}, false))
|
56
|
+
|
57
|
+
assert_equal([2456558, 2456559, 2456560], all.keys)
|
58
|
+
assert_equal({2456559=>"秋分の日"}, all.subset(:value=>'秋分の日').simplify[:value])
|
59
|
+
end
|
60
|
+
|
61
|
+
def test__holiday
|
62
|
+
date1 = When.when?('平成25.9.23')
|
63
|
+
date2 = When.when?('平成25.9.24')
|
64
|
+
notes1 = date1.notes("祝祭日")
|
65
|
+
assert_equal([[{:note=>"祝祭日", :value=>"秋分の日", :position=>"祝祭日"}]], notes1)
|
66
|
+
assert_equal({:note=>"祝祭日", :value=>"秋分の日", :position=>"祝祭日"}, notes1.simplify)
|
67
|
+
assert_equal(true, date1.is?({:note=>"祝祭日", :value=>"秋分の日"}))
|
68
|
+
assert_equal(true, date1.is?("祝祭日"))
|
69
|
+
assert_equal(true, date1.is?("秋分の日"))
|
70
|
+
assert_equal(false, date2.is?("秋分の日"))
|
71
|
+
|
72
|
+
note = When.CalendarNote('Japanese')
|
73
|
+
assert_equal(true, note.note?(When.when?('2014-9-15'), '祝祭日'))
|
74
|
+
assert_equal(true, note.note?(When.when?('2014-9-15'), {:notes=>'祝祭日', :value=>'敬老の日'}))
|
75
|
+
assert_equal(false, note.note?(When.when?('2014-9-15'), {:notes=>'祝祭日', :value=>'敬老日'}))
|
76
|
+
assert_equal('敬老の日', note.notes(When.when?('2014-9-15'), '祝祭日')[:value].simplify.to_s)
|
77
|
+
|
78
|
+
assert_equal('五黄土星(4)', note.notes(When.when?('2014-1-1'), {:notes=>[['九星'],[],[]], :indices=>-2})[:value].simplify.to_s)
|
79
|
+
assert_equal('一白水星(8)', note.notes(When.when?('2014-1-1'), {:notes=>[[],['九星'],[]], :indices=>-1})[:value].simplify.to_s)
|
80
|
+
assert_equal('九紫火星(0)', note.notes(When.when?('2014-1-1'), {:notes=>'九星', :indices=> 0})[:value].simplify.to_s)
|
81
|
+
|
82
|
+
assert_equal(true, When.CalendarNote('Christian').copy('christmas').include?(When.when?('2012-12-25')))
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
data/test/test/calendartypes.rb
CHANGED
@@ -1,97 +1,97 @@
|
|
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::CalendarTypes
|
10
|
-
|
11
|
-
class UTC < MiniTest::TestCase
|
12
|
-
def test__utc
|
13
|
-
assert_equal("+00:00", When::UTC.tzname[0].to_s)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
class TableBased < MiniTest::TestCase
|
18
|
-
def test_nothing
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class PatternTableBasedLuniSolar < MiniTest::TestCase
|
23
|
-
def test__japanese
|
24
|
-
|
25
|
-
frame = When.Resource('Japanese', '_c:')
|
26
|
-
date = When.when?('16000101^Japanese')
|
27
|
-
assert_equal(["1600-01-01", 2305493], [date.to_s, date.to_i])
|
28
|
-
assert_equal(2305493, frame._coordinates_to_number(1600-454,0,0))
|
29
|
-
assert_equal([1146, 0, 0], frame._number_to_coordinates(2305493))
|
30
|
-
|
31
|
-
date = When.when?('0594-09=12^Japanese')
|
32
|
-
assert_equal(["0594-09=12", 1938320], [date.to_s, date.to_i])
|
33
|
-
assert_equal(594, date['YEAR'])
|
34
|
-
assert_equal(When::BasicTypes::M17n, date.name('Month').class)
|
35
|
-
|
36
|
-
result = []
|
37
|
-
(date ^ When::TM::Calendar).each do |d|
|
38
|
-
result << d.to_s
|
39
|
-
end
|
40
|
-
result.sort!
|
41
|
-
|
42
|
-
sample = ["0594-09=12", "0594-11-02", "0594-11-02"] #TODO �Ȃ� Greg 2��?
|
43
|
-
# assert_equal(sample, result)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
class CyclicTableBased < MiniTest::TestCase
|
48
|
-
def test__islamic
|
49
|
-
frame = When.Resource('_c:TabularIslamic')
|
50
|
-
date = When.when?('00010101^TabularIslamic')
|
51
|
-
assert_equal(["0001-01-01", 1948440], [date.to_s, date.to_i])
|
52
|
-
assert_equal(1959071, frame._coordinates_to_number(31,0,0))
|
53
|
-
assert_equal([31, 0, 0], frame._number_to_coordinates(1948440+10631))
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
class SolarTerms < MiniTest::TestCase
|
58
|
-
|
59
|
-
Sample = %w(2013-03-20 2013-06-21 2013-09-23 2013-12-22
|
60
|
-
2014-03-21 2014-06-21 2014-09-23 2014-12-22
|
61
|
-
2015-03-21 2015-06-22 2015-09-23 2015-12-22)
|
62
|
-
|
63
|
-
def test__term
|
64
|
-
note = When.CalendarNote('SolarTerms')
|
65
|
-
assert_equal('2014-03-20', note.term(When.when?('2014-3-1'), [0,30]).to_s)
|
66
|
-
When::TM::Clock.local_time = '+09:00'
|
67
|
-
assert_equal('2014-03-21', note.term(When.when?('2014-3-1'), [0,30]).to_s)
|
68
|
-
end
|
69
|
-
|
70
|
-
def test__each
|
71
|
-
When::TM::Clock.local_time = '+09:00'
|
72
|
-
note = When.CalendarNote('SolarTerms')
|
73
|
-
note_with_event = When.CalendarNote('SolarTerms?event=term0/90')
|
74
|
-
today = When.when?('2013-03-01')
|
75
|
-
last = When.when?('2016-01-01')
|
76
|
-
|
77
|
-
sample = Sample.dup
|
78
|
-
note_with_event.each(today) do |date|
|
79
|
-
assert_equal(sample.shift, date.to_s)
|
80
|
-
break if sample.empty?
|
81
|
-
end
|
82
|
-
|
83
|
-
sample = Sample.dup
|
84
|
-
note_with_event.each(today...last) do |date|
|
85
|
-
assert_equal(sample.shift, date.to_s)
|
86
|
-
end
|
87
|
-
assert_equal(true, sample.empty?)
|
88
|
-
|
89
|
-
sample = Sample.dup
|
90
|
-
note.each(today...last, {:event=>'term0/90', :count_limit=>4}) do |date|
|
91
|
-
assert_equal(sample.shift, date.to_s)
|
92
|
-
end
|
93
|
-
assert_equal(Sample.length - 4, sample.length)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
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::CalendarTypes
|
10
|
+
|
11
|
+
class UTC < MiniTest::TestCase
|
12
|
+
def test__utc
|
13
|
+
assert_equal("+00:00", When::UTC.tzname[0].to_s)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class TableBased < MiniTest::TestCase
|
18
|
+
def test_nothing
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class PatternTableBasedLuniSolar < MiniTest::TestCase
|
23
|
+
def test__japanese
|
24
|
+
|
25
|
+
frame = When.Resource('Japanese', '_c:')
|
26
|
+
date = When.when?('16000101^Japanese')
|
27
|
+
assert_equal(["1600-01-01", 2305493], [date.to_s, date.to_i])
|
28
|
+
assert_equal(2305493, frame._coordinates_to_number(1600-454,0,0))
|
29
|
+
assert_equal([1146, 0, 0], frame._number_to_coordinates(2305493))
|
30
|
+
|
31
|
+
date = When.when?('0594-09=12^Japanese')
|
32
|
+
assert_equal(["0594-09=12", 1938320], [date.to_s, date.to_i])
|
33
|
+
assert_equal(594, date['YEAR'])
|
34
|
+
assert_equal(When::BasicTypes::M17n, date.name('Month').class)
|
35
|
+
|
36
|
+
result = []
|
37
|
+
(date ^ When::TM::Calendar).each do |d|
|
38
|
+
result << d.to_s
|
39
|
+
end
|
40
|
+
result.sort!
|
41
|
+
|
42
|
+
sample = ["0594-09=12", "0594-11-02", "0594-11-02"] #TODO �Ȃ� Greg 2��?
|
43
|
+
# assert_equal(sample, result)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class CyclicTableBased < MiniTest::TestCase
|
48
|
+
def test__islamic
|
49
|
+
frame = When.Resource('_c:TabularIslamic')
|
50
|
+
date = When.when?('00010101^TabularIslamic')
|
51
|
+
assert_equal(["0001-01-01", 1948440], [date.to_s, date.to_i])
|
52
|
+
assert_equal(1959071, frame._coordinates_to_number(31,0,0))
|
53
|
+
assert_equal([31, 0, 0], frame._number_to_coordinates(1948440+10631))
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class SolarTerms < MiniTest::TestCase
|
58
|
+
|
59
|
+
Sample = %w(2013-03-20 2013-06-21 2013-09-23 2013-12-22
|
60
|
+
2014-03-21 2014-06-21 2014-09-23 2014-12-22
|
61
|
+
2015-03-21 2015-06-22 2015-09-23 2015-12-22)
|
62
|
+
|
63
|
+
def test__term
|
64
|
+
note = When.CalendarNote('SolarTerms')
|
65
|
+
assert_equal('2014-03-20', note.term(When.when?('2014-3-1'), [0,30]).to_s)
|
66
|
+
When::TM::Clock.local_time = '+09:00'
|
67
|
+
assert_equal('2014-03-21', note.term(When.when?('2014-3-1'), [0,30]).to_s)
|
68
|
+
end
|
69
|
+
|
70
|
+
def test__each
|
71
|
+
When::TM::Clock.local_time = '+09:00'
|
72
|
+
note = When.CalendarNote('SolarTerms')
|
73
|
+
note_with_event = When.CalendarNote('SolarTerms?event=term0/90')
|
74
|
+
today = When.when?('2013-03-01')
|
75
|
+
last = When.when?('2016-01-01')
|
76
|
+
|
77
|
+
sample = Sample.dup
|
78
|
+
note_with_event.each(today) do |date|
|
79
|
+
assert_equal(sample.shift, date.to_s)
|
80
|
+
break if sample.empty?
|
81
|
+
end
|
82
|
+
|
83
|
+
sample = Sample.dup
|
84
|
+
note_with_event.each(today...last) do |date|
|
85
|
+
assert_equal(sample.shift, date.to_s)
|
86
|
+
end
|
87
|
+
assert_equal(true, sample.empty?)
|
88
|
+
|
89
|
+
sample = Sample.dup
|
90
|
+
note.each(today...last, {:event=>'term0/90', :count_limit=>4}) do |date|
|
91
|
+
assert_equal(sample.shift, date.to_s)
|
92
|
+
end
|
93
|
+
assert_equal(Sample.length - 4, sample.length)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
data/test/test/coordinates.rb
CHANGED
@@ -1,397 +1,397 @@
|
|
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::Coordinates
|
10
|
-
|
11
|
-
#
|
12
|
-
# 剰余類
|
13
|
-
#
|
14
|
-
class Residue < MiniTest::TestCase
|
15
|
-
|
16
|
-
def test__intersection
|
17
|
-
r1 = When::Coordinates::Residue.new(3,10)
|
18
|
-
r2 = When::Coordinates::Residue.new(5,12)
|
19
|
-
r3 = When::Coordinates::Residue.new(6,12)
|
20
|
-
r = r1 & r2
|
21
|
-
assert_equal([53,60], [r.remainder, r.divisor])
|
22
|
-
assert_nil(r1 & r3)
|
23
|
-
|
24
|
-
r4 = When::Coordinates::Residue.new(2,7)
|
25
|
-
date1 = When.when?(2440587.5)
|
26
|
-
assert_equal(2440593.5, (date1 & r4).to_f)
|
27
|
-
|
28
|
-
r5 = When::Coordinates::Residue.new(3,7)
|
29
|
-
date2 = When.when?("19820606^^Julian")
|
30
|
-
assert_equal("1982-06-11", (date2 & r5).to_s)
|
31
|
-
assert_equal("1982-06-11", (r5 & date2).to_s)
|
32
|
-
|
33
|
-
assert_equal("1982-06-10T00:00:00.00Z", (r5 & Time.utc(1982,6,6)).to_s)
|
34
|
-
if ::Object.const_defined?(:Date) && Date.respond_to?(:civil)
|
35
|
-
assert_equal("1982-06-24", (r5 & Date.new(1982,6,6,Date::JULIAN)).to_s)
|
36
|
-
end
|
37
|
-
|
38
|
-
date3 = When.when?("19820606T021540+0900^^Julian")
|
39
|
-
[[-5, "1979-06-06T02:15:40+09:00"],
|
40
|
-
[-4, "1980-06-06T02:15:40+09:00"],
|
41
|
-
[-3, "1981-06-06T02:15:40+09:00"],
|
42
|
-
[-2, "1922-06-06T02:15:40+09:00"],
|
43
|
-
[-1, "1923-06-06T02:15:40+09:00"],
|
44
|
-
[ 0, "1984-06-06T02:15:40+09:00"],
|
45
|
-
[ 1, "1985-06-06T02:15:40+09:00"],
|
46
|
-
[ 2, "1986-06-06T02:15:40+09:00"],
|
47
|
-
[ 3, "1987-06-06T02:15:40+09:00"],
|
48
|
-
[ 4, "1988-06-06T02:15:40+09:00"],
|
49
|
-
[ 5, "1989-06-06T02:15:40+09:00"]].each do |sample|
|
50
|
-
r6 = When::Coordinates::Residue.new(sample[0], 60, {'year'=>4})
|
51
|
-
assert_equal(sample[1], (date3 & r6).to_s)
|
52
|
-
assert_equal(sample[1], (r6 & date3).to_s)
|
53
|
-
end
|
54
|
-
|
55
|
-
kanshi = When.Resource("_co:Residue?divisor=60&year=4&day=11")
|
56
|
-
date = When.when?("19820606T021540+0900^^Julian")
|
57
|
-
assert_equal("1982-07-27T02:15:40+09:00", (date & kanshi.to('day')).to_s)
|
58
|
-
assert_equal("1985-06-06T02:15:40+09:00", (date & kanshi.to('year')[1]).to_s)
|
59
|
-
|
60
|
-
week = When.Resource("_co:Residue?divisor=7")
|
61
|
-
[[0, "1982-06-08T02:15:40+09:00"],
|
62
|
-
[1, "1982-06-09T02:15:40+09:00"],
|
63
|
-
[2, "1982-06-10T02:15:40+09:00"],
|
64
|
-
[3, "1982-06-11T02:15:40+09:00"],
|
65
|
-
[4, "1982-06-12T02:15:40+09:00"],
|
66
|
-
[5, "1982-06-06T02:15:40+09:00"],
|
67
|
-
[6, "1982-06-07T02:15:40+09:00"],
|
68
|
-
[7, "1982-06-15T02:15:40+09:00"]].each do |sample|
|
69
|
-
assert_equal(sample[1], (date & week[sample[0]]).to_s)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
class BestRationalApproximations < MiniTest::TestCase
|
74
|
-
def test__continued_fraction
|
75
|
-
it = When.Resource("_co:Residue?remainder=365.2421875&divisor=1").each
|
76
|
-
[[365, 1], [1461, 4], [10592, 29], [12053, 33], [46751, 128]].each do |ratio|
|
77
|
-
assert_equal(ratio, it.next[0..1])
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
class Enumerator < MiniTest::TestCase
|
83
|
-
def test_nothing
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
# 暦座標番号
|
89
|
-
class Index < MiniTest::TestCase
|
90
|
-
def test__trunk
|
91
|
-
month = When::Coordinates::Index.new({:label=>'month', :unit=>12, :base=>1,
|
92
|
-
:trunk => %w(January February March April May June July August September October November December).map {|v| When.m17n(v)}})
|
93
|
-
assert_equal({
|
94
|
-
1=>"January",
|
95
|
-
2=>"February",
|
96
|
-
3=>"March",
|
97
|
-
4=>"April",
|
98
|
-
5=>"May",
|
99
|
-
6=>"June",
|
100
|
-
7=>"July",
|
101
|
-
8=>"August",
|
102
|
-
9=>"September",
|
103
|
-
10=>"October",
|
104
|
-
11=>"November",
|
105
|
-
12=>"December"
|
106
|
-
}, month.trunk)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
# 暦座標要素
|
111
|
-
class Pair < MiniTest::TestCase
|
112
|
-
def test_nothing
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
class Temporal < MiniTest::TestCase
|
117
|
-
def test__validate
|
118
|
-
|
119
|
-
midJulian = When.Resource("_c:Julian?border=[0,3,25]")
|
120
|
-
# assert_equal([0, 3, 25], midJulian.border)
|
121
|
-
|
122
|
-
mDate = When.when?('20100324', {:frame=>midJulian})
|
123
|
-
assert_equal("2009=03-24", mDate.to_s)
|
124
|
-
|
125
|
-
assert_equal("2010-05-11", When.when?('2010-05-11').to_s)
|
126
|
-
assert_equal("2010=05-11", When.when?('2010=05-11').to_s)
|
127
|
-
|
128
|
-
date1 =When.when?("M32.01.01")
|
129
|
-
date2 =When.when?("M34.05.05")
|
130
|
-
assert_equal("M34(1901).05.05", date2.to_s)
|
131
|
-
assert_equal("M35(1902).05.05", (date2+When::Duration('P1Y')).to_s)
|
132
|
-
assert_equal("S06(1931).05.05", (date2+When::Duration('P30Y')).to_s)
|
133
|
-
|
134
|
-
assert_equal(2426467, (date2+When::Duration('P30Y')).to_i)
|
135
|
-
sample = [
|
136
|
-
["ModernJapanese1931.05.05", false],
|
137
|
-
["S06(1931).05.05", true]
|
138
|
-
]
|
139
|
-
((date2+When::Duration('P30Y')).scan(When.Resource('ModernJapanese', '_e:'))).each do |d|
|
140
|
-
assert_equal(sample.shift, [d.to_s, d.leaf?])
|
141
|
-
end
|
142
|
-
|
143
|
-
sample = [
|
144
|
-
["S06(1931).05.05", true]
|
145
|
-
]
|
146
|
-
((date2+When::Duration('P30Y'))^When.Resource('ModernJapanese', '_e:')).each do |d|
|
147
|
-
assert_equal(sample.shift, [d.to_s, d.leaf?])
|
148
|
-
end
|
149
|
-
|
150
|
-
sample =[
|
151
|
-
["明治", "http://ja.wikipedia.org/wiki/%E6%98%8E%E6%B2%BB"],
|
152
|
-
["Meiji", "http://en.wikipedia.org/wiki/Meiji_period"],
|
153
|
-
["M", "http://ja.wikipedia.org/wiki/%E6%98%8E%E6%B2%BB"],
|
154
|
-
["大正", "http://ja.wikipedia.org/wiki/%E5%A4%A7%E6%AD%A3"],
|
155
|
-
["Taishō", "http://en.wikipedia.org/wiki/Taish%C5%8D_period"],
|
156
|
-
["T", "http://ja.wikipedia.org/wiki/%E5%A4%A7%E6%AD%A3"],
|
157
|
-
["昭和", "http://ja.wikipedia.org/wiki/%E6%98%AD%E5%92%8C"],
|
158
|
-
["Shōwa", "http://en.wikipedia.org/wiki/Sh%C5%8Dwa_period"],
|
159
|
-
["S", "http://ja.wikipedia.org/wiki/%E6%98%AD%E5%92%8C"],
|
160
|
-
["平成", "http://ja.wikipedia.org/wiki/%E5%B9%B3%E6%88%90"],
|
161
|
-
["Heisei", "http://en.wikipedia.org/wiki/Heisei_period"],
|
162
|
-
["H", "http://ja.wikipedia.org/wiki/%E5%B9%B3%E6%88%90"]
|
163
|
-
]
|
164
|
-
['明治', '大正', '昭和', '平成'].each do |nengo|
|
165
|
-
era = When::era(nengo)
|
166
|
-
['ja', 'en', 'alias'].each do |lang|
|
167
|
-
assert_equal(sample.shift, [era[0].label.translate(lang), era[0].label.reference(lang)])
|
168
|
-
end
|
169
|
-
end
|
170
|
-
|
171
|
-
sample =[
|
172
|
-
["明治天皇", "http://ja.wikipedia.org/wiki/%E6%98%8E%E6%B2%BB%E5%A4%A9%E7%9A%87"],
|
173
|
-
["Emperor_Meiji", "http://en.wikipedia.org/wiki/Emperor_Meiji"],
|
174
|
-
["大正天皇", "http://ja.wikipedia.org/wiki/%E5%A4%A7%E6%AD%A3%E5%A4%A9%E7%9A%87"],
|
175
|
-
["Emperor_Taishō", "http://en.wikipedia.org/wiki/Emperor_Taish%C5%8D"],
|
176
|
-
["昭和天皇", "http://ja.wikipedia.org/wiki/%E6%98%AD%E5%92%8C%E5%A4%A9%E7%9A%87"],
|
177
|
-
["Emperor_Shōwa", "http://en.wikipedia.org/wiki/Emperor_Sh%C5%8Dwa"],
|
178
|
-
["今上天皇", "http://ja.wikipedia.org/wiki/%E6%98%8E%E4%BB%81"],
|
179
|
-
["Emperor_Kinjō", "http://en.wikipedia.org/wiki/Akihito"]
|
180
|
-
]
|
181
|
-
['明治', '大正', '昭和', '平成'].each do |nengo|
|
182
|
-
name = When.when?(nengo + '06.01.01').query['name']
|
183
|
-
['ja', 'en'].each do |lang|
|
184
|
-
assert_equal(sample.shift, [name.translate(lang), name.reference(lang)])
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
assert_equal("昭和02(1927).03.01", When.when?('大正16.2.29').to_s)
|
189
|
-
assert_equal({"name"=>"大正天皇", "period"=>nil, "area"=>"日本"}, When::era('大正')[0].options)
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
#
|
194
|
-
# 空間位置
|
195
|
-
#
|
196
|
-
class Spatial < MiniTest::TestCase
|
197
|
-
Indian = [
|
198
|
-
["CentralIndia",
|
199
|
-
"インド中部",
|
200
|
-
nil,
|
201
|
-
23.15 + 1.0/30,
|
202
|
-
82.5],
|
203
|
-
["NorthIndia",
|
204
|
-
"インド北部",
|
205
|
-
nil,
|
206
|
-
29.0,
|
207
|
-
82.5],
|
208
|
-
["Agra",
|
209
|
-
"アーグラ",
|
210
|
-
"http://en.wikipedia.org/wiki/Agra",
|
211
|
-
27.2,
|
212
|
-
78.0],
|
213
|
-
["Ahmedabad",
|
214
|
-
"アフマダーバード",
|
215
|
-
"http://en.wikipedia.org/wiki/Ahmedabad",
|
216
|
-
23.0,
|
217
|
-
72.6],
|
218
|
-
["Ajmer",
|
219
|
-
"アジメール",
|
220
|
-
"http://en.wikipedia.org/wiki/Ajmer",
|
221
|
-
26.5,
|
222
|
-
74.6],
|
223
|
-
["Aligarh",
|
224
|
-
"アリーガル",
|
225
|
-
"http://en.wikipedia.org/wiki/Aligarh",
|
226
|
-
27.9,
|
227
|
-
78.1],
|
228
|
-
["Amritsar",
|
229
|
-
"アムリトサル",
|
230
|
-
"http://en.wikipedia.org/wiki/Amritsar",
|
231
|
-
31.6,
|
232
|
-
74.9],
|
233
|
-
["Bangalore",
|
234
|
-
"バンガロール",
|
235
|
-
"http://en.wikipedia.org/wiki/Bangalore",
|
236
|
-
13.0,
|
237
|
-
77.6],
|
238
|
-
["Bhuvaneswar",
|
239
|
-
"ブヴァネーシュヴァル",
|
240
|
-
"http://en.wikipedia.org/wiki/Bhuvaneswar",
|
241
|
-
20.2,
|
242
|
-
85.8],
|
243
|
-
["Chennai",
|
244
|
-
"チェンナイ",
|
245
|
-
"http://en.wikipedia.org/wiki/Chennai",
|
246
|
-
13.1,
|
247
|
-
80.3],
|
248
|
-
["Colombo",
|
249
|
-
"コロンボ",
|
250
|
-
"http://en.wikipedia.org/wiki/Colombo",
|
251
|
-
6.9,
|
252
|
-
79.9],
|
253
|
-
["Dacca",
|
254
|
-
"ダッカ",
|
255
|
-
"http://en.wikipedia.org/wiki/Dacca",
|
256
|
-
23.7,
|
257
|
-
90.4],
|
258
|
-
["Delhi",
|
259
|
-
"デリー",
|
260
|
-
"http://en.wikipedia.org/wiki/Delhi",
|
261
|
-
28.6,
|
262
|
-
77.2],
|
263
|
-
["Hyderabad",
|
264
|
-
"ハイデラバード",
|
265
|
-
"http://en.wikipedia.org/wiki/Hyderabad",
|
266
|
-
17.4,
|
267
|
-
78.5],
|
268
|
-
["Jaipur",
|
269
|
-
"ジャイプル",
|
270
|
-
"http://en.wikipedia.org/wiki/Jaipur",
|
271
|
-
26.9,
|
272
|
-
75.8],
|
273
|
-
["Kathmandu",
|
274
|
-
"カトマンズ",
|
275
|
-
"http://en.wikipedia.org/wiki/Kathmandu",
|
276
|
-
27.7,
|
277
|
-
85.2],
|
278
|
-
["Kochi",
|
279
|
-
"コーチ",
|
280
|
-
"http://en.wikipedia.org/wiki/Kochi",
|
281
|
-
10.0,
|
282
|
-
76.2],
|
283
|
-
["Kolkata",
|
284
|
-
"コルカタ",
|
285
|
-
"http://en.wikipedia.org/wiki/Kolkata",
|
286
|
-
22.6,
|
287
|
-
88.4],
|
288
|
-
["Lahor",
|
289
|
-
"ラホール",
|
290
|
-
"http://en.wikipedia.org/wiki/Lahor",
|
291
|
-
31.6,
|
292
|
-
74.3],
|
293
|
-
["Mathura",
|
294
|
-
"マトゥラー",
|
295
|
-
"http://en.wikipedia.org/wiki/Mathura",
|
296
|
-
27.5,
|
297
|
-
77.7],
|
298
|
-
["Mumbai",
|
299
|
-
"ムンバイ",
|
300
|
-
"http://en.wikipedia.org/wiki/Mumbai",
|
301
|
-
19.0,
|
302
|
-
72.8],
|
303
|
-
["Mysore",
|
304
|
-
"マイソール",
|
305
|
-
"http://en.wikipedia.org/wiki/Mysore",
|
306
|
-
12.3,
|
307
|
-
76.6],
|
308
|
-
["Patna",
|
309
|
-
"パトナ",
|
310
|
-
"http://en.wikipedia.org/wiki/Patna",
|
311
|
-
25.6,
|
312
|
-
85.1],
|
313
|
-
["Pune",
|
314
|
-
"プネー",
|
315
|
-
"http://en.wikipedia.org/wiki/Pune",
|
316
|
-
18.5,
|
317
|
-
73.9],
|
318
|
-
["Srinagar",
|
319
|
-
"シュリーナガル",
|
320
|
-
"http://en.wikipedia.org/wiki/Srinagar",
|
321
|
-
34.1,
|
322
|
-
74.8],
|
323
|
-
["Thiruvananthapuram",
|
324
|
-
"ティルヴァナンタプラム",
|
325
|
-
"http://en.wikipedia.org/wiki/Thiruvananthapuram",
|
326
|
-
8.5,
|
327
|
-
77.0],
|
328
|
-
["Varanasi",
|
329
|
-
"ワーラーナシー",
|
330
|
-
"http://en.wikipedia.org/wiki/Varanasi",
|
331
|
-
25.3,
|
332
|
-
83.0],
|
333
|
-
["Ujjain",
|
334
|
-
"ウッジャイン",
|
335
|
-
"http://en.wikipedia.org/wiki/Ujjain",
|
336
|
-
23.2,
|
337
|
-
75.8]
|
338
|
-
]
|
339
|
-
|
340
|
-
def test__inner_representation
|
341
|
-
location = When.Resource("examples/sample.xml?lat=35&long=135")
|
342
|
-
assert_equal( 7875.0, location.lat)
|
343
|
-
assert_equal(30375.0, location.long)
|
344
|
-
assert_equal( '35.0000N', location.lat_s)
|
345
|
-
assert_equal('135.0000E', location.long_s)
|
346
|
-
if Object.const_defined?(:JSON)
|
347
|
-
location = When.Resource("examples/sample.json?lat=40")
|
348
|
-
assert_equal( 9000.0, location.lat)
|
349
|
-
assert_equal(31433.32625, location.long)
|
350
|
-
assert_equal( '40.0000N', location.lat_s)
|
351
|
-
assert_equal('139.421322E',location.long_s)
|
352
|
-
else
|
353
|
-
puts
|
354
|
-
puts "Tests for JSON have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
|
355
|
-
end
|
356
|
-
end
|
357
|
-
|
358
|
-
def test__reference
|
359
|
-
location = When.Resource("_co:Spatial?label=Kyoto&long=136&lat=30&ref=(http://)")
|
360
|
-
assert_equal("http://", location.ref)
|
361
|
-
end
|
362
|
-
|
363
|
-
def test__surface_radius
|
364
|
-
location = When.Resource("_co:Spatial?label=Kyoto&long=136&lat=30&ref=(http://)")
|
365
|
-
assert_equal(6378.14, location.surface_radius)
|
366
|
-
end
|
367
|
-
|
368
|
-
def test__spatial_m17n
|
369
|
-
['_co:Indian', 'examples/Spatial.m17n'].each do |iri|
|
370
|
-
samples = Indian.dup
|
371
|
-
assert_equal(samples.size, When.Resource(iri).child.size)
|
372
|
-
When.Resource(iri).child.each do |obj|
|
373
|
-
name = obj.label
|
374
|
-
sample = samples.shift.dup
|
375
|
-
sample << iri.sub(/_co:/, 'http://hosi.org/When/Coordinates/') + '::' + sample[0]
|
376
|
-
assert_equal(sample,
|
377
|
-
[name.label,
|
378
|
-
name.translate('ja'),
|
379
|
-
name.reference('en'),
|
380
|
-
obj.lat / When::Coordinates::Spatial::DEGREE,
|
381
|
-
obj.long / When::Coordinates::Spatial::DEGREE,
|
382
|
-
obj.iri])
|
383
|
-
end
|
384
|
-
end
|
385
|
-
end
|
386
|
-
|
387
|
-
def test__to_dms
|
388
|
-
assert_equal(+135.9, When::Coordinates.to_deg("東経135度54分", 'EW'))
|
389
|
-
assert_equal(+135.9, When::Coordinates.to_deg("135度54分E", 'EW'))
|
390
|
-
assert_equal(+135.9, When::Coordinates.to_deg("135.5400E", 'EW'))
|
391
|
-
assert_equal(+135.9, When::Coordinates.to_deg("E135.5400", 'EW'))
|
392
|
-
assert_equal("135.5400E", When::Coordinates.to_dms(+135.9, 'EW'))
|
393
|
-
assert_equal( "35.3936N", When::Coordinates.to_dms(+35.66, 'NS'))
|
394
|
-
end
|
395
|
-
end
|
396
|
-
end
|
397
|
-
|
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::Coordinates
|
10
|
+
|
11
|
+
#
|
12
|
+
# 剰余類
|
13
|
+
#
|
14
|
+
class Residue < MiniTest::TestCase
|
15
|
+
|
16
|
+
def test__intersection
|
17
|
+
r1 = When::Coordinates::Residue.new(3,10)
|
18
|
+
r2 = When::Coordinates::Residue.new(5,12)
|
19
|
+
r3 = When::Coordinates::Residue.new(6,12)
|
20
|
+
r = r1 & r2
|
21
|
+
assert_equal([53,60], [r.remainder, r.divisor])
|
22
|
+
assert_nil(r1 & r3)
|
23
|
+
|
24
|
+
r4 = When::Coordinates::Residue.new(2,7)
|
25
|
+
date1 = When.when?(2440587.5)
|
26
|
+
assert_equal(2440593.5, (date1 & r4).to_f)
|
27
|
+
|
28
|
+
r5 = When::Coordinates::Residue.new(3,7)
|
29
|
+
date2 = When.when?("19820606^^Julian")
|
30
|
+
assert_equal("1982-06-11", (date2 & r5).to_s)
|
31
|
+
assert_equal("1982-06-11", (r5 & date2).to_s)
|
32
|
+
|
33
|
+
assert_equal("1982-06-10T00:00:00.00Z", (r5 & Time.utc(1982,6,6)).to_s)
|
34
|
+
if ::Object.const_defined?(:Date) && Date.respond_to?(:civil)
|
35
|
+
assert_equal("1982-06-24", (r5 & Date.new(1982,6,6,Date::JULIAN)).to_s)
|
36
|
+
end
|
37
|
+
|
38
|
+
date3 = When.when?("19820606T021540+0900^^Julian")
|
39
|
+
[[-5, "1979-06-06T02:15:40+09:00"],
|
40
|
+
[-4, "1980-06-06T02:15:40+09:00"],
|
41
|
+
[-3, "1981-06-06T02:15:40+09:00"],
|
42
|
+
[-2, "1922-06-06T02:15:40+09:00"],
|
43
|
+
[-1, "1923-06-06T02:15:40+09:00"],
|
44
|
+
[ 0, "1984-06-06T02:15:40+09:00"],
|
45
|
+
[ 1, "1985-06-06T02:15:40+09:00"],
|
46
|
+
[ 2, "1986-06-06T02:15:40+09:00"],
|
47
|
+
[ 3, "1987-06-06T02:15:40+09:00"],
|
48
|
+
[ 4, "1988-06-06T02:15:40+09:00"],
|
49
|
+
[ 5, "1989-06-06T02:15:40+09:00"]].each do |sample|
|
50
|
+
r6 = When::Coordinates::Residue.new(sample[0], 60, {'year'=>4})
|
51
|
+
assert_equal(sample[1], (date3 & r6).to_s)
|
52
|
+
assert_equal(sample[1], (r6 & date3).to_s)
|
53
|
+
end
|
54
|
+
|
55
|
+
kanshi = When.Resource("_co:Residue?divisor=60&year=4&day=11")
|
56
|
+
date = When.when?("19820606T021540+0900^^Julian")
|
57
|
+
assert_equal("1982-07-27T02:15:40+09:00", (date & kanshi.to('day')).to_s)
|
58
|
+
assert_equal("1985-06-06T02:15:40+09:00", (date & kanshi.to('year')[1]).to_s)
|
59
|
+
|
60
|
+
week = When.Resource("_co:Residue?divisor=7")
|
61
|
+
[[0, "1982-06-08T02:15:40+09:00"],
|
62
|
+
[1, "1982-06-09T02:15:40+09:00"],
|
63
|
+
[2, "1982-06-10T02:15:40+09:00"],
|
64
|
+
[3, "1982-06-11T02:15:40+09:00"],
|
65
|
+
[4, "1982-06-12T02:15:40+09:00"],
|
66
|
+
[5, "1982-06-06T02:15:40+09:00"],
|
67
|
+
[6, "1982-06-07T02:15:40+09:00"],
|
68
|
+
[7, "1982-06-15T02:15:40+09:00"]].each do |sample|
|
69
|
+
assert_equal(sample[1], (date & week[sample[0]]).to_s)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
class BestRationalApproximations < MiniTest::TestCase
|
74
|
+
def test__continued_fraction
|
75
|
+
it = When.Resource("_co:Residue?remainder=365.2421875&divisor=1").each
|
76
|
+
[[365, 1], [1461, 4], [10592, 29], [12053, 33], [46751, 128]].each do |ratio|
|
77
|
+
assert_equal(ratio, it.next[0..1])
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
class Enumerator < MiniTest::TestCase
|
83
|
+
def test_nothing
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# 暦座標番号
|
89
|
+
class Index < MiniTest::TestCase
|
90
|
+
def test__trunk
|
91
|
+
month = When::Coordinates::Index.new({:label=>'month', :unit=>12, :base=>1,
|
92
|
+
:trunk => %w(January February March April May June July August September October November December).map {|v| When.m17n(v)}})
|
93
|
+
assert_equal({
|
94
|
+
1=>"January",
|
95
|
+
2=>"February",
|
96
|
+
3=>"March",
|
97
|
+
4=>"April",
|
98
|
+
5=>"May",
|
99
|
+
6=>"June",
|
100
|
+
7=>"July",
|
101
|
+
8=>"August",
|
102
|
+
9=>"September",
|
103
|
+
10=>"October",
|
104
|
+
11=>"November",
|
105
|
+
12=>"December"
|
106
|
+
}, month.trunk)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# 暦座標要素
|
111
|
+
class Pair < MiniTest::TestCase
|
112
|
+
def test_nothing
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
class Temporal < MiniTest::TestCase
|
117
|
+
def test__validate
|
118
|
+
|
119
|
+
midJulian = When.Resource("_c:Julian?border=[0,3,25]")
|
120
|
+
# assert_equal([0, 3, 25], midJulian.border)
|
121
|
+
|
122
|
+
mDate = When.when?('20100324', {:frame=>midJulian})
|
123
|
+
assert_equal("2009=03-24", mDate.to_s)
|
124
|
+
|
125
|
+
assert_equal("2010-05-11", When.when?('2010-05-11').to_s)
|
126
|
+
assert_equal("2010=05-11", When.when?('2010=05-11').to_s)
|
127
|
+
|
128
|
+
date1 =When.when?("M32.01.01")
|
129
|
+
date2 =When.when?("M34.05.05")
|
130
|
+
assert_equal("M34(1901).05.05", date2.to_s)
|
131
|
+
assert_equal("M35(1902).05.05", (date2+When::Duration('P1Y')).to_s)
|
132
|
+
assert_equal("S06(1931).05.05", (date2+When::Duration('P30Y')).to_s)
|
133
|
+
|
134
|
+
assert_equal(2426467, (date2+When::Duration('P30Y')).to_i)
|
135
|
+
sample = [
|
136
|
+
["ModernJapanese1931.05.05", false],
|
137
|
+
["S06(1931).05.05", true]
|
138
|
+
]
|
139
|
+
((date2+When::Duration('P30Y')).scan(When.Resource('ModernJapanese', '_e:'))).each do |d|
|
140
|
+
assert_equal(sample.shift, [d.to_s, d.leaf?])
|
141
|
+
end
|
142
|
+
|
143
|
+
sample = [
|
144
|
+
["S06(1931).05.05", true]
|
145
|
+
]
|
146
|
+
((date2+When::Duration('P30Y'))^When.Resource('ModernJapanese', '_e:')).each do |d|
|
147
|
+
assert_equal(sample.shift, [d.to_s, d.leaf?])
|
148
|
+
end
|
149
|
+
|
150
|
+
sample =[
|
151
|
+
["明治", "http://ja.wikipedia.org/wiki/%E6%98%8E%E6%B2%BB"],
|
152
|
+
["Meiji", "http://en.wikipedia.org/wiki/Meiji_period"],
|
153
|
+
["M", "http://ja.wikipedia.org/wiki/%E6%98%8E%E6%B2%BB"],
|
154
|
+
["大正", "http://ja.wikipedia.org/wiki/%E5%A4%A7%E6%AD%A3"],
|
155
|
+
["Taishō", "http://en.wikipedia.org/wiki/Taish%C5%8D_period"],
|
156
|
+
["T", "http://ja.wikipedia.org/wiki/%E5%A4%A7%E6%AD%A3"],
|
157
|
+
["昭和", "http://ja.wikipedia.org/wiki/%E6%98%AD%E5%92%8C"],
|
158
|
+
["Shōwa", "http://en.wikipedia.org/wiki/Sh%C5%8Dwa_period"],
|
159
|
+
["S", "http://ja.wikipedia.org/wiki/%E6%98%AD%E5%92%8C"],
|
160
|
+
["平成", "http://ja.wikipedia.org/wiki/%E5%B9%B3%E6%88%90"],
|
161
|
+
["Heisei", "http://en.wikipedia.org/wiki/Heisei_period"],
|
162
|
+
["H", "http://ja.wikipedia.org/wiki/%E5%B9%B3%E6%88%90"]
|
163
|
+
]
|
164
|
+
['明治', '大正', '昭和', '平成'].each do |nengo|
|
165
|
+
era = When::era(nengo)
|
166
|
+
['ja', 'en', 'alias'].each do |lang|
|
167
|
+
assert_equal(sample.shift, [era[0].label.translate(lang), era[0].label.reference(lang)])
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
sample =[
|
172
|
+
["明治天皇", "http://ja.wikipedia.org/wiki/%E6%98%8E%E6%B2%BB%E5%A4%A9%E7%9A%87"],
|
173
|
+
["Emperor_Meiji", "http://en.wikipedia.org/wiki/Emperor_Meiji"],
|
174
|
+
["大正天皇", "http://ja.wikipedia.org/wiki/%E5%A4%A7%E6%AD%A3%E5%A4%A9%E7%9A%87"],
|
175
|
+
["Emperor_Taishō", "http://en.wikipedia.org/wiki/Emperor_Taish%C5%8D"],
|
176
|
+
["昭和天皇", "http://ja.wikipedia.org/wiki/%E6%98%AD%E5%92%8C%E5%A4%A9%E7%9A%87"],
|
177
|
+
["Emperor_Shōwa", "http://en.wikipedia.org/wiki/Emperor_Sh%C5%8Dwa"],
|
178
|
+
["今上天皇", "http://ja.wikipedia.org/wiki/%E6%98%8E%E4%BB%81"],
|
179
|
+
["Emperor_Kinjō", "http://en.wikipedia.org/wiki/Akihito"]
|
180
|
+
]
|
181
|
+
['明治', '大正', '昭和', '平成'].each do |nengo|
|
182
|
+
name = When.when?(nengo + '06.01.01').query['name']
|
183
|
+
['ja', 'en'].each do |lang|
|
184
|
+
assert_equal(sample.shift, [name.translate(lang), name.reference(lang)])
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
assert_equal("昭和02(1927).03.01", When.when?('大正16.2.29').to_s)
|
189
|
+
assert_equal({"name"=>"大正天皇", "period"=>nil, "area"=>"日本"}, When::era('大正')[0].options)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
#
|
194
|
+
# 空間位置
|
195
|
+
#
|
196
|
+
class Spatial < MiniTest::TestCase
|
197
|
+
Indian = [
|
198
|
+
["CentralIndia",
|
199
|
+
"インド中部",
|
200
|
+
nil,
|
201
|
+
23.15 + 1.0/30,
|
202
|
+
82.5],
|
203
|
+
["NorthIndia",
|
204
|
+
"インド北部",
|
205
|
+
nil,
|
206
|
+
29.0,
|
207
|
+
82.5],
|
208
|
+
["Agra",
|
209
|
+
"アーグラ",
|
210
|
+
"http://en.wikipedia.org/wiki/Agra",
|
211
|
+
27.2,
|
212
|
+
78.0],
|
213
|
+
["Ahmedabad",
|
214
|
+
"アフマダーバード",
|
215
|
+
"http://en.wikipedia.org/wiki/Ahmedabad",
|
216
|
+
23.0,
|
217
|
+
72.6],
|
218
|
+
["Ajmer",
|
219
|
+
"アジメール",
|
220
|
+
"http://en.wikipedia.org/wiki/Ajmer",
|
221
|
+
26.5,
|
222
|
+
74.6],
|
223
|
+
["Aligarh",
|
224
|
+
"アリーガル",
|
225
|
+
"http://en.wikipedia.org/wiki/Aligarh",
|
226
|
+
27.9,
|
227
|
+
78.1],
|
228
|
+
["Amritsar",
|
229
|
+
"アムリトサル",
|
230
|
+
"http://en.wikipedia.org/wiki/Amritsar",
|
231
|
+
31.6,
|
232
|
+
74.9],
|
233
|
+
["Bangalore",
|
234
|
+
"バンガロール",
|
235
|
+
"http://en.wikipedia.org/wiki/Bangalore",
|
236
|
+
13.0,
|
237
|
+
77.6],
|
238
|
+
["Bhuvaneswar",
|
239
|
+
"ブヴァネーシュヴァル",
|
240
|
+
"http://en.wikipedia.org/wiki/Bhuvaneswar",
|
241
|
+
20.2,
|
242
|
+
85.8],
|
243
|
+
["Chennai",
|
244
|
+
"チェンナイ",
|
245
|
+
"http://en.wikipedia.org/wiki/Chennai",
|
246
|
+
13.1,
|
247
|
+
80.3],
|
248
|
+
["Colombo",
|
249
|
+
"コロンボ",
|
250
|
+
"http://en.wikipedia.org/wiki/Colombo",
|
251
|
+
6.9,
|
252
|
+
79.9],
|
253
|
+
["Dacca",
|
254
|
+
"ダッカ",
|
255
|
+
"http://en.wikipedia.org/wiki/Dacca",
|
256
|
+
23.7,
|
257
|
+
90.4],
|
258
|
+
["Delhi",
|
259
|
+
"デリー",
|
260
|
+
"http://en.wikipedia.org/wiki/Delhi",
|
261
|
+
28.6,
|
262
|
+
77.2],
|
263
|
+
["Hyderabad",
|
264
|
+
"ハイデラバード",
|
265
|
+
"http://en.wikipedia.org/wiki/Hyderabad",
|
266
|
+
17.4,
|
267
|
+
78.5],
|
268
|
+
["Jaipur",
|
269
|
+
"ジャイプル",
|
270
|
+
"http://en.wikipedia.org/wiki/Jaipur",
|
271
|
+
26.9,
|
272
|
+
75.8],
|
273
|
+
["Kathmandu",
|
274
|
+
"カトマンズ",
|
275
|
+
"http://en.wikipedia.org/wiki/Kathmandu",
|
276
|
+
27.7,
|
277
|
+
85.2],
|
278
|
+
["Kochi",
|
279
|
+
"コーチ",
|
280
|
+
"http://en.wikipedia.org/wiki/Kochi",
|
281
|
+
10.0,
|
282
|
+
76.2],
|
283
|
+
["Kolkata",
|
284
|
+
"コルカタ",
|
285
|
+
"http://en.wikipedia.org/wiki/Kolkata",
|
286
|
+
22.6,
|
287
|
+
88.4],
|
288
|
+
["Lahor",
|
289
|
+
"ラホール",
|
290
|
+
"http://en.wikipedia.org/wiki/Lahor",
|
291
|
+
31.6,
|
292
|
+
74.3],
|
293
|
+
["Mathura",
|
294
|
+
"マトゥラー",
|
295
|
+
"http://en.wikipedia.org/wiki/Mathura",
|
296
|
+
27.5,
|
297
|
+
77.7],
|
298
|
+
["Mumbai",
|
299
|
+
"ムンバイ",
|
300
|
+
"http://en.wikipedia.org/wiki/Mumbai",
|
301
|
+
19.0,
|
302
|
+
72.8],
|
303
|
+
["Mysore",
|
304
|
+
"マイソール",
|
305
|
+
"http://en.wikipedia.org/wiki/Mysore",
|
306
|
+
12.3,
|
307
|
+
76.6],
|
308
|
+
["Patna",
|
309
|
+
"パトナ",
|
310
|
+
"http://en.wikipedia.org/wiki/Patna",
|
311
|
+
25.6,
|
312
|
+
85.1],
|
313
|
+
["Pune",
|
314
|
+
"プネー",
|
315
|
+
"http://en.wikipedia.org/wiki/Pune",
|
316
|
+
18.5,
|
317
|
+
73.9],
|
318
|
+
["Srinagar",
|
319
|
+
"シュリーナガル",
|
320
|
+
"http://en.wikipedia.org/wiki/Srinagar",
|
321
|
+
34.1,
|
322
|
+
74.8],
|
323
|
+
["Thiruvananthapuram",
|
324
|
+
"ティルヴァナンタプラム",
|
325
|
+
"http://en.wikipedia.org/wiki/Thiruvananthapuram",
|
326
|
+
8.5,
|
327
|
+
77.0],
|
328
|
+
["Varanasi",
|
329
|
+
"ワーラーナシー",
|
330
|
+
"http://en.wikipedia.org/wiki/Varanasi",
|
331
|
+
25.3,
|
332
|
+
83.0],
|
333
|
+
["Ujjain",
|
334
|
+
"ウッジャイン",
|
335
|
+
"http://en.wikipedia.org/wiki/Ujjain",
|
336
|
+
23.2,
|
337
|
+
75.8]
|
338
|
+
]
|
339
|
+
|
340
|
+
def test__inner_representation
|
341
|
+
location = When.Resource("examples/sample.xml?lat=35&long=135")
|
342
|
+
assert_equal( 7875.0, location.lat)
|
343
|
+
assert_equal(30375.0, location.long)
|
344
|
+
assert_equal( '35.0000N', location.lat_s)
|
345
|
+
assert_equal('135.0000E', location.long_s)
|
346
|
+
if Object.const_defined?(:JSON)
|
347
|
+
location = When.Resource("examples/sample.json?lat=40")
|
348
|
+
assert_equal( 9000.0, location.lat)
|
349
|
+
assert_equal(31433.32625, location.long)
|
350
|
+
assert_equal( '40.0000N', location.lat_s)
|
351
|
+
assert_equal('139.421322E',location.long_s)
|
352
|
+
else
|
353
|
+
puts
|
354
|
+
puts "Tests for JSON have been skipped at line #{__LINE__} of #{__FILE__.split(/\//)[-1]}."
|
355
|
+
end
|
356
|
+
end
|
357
|
+
|
358
|
+
def test__reference
|
359
|
+
location = When.Resource("_co:Spatial?label=Kyoto&long=136&lat=30&ref=(http://)")
|
360
|
+
assert_equal("http://", location.ref)
|
361
|
+
end
|
362
|
+
|
363
|
+
def test__surface_radius
|
364
|
+
location = When.Resource("_co:Spatial?label=Kyoto&long=136&lat=30&ref=(http://)")
|
365
|
+
assert_equal(6378.14, location.surface_radius)
|
366
|
+
end
|
367
|
+
|
368
|
+
def test__spatial_m17n
|
369
|
+
['_co:Indian', 'examples/Spatial.m17n'].each do |iri|
|
370
|
+
samples = Indian.dup
|
371
|
+
assert_equal(samples.size, When.Resource(iri).child.size)
|
372
|
+
When.Resource(iri).child.each do |obj|
|
373
|
+
name = obj.label
|
374
|
+
sample = samples.shift.dup
|
375
|
+
sample << iri.sub(/_co:/, 'http://hosi.org/When/Coordinates/') + '::' + sample[0]
|
376
|
+
assert_equal(sample,
|
377
|
+
[name.label,
|
378
|
+
name.translate('ja'),
|
379
|
+
name.reference('en'),
|
380
|
+
obj.lat / When::Coordinates::Spatial::DEGREE,
|
381
|
+
obj.long / When::Coordinates::Spatial::DEGREE,
|
382
|
+
obj.iri])
|
383
|
+
end
|
384
|
+
end
|
385
|
+
end
|
386
|
+
|
387
|
+
def test__to_dms
|
388
|
+
assert_equal(+135.9, When::Coordinates.to_deg("東経135度54分", 'EW'))
|
389
|
+
assert_equal(+135.9, When::Coordinates.to_deg("135度54分E", 'EW'))
|
390
|
+
assert_equal(+135.9, When::Coordinates.to_deg("135.5400E", 'EW'))
|
391
|
+
assert_equal(+135.9, When::Coordinates.to_deg("E135.5400", 'EW'))
|
392
|
+
assert_equal("135.5400E", When::Coordinates.to_dms(+135.9, 'EW'))
|
393
|
+
assert_equal( "35.3936N", When::Coordinates.to_dms(+35.66, 'NS'))
|
394
|
+
end
|
395
|
+
end
|
396
|
+
end
|
397
|
+
|