def test_random_string_matching_with_mismatches(self):
     T, n, m, k, A = 100, 50, 10, 4, ['a', 'b']
     for _ in range(T):
         t, w = gen_text(n, m, k, A)
         reference = brute_search(t, w, n, m, k)
         self.assertEqual(
             reference, list(string_matching_with_mismatches(t, w, n, m,
                                                             k)))
 def test_all_string_matching_with_mismatches(self):
     N, M, A = 7, 3, ['a', 'b']
     for n in range(2, N + 1):
         for m in range(1, M + 1):
             for k in range(1, 3):
                 for t in itertools.product(A, repeat=n):
                     t = ''.join(t)
                     for w in itertools.product(A, repeat=m):
                         w = ''.join(w)
                         reference = brute_search(t, w, n, m, k)
                         self.assertEqual(
                             reference,
                             list(
                                 string_matching_with_mismatches(
                                     t, w, n, m, k)))
 def test_get_first_match(self):
     self.assertEqual(
         [4],
         list(string_matching_with_mismatches('bbbbaaa', 'aab', 6, 3, 1)))
 def test_no_match(self):
     self.assertFalse(
         list(string_matching_with_mismatches('bbbbba', 'aab', 6, 3, 1)))
 def test_get_all_matches(self):
     self.assertEqual(
         [4, 5],
         list(string_matching_with_mismatches('bbbbaaab', 'aab', 6, 3, 1)))