コード例 #1
0
 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)
コード例 #2
0
 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')
コード例 #3
0
 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))
コード例 #4
0
 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))
コード例 #5
0
 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)
コード例 #6
0
 def check_burrows_wheeler(self, t, n, reference):
   self.assertEqual(burrows_wheeler.transform_from_suffix_array(
       suffix_array.naive(t, n), t, n), reference)
コード例 #7
0
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)