public void InvalidParameters() { var parameters = new BalloonTreeLayoutParameters(); Assert.Throws <ArgumentOutOfRangeException>(() => parameters.MinRadius = -1); Assert.Throws <ArgumentOutOfRangeException>(() => parameters.Border = -1); }
public void ParameterRaise() { string expectedPropertyName = null; var parameters = new BalloonTreeLayoutParameters(); 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 }; parameters.MinRadius = 2; expectedPropertyName = nameof(BalloonTreeLayoutParameters.MinRadius); parameters.MinRadius = 4; expectedPropertyName = null; parameters.Border = 20; expectedPropertyName = nameof(BalloonTreeLayoutParameters.Border); parameters.Border = 42; }
public void BalloonTreeLayoutAlgorithm([NotNull] IBidirectionalGraph <string, Edge <string> > graph) { var parameters = new BalloonTreeLayoutParameters(); var algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >( graph, graph.Vertices.First(), parameters); Assert.DoesNotThrow(algorithm.Compute); }
/// <summary> /// Performs the actual layout algorithm. /// </summary> /// <param name="graph">The object containing the graph data</param> /// <param name="selectedNode">selected node</param> protected override void PerformLayout(GraphMapData graph, INode selectedNode) { BidirectionalGraph <string, WeightedEdge <string> > bGraph = GraphSharpUtility.GetBidirectionalGraph(graph); IDictionary <string, Vector> nodePositions = GraphSharpUtility.GetNodePositions(graph); IDictionary <string, Size> nodeSizes = GraphSharpUtility.GetNodeSizes(graph); BalloonTreeLayoutParameters balloonTreeLayoutParameters = new BalloonTreeLayoutParameters(); BalloonTreeLayoutAlgorithm <string, WeightedEdge <string>, BidirectionalGraph <string, WeightedEdge <string> > > balloonTreeLayoutAlgorithm = new BalloonTreeLayoutAlgorithm <string, WeightedEdge <string>, BidirectionalGraph <string, WeightedEdge <string> > >(bGraph, nodePositions, nodeSizes, balloonTreeLayoutParameters, selectedNode.ID); balloonTreeLayoutAlgorithm.Compute(); GraphSharpUtility.SetNodePositions(graph, balloonTreeLayoutAlgorithm.VertexPositions); }
/// <summary> /// Crazy distances between nodes, and yet often nodes overlap the edges and edges intersect each other... /// </summary> /// <returns></returns> private IDictionary <string, Point> Create3() { var params3 = new BalloonTreeLayoutParameters(); params3.MinRadius = (int)MinimumStateDistance; params3.Border = (int)MinimumStateDistance; var algo3 = new BalloonTreeLayoutAlgorithm <string, Edge <string>, BidirectionalGraph <string, Edge <string> > >( graph, vertexPositions, vertexSizes, params3, vertexLabels[0]); algo3.Compute(); return(algo3.VertexPositions); }
public void Clone() { var parameters = new BalloonTreeLayoutParameters(); var clonedParameters = (BalloonTreeLayoutParameters)parameters.Clone(); Assert.AreEqual(parameters, clonedParameters); parameters = new BalloonTreeLayoutParameters(); parameters.MinRadius = 10; parameters.Border = 50; clonedParameters = (BalloonTreeLayoutParameters)parameters.Clone(); Assert.AreEqual(parameters, clonedParameters); }
public void Constructor() { var verticesPositions = new Dictionary <string, Point>(); const string vertex = "0"; var graph = new BidirectionalGraph <string, Edge <string> >(); graph.AddVertex(vertex); var algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, vertex); AssertAlgorithmProperties(algorithm, graph); algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, vertex); algorithm.IterationEnded += (sender, args) => { }; AssertAlgorithmProperties(algorithm, graph, expectedReportIterationEnd: true); algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, vertex); algorithm.ProgressChanged += (sender, args) => { }; AssertAlgorithmProperties(algorithm, graph, expectedReportProgress: true); algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, vertex); algorithm.IterationEnded += (sender, args) => { }; algorithm.ProgressChanged += (sender, args) => { }; AssertAlgorithmProperties(algorithm, graph, expectedReportIterationEnd: true, expectedReportProgress: true); algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, null, vertex); AssertAlgorithmProperties(algorithm, graph); algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, verticesPositions, vertex); AssertAlgorithmProperties(algorithm, graph, verticesPositions); var parameters = new BalloonTreeLayoutParameters(); algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, vertex, parameters); AssertAlgorithmProperties(algorithm, graph, parameters: parameters); algorithm = new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, verticesPositions, vertex, parameters); AssertAlgorithmProperties(algorithm, graph, verticesPositions, parameters: parameters); }
public void StandardFactory() { var vertex = new TestVertex("10"); var positions = new Dictionary <TestVertex, Point>(); var sizes = new Dictionary <TestVertex, Size>(); var graph = new BidirectionalGraph <TestVertex, Edge <TestVertex> >(); graph.AddVertex(vertex); var context = new ContextualLayoutContext <TestVertex, Edge <TestVertex>, BidirectionalGraph <TestVertex, Edge <TestVertex> > >( graph, vertex, positions, sizes); var factory = new ContextualLayoutAlgorithmFactory <TestVertex, Edge <TestVertex>, BidirectionalGraph <TestVertex, Edge <TestVertex> > >(); CollectionAssert.AreEqual( new[] { "DoubleTree", "BalloonTree" }, factory.AlgorithmTypes); Assert.IsNull( factory.CreateAlgorithm( string.Empty, context, new DoubleTreeLayoutParameters())); Assert.IsNull( factory.CreateAlgorithm( "NotExist", context, new DoubleTreeLayoutParameters())); Assert.IsNull( factory.CreateAlgorithm( "doubletree", context, new DoubleTreeLayoutParameters())); Assert.IsInstanceOf <DoubleTreeLayoutAlgorithm <TestVertex, Edge <TestVertex>, BidirectionalGraph <TestVertex, Edge <TestVertex> > > >( factory.CreateAlgorithm( "DoubleTree", context, new DoubleTreeLayoutParameters())); Assert.IsInstanceOf <BalloonTreeLayoutAlgorithm <TestVertex, Edge <TestVertex>, BidirectionalGraph <TestVertex, Edge <TestVertex> > > >( factory.CreateAlgorithm( "BalloonTree", context, new BalloonTreeLayoutParameters())); var testParameters = new TestLayoutParameters(); var doubleTreeParameters = new DoubleTreeLayoutParameters(); ILayoutParameters createdParameters = factory.CreateParameters(string.Empty, doubleTreeParameters); Assert.IsNull(createdParameters); createdParameters = factory.CreateParameters("NotExist", doubleTreeParameters); Assert.IsNull(createdParameters); createdParameters = factory.CreateParameters("DoubleTree", null); Assert.IsInstanceOf <DoubleTreeLayoutParameters>(createdParameters); Assert.AreNotSame(doubleTreeParameters, createdParameters); createdParameters = factory.CreateParameters("DoubleTree", testParameters); Assert.IsInstanceOf <DoubleTreeLayoutParameters>(createdParameters); Assert.AreNotSame(testParameters, createdParameters); createdParameters = factory.CreateParameters("DoubleTree", doubleTreeParameters); Assert.IsInstanceOf <DoubleTreeLayoutParameters>(createdParameters); Assert.AreNotSame(doubleTreeParameters, createdParameters); var balloonTreeParameters = new BalloonTreeLayoutParameters(); createdParameters = factory.CreateParameters("BalloonTree", null); Assert.IsInstanceOf <BalloonTreeLayoutParameters>(createdParameters); Assert.AreNotSame(balloonTreeParameters, createdParameters); createdParameters = factory.CreateParameters("BalloonTree", testParameters); Assert.IsInstanceOf <BalloonTreeLayoutParameters>(createdParameters); Assert.AreNotSame(testParameters, createdParameters); createdParameters = factory.CreateParameters("BalloonTree", balloonTreeParameters); Assert.IsInstanceOf <BalloonTreeLayoutParameters>(createdParameters); Assert.AreNotSame(balloonTreeParameters, createdParameters); Assert.IsFalse(factory.IsValidAlgorithm(null)); Assert.IsFalse(factory.IsValidAlgorithm(string.Empty)); Assert.IsTrue(factory.IsValidAlgorithm("DoubleTree")); Assert.IsFalse(factory.IsValidAlgorithm("doubletree")); Assert.IsTrue(factory.IsValidAlgorithm("BalloonTree")); var algorithm1 = new TestLayoutAlgorithm(); Assert.IsEmpty(factory.GetAlgorithmType(algorithm1)); var algorithm2 = new DoubleTreeLayoutAlgorithm <TestVertex, Edge <TestVertex>, BidirectionalGraph <TestVertex, Edge <TestVertex> > >(graph, positions, sizes, vertex, doubleTreeParameters); Assert.AreEqual("DoubleTree", factory.GetAlgorithmType(algorithm2)); var algorithm3 = new BalloonTreeLayoutAlgorithm <TestVertex, Edge <TestVertex>, BidirectionalGraph <TestVertex, Edge <TestVertex> > >(graph, positions, vertex, balloonTreeParameters); Assert.AreEqual("BalloonTree", factory.GetAlgorithmType(algorithm3)); Assert.IsFalse(factory.NeedEdgeRouting(string.Empty)); Assert.IsTrue(factory.NeedEdgeRouting("DoubleTree")); Assert.IsTrue(factory.NeedEdgeRouting("BalloonTree")); Assert.IsFalse(factory.NeedOverlapRemoval(string.Empty)); Assert.IsFalse(factory.NeedOverlapRemoval("DoubleTree")); Assert.IsFalse(factory.NeedOverlapRemoval("BalloonTree")); }
public void Constructor_Throws() { var verticesPositions = new Dictionary <string, Point>(); var emptyGraph = new BidirectionalGraph <string, Edge <string> >(); const string vertex = "0"; const string notInGraphVertex = "10"; var graph = new BidirectionalGraph <string, Edge <string> >(); graph.AddVertex(vertex); var parameters = new BalloonTreeLayoutParameters(); // ReSharper disable ObjectCreationAsStatement // ReSharper disable AssignNullToNotNullAttribute Assert.Throws <ArgumentException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(emptyGraph, vertex)); Assert.Throws <ArgumentException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(emptyGraph, null, vertex)); Assert.Throws <ArgumentException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, notInGraphVertex)); Assert.Throws <ArgumentException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, null, notInGraphVertex)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, null)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, vertex)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, null)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, null, parameters)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, vertex, parameters)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, null, parameters)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, null, (string)null)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, null, vertex)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, null, (string)null)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, verticesPositions, null)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, verticesPositions, vertex)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, verticesPositions, null)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, null, null, parameters)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, null, vertex, parameters)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, null, null, parameters)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(graph, verticesPositions, null, parameters)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, verticesPositions, vertex, parameters)); Assert.Throws <ArgumentNullException>( () => new BalloonTreeLayoutAlgorithm <string, Edge <string>, IBidirectionalGraph <string, Edge <string> > >(null, verticesPositions, null, parameters)); // ReSharper restore AssignNullToNotNullAttribute // ReSharper restore ObjectCreationAsStatement }