public void ClusterNoDataObjects()
        {
            var nj = new NeighborJoiningClusterer <char>((o1, o2) => 0);
            IUndirectedGraph <Cluster <char>, ClusterEdge <char> > tree = nj.GenerateClusters(Enumerable.Empty <char>());

            Assert.That(tree.IsEdgesEmpty);
        }
        public void Cluster()
        {
            var matrix = new double[, ]
            {
                { 0, 1, 2, 3, 3 },
                { 1, 0, 2, 3, 3 },
                { 2, 2, 0, 3, 3 },
                { 3, 3, 3, 0, 1 },
                { 3, 3, 3, 1, 0 }
            };
            var nj = new NeighborJoiningClusterer <char>((o1, o2) => matrix[o1 - 'A', o2 - 'A']);
            IUndirectedGraph <Cluster <char>, ClusterEdge <char> > tree = nj.GenerateClusters(new[] { 'A', 'B', 'C', 'D', 'E' });

            var vertices = new Dictionary <string, Cluster <char> >
            {
                { "root", new Cluster <char> {
                      Description = "root"
                  } },
                { "A", new Cluster <char>('A')
                  {
                      Description = "A"
                  } },
                { "B", new Cluster <char>('B')
                  {
                      Description = "B"
                  } },
                { "C", new Cluster <char>('C')
                  {
                      Description = "C"
                  } },
                { "D", new Cluster <char>('D')
                  {
                      Description = "D"
                  } },
                { "E", new Cluster <char>('E')
                  {
                      Description = "E"
                  } },
                { "DE", new Cluster <char> {
                      Description = "DE"
                  } },
                { "AB", new Cluster <char> {
                      Description = "AB"
                  } }
            };

            var edges = new[]
            {
                new ClusterEdge <char>(vertices["root"], vertices["C"], 1.0),
                new ClusterEdge <char>(vertices["root"], vertices["DE"], 1.5),
                new ClusterEdge <char>(vertices["root"], vertices["AB"], 0.5),
                new ClusterEdge <char>(vertices["DE"], vertices["D"], 0.5),
                new ClusterEdge <char>(vertices["DE"], vertices["E"], 0.5),
                new ClusterEdge <char>(vertices["AB"], vertices["A"], 0.5),
                new ClusterEdge <char>(vertices["AB"], vertices["B"], 0.5)
            };

            AssertTreeEqual(tree, edges.ToUndirectedGraph <Cluster <char>, ClusterEdge <char> >(false));
        }
        public void ClusterOneDataObject()
        {
            var nj = new NeighborJoiningClusterer <char>((o1, o2) => 0);
            IUndirectedGraph <Cluster <char>, ClusterEdge <char> > tree = nj.GenerateClusters(new[] { 'A' });

            Assert.That(tree.VertexCount, Is.EqualTo(1));
            Assert.That(tree.IsEdgesEmpty);
        }
        public void ClusterTwoDataObjects()
        {
            var nj = new NeighborJoiningClusterer <char>((o1, o2) => 1);
            IUndirectedGraph <Cluster <char>, ClusterEdge <char> > tree = nj.GenerateClusters(new[] { 'A', 'B' });

            var edges = new[]
            {
                new ClusterEdge <char>(new Cluster <char>('A'), new Cluster <char>('B'), 1.0)
            };

            AssertTreeEqual(tree, edges.ToUndirectedGraph <Cluster <char>, ClusterEdge <char> >());
        }