public void ReplaceTabToSpaces() { var indentationSize = 0; var hasTabs = false; for (int i = 0; i < InternalString.Length; i++) { var c = InternalString[i]; if (!(c == ' ' || c == '\t')) { break; } if (c == '\t') { hasTabs = true; } indentationSize = i; } if (hasTabs) { var firstSubString = InternalString.Substring(0, indentationSize + 1); var secondSubString = InternalString.Substring(indentationSize + 1, InternalString.Length - indentationSize - 1); InternalString = string.Concat(firstSubString.Replace("\t", " "), secondSubString); IsChanged = true; } }
public void ResultIsNotEmpty() { var internalStr = new InternalString(); string text = "some text { internal text } "; var result = internalStr.Unpack(text); Assert.AreNotEqual(result.Text, string.Empty, "Result should not be empty"); Assert.AreNotEqual(result.InternalTexts.Count, 0, "List should not be empty"); }
public void RemoveEndSpaces() { int end = InternalString.Length - 1; while (end >= 0 && char.IsWhiteSpace(InternalString[end])) { --end; } if (end != InternalString.Length - 1) { InternalString = InternalString.Substring(0, end + 1); } }
public void InternalSAISNaive() { 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 = InternalString.SAIS(s, max_c, -1, -1); sa.Should().Equal(SaNaive(s)); } } 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 = InternalString.SAIS(s, max_c, -1, -1); sa.Should().Equal(SaNaive(s)); } } }
public void InternalSADoublingNaive() { 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; for (int i = 0; i < n; i++) { s[i] = g % 4; g /= 4; } var sa = InternalString.SADoubling(s); sa.Should().Equal(SaNaive(s)); } } 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; for (int i = 0; i < n; i++) { s[i] = g % 2; g /= 2; } var sa = InternalString.SADoubling(s); sa.Should().Equal(SaNaive(s)); } } }
public static int[] SuffixArray <T>(ReadOnlySpan <T> s) { var idx = CreateIdx(s); var s2 = new int[s.Length]; var now = 0; // 座標圧縮 for (int i = 0; i < idx.Length; i++) { if (i > 0 && !EqualityComparer <T> .Default.Equals(s[idx[i - 1]], s[idx[i]])) { now++; } s2[idx[i]] = now; } return(InternalString.SAIS(s2, now)); }
public void Case2() { var internalStr = new InternalString(); var fileName = Path.Combine(GetTestDir(), "case2.txt"); string text = File.ReadAllText(fileName); var result = internalStr.Unpack(text); Console.WriteLine(result.Text); int i = 1; foreach (var item in result.InternalTexts) { Console.WriteLine("********** " + i); Console.WriteLine(item); Console.WriteLine("********** " + i); i++; } }
public static int[] SuffixArray(int[] s, int upper) { Contract.Assert(0U <= (uint)upper, reason: $"{nameof(upper)} must be positive."); Contract.Assert(s.All(si => (uint)si <= (uint)upper), reason: $"si ∈ {nameof(s)} must be 0 <= si && si <= {nameof(upper)}"); return(InternalString.SAIS(s, upper)); }