n.c.
[chise/ruby.git] / test / org-test-ids.rb
1 #!/usr/bin/env ruby
2 # Copyright (C) 2002-2004 Kouichirou Eto, All rights reserved.
3 # by eto 2003-0112
4
5 require "common"
6
7 class TestIDS < Test::Unit::TestCase
8   def test_ids
9     str = "榊"
10     assert_equal("⿰木神", str.char.ids)
11     assert_equal("⿰木神", str.decompose)
12     assert_equal("⿰木⿰⺭申", str.decompose.decompose)
13     assert_equal("⿰木神", str.decompose!)
14     assert_equal("⿰木⿰⺭申", str.decompose!)
15     str = "榊"
16     assert_equal("⿰木⿰⺭申", str.decompose_all)
17     assert_equal("⿰木⿰⺭申", str.decompose_all!)
18     assert_equal("⿰木⿰⺭申", str)
19     #今はまだcomposeはできない。
20
21     de = "細".decompose
22     assert_match(/田$/, de)  
23     assert_equal(3, de.char_length)
24     de = "&JX2-7577;".de_er.decompose
25     de = "&CDP-8B60;".de_er.decompose
26     assert_equal(1, de.char_length)
27     de = "&JX2-217E;".de_er.decompose
28     assert_match(/^⿰/, de)  
29     assert_equal(3, de.char_length)
30     assert_equal(6, de.decompose!.char_length)
31 #    assert_equal(6, de.decompose!.char_length)
32
33     assert("⿸".char.is_ids?)
34     assert(! "木".char.is_ids?)
35     assert_equal(2, "⿰".char.ids_operator_argc)
36     assert_equal(2, "&U+2FF0;".de_er.char.ids_operator_argc)
37     assert_equal(2, "&U+2FF1;".de_er.char.ids_operator_argc)
38     assert_equal(3, "&U+2FF2;".de_er.char.ids_operator_argc)
39     assert_equal(3, "&U+2FF3;".de_er.char.ids_operator_argc)
40
41     assert_equal("⿰", "&U+2FF0;".de_er.to_s)
42     assert("&U+2FF0;".de_er.char.is_ids?)
43     assert("&U+2FFF;".de_er.char.is_ids?)
44     #assert_match(/U\+2FF0/, "&U+2FF0;".de_er.char.inspect_x)
45     assert_match(/IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT/, "&U+2FF0;".de_er.char.inspect_all)
46     (0x2FF0..0x2FFB).each {|i|
47       assert_match(/IDEOGRAPHIC DESCRIPTION CHARACTER/, CHISE::Character.new(i).name)
48     }
49
50     assert_match(/LEFT TO RIGHT/, "&U+2FF0;".de_er.char.name)           #∫
51     assert_match(/ABOVE TO BELOW/, "&U+2FF1;".de_er.char.name)          #∨
52     assert_match(/LEFT TO MIDDLE AND RIGHT/, "&U+2FF2;".de_er.char.name)        #∬
53     assert_match(/ABOVE TO MIDDLE AND BELOW/, "&U+2FF3;".de_er.char.name)       #∀
54     assert_match(/FULL SURROUND/, "&U+2FF4;".de_er.char.name)           #∃
55     assert_match(/SURROUND FROM ABOVE/, "&U+2FF5;".de_er.char.name)             #∩
56     assert_match(/SURROUND FROM BELOW/, "&U+2FF6;".de_er.char.name)             #∪
57     assert_match(/SURROUND FROM LEFT/, "&U+2FF7;".de_er.char.name)              #⊂
58     assert_match(/SURROUND FROM UPPER LEFT/, "&U+2FF8;".de_er.char.name)        #√
59     assert_match(/SURROUND FROM UPPER RIGHT/, "&U+2FF9;".de_er.char.name)       #∂
60     assert_match(/SURROUND FROM LOWER LEFT/, "&U+2FFA;".de_er.char.name)        #∠
61     assert_match(/OVERLAID/, "&U+2FFB;".de_er.char.name) #∵
62   end
63
64   def test_compose_exact #正確に一致するIDSを検知する
65     assert_equal("榊", "榊".decompose.compose)
66     assert_equal("壱", "壱".decompose.compose)
67     assert_equal("⿰木木", "林".decompose)
68     assert_equal("林", "⿰木木".compose)
69     assert_equal("林", "林".decompose.compose)
70     assert_equal("⿰木木", "⿰木木".compose.decompose)
71     assert_equal("林".ucs, "⿰木木".compose.ucs)
72   end
73
74   def test_idc_shortcut
75     assert_equal(IDC_LR, "林".decompose.first_char)
76     assert_equal(IDC_LR+"木木", "林".decompose)
77
78     assert_equal(IDC_AB, "森".decompose.first_char)
79     assert_equal(IDC_AB+"木林", "森".decompose)
80     assert_equal(IDC_AB+"火火", "炎".decompose)
81
82     assert_equal(IDC_LMR, "班".decompose.first_char)
83     assert_equal(IDC_LMR+"彳"+IDC_AB+"山王"+"攵", "徴".decompose) #meaning?
84
85     assert_equal(IDC_AMB, "鼻".decompose.first_char)
86     assert_equal(IDC_AMB+"自田廾", "鼻".decompose)
87     assert_equal(IDC_AMB+"士冖匕", "壱".decompose)
88     assert_equal(IDC_AMB+"穴厶心", "窓".decompose)
89     assert_equal(IDC_AMB+"丗冖巾", "帯".decompose)
90
91     assert_equal(IDC_FS, "囲".decompose.first_char)
92     assert_equal(IDC_FS+"囗井", "囲".decompose)
93     assert_equal(IDC_FS+"行韋", "衛".decompose)
94     assert_equal(IDC_FS+"行圭", "街".decompose)
95     assert_equal(IDC_FS+"行重", "衝".decompose)
96     assert_equal(IDC_FS+IDC_AB+"一凵田", "画".decompose)
97
98     assert_equal(IDC_FA, "問".decompose.first_char)
99     assert_equal(IDC_FA+"門口", "問".decompose)
100     assert_equal(IDC_FA+"門"+IDC_LR+"豆寸", "闘".decompose)
101     assert_equal(IDC_FA+"戌女", "威".decompose)
102     assert_equal(IDC_FA+"茂臣", "蔵".decompose)
103     assert_equal(IDC_FA+"尺旦", "昼".decompose)
104     assert_equal(IDC_FA+"冂入", "内".decompose)
105     assert_equal(IDC_FA+"几丶", "凡".decompose)
106     assert_equal(IDC_FA+"几"+IDC_AB+"丿虫", "風".decompose)
107
108     assert_equal(IDC_FB, "凶".decompose.first_char)
109     assert_equal(IDC_AB+"止"+IDC_FB+"凵米", "歯".decompose)
110
111     assert_equal(IDC_FL, "匠".decompose.first_char)
112     assert_equal(IDC_FL+"匚斤", "匠".decompose)
113     assert_equal(IDC_FL+"匚矢", "医".decompose)
114     assert_equal(IDC_FL+"匚若", "匿".decompose)
115     assert_equal(IDC_FL+"匚儿", "匹".decompose)
116
117     assert_equal(IDC_FUL, "庁".decompose.first_char)
118     assert_equal(IDC_FUL+"广丁", "庁".decompose)
119     assert_equal(IDC_FUL+"歹匕", "死".decompose)
120     assert_equal(IDC_FUL+"尹口", "君".decompose)
121     assert_equal(IDC_FUL+"麻鬼", "魔".decompose)
122     assert_equal(IDC_FUL+"府肉", "腐".decompose)
123     assert_equal(IDC_FUL+"麻手", "摩".decompose)
124     assert_equal(IDC_FUL+"虍思", "慮".decompose)
125     assert_equal(IDC_FUL+"食口", "倉".decompose)
126     assert_equal(IDC_AB+"日"+IDC_FUL+"耳又", "最".decompose)
127     assert_equal(IDC_FUL+"手目", "看".decompose) #meaning
128     assert_equal(IDC_FUL+"辰口", "唇".decompose) #?
129
130     assert_equal(IDC_FUR, "句".decompose.first_char)
131     assert_equal(IDC_FUR+"勹口", "句".decompose)
132     assert_equal(IDC_FUR+"勹丶", "勺".decompose)
133     assert_equal(IDC_FUR+"勹日", "旬".decompose)
134     assert_equal(IDC_FUR+"戈廾", "戒".decompose)
135     assert_equal(IDC_FUR+"弋工", "式".decompose)
136     assert_equal(IDC_FUR+"刀丿", "刃".decompose)
137     assert_equal(IDC_FUR+"鳥山", "島".decompose) #meaning
138
139     assert_equal(IDC_FLL, "通".decompose.first_char)
140     assert_equal(IDC_FLL+"廴聿", "建".decompose)
141     assert_equal(IDC_FLL+"走戉", "越".decompose)
142     assert_equal(IDC_FLL+"走巳", "起".decompose)
143     assert_equal(IDC_FLL+"走取", "趣".decompose)
144     assert_equal(IDC_FLL+"走召", "超".decompose)
145     assert_equal(IDC_FLL+"是頁", "題".decompose)
146     assert_equal(IDC_FLL+"免力", "勉".decompose)
147     assert_equal(IDC_FLL+"鬼未", "魅".decompose)
148     assert_equal(IDC_FLL+"黒犬", "黙".decompose)
149
150     assert_equal(IDC_O, "太".decompose.first_char)
151     assert_equal(IDC_O+"大丶", "太".decompose)
152     assert_equal(IDC_O+"衣中", "衷".decompose)
153     assert_equal(IDC_O+"衣里", "裏".decompose)
154     assert_equal(IDC_O+"勹巳", "包".decompose)
155     assert_equal(IDC_O+"勹乂", "匁".decompose)
156     assert_equal(IDC_O+"木日", "東".decompose)
157     assert_equal(IDC_O+"弍一", "弐".decompose)
158     assert_equal(IDC_O+"衣保", "褒".decompose)
159   end
160
161   def test_glyph_decompose
162     assert_equal("音", "音".decompose)
163 #    assert_equal(IDC_AB+"立日", "音".glyph_decompose)
164     assert_equal(IDC_FLL, "世".decompose.first_char)
165     assert_equal("世", "世".glyph_decompose)
166   end
167
168   def test_find()
169 #    p "日雲".find #"曇"
170     assert(4 <= "日雲".find .char_length) #"曇"
171   end
172
173   def test_compose_part()
174 #    p de.compose_ar
175 #    p "神".compose_ar
176 #    p "木".compose_ar.join
177   end
178
179   def test_aggregate()
180 #    db = IDS_DB.instance
181 #    db.list_aggregate
182   end
183
184   def test_ids_error()
185 #    p "実".char.inspect_all
186 #    p "実".char.ids
187 #    assert_equal("contains ques", "実".char.ids_error)
188 #    assert_equal("unmatch leaves", "実".char.ids_error)
189 #    p CharDB.instance.get("ascii").keys
190 #    p CharDB.instance.get("no-such-attribute").keys
191 #    p CharDB.instance.get("ids-error").keys
192   end
193
194 end