start Ruby/CHISE
[chise/ruby.git] / t / tc_ids.rb
1 #!/usr/bin/env ruby
2 # by eto 2003-0112
3
4 require 'test/unit'
5 $LOAD_PATH << '../src'
6 require 'chise'
7 include CHISE
8
9 class TC_IDS < Test::Unit::TestCase
10   def setup
11   end
12   def test_ids
13     char = "榊".char
14     assert_equal("⿰木神", char.ids)
15     assert_equal("⿰木神", char.decompose)
16     str = "榊"
17     assert_equal("⿰木神", str.ids)
18     assert_equal("⿰木神", str.decompose)
19     assert_equal("⿰木⿰⺭申", str.decompose.decompose)
20     assert_equal("⿰木神", str.decompose!)
21     assert_equal("⿰木⿰⺭申", str.decompose!)
22     str = "榊"
23     assert_equal("⿰木⿰⺭申", str.decompose_all)
24     assert_equal("⿰木⿰⺭申", str.decompose_all!)
25     assert_equal("⿰木⿰⺭申", str)
26     #今はまだcomposeはできない。
27
28     de = "細".decompose
29     assert_match(/田$/, de)  
30     assert_equal(3, de.char_length)
31     de = "&JX2-7577;".de_er.decompose
32     de = "&CDP-8B60;".de_er.decompose
33     assert_equal(1, de.char_length)
34     de = "&JX2-217E;".de_er.decompose
35     assert_match(/^⿰/, de)  
36     assert_equal(3, de.char_length)
37     assert_equal(6, de.decompose!.char_length)
38 #    assert_equal(6, de.decompose!.char_length)
39
40     assert("⿸".char.is_ids?)
41     assert(! "木".char.is_ids?)
42     assert_equal(2, "⿰".char.ids_operator_argc)
43     assert_equal(2, "&U+2FF0;".de_er.char.ids_operator_argc)
44     assert_equal(2, "&U+2FF1;".de_er.char.ids_operator_argc)
45     assert_equal(3, "&U+2FF2;".de_er.char.ids_operator_argc)
46     assert_equal(3, "&U+2FF3;".de_er.char.ids_operator_argc)
47
48     assert_equal("⿰", "&U+2FF0;".de_er.to_s)
49     assert("&U+2FF0;".de_er.char.is_ids?)
50     assert("&U+2FFF;".de_er.char.is_ids?)
51     assert_match(/U\+2FF0/, "&U+2FF0;".de_er.char.inspect_x)
52     assert_match(/IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT/, "&U+2FF0;".de_er.char.inspect_all)
53     (0x2FF0..0x2FFB).each {|i|
54       assert_match(/IDEOGRAPHIC DESCRIPTION CHARACTER/, Character.new(i).name)
55     }
56
57     assert_match(/LEFT TO RIGHT/, "&U+2FF0;".de_er.name)                #∫
58     assert_match(/ABOVE TO BELOW/, "&U+2FF1;".de_er.name)               #∨
59     assert_match(/LEFT TO MIDDLE AND RIGHT/, "&U+2FF2;".de_er.name)     #∬
60     assert_match(/ABOVE TO MIDDLE AND BELOW/, "&U+2FF3;".de_er.name)    #∀
61     assert_match(/FULL SURROUND/, "&U+2FF4;".de_er.name)                #∃
62     assert_match(/SURROUND FROM ABOVE/, "&U+2FF5;".de_er.name)          #∩
63     assert_match(/SURROUND FROM BELOW/, "&U+2FF6;".de_er.name)          #∪
64     assert_match(/SURROUND FROM LEFT/, "&U+2FF7;".de_er.name)           #⊂
65     assert_match(/SURROUND FROM UPPER LEFT/, "&U+2FF8;".de_er.name)     #√
66     assert_match(/SURROUND FROM UPPER RIGHT/, "&U+2FF9;".de_er.name)    #∂
67     assert_match(/SURROUND FROM LOWER LEFT/, "&U+2FFA;".de_er.name)     #∠
68     assert_match(/OVERLAID/, "&U+2FFB;".de_er.name) #∵
69   end
70   def test_tree
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)
79
80     tree = Tree.new
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)
93
94     tree = Tree.new
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)
102     
103     tree = Tree.new
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)
114
115     tree = Tree.new
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)
120   end
121   def test_ids_tree
122     assert_equal('[[<+,U+002B>, <A,U+0041>, <B,U+0042>]]', IDS_Tree.new("+AB").inspect)
123     assert_equal('[[<+,U+002B>, <A,U+0041>, <B,U+0042>], <C,U+0043>]', IDS_Tree.new("+ABC").inspect)
124     assert_equal('[[<+,U+002B>, <A,U+0041>, [<+,U+002B>, <B,U+0042>, <C,U+0043>]]]', IDS_Tree.new("+A+BC").inspect)
125     assert_equal('[[<+,U+002B>, <A,U+0041>, [<+,U+002B>, <B,U+0042>, <C,U+0043>]], <D,U+0044>]', IDS_Tree.new("+A+BCD").inspect)
126
127     assert_equal('[<榊,U+698A>]', IDS_Tree.new("榊").inspect)
128 #    assert_equal('[[<⿰,U+2FF0>, <木,J90-4C5A>, <神,J90-3F40>]]', IDS_Tree.new("⿰木神").inspect)
129     assert_equal(1, IDS_Tree.new("⿰木神").depth)
130 #    assert_equal('[[<⿰,U+2FF0>, <木,J90-4C5A>, [<⿰,U+2FF0>, <⺭,CDP-8B70>, <申,J90-3F3D>]]]', IDS_Tree.new("⿰木⿰⺭申").inspect)
131     assert_equal(2, IDS_Tree.new("⿰木⿰⺭申").depth)
132     assert_equal("unmatch leaves", IDS_Tree.new("⿰木").check_integrity)
133     assert_nil(IDS_Tree.new("⿰木神").check_integrity)
134     assert_equal("unmatch leaves", IDS_Tree.new("⿰木⿰申").check_integrity)
135     assert_nil(IDS_Tree.new("⿰木⿰⺭申").check_integrity)
136     assert_equal("extra nodes", IDS_Tree.new("⿰木⿰⺭申申").check_integrity)
137     assert_nil(IDS_Tree.new("榊").check_integrity)
138     assert_equal("extra leaves", IDS_Tree.new("榊榊").check_integrity)
139
140     assert_equal(3, "⿳".char.ids_operator_argc)
141     assert_equal("⿳士冖匕", "壱".char.ids)
142     assert_equal(3, "壱".char.ids.char.ids_operator_argc)
143     assert_nil(IDS_Tree.new("⿳士冖匕").check_integrity)
144     assert_equal("unmatch leaves", IDS_Tree.new("⿳士冖").check_integrity)
145     assert_equal("extra nodes", IDS_Tree.new("⿳士冖匕匕").check_integrity)
146
147     assert_equal("contains ques", IDS_Tree.new("⿳士冖?").check_integrity)
148   end
149   def test_tree_depth
150     assert_equal(1, IDS_Tree.new("林".decompose).depth)
151     assert_equal('["⿰木木"]', IDS_Tree.new("林".decompose).nodes.inspect)
152     assert_equal('[]', IDS_Tree.new("林".decompose).sub_nodes.inspect)
153     assert_equal(2, IDS_Tree.new("榊".decompose_all).depth)
154     assert_equal('["⿰木⿰⺭申", "⿰⺭申"]', IDS_Tree.new("榊".decompose_all).nodes.inspect)
155     assert_equal('["⿰⺭申"]', IDS_Tree.new("榊".decompose_all).sub_nodes.inspect)
156
157     assert_equal(3, IDS_Tree.new("焔".decompose_all).depth)
158     assert_equal(3, IDS_Tree.new("焔".decompose_all).nodes.length)
159     assert_equal(2, IDS_Tree.new("焔".decompose_all).sub_nodes.length)
160
161     assert_equal(2, IDS_Tree.new("屡".decompose_all).depth)
162     assert_equal("⿸尸娄", "⿸尸⿱米女".aggregate)
163     assert_equal(3, IDS_Tree.new("醤".decompose_all).depth)
164   end
165   def test_compose_exact #正確に一致するIDSを検知する
166     assert_equal("榊", "榊".decompose.compose)
167     assert_equal("壱", "壱".decompose.compose)
168     assert_equal("⿰木木", "林".decompose)
169     assert_equal("林", "⿰木木".compose)
170     assert_equal("林", "林".decompose.compose)
171     assert_equal("⿰木木", "⿰木木".compose.decompose)
172     assert_equal("林".ucs, "⿰木木".compose.ucs)
173   end
174   def test_find
175 #    p "日雲".find #"曇"
176     assert_equal(4, "日雲".find .char_length) #"曇"
177   end
178   def test_compose_part
179 #    p de.compose_ar
180 #    p "神".compose_ar
181 #    p "木".compose_ar.join
182   end
183   def test_aggregate
184 #    db = IDS_DB.instance
185 #    db.list_aggregate
186   end
187   def test_ids_error
188 #    p "実".char.inspect_all
189 #    p "実".char.ids
190 #    assert_equal("contains ques", "実".char.ids_error)
191     assert_equal("unmatch leaves", "実".char.ids_error)
192 #    p CharDB.instance.get('ascii').keys
193 #    p CharDB.instance.get('no-such-attribute').keys
194 #    p CharDB.instance.get('ids-error').keys
195   end
196 end
197
198 #----------------------------------------------------------------------end.