コード例 #1
0
 def test_split_patterns(self):
     pattern_list = ['ab', 'b']
     root = link_pattern_trie(construct_pattern_trie(pattern_list))
     a_node = root.edges['a']
     b_node = root.edges['b']
     self.assertEqual(b_node, a_node.edges['b'].failure_link)
     self.assertEqual(b_node, a_node.edges['b'].output_link)
コード例 #2
0
 def test_repeated_char(self):
     pattern = 'aaaaaa'
     root = link_pattern_trie(construct_pattern_trie([pattern]))
     current = root
     for c in pattern:
         nxt = current.edges[c]
         self.assertEqual(None, current.output_link)
         self.assertEqual(current, nxt.failure_link)
コード例 #3
0
 def test_base_case(self):
     pattern_list = ['a', 'b', 'c']
     root = link_pattern_trie(construct_pattern_trie(pattern_list))
     self.assertEqual(root, root.failure_link)
     self.assertEqual(None, root.output_link)
     for c in pattern_list:
         self.assertEqual(root, root.edges[c].failure_link)
         self.assertEqual(None, root.edges[c].output_link)
コード例 #4
0
 def test_long_output_path(self):
     pattern_list = ['b', 'abb', 'aab']
     root = link_pattern_trie(construct_pattern_trie(pattern_list))
     end_node = self.follow_path(root, 'aab')
     mid_node = self.follow_path(root, 'ab')
     start_node = self.follow_path(root, 'b')
     self.assertEqual(mid_node, end_node.failure_link)
     self.assertEqual(start_node, mid_node.failure_link)
     self.assertEqual(start_node, mid_node.output_link)
     self.assertEqual(start_node, end_node.output_link)
コード例 #5
0
 def test_eclipsing_patterns(self):
     pattern_list = ['aaaaa', 'aaaa', 'aaa', 'aa', 'a']
     root = link_pattern_trie(construct_pattern_trie(pattern_list))
     current = root.edges['a']
     self.assertEqual(root, current.failure_link)
     self.assertEqual(None, current.output_link)
     for c in 'aaaa':
         nxt = current.edges[c]
         self.assertEqual(current, nxt.failure_link)
         self.assertEqual(current, nxt.output_link)