public void SAAllABTest() { for (int n = 1; n <= 100; n++) { var s = new int[n]; for (int i = 0; i < n; i++) { s[i] = (i % 2); } var sa = SaNaive(s); StringLib.SuffixArray(s).Should().Equal(sa); StringLib.SuffixArray(s, 3).Should().Equal(sa); } for (int n = 1; n <= 100; n++) { var s = new int[n]; for (int i = 0; i < n; i++) { s[i] = 1 - (i % 2); } var sa = SaNaive(s); StringLib.SuffixArray(s).Should().Equal(sa); StringLib.SuffixArray(s, 3).Should().Equal(sa); } }
public void Empty() { StringLib.SuffixArray("").Should().Equal(); StringLib.SuffixArray(Array.Empty <int>()).Should().Equal(); StringLib.ZAlgorithm("").Should().Equal(); StringLib.ZAlgorithm(Array.Empty <int>()).Should().Equal(); }
public void SAAllATest() { for (int n = 1; n <= 100; n++) { var s = Enumerable.Repeat(10, n).ToArray(); var sa = SaNaive(s); StringLib.SuffixArray(s).Should().Equal(sa); StringLib.SuffixArray(s, 10).Should().Equal(sa); StringLib.SuffixArray(s, 12).Should().Equal(sa); } }
public void SALCPNaive() { for (int n = 1; n <= 5; n++) { int m = 1; for (int i = 0; i < n; i++) { m *= 4; } for (int f = 0; f < m; f++) { var s = new int[n]; int g = f; int max_c = 0; for (int i = 0; i < n; i++) { s[i] = g % 4; max_c = Math.Max(max_c, s[i]); g /= 4; } var sa = SaNaive(s); StringLib.SuffixArray(s).Should().Equal(sa); StringLib.SuffixArray(s, max_c).Should().Equal(sa); StringLib.LCPArray(s, sa).Should().Equal(LcpNaive(s, sa)); } } for (int n = 1; n <= 10; n++) { int m = 1; for (int i = 0; i < n; i++) { m *= 2; } for (int f = 0; f < m; f++) { var s = new int[n]; int g = f; int max_c = 0; for (int i = 0; i < n; i++) { s[i] = g % 2; max_c = Math.Max(max_c, s[i]); g /= 2; } var sa = SaNaive(s); StringLib.SuffixArray(s).Should().Equal(sa); StringLib.SuffixArray(s, max_c).Should().Equal(sa); StringLib.LCPArray(s, sa).Should().Equal(LcpNaive(s, sa)); } } }
public void SA() { var s = "missisippi"; var sa = StringLib.SuffixArray(s); var answer = new[] { "i", // 9 "ippi", // 6 "isippi", // 4 "issisippi", // 1 "missisippi", // 0 "pi", // 8 "ppi", // 7 "sippi", // 5 "sisippi", // 3 "ssisippi", // 2 }; sa.Should().HaveCount(answer.Length); for (int i = 0; i < sa.Length; i++) { s[sa[i]..].Should().Be(answer[i]);