예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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);
        }
예제 #4
0
        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
        }
예제 #6
0
        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;
        }
예제 #8
0
 public TestOneWayFSAAlgorithm(
     [NotNull] IDictionary <int, Rect> rectangles,
     [NotNull] OneWayFSAParameters parameters)
     : base(rectangles, parameters)
 {
 }