def test_sa_lcp_naive(): for n in range(1, 6): m = 1 for i in range(n): m *= 4 for f in range(m): s = [0] * n g = f max_c = 0 for i in range(n): s[i] = g % 4 max_c = max(max_c, s[i]) g //= 4 sa = sa_naive_test(s) assert sa == suffix_array(s) assert sa == suffix_array(s, max_c) assert lcp_naive(s, sa) == lcp_array(s, sa) for n in range(1, 11): m = 1 for i in range(n): m *= 2 for f in range(m): s = [0] * n g = f max_c = 0 for i in range(n): s[i] = g % 2 max_c = max(max_c, s[i]) g //= 2 sa = sa_naive(s) assert sa == suffix_array(s) assert sa == suffix_array(s, max_c) assert lcp_naive(s, sa) == lcp_array(s, sa)
def test_sa_allAB_test(): for n in range(1, 101): s = [0] * n for i in range(n): s[i] = i % 2 assert sa_naive_test(s) == suffix_array(s) assert sa_naive_test(s) == suffix_array(s, 3) for n in range(1, 101): s = [0] * n for i in range(n): s[i] = 1 - i % 2 assert sa_naive_test(s) == suffix_array(s) assert sa_naive_test(s) == suffix_array(s, 3)
def test_sa(): s = 'missisippi' sa = suffix_array(s) answer = [ 'i', 'ippi', 'isippi', 'issisippi', 'missisippi', 'pi', 'ppi', 'sippi', 'sisippi', 'ssisippi' ] assert len(answer) == len(sa) for i in range(len(sa)): assert answer[i] == s[sa[i]:]
def test_lcp(): s = 'aab' sa = suffix_array(s) assert [0, 1, 2] == sa lcp = lcp_array(s, sa) assert [1, 0] == lcp assert lcp == lcp_array([0, 0, 1], sa) assert lcp == lcp_array([-100, -100, 100], sa) assert lcp == lcp_array( [NUMERIC_MIN_INT, NUMERIC_MIN_INT, NUMERIC_MAX_INT], sa) assert lcp == lcp_array([NUMERIC_MIN_LL, NUMERIC_MIN_LL, NUMERIC_MAX_LL], sa) assert lcp == lcp_array( [NUMERIC_MIN_UINT, NUMERIC_MIN_UINT, NUMERIC_MAX_UINT], sa) assert lcp == lcp_array( [NUMERIC_MIN_ULL, NUMERIC_MIN_ULL, NUMERIC_MAX_ULL], sa)
def test_empty(): assert [] == suffix_array('') assert [] == suffix_array([]) assert [] == z_algorithm('') assert [] == z_algorithm([])
def test_sa_single(): assert [0] == suffix_array([0]) assert [0] == suffix_array([-1]) assert [0] == suffix_array([1]) assert [0] == suffix_array([NUMERIC_MIN_INT]) assert [0] == suffix_array([NUMERIC_MAX_INT])