2 # Copyright (C) 2002-2004 Kouichirou Eto, All rights reserved.
5 require "chise/idstree"
7 class TestTree < Test::Unit::TestCase
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)
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)
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 }
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)
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 }
61 class TestIDSTree < Test::Unit::TestCase
63 CHISE::IDS_Tree.new(ids).check_integrity
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)
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("榊榊") }
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("⿳士冖?") }
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)
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)
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)