Пример #1
0
  def test_random_lcp_lr_matching(self):
    T, n, A = 1000, 500, ['a', 'b']
    m, TT = 10, 10
    for _ in range(T):
      text = rand.random_word(n, A)
      sa = suffix_array.skew(text, n)
      lcp = suffix_array.lcp_kasai(sa, text, n)
      lcplr = lcp_lr.lcplr_from_lcp(lcp, n)

      for _ in range(TT):
        word = rand.random_word(m, A)
        reference = suffix_array.contains(sa, text, word, n, m)
        self.assertEqual(list(lcp_lr.contains_with_lcplr(
            sa, lcplr, text, word, n, m)), list(reference))
Пример #2
0
  def test_lcplr_construction(self):
    text = "#banana"
    n = len(text) - 1
    sa = suffix_array.skew(text, n)
    lcp = suffix_array.lcp_kasai(sa, text, n)
    lcplr = lcp_lr.lcplr_from_lcp(lcp, n)
    reference = {
        (1, 2): 1,
        (2, 3): 3,
        (1, 3): 1,
        (3, 4): 0,
        (4, 5): 0,
        (5, 6): 2,
        (4, 6): 0,
        (3, 6): 0,
        (1, 6): 0,
    }

    self.assertEqual(lcplr, reference, "LCP-LR construction")
Пример #3
0
  def test_lcplr_matching(self):
    text = "#abrakadabra"
    n = len(text) - 1
    sa = suffix_array.skew(text, n)
    lcp = suffix_array.lcp_kasai(sa, text, n)
    lcplr = lcp_lr.lcplr_from_lcp(lcp, n)

    self.assertEqual(list(lcp_lr.contains_with_lcplr(
        sa, lcplr, text, "#a", n, 1)), [1,4,6,8,11], "LCP-LR matching")
    self.assertEqual(list(lcp_lr.contains_with_lcplr(
        sa, lcplr, text, "#bra", n, 3)), [2,9], "LCP-LR matching")
    self.assertEqual(list(lcp_lr.contains_with_lcplr(
        sa, lcplr, text, "#brak", n, 4)), [2], "LCP-LR matching")
    self.assertEqual(list(lcp_lr.contains_with_lcplr(
        sa, lcplr, text, "#ra", n, 2)), [3,10], "LCP-LR matching")
    self.assertEqual(list(lcp_lr.contains_with_lcplr(
        sa, lcplr, text, "#rak", n, 3)), [3], "LCP-LR matching")
    self.assertEqual(list(lcp_lr.contains_with_lcplr(
        sa, lcplr, text, "#l", n, 1)), [], "LCP-LR matching")
    self.assertEqual(list(lcp_lr.contains_with_lcplr(
        sa, lcplr, text, "#x", n, 1)), [], "LCP-LR matching")
    self.assertEqual(list(lcp_lr.contains_with_lcplr(
        sa, lcplr, text, "#xyz", n, 3)), [], "LCP-LR matching")
def lcp_lr_contains(t, w, n, m):
    SA = suffix_array.skew(t, n)
    LCP_LR = lcp.build_lcp_lr(lcp.kasai(SA, t, n), n)
    return lcp.contains(SA, LCP_LR, t, w, n, m)
Пример #5
0
 def check_lcp_lr(self, text, n, reference):
     lcp_lr = lcp.build_lcp_lr(
         lcp.kasai(suffix_array.skew(text, n), text, n), n)
     self.assertEqual(lcp_lr, reference)