2 # Copyright (C) 2002-2004 Kouichirou Eto, All rights reserved.
7 class TestIDS < Test::Unit::TestCase
13 assert_equal("⿰木神", char.ids)
14 assert_equal("⿰木神", char.decompose)
16 assert_equal("⿰木神", str.char.ids)
17 assert_equal("⿰木神", str.decompose)
18 assert_equal("⿰木⿰⺭申", str.decompose.decompose)
19 assert_equal("⿰木神", str.decompose!)
20 assert_equal("⿰木⿰⺭申", str.decompose!)
22 assert_equal("⿰木⿰⺭申", str.decompose_all)
23 assert_equal("⿰木⿰⺭申", str.decompose_all!)
24 assert_equal("⿰木⿰⺭申", str)
28 assert_match(/田$/, de)
29 assert_equal(3, de.char_length)
30 de = "&JX2-7577;".de_er.decompose
31 de = "&CDP-8B60;".de_er.decompose
32 assert_equal(1, de.char_length)
33 de = "&JX2-217E;".de_er.decompose
34 assert_match(/^⿰/, de)
35 assert_equal(3, de.char_length)
36 assert_equal(6, de.decompose!.char_length)
37 # assert_equal(6, de.decompose!.char_length)
39 assert("⿸".char.is_ids?)
40 assert(! "木".char.is_ids?)
41 assert_equal(2, "⿰".char.ids_operator_argc)
42 assert_equal(2, "&U+2FF0;".de_er.char.ids_operator_argc)
43 assert_equal(2, "&U+2FF1;".de_er.char.ids_operator_argc)
44 assert_equal(3, "&U+2FF2;".de_er.char.ids_operator_argc)
45 assert_equal(3, "&U+2FF3;".de_er.char.ids_operator_argc)
47 assert_equal("⿰", "&U+2FF0;".de_er.to_s)
48 assert("&U+2FF0;".de_er.char.is_ids?)
49 assert("&U+2FFF;".de_er.char.is_ids?)
50 #assert_match(/U\+2FF0/, "&U+2FF0;".de_er.char.inspect_x)
51 assert_match(/IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT/, "&U+2FF0;".de_er.char.inspect_all)
52 (0x2FF0..0x2FFB).each {|i|
53 assert_match(/IDEOGRAPHIC DESCRIPTION CHARACTER/, Character.new(i).name)
56 assert_match(/LEFT TO RIGHT/, "&U+2FF0;".de_er.char.name) #∫
57 assert_match(/ABOVE TO BELOW/, "&U+2FF1;".de_er.char.name) #∨
58 assert_match(/LEFT TO MIDDLE AND RIGHT/, "&U+2FF2;".de_er.char.name) #∬
59 assert_match(/ABOVE TO MIDDLE AND BELOW/, "&U+2FF3;".de_er.char.name) #∀
60 assert_match(/FULL SURROUND/, "&U+2FF4;".de_er.char.name) #∃
61 assert_match(/SURROUND FROM ABOVE/, "&U+2FF5;".de_er.char.name) #∩
62 assert_match(/SURROUND FROM BELOW/, "&U+2FF6;".de_er.char.name) #∪
63 assert_match(/SURROUND FROM LEFT/, "&U+2FF7;".de_er.char.name) #⊂
64 assert_match(/SURROUND FROM UPPER LEFT/, "&U+2FF8;".de_er.char.name) #√
65 assert_match(/SURROUND FROM UPPER RIGHT/, "&U+2FF9;".de_er.char.name) #∂
66 assert_match(/SURROUND FROM LOWER LEFT/, "&U+2FFA;".de_er.char.name) #∠
67 assert_match(/OVERLAID/, "&U+2FFB;".de_er.char.name) #∵
71 assert_equal("[]", Tree.new().inspect)
72 assert_equal("[1]", Tree.new().add_leaf(1).inspect)
73 assert_equal("[1, 2]", Tree.new().add_leaf(1).add_leaf(2).inspect)
74 assert_equal("[[]]", Tree.new().add_node.inspect)
75 assert_equal("[[1]]", Tree.new().add_node.add_leaf(1).inspect)
76 assert_equal("[[1, 2]]", Tree.new().add_node.add_leaf(1).add_leaf(2).inspect)
77 assert_equal("[[1]]", Tree.new().add_node.add_leaf(1).end_node.inspect)
78 assert_equal("[[1], [1]]", Tree.new().add_node.add_leaf(1).end_node.add_node.add_leaf(1).end_node.inspect)
81 assert_equal("[]", tree.inspect)
82 assert_equal("[1]", tree.add_leaf(1).inspect)
83 assert_equal(0, tree.depth)
84 assert_equal("[1, 2]", tree.add_leaf(2).inspect)
85 assert_equal("[1, 2, []]", tree.add_node.inspect)
86 assert_equal("[1, 2, [3]]", tree.add_leaf(3).inspect)
87 assert_equal(1, tree.depth)
88 assert_equal("[1, 2, [3, 4]]", tree.add_leaf(4).inspect)
89 assert_equal("[1, 2, [3, 4]]", tree.end_node.inspect)
90 assert_equal("[1, 2, [3, 4], [5]]", tree.add_node.add_leaf(5).inspect)
91 assert_equal("[1, 2, [3, 4], [5, [6]]]", tree.add_node.add_leaf(6).inspect)
92 assert_equal(2, tree.depth)
95 assert_equal("[[\"+\"]]", tree.add_node("+", 2).inspect)
96 assert_equal("[[\"+\", 1]]", tree.add_leaf(1).inspect)
97 assert_equal("unmatch leaves", tree.check_integrity)
98 assert_equal("[[\"+\", 1, 2]]", tree.add_leaf(2).inspect)
99 assert_nil(tree.check_integrity)
100 assert_equal("[[\"+\", 1, 2], 3]", tree.add_leaf(3).inspect)
101 assert_equal("extra nodes", tree.check_integrity)
104 assert_equal("[[\"+\"]]", tree.add_node("+", 2).inspect)
105 assert_equal("unmatch leaves", tree.check_integrity)
106 assert_equal("[[\"+\", 1]]", tree.add_leaf(1).inspect)
107 assert_equal("unmatch leaves", tree.check_integrity)
108 assert_equal("[[\"+\", 1, [\"+\"]]]", tree.add_node("+", 2).inspect)
109 assert_equal("unmatch leaves", tree.check_integrity)
110 assert_equal("[[\"+\", 1, [\"+\", 2]]]", tree.add_leaf(2).inspect)
111 assert_equal("unmatch leaves", tree.check_integrity)
112 assert_equal("[[\"+\", 1, [\"+\", 2, 3]]]", tree.add_leaf(3).inspect)
113 assert_nil(tree.check_integrity)
116 assert_equal("[1]", tree.add_leaf(1).inspect)
117 assert_nil(tree.check_integrity)
118 assert_equal("[1, 2]", tree.add_leaf(2).inspect)
119 assert_equal("extra leaves", tree.check_integrity)
123 # assert_equal("[[<+,U+002B>, <A,U+0041>, <B,U+0042>]]", IDS_Tree.new("+AB").inspect)
124 # assert_equal("[[<+,U+002B>, <A,U+0041>, <B,U+0042>], <C,U+0043>]", IDS_Tree.new("+ABC").inspect)
125 # assert_equal("[[<+,U+002B>, <A,U+0041>, [<+,U+002B>, <B,U+0042>, <C,U+0043>]]]", IDS_Tree.new("+A+BC").inspect)
126 # assert_equal("[[<+,U+002B>, <A,U+0041>, [<+,U+002B>, <B,U+0042>, <C,U+0043>]], <D,U+0044>]", IDS_Tree.new("+A+BCD").inspect)
128 #assert_equal("[<榊,U+698A>]", IDS_Tree.new("榊").inspect)
129 # assert_equal("[[<⿰,U+2FF0>, <木,J90-4C5A>, <神,J90-3F40>]]", IDS_Tree.new("⿰木神").inspect)
130 assert_equal(1, IDS_Tree.new("⿰木神").depth)
131 # assert_equal("[[<⿰,U+2FF0>, <木,J90-4C5A>, [<⿰,U+2FF0>, <⺭,CDP-8B70>, <申,J90-3F3D>]]]", IDS_Tree.new("⿰木⿰⺭申").inspect)
132 assert_equal(2, IDS_Tree.new("⿰木⿰⺭申").depth)
133 assert_equal("unmatch leaves", IDS_Tree.new("⿰木").check_integrity)
134 assert_nil(IDS_Tree.new("⿰木神").check_integrity)
135 assert_equal("unmatch leaves", IDS_Tree.new("⿰木⿰申").check_integrity)
136 assert_nil(IDS_Tree.new("⿰木⿰⺭申").check_integrity)
137 assert_equal("extra nodes", IDS_Tree.new("⿰木⿰⺭申申").check_integrity)
138 assert_nil(IDS_Tree.new("榊").check_integrity)
139 assert_equal("extra leaves", IDS_Tree.new("榊榊").check_integrity)
141 assert_equal(3, "⿳".char.ids_operator_argc)
142 assert_equal("⿳士冖匕", "壱".char.ids)
143 assert_equal(3, "壱".char.ids.char.ids_operator_argc)
144 assert_nil(IDS_Tree.new("⿳士冖匕").check_integrity)
145 assert_equal("unmatch leaves", IDS_Tree.new("⿳士冖").check_integrity)
146 assert_equal("extra nodes", IDS_Tree.new("⿳士冖匕匕").check_integrity)
148 assert_equal("contains ques", IDS_Tree.new("⿳士冖?").check_integrity)
152 assert_equal(1, IDS_Tree.new("林".decompose).depth)
153 # assert_equal("["⿰木木"]", IDS_Tree.new("林".decompose).nodes.inspect)
154 # assert_equal("[]", IDS_Tree.new("林".decompose).sub_nodes.inspect)
155 assert_equal(2, IDS_Tree.new("榊".decompose_all).depth)
156 # assert_equal("["⿰木⿰⺭申", "⿰⺭申"]", IDS_Tree.new("榊".decompose_all).nodes.inspect)
157 # assert_equal("["⿰⺭申"]", IDS_Tree.new("榊".decompose_all).sub_nodes.inspect)
159 # assert_equal(3, IDS_Tree.new("焔".decompose_all).depth)
160 # assert_equal(3, IDS_Tree.new("焔".decompose_all).nodes.length)
161 # assert_equal(2, IDS_Tree.new("焔".decompose_all).sub_nodes.length)
163 assert_equal(2, IDS_Tree.new("屡".decompose_all).depth)
164 assert_equal("⿸尸娄", "⿸尸⿱米女".aggregate)
165 assert_equal(3, IDS_Tree.new("醤".decompose_all).depth)
168 def test_compose_exact #正確に一致するIDSを検知する
169 assert_equal("榊", "榊".decompose.compose)
170 assert_equal("壱", "壱".decompose.compose)
171 assert_equal("⿰木木", "林".decompose)
172 assert_equal("林", "⿰木木".compose)
173 assert_equal("林", "林".decompose.compose)
174 assert_equal("⿰木木", "⿰木木".compose.decompose)
175 assert_equal("林".ucs, "⿰木木".compose.ucs)
178 def test_idc_shortcut
179 assert_equal(IDC_LR, "林".decompose.first_char)
180 assert_equal(IDC_LR+"木木", "林".decompose)
182 assert_equal(IDC_AB, "森".decompose.first_char)
183 assert_equal(IDC_AB+"木林", "森".decompose)
184 assert_equal(IDC_AB+"火火", "炎".decompose)
186 assert_equal(IDC_LMR, "班".decompose.first_char)
187 assert_equal(IDC_LMR+"彳"+IDC_AB+"山王"+"攵", "徴".decompose) #meaning?
189 assert_equal(IDC_AMB, "鼻".decompose.first_char)
190 assert_equal(IDC_AMB+"自田廾", "鼻".decompose)
191 assert_equal(IDC_AMB+"士冖匕", "壱".decompose)
192 assert_equal(IDC_AMB+"穴厶心", "窓".decompose)
193 assert_equal(IDC_AMB+"丗冖巾", "帯".decompose)
195 assert_equal(IDC_FS, "囲".decompose.first_char)
196 assert_equal(IDC_FS+"囗井", "囲".decompose)
197 assert_equal(IDC_FS+"行韋", "衛".decompose)
198 assert_equal(IDC_FS+"行圭", "街".decompose)
199 assert_equal(IDC_FS+"行重", "衝".decompose)
200 assert_equal(IDC_FS+IDC_AB+"一凵田", "画".decompose)
202 assert_equal(IDC_FA, "問".decompose.first_char)
203 assert_equal(IDC_FA+"門口", "問".decompose)
204 assert_equal(IDC_FA+"門"+IDC_LR+"豆寸", "闘".decompose)
205 assert_equal(IDC_FA+"戌女", "威".decompose)
206 assert_equal(IDC_FA+"茂臣", "蔵".decompose)
207 assert_equal(IDC_FA+"尺旦", "昼".decompose)
208 assert_equal(IDC_FA+"冂入", "内".decompose)
209 assert_equal(IDC_FA+"几丶", "凡".decompose)
210 assert_equal(IDC_FA+"几"+IDC_AB+"丿虫", "風".decompose)
212 assert_equal(IDC_FB, "凶".decompose.first_char)
213 assert_equal(IDC_AB+"止"+IDC_FB+"凵米", "歯".decompose)
215 assert_equal(IDC_FL, "匠".decompose.first_char)
216 assert_equal(IDC_FL+"匚斤", "匠".decompose)
217 assert_equal(IDC_FL+"匚矢", "医".decompose)
218 assert_equal(IDC_FL+"匚若", "匿".decompose)
219 assert_equal(IDC_FL+"匚儿", "匹".decompose)
221 assert_equal(IDC_FUL, "庁".decompose.first_char)
222 assert_equal(IDC_FUL+"广丁", "庁".decompose)
223 assert_equal(IDC_FUL+"歹匕", "死".decompose)
224 assert_equal(IDC_FUL+"尹口", "君".decompose)
225 assert_equal(IDC_FUL+"麻鬼", "魔".decompose)
226 assert_equal(IDC_FUL+"府肉", "腐".decompose)
227 assert_equal(IDC_FUL+"麻手", "摩".decompose)
228 assert_equal(IDC_FUL+"虍思", "慮".decompose)
229 assert_equal(IDC_FUL+"食口", "倉".decompose)
230 assert_equal(IDC_AB+"日"+IDC_FUL+"耳又", "最".decompose)
231 assert_equal(IDC_FUL+"手目", "看".decompose) #meaning
232 assert_equal(IDC_FUL+"辰口", "唇".decompose) #?
234 assert_equal(IDC_FUR, "句".decompose.first_char)
235 assert_equal(IDC_FUR+"勹口", "句".decompose)
236 assert_equal(IDC_FUR+"勹丶", "勺".decompose)
237 assert_equal(IDC_FUR+"勹日", "旬".decompose)
238 assert_equal(IDC_FUR+"戈廾", "戒".decompose)
239 assert_equal(IDC_FUR+"弋工", "式".decompose)
240 assert_equal(IDC_FUR+"刀丿", "刃".decompose)
241 assert_equal(IDC_FUR+"鳥山", "島".decompose) #meaning
243 assert_equal(IDC_FLL, "通".decompose.first_char)
244 assert_equal(IDC_FLL+"廴聿", "建".decompose)
245 assert_equal(IDC_FLL+"走戉", "越".decompose)
246 assert_equal(IDC_FLL+"走巳", "起".decompose)
247 assert_equal(IDC_FLL+"走取", "趣".decompose)
248 assert_equal(IDC_FLL+"走召", "超".decompose)
249 assert_equal(IDC_FLL+"是頁", "題".decompose)
250 assert_equal(IDC_FLL+"免力", "勉".decompose)
251 assert_equal(IDC_FLL+"鬼未", "魅".decompose)
252 assert_equal(IDC_FLL+"黒犬", "黙".decompose)
254 assert_equal(IDC_O, "太".decompose.first_char)
255 assert_equal(IDC_O+"大丶", "太".decompose)
256 assert_equal(IDC_O+"衣中", "衷".decompose)
257 assert_equal(IDC_O+"衣里", "裏".decompose)
258 assert_equal(IDC_O+"勹巳", "包".decompose)
259 assert_equal(IDC_O+"勹乂", "匁".decompose)
260 assert_equal(IDC_O+"木日", "東".decompose)
261 assert_equal(IDC_O+"弍一", "弐".decompose)
262 assert_equal(IDC_O+"衣保", "褒".decompose)
265 def test_glyph_decompose
266 assert_equal("音", "音".decompose)
267 # assert_equal(IDC_AB+"立日", "音".glyph_decompose)
268 assert_equal(IDC_FLL, "世".decompose.first_char)
269 assert_equal("世", "世".glyph_decompose)
274 assert(4 <= "日雲".find .char_length) #"曇"
277 def test_compose_part()
280 # p "木".compose_ar.join
284 # db = IDS_DB.instance
289 # p "実".char.inspect_all
291 # assert_equal("contains ques", "実".char.ids_error)
292 # assert_equal("unmatch leaves", "実".char.ids_error)
293 # p CharDB.instance.get("ascii").keys
294 # p CharDB.instance.get("no-such-attribute").keys
295 # p CharDB.instance.get("ids-error").keys