private static void TestRangeFromThreeToFour(IOrderedSymbolTable <int, string> numberToString) { var elementsWithThreeToFourKeys = numberToString.Range(3, 4).ToList(); Assert.True(elementsWithThreeToFourKeys.Contains(KeyValuePair.Create(3, "A"))); Assert.AreEqual(1, elementsWithThreeToFourKeys.Count); }
private static void TestRangeFromFourToFive(IOrderedSymbolTable <int, string> numberToString) { var elementsWithFourToFiveKeys = numberToString.Range(4, 5).ToList(); Assert.True(elementsWithFourToFiveKeys.Contains(KeyValuePair.Create(5, "E"))); Assert.AreEqual(1, elementsWithFourToFiveKeys.Count); }
private static void HandleVerticalLine(ILine line, IOrderedSymbolTable <int, int> xToY, List <Point> intersections) { var aY = line.A.Y; var bY = line.B.Y; var intersectionWithCurrentVerticalLine = xToY .Range(Math.Min(aY, bY), Math.Max(aY, bY)) .Select(intersection => CreatePointFrom(line.A.X, intersection.Key)); intersections.AddRange(intersectionWithCurrentVerticalLine); }
private static void HandleEvent(KeyValuePair <int, ILine> @event, IOrderedSymbolTable <int, int> xToY, List <Point> intersections) { var(x, line) = @event; if (line.LineType == ILine.Type.Horizontal) { HandleHorizontalLine(x, line, xToY); } else { HandleVerticalLine(line, xToY, intersections); } }
private static void HandleHorizontalLine(int x, ILine line, IOrderedSymbolTable <int, int> xToY) { if (x == line.A.X) { xToY.Add(line.A.Y, x); return; } var deleted = xToY.TryDelete(line.A.Y); if (deleted) { return; } var message = $"Reached end point of horizontal line but couldn't remove its y:{line.A.Y} coordinated"; throw new InvalidOperationException(message); }
private static void TestRangeFromFourToFour(IOrderedSymbolTable <int, string> numberToString) { Assert.AreEqual(0, numberToString.Range(4, 4).ToList().Count); }