public void Compute([NotNull] OneWayFSAParameters parameters) { Dictionary <int, Rect> rectangles = GetRectangles(); Dictionary <int, Rect> initialRectangles = rectangles.ToDictionary( pair => pair.Key, pair => new Rect(pair.Value.Location, pair.Value.Size)); var algorithm = new OneWayFSAAlgorithm <int>(rectangles, parameters); algorithm.Compute(); // Fulfill minimum spacing AssertNoOverlap(Distinct(algorithm.Rectangles.Values)); foreach (KeyValuePair <int, Rect> pair in algorithm.Rectangles) { Rect initialRectangle = initialRectangles[pair.Key]; // Size must not change Assert.AreEqual(initialRectangle.Size, pair.Value.Size); // X or Y must not change depending on the used Way if (parameters.Way == OneWayFSAWay.Horizontal) { Assert.AreEqual(initialRectangle.Y, pair.Value.Y); } else { Assert.AreEqual(initialRectangle.X, pair.Value.X); } } }
private object RemoveOverlaps1() { OneWayFSAParameters params1 = new OneWayFSAParameters(); params1.HorizontalGap = 40; params1.VerticalGap = 40; var vertexRectangles = new Dictionary <string, Rectangle>(); for (int i = 0; i < vertexLabels.Length; ++i) { var vertex = vertexPositions[vertexLabels[i]]; var border = vertexBorders[vertexLabels[i]]; var rect = new Rectangle(); rect.Width = border.Right - border.Left; rect.Height = border.Bottom - border.Top; vertexRectangles.Add(vertexLabels[i], rect); } OneWayFSAAlgorithm <string> algo1; algo1 = new OneWayFSAAlgorithm <string>(null, params1); algo1.Compute(); return(null); }
public void Parameter_Throws() { var parameters = new OverlapRemovalParameters(); Assert.Throws <ArgumentOutOfRangeException>(() => parameters.VerticalGap = -1); Assert.Throws <ArgumentOutOfRangeException>(() => parameters.HorizontalGap = -1); var oneWayFSAParameters = new OneWayFSAParameters(); Assert.Throws <ArgumentOutOfRangeException>(() => oneWayFSAParameters.VerticalGap = -1); Assert.Throws <ArgumentOutOfRangeException>(() => oneWayFSAParameters.HorizontalGap = -1); }
public void Constructor_Throws() { var rectangles = new Dictionary <double, Rect>(); var parameters = new OneWayFSAParameters(); // ReSharper disable ObjectCreationAsStatement // ReSharper disable AssignNullToNotNullAttribute Assert.Throws <ArgumentNullException>(() => new OneWayFSAAlgorithm <double>(null, parameters)); Assert.Throws <ArgumentNullException>(() => new OneWayFSAAlgorithm <double>(rectangles, null)); Assert.Throws <ArgumentNullException>(() => new OneWayFSAAlgorithm <double>(null, null)); // ReSharper restore AssignNullToNotNullAttribute // ReSharper restore ObjectCreationAsStatement }
public void Clone() { var parameters = new OverlapRemovalParameters(); var clonedParameters = (OverlapRemovalParameters)parameters.Clone(); AssertAreEqual(parameters, clonedParameters); parameters = new OverlapRemovalParameters { HorizontalGap = 25, VerticalGap = 50 }; clonedParameters = (OverlapRemovalParameters)parameters.Clone(); AssertAreEqual(parameters, clonedParameters); var oneWayFSAParameters = new OneWayFSAParameters(); var clonedOneWayFSAParameters = (OneWayFSAParameters)oneWayFSAParameters.Clone(); AssertOneWayParamsAreEqual(oneWayFSAParameters, clonedOneWayFSAParameters); oneWayFSAParameters = new OneWayFSAParameters { HorizontalGap = 25, VerticalGap = 50 }; clonedOneWayFSAParameters = (OneWayFSAParameters)oneWayFSAParameters.Clone(); AssertOneWayParamsAreEqual(oneWayFSAParameters, clonedOneWayFSAParameters); #region Local function void AssertAreEqual(IOverlapRemovalParameters p1, IOverlapRemovalParameters p2) { Assert.AreEqual(p1.HorizontalGap, p2.HorizontalGap); Assert.AreEqual(p1.VerticalGap, p2.VerticalGap); } void AssertOneWayParamsAreEqual(OneWayFSAParameters p1, OneWayFSAParameters p2) { AssertAreEqual(p1, p2); Assert.AreEqual(p1.Way, p2.Way); } #endregion }
public void StandardFactory() { var rectangles = new Dictionary <int, Rect>(); var context = new TestOverlapRemovalContext(rectangles); var factory = new StandardOverlapRemovalAlgorithmFactory <int>(); CollectionAssert.AreEqual(new[] { "FSA", "OneWayFSA" }, factory.AlgorithmTypes); Assert.IsNull( factory.CreateAlgorithm( string.Empty, context, new OverlapRemovalParameters())); Assert.IsInstanceOf <FSAAlgorithm <int> >( factory.CreateAlgorithm( "FSA", context, new OverlapRemovalParameters())); Assert.IsInstanceOf <OneWayFSAAlgorithm <int> >( factory.CreateAlgorithm( "OneWayFSA", context, new OneWayFSAParameters())); var fsaParameters = new OverlapRemovalParameters(); IOverlapRemovalParameters createdParameters = factory.CreateParameters(string.Empty, fsaParameters); Assert.IsNull(createdParameters); createdParameters = factory.CreateParameters("fsa", fsaParameters); Assert.IsNull(createdParameters); createdParameters = factory.CreateParameters("FSA", fsaParameters); Assert.IsInstanceOf <OverlapRemovalParameters>(createdParameters); Assert.AreNotSame(fsaParameters, createdParameters); createdParameters = factory.CreateParameters("FSA", null); Assert.IsInstanceOf <OverlapRemovalParameters>(createdParameters); Assert.AreNotSame(fsaParameters, createdParameters); var oneWayFSAParameters = new OneWayFSAParameters(); createdParameters = factory.CreateParameters("OneWayFSA", oneWayFSAParameters); Assert.IsInstanceOf <OneWayFSAParameters>(createdParameters); Assert.AreNotSame(oneWayFSAParameters, createdParameters); createdParameters = factory.CreateParameters("OneWayFSA", null); Assert.IsInstanceOf <OneWayFSAParameters>(createdParameters); Assert.AreNotSame(oneWayFSAParameters, createdParameters); createdParameters = factory.CreateParameters("OneWayFSA", fsaParameters); Assert.IsInstanceOf <OneWayFSAParameters>(createdParameters); Assert.AreNotSame(fsaParameters, createdParameters); Assert.AreNotSame(oneWayFSAParameters, createdParameters); Assert.IsFalse(factory.IsValidAlgorithm(null)); Assert.IsFalse(factory.IsValidAlgorithm(string.Empty)); Assert.IsTrue(factory.IsValidAlgorithm("FSA")); Assert.IsTrue(factory.IsValidAlgorithm("OneWayFSA")); Assert.IsFalse(factory.IsValidAlgorithm("fsa")); var algorithm1 = new FSAAlgorithm <int, OverlapRemovalParameters>(rectangles, new OverlapRemovalParameters()); Assert.IsEmpty(factory.GetAlgorithmType(algorithm1)); var algorithm2 = new FSAAlgorithm <int>(rectangles, new OverlapRemovalParameters()); Assert.AreEqual("FSA", factory.GetAlgorithmType(algorithm2)); var algorithm3 = new OneWayFSAAlgorithm <int>(rectangles, new OneWayFSAParameters()); Assert.AreEqual("OneWayFSA", factory.GetAlgorithmType(algorithm3)); }
public void ParameterRaise() { string expectedPropertyName = null; var parameters = new OverlapRemovalParameters(); parameters.PropertyChanged += (sender, args) => { // ReSharper disable AccessToModifiedClosure if (expectedPropertyName is null) { Assert.Fail("Must not raise."); } else { Assert.AreEqual(expectedPropertyName, args.PropertyName); } // ReSharper restore AccessToModifiedClosure }; expectedPropertyName = nameof(OverlapRemovalParameters.VerticalGap); parameters.VerticalGap = 42; expectedPropertyName = null; parameters.VerticalGap = 42; expectedPropertyName = nameof(OverlapRemovalParameters.HorizontalGap); parameters.HorizontalGap = 72; expectedPropertyName = null; parameters.HorizontalGap = 72; var oneWayFSAParameters = new OneWayFSAParameters(); oneWayFSAParameters.PropertyChanged += (sender, args) => { // ReSharper disable AccessToModifiedClosure if (expectedPropertyName is null) { Assert.Fail("Must not raise."); } else { Assert.AreEqual(expectedPropertyName, args.PropertyName); } // ReSharper restore AccessToModifiedClosure }; expectedPropertyName = nameof(OverlapRemovalParameters.VerticalGap); oneWayFSAParameters.VerticalGap = 42; expectedPropertyName = null; oneWayFSAParameters.VerticalGap = 42; expectedPropertyName = nameof(OverlapRemovalParameters.HorizontalGap); oneWayFSAParameters.HorizontalGap = 72; expectedPropertyName = null; oneWayFSAParameters.HorizontalGap = 72; expectedPropertyName = nameof(OneWayFSAParameters.Way); oneWayFSAParameters.Way = OneWayFSAWay.Vertical; expectedPropertyName = null; oneWayFSAParameters.Way = OneWayFSAWay.Vertical; expectedPropertyName = nameof(OneWayFSAParameters.Way); oneWayFSAParameters.Way = OneWayFSAWay.Horizontal; }
public TestOneWayFSAAlgorithm( [NotNull] IDictionary <int, Rect> rectangles, [NotNull] OneWayFSAParameters parameters) : base(rectangles, parameters) { }