def test_all_suffix_array(self): N, A = 12, ['a', 'b'] for n in range(2, N + 1): for t in itertools.product(A, repeat = n): t = '#' + ''.join(t) reference = suffix_array.naive(t, n) self.check_suffix_array(t, n, reference)
def check_maximum_suffix(self, t, n, reference): for algorithm in MAXIMUM_SUFFIX_ALGORITHMS: self.assertEqual( algorithm(t, n), reference, 'Algorithm: {0}'.format(algorithm.__name__)) self.assertEqual( suffix_array.naive(t, n)[-1], reference[0], 'Maximum suffix from suffix array')
def check_no_match(self, t, w, n, m): for algorithm in EXACT_STRING_MATCHING_ALGORITHMS: self.assertFalse( list(algorithm(t, w, n, m)), 'Algorithm {}, text {}, pattern {}'.format( algorithm.__name__, t, w)) self.assertFalse( list(suffix_tree.contains(suffix_tree.naive(t, n), t, w, n, m)), 'Suffix tree, text {}, pattern {}'.format(t, w)) self.assertFalse( list(suffix_array.contains(suffix_array.naive(t, n), t, w, n, m)), 'Suffix array, text {}, pattern {}'.format(t, w))
def check_get_all_exact_matches(self, t, w, n, m, reference): for algorithm in EXACT_STRING_MATCHING_ALGORITHMS: self.assertEqual( list(algorithm(t, w, n, m)), reference, 'Algorithm {}, text {}, pattern {}'.format( algorithm.__name__, t, w)) self.assertEqual( list(suffix_tree.contains(suffix_tree.naive(t, n), t, w, n, m)), reference, 'Suffix tree, text {}, pattern {}'.format(t, w)) self.assertEqual( list(suffix_array.contains(suffix_array.naive(t, n), t, w, n, m)), reference, 'Suffix array, text {}, pattern {}'.format(t, w))
def test_random_suffix_array(self): T, n, A = 100, 500, ['a', 'b'] for _ in range(T): t = rand.random_word(n, A) reference = suffix_array.naive(t, n) self.check_suffix_array(t, n, reference)
def check_burrows_wheeler(self, t, n, reference): self.assertEqual(burrows_wheeler.transform_from_suffix_array( suffix_array.naive(t, n), t, n), reference)
import itertools import os import unittest import parameterized from generator import rand from string_indexing import suffix_array from lyndon import maximum_suffix MAXIMUM_SUFFIX_ALGORITHMS = [ ['from prefix suffix', maximum_suffix.from_prefix_suffix], ['constant space', maximum_suffix.constant_space], [ 'from suffix array', lambda t, n: maximum_suffix.from_suffix_array( suffix_array.naive(t, n), t, n) ], ] class TestMaximumSuffix(unittest.TestCase): run_large = unittest.skipUnless(os.environ.get('LARGE', False), 'Skip test in small runs') def check_maximum_suffix(self, t, n, reference, algorithm): self.assertEqual(algorithm(t, n), reference, 'Algorithm: {}'.format(algorithm.__name__)) @parameterized.parameterized.expand(MAXIMUM_SUFFIX_ALGORITHMS) def test_maximum_suffix(self, _, algorithm): self.check_maximum_suffix('#abaaba', 6, (2, 3), algorithm)