public void IntervalTree_1D_Stress_Test() { var nodeCount = 1000; var intTree = new DIntervalTree <int>(1); var rnd = new Random(); var intervals = new List <DInterval <int> >(); for (int i = 0; i < nodeCount; i++) { var start = i - 1000 + rnd.Next(1, 10); var interval = new DInterval <int>(new int[] { start }, new int[] { start + rnd.Next(1, 10) }); intervals.Add(interval); intTree.Insert(interval.Start, interval.End); } for (int i = 0; i < nodeCount; i++) { Assert.IsTrue(intTree.DoOverlap(intervals[i].Start, intervals[i].End)); } for (int i = 0; i < intervals.Count; i++) { intTree.Delete(intervals[i].Start, intervals[i].End); } }
public void IntervalTree_1D_Accuracy_Test() { var nodeCount = 100; var intTree = new DIntervalTree <int>(1); var rnd = new Random(); var intervals = new List <DInterval <int> >(); for (int i = 0; i < nodeCount; i++) { var start = i - 1000 + rnd.Next(1, 10); var interval = new DInterval <int>(new int[] { start }, new int[] { start + rnd.Next(1, 10) }); intervals.Add(interval); intTree.Insert(interval.Start, interval.End); for (int j = i; j >= 0; j--) { Assert.IsTrue(intTree.DoOverlap(intervals[j].Start, intervals[j].End)); var testStart = cloneArray(intervals[j].Start); var testEnd = cloneArray(intervals[j].End); testStart[0] = testStart[0] - rnd.Next(1, 5); testEnd[0] = testEnd[0] + rnd.Next(1, 5); Assert.IsTrue(intTree.DoOverlap(testStart, testEnd)); } } for (int i = 0; i < nodeCount; i++) { Assert.IsTrue(intTree.DoOverlap(intervals[i].Start, intervals[i].End)); var testStart = cloneArray(intervals[i].Start); var testEnd = cloneArray(intervals[i].End); testStart[0] = testStart[0] - rnd.Next(1, 5); testEnd[0] = testEnd[0] + rnd.Next(1, 5); Assert.IsTrue(intTree.DoOverlap(testStart, testEnd)); } for (int i = 0; i < intervals.Count; i++) { intTree.Delete(intervals[i].Start, intervals[i].End); for (int j = i + 1; j < nodeCount; j++) { Assert.IsTrue(intTree.DoOverlap(intervals[j].Start, intervals[j].End)); } } }
public void IntervalTree_2D_Stress_Test() { var nodeCount = 1000; const int dimension = 2; var intTree = new DIntervalTree <int>(dimension); var rnd = new Random(); var intervals = new List <DInterval <int> >(); for (int i = 0; i < nodeCount; i++) { var startx = i - 1000 + rnd.Next(1, 10); var starty = i + 15 + rnd.Next(1, 10); //(x1,y1) and (x2, y2) var interval = new DInterval <int>(new int[dimension] { startx, starty }, new int[dimension] { startx + rnd.Next(1, 10), starty + rnd.Next(1, 10) }); intervals.Add(interval); intTree.Insert(interval.Start, interval.End); } for (int i = 0; i < nodeCount; i++) { Assert.IsTrue(intTree.DoOverlap(intervals[i].Start, intervals[i].End)); } for (int i = 0; i < intervals.Count; i++) { intTree.Delete(intervals[i].Start, intervals[i].End); } }
public void IntervalTree_2D_Accuracy_Test() { var nodeCount = 100; const int dimension = 2; var intTree = new DIntervalTree <int>(dimension); var rnd = new Random(); var intervals = new List <DInterval <int> >(); for (int i = 0; i < nodeCount; i++) { var startx = i - 1000 + rnd.Next(1, 10); var starty = i + 15 + rnd.Next(1, 10); //(x1,y1) and (x2, y2) var interval = new DInterval <int>(new int[dimension] { startx, starty }, new int[dimension] { startx + rnd.Next(1, 10), starty + rnd.Next(1, 10) }); intervals.Add(interval); intTree.Insert(interval.Start, interval.End); for (int j = i; j >= 0; j--) { var testStart = cloneArray(intervals[j].Start); var testEnd = cloneArray(intervals[j].End); testStart[0] = testStart[0] - rnd.Next(1, 5); testStart[1] = testStart[1] - rnd.Next(1, 5); testEnd[0] = testEnd[0] + rnd.Next(1, 5); testEnd[1] = testEnd[1] + rnd.Next(1, 5); Assert.IsTrue(intTree.DoOverlap(testStart, testEnd)); } } for (int i = 0; i < nodeCount; i++) { Assert.IsTrue(intTree.DoOverlap(intervals[i].Start, intervals[i].End)); var testStart = cloneArray(intervals[i].Start); var testEnd = cloneArray(intervals[i].End); testStart[0] = testStart[0] - rnd.Next(1, 5); testStart[1] = testStart[1] - rnd.Next(1, 5); testEnd[0] = testEnd[0] + rnd.Next(1, 5); testEnd[1] = testEnd[1] + rnd.Next(1, 5); Assert.IsTrue(intTree.DoOverlap(testStart, testEnd)); } for (int i = 0; i < intervals.Count; i++) { intTree.Delete(intervals[i].Start, intervals[i].End); for (int j = i + 1; j < nodeCount; j++) { var testStart = cloneArray(intervals[j].Start); var testEnd = cloneArray(intervals[j].End); Assert.IsTrue(intTree.DoOverlap(testStart, testEnd)); } } }