update.
[chise/ruby.git] / test / test-idstree.rb
1 #!/usr/bin/env ruby
2 # Copyright (C) 2002-2004 Kouichirou Eto, All rights reserved.
3
4 require "common"
5 require "chise/idstree"
6
7 class TestTree < Test::Unit::TestCase
8   def test_tree
9     assert_equal("[]", CHISE::Tree.new().inspect)
10     assert_equal("[1]", CHISE::Tree.new().add_leaf(1).inspect)
11     assert_equal("[1, 2]", CHISE::Tree.new().add_leaf(1).add_leaf(2).inspect)
12     assert_equal("[[]]", CHISE::Tree.new().add_node.inspect)
13     assert_equal("[[1]]", CHISE::Tree.new().add_node.add_leaf(1).inspect)
14     assert_equal("[[1, 2]]", CHISE::Tree.new().add_node.add_leaf(1).add_leaf(2).inspect)
15     assert_equal("[[1]]", CHISE::Tree.new().add_node.add_leaf(1).end_node.inspect)
16     assert_equal("[[1], [1]]", CHISE::Tree.new().add_node.add_leaf(1).end_node.add_node.add_leaf(1).end_node.inspect)
17
18     tree = CHISE::Tree.new
19     assert_equal("[]", tree.inspect)
20     assert_equal("[1]", tree.add_leaf(1).inspect)
21     assert_equal(0, tree.depth)
22     assert_equal("[1, 2]", tree.add_leaf(2).inspect)
23     assert_equal("[1, 2, []]", tree.add_node.inspect)
24     assert_equal("[1, 2, [3]]", tree.add_leaf(3).inspect)
25     assert_equal(1, tree.depth)
26     assert_equal("[1, 2, [3, 4]]", tree.add_leaf(4).inspect)
27     assert_equal("[1, 2, [3, 4]]", tree.end_node.inspect)
28     assert_equal("[1, 2, [3, 4], [5]]", tree.add_node.add_leaf(5).inspect)
29     assert_equal("[1, 2, [3, 4], [5, [6]]]", tree.add_node.add_leaf(6).inspect)
30     assert_equal(2, tree.depth)
31
32     tree = CHISE::Tree.new
33     assert_equal("[[\"+\"]]", tree.add_node("+", 2).inspect)
34     assert_equal("[[\"+\", 1]]", tree.add_leaf(1).inspect)
35     assert_raise(RuntimeError, "unmatch leaves") { tree.check_integrity }
36     assert_equal("[[\"+\", 1, 2]]", tree.add_leaf(2).inspect)
37     assert_nil(tree.check_integrity)
38     assert_equal("[[\"+\", 1, 2], 3]", tree.add_leaf(3).inspect)
39     assert_raise(RuntimeError, "extra nodes") { tree.check_integrity }
40     
41     tree = CHISE::Tree.new
42     assert_equal("[[\"+\"]]", tree.add_node("+", 2).inspect)
43     assert_raise(RuntimeError, "unmatch leaves") { tree.check_integrity }
44     assert_equal("[[\"+\", 1]]", tree.add_leaf(1).inspect)
45     assert_raise(RuntimeError, "unmatch leaves") { tree.check_integrity }
46     assert_equal("[[\"+\", 1, [\"+\"]]]", tree.add_node("+", 2).inspect)
47     assert_raise(RuntimeError, "unmatch leaves") { tree.check_integrity }
48     assert_equal("[[\"+\", 1, [\"+\", 2]]]", tree.add_leaf(2).inspect)
49     assert_raise(RuntimeError, "unmatch leaves") { tree.check_integrity }
50     assert_equal("[[\"+\", 1, [\"+\", 2, 3]]]", tree.add_leaf(3).inspect)
51     assert_nil(tree.check_integrity)
52
53     tree = CHISE::Tree.new
54     assert_equal("[1]", tree.add_leaf(1).inspect)
55     assert_nil(tree.check_integrity)
56     assert_equal("[1, 2]", tree.add_leaf(2).inspect)
57     assert_raise(RuntimeError, "extra leaves") { tree.check_integrity }
58   end
59 end
60
61 class TestIDSTree < Test::Unit::TestCase
62   def check_tree(ids)
63     CHISE::IDS_Tree.new(ids).check_integrity
64   end
65
66   def test_ids_tree()
67 #    assert_equal("[[<+,U+002B>, <A,U+0041>, <B,U+0042>]]", CHISE::IDS_Tree.new("+AB").inspect)
68 #    assert_equal("[[<+,U+002B>, <A,U+0041>, <B,U+0042>], <C,U+0043>]", CHISE::IDS_Tree.new("+ABC").inspect)
69 #    assert_equal("[[<+,U+002B>, <A,U+0041>, [<+,U+002B>, <B,U+0042>, <C,U+0043>]]]", CHISE::IDS_Tree.new("+A+BC").inspect)
70 #    assert_equal("[[<+,U+002B>, <A,U+0041>, [<+,U+002B>, <B,U+0042>, <C,U+0043>]], <D,U+0044>]", CHISE::IDS_Tree.new("+A+BCD").inspect)
71
72     #assert_equal("[<榊,U+698A>]", CHISE::IDS_Tree.new("榊").inspect)
73 #    assert_equal("[[<⿰,U+2FF0>, <木,J90-4C5A>, <神,J90-3F40>]]", CHISE::IDS_Tree.new("⿰木神").inspect)
74     assert_equal(1, CHISE::IDS_Tree.new("⿰木神").depth)
75 #    assert_equal("[[<⿰,U+2FF0>, <木,J90-4C5A>, [<⿰,U+2FF0>, <⺭,CDP-8B70>, <申,J90-3F3D>]]]", CHISE::IDS_Tree.new("⿰木⿰⺭申").inspect)
76     assert_equal(2, CHISE::IDS_Tree.new("⿰木⿰⺭申").depth)
77     assert_raise(RuntimeError, "unmatch leaves") { check_tree("⿰木") }
78     assert_nil(CHISE::IDS_Tree.new("⿰木神").check_integrity)
79     assert_raise(RuntimeError, "unmatch leaves") { check_tree("⿰木⿰申") }
80     assert_nil(CHISE::IDS_Tree.new("⿰木⿰⺭申").check_integrity)
81     assert_raise(RuntimeError, "unmatch leaves") { check_tree("⿰木⿰⺭申申") }
82     assert_nil(CHISE::IDS_Tree.new("榊").check_integrity)
83     assert_raise(RuntimeError, "extra leaves") { check_tree("榊榊") }
84   end
85
86   def test_ids_tree_by_character
87     assert_equal(3, "⿳".char.idc_argument_number)
88 #    assert_equal("⿳士冖匕", "壱".ids)
89 #    assert_equal(3, "壱".ids.to_a[0].char.idc_argument_number)
90     assert_nil(CHISE::IDS_Tree.new("⿳士冖匕").check_integrity)
91     assert_raise(RuntimeError, "unmatch leaves") { check_tree("⿳士冖") }
92     assert_raise(RuntimeError, "extra nodes") { check_tree("⿳士冖匕匕") }
93     assert_raise(RuntimeError, "contains ques") { check_tree("⿳士冖?") }
94   end
95
96   def nutest_tree_depth
97     assert_equal(1, CHISE::IDS_Tree.new("林".decompose).depth)
98 #    assert_equal("["⿰木木"]", CHISE::IDS_Tree.new("林".decompose).nodes.inspect)
99 #    assert_equal("[]", CHISE::IDS_Tree.new("林".decompose).sub_nodes.inspect)
100     assert_equal(2, CHISE::IDS_Tree.new("榊".decompose_all).depth)
101 #    assert_equal("["⿰木⿰⺭申", "⿰⺭申"]", CHISE::IDS_Tree.new("榊".decompose_all).nodes.inspect)
102 #    assert_equal("["⿰⺭申"]", CHISE::IDS_Tree.new("榊".decompose_all).sub_nodes.inspect)
103
104 #    assert_equal(3, CHISE::IDS_Tree.new("焔".decompose_all).depth)
105 #    assert_equal(3, CHISE::IDS_Tree.new("焔".decompose_all).nodes.length)
106 #    assert_equal(2, CHISE::IDS_Tree.new("焔".decompose_all).sub_nodes.length)
107
108     assert_equal(2, CHISE::IDS_Tree.new("屡".decompose_all).depth)
109     assert_equal("⿸尸娄", "⿸尸⿱米女".aggregate)
110     assert_equal(3, CHISE::IDS_Tree.new("醤".decompose_all).depth)
111   end
112 end