public void SelectTree_WithSimpleRecurseFilter(string test, RecurseResult result, string expectedKeysText) { var root = Tree.Create(("a", "b"), ("b", "c")).GetRoot(); var actualKeys = root.SelectTree(n => n.Key == test ? result : RecurseResult.Continue).SelectKeys(); var expectedKeys = expectedKeysText.SelectWords(); actualKeys.ShouldBe(expectedKeys); }
private static RecurseResult Recurse(string s, int start, int length, int depth) { long decompressed = 0; int charsProcessed = 0; int i = start; while (i < start + length) { if (s[i] == '(') { string remaining = s.Substring(i); Match m = MarkerRegex.Match(remaining); if (m.Success) { int repeat = int.Parse(m.Groups[2].Value); int nextStart = i + m.Groups[0].Length; int nextLength = int.Parse(m.Groups[1].Value); RecurseResult recurseResult = Recurse(s, nextStart, nextLength, depth + 1); decompressed += recurseResult.Decompressed * repeat; charsProcessed += (recurseResult.CharsProcessed + m.Groups[0].Length); i += (m.Groups[0].Length + recurseResult.CharsProcessed); } else { decompressed++; charsProcessed++; i++; } } else { decompressed++; charsProcessed++; i++; } } RecurseResult toReturn = new(decompressed, charsProcessed); return(toReturn); }