public void BothVersionOfKdTree_ReturnsTheSameSetOfCoordinates_GivenASetOfPoints() { var pointsNeeded = 100; var originalKdTree = new KDTree <double, Coordinate>(2, CoordinatesAsDoubleArray, ArrayOfCoordinates, KdTreeHelper.L2Norm_Squared_Double); var coordinateKdTree = new KDTreeCoordinate <Coordinate>(2, ArrayOfCoordinates, KdTreeHelper.L2Norm_Squared_Coordinate); var pointsFromOriginal = originalKdTree.NearestNeighborsLinear(CoordinatesAsDoubleArray.First(), pointsNeeded); var pointsFromModified = coordinateKdTree.NearestNeighborsLinear(ArrayOfCoordinates.First(), pointsNeeded); pointsFromOriginal.SequenceEqual(pointsFromModified).Should().BeTrue(); }
public void NearestNeighborsRadial_ReturnsTheClosestPoints_EvenIfTheRadiusHasMorePointsInItsSroundingThanDefined() { var pointsNeeded = 4; var center = ArrayOfCoordinates.First(); var coordinatesSortedByDistanceToCenter = ArrayOfCoordinates.OrderBy(c => c.Distance(center)).ToList(); var kdTree = new KDTree <double, Coordinate>(2, CoordinatesAsDoubleArray, ArrayOfCoordinates, KdTreeHelper.L2Norm_Squared_Double); var searchedPoints = kdTree.NearestNeighborsRadial(new[] { center.Latitude, center.Longitude }, double.MaxValue, pointsNeeded); searchedPoints[0].Should().Be(coordinatesSortedByDistanceToCenter[0]); searchedPoints[1].Should().Be(coordinatesSortedByDistanceToCenter[1]); searchedPoints[2].Should().Be(coordinatesSortedByDistanceToCenter[2]); searchedPoints[3].Should().Be(coordinatesSortedByDistanceToCenter[3]); }