public void CI_InsertPairTest_04() { string testObject = "InsertPair"; // Prepare data structures used in the test. int width = 1000, height = 1; List <int>[] objectXs, contourXs, borderXs; SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InitializeScanLines(width, height, out objectXs, out contourXs, out borderXs); List <int> borderX = borderXs[0]; SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderX, 100, 300); SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderX, 500, 700); SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderX, 700, 900); SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderX, 300, 500); SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderX, 100, 900); SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderX, 400, 600); SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderX, 600, 800); SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderX, 400, 800); SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderX, 550, 850); int[] expectedPoints = { 100, 900 }; TestInsertPair(testObject, borderXs, expectedPoints); }
public void CI_PrepareInfluenceRegionsTest_05_BorderLimits() { string testObject = "borderLimits"; int radius = SWA_Ariadne_Gui_Mazes_ContourImageAccessor.ContourDistance; int influenceRange = radius + 1; SWA_Ariadne_Gui_Mazes_ContourImageAccessor.PrepareInfluenceRegions(influenceRange); // Verify that an application of the borderLimits gives the same scan lines as applying leftBorderLimits and rightBorderLimits. for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { #region Prepare required data structures. int width = 2 * influenceRange + 1, height = 2 * influenceRange + 1; int x = (width + 1) / 2, y = (height + 1) / 2; List <int>[] objectXs, contourXs, borderXs; List <int>[] objectXsLR, contourXsLR, borderXsLR; SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InitializeScanLines(width, height, out objectXs, out contourXs, out borderXs); SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InitializeScanLines(width, height, out objectXsLR, out contourXsLR, out borderXsLR); #endregion // Apply the (single) list to borderXs. List <ContourImage.RelativePoint> list = SWA_Ariadne_Gui_Mazes_ContourImageAccessor.borderLimits[i, j]; foreach (ContourImage.RelativePoint rp in list) { SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderXs[y + rp.ry], x - rp.rx, x + rp.rx); } // Apply the left and right lists to borderXsLR. list = SWA_Ariadne_Gui_Mazes_ContourImageAccessor.leftBorderLimits[i, j]; foreach (ContourImage.RelativePoint rp in list) { SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderXsLR[y + rp.ry], x + rp.rx, x - rp.rx); } list = SWA_Ariadne_Gui_Mazes_ContourImageAccessor.rightBorderLimits[i, j]; foreach (ContourImage.RelativePoint rp in list) { SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderXsLR[y + rp.ry], x - rp.rx, x + rp.rx); } // Compare the resulting scan lines. for (y = 0; y < height; y++) { string testLine = testObject + string.Format("[{0},{1}][{2}]", i, j, y); List <int> expected = borderXsLR[y], actual = borderXs[y]; Assert.AreEqual(expected.Count, actual.Count, testLine + " different count"); for (int p = 0; p < expected.Count; p++) { Assert.AreEqual(expected[p], actual[p], testLine + " different entry"); } } } } }
public void CI_EliminateInsideRegionsTest_03() { string testObject = "EliminateInsideRegions"; int width = 11, height = 10, sy = 1, y0 = sy - 1; List <int>[] objectXs, contourXs, borderXs; SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InitializeScanLines(width, height, out objectXs, out contourXs, out borderXs); int y = y0; // nothing y += sy; SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderXs[y], 4, 6); y += sy; SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderXs[y], 2, 7); y += sy; SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderXs[y], 1, 2); SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderXs[y], 4, 5); SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderXs[y], 7, 8); y += sy; SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderXs[y], 1, 2); SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderXs[y], 4, 5); SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderXs[y], 8, 9); y += sy; SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderXs[y], 1, 2); SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderXs[y], 4, 4); SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderXs[y], 7, 8); y += sy; SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderXs[y], 2, 7); int insideRegionsExpected = 2; int insideRegionsActual = SWA_Ariadne_Gui_Mazes_ContourImageAccessor.EliminateInsideRegions(borderXs, y0, sy); Assert.AreEqual(insideRegionsExpected, insideRegionsActual, testObject + " returned wrong number of inside regions"); }
private static void InsertBorderLR(List <int> borderX, List <bool> borderLR, int left, int right) { SWA_Ariadne_Gui_Mazes_ContourImageAccessor.InsertPair(borderX, left, right); }