public void The_following_two_graphs_should_have_the_same_degree_sequence()
 {
     var factor1 = new SimplicialComplex<string>(SimpleGraphExtensions.PathGraph(2).AddPrefix("#1"));
     var factor2 = new SimplicialComplex<string>(SimpleGraphExtensions.CompleteGraph(3).AddPrefix("#2"));
     var graph1 = factor1.DisjointUnion(factor2);
     var graph2 = SimpleGraphExtensions.PathGraph(5);
     graph1.DegreeSequence().Count().ShouldEqual(graph2.DegreeSequence().Count());
     graph1.DegreeSequence().EachIndex(i => graph1.DegreeSequence().ElementAt(i).ShouldEqual(graph2.DegreeSequence().ElementAt(i)));
 }
 public void New_simplicial_complex_with_default_constructor_should_have_size_and_order_0()
 {
     var graph = new SimplicialComplex<int>();
     graph.Size().ShouldEqual(0);
     graph.Order().ShouldEqual(0);
 }
 public void New_simplicial_complex_with_default_constructor_should_have_simple_edge_count_0()
 {
     var graph = new SimplicialComplex<int>();
     graph.Edges().Count.ShouldEqual(graph.Size());
 }
 public void IsFace_should_be_false_for_nonexistent_vertex()
 {
     var graph = new SimplicialComplex<string>();
     graph.IsFace(new Set<string> { "a" }).ShouldBeFalse();
 }
        public void Distance_sort_should_give_correct_results()
        {
            var graph = new SimplicialComplex<string>(new List<Set<string>>
            {
                new Set<string>{"a", "b"},
                new Set<string>{"b", "c"},
                new Set<string>{"c", "d"},
                new Set<string>{"d", "e"},
                new Set<string>{"e", "f"}
            });

            var sorted1 = graph.DistanceSort("f".WrapInList());
            var enumerable = sorted1 as string[] ?? sorted1.ToArray();
            enumerable.ShouldNumber(6);
            enumerable.ElementAt(0).ShouldEqual("f");
            enumerable.ElementAt(1).ShouldEqual("e");
            enumerable.ElementAt(2).ShouldEqual("d");
            enumerable.ElementAt(3).ShouldEqual("c");
            enumerable.ElementAt(4).ShouldEqual("b");
            enumerable.ElementAt(5).ShouldEqual("a");

            var sorted2 = graph.DistanceSort("c".WrapInList());
            var enumerable1 = sorted2 as string[] ?? sorted2.ToArray();
            enumerable1.ShouldNumber(6);
            enumerable1.First().ShouldEqual("c");
            var slice1 = enumerable1.Slice(1, 3);
            slice1.ShouldContain("b", "d");
            var slice2 = enumerable1.Slice(3, 5);
            slice2.ShouldContain("a", "e");
            enumerable1.ElementAt(5).ShouldEqual("f");

            var sorted3 = graph.DistanceSort(new List<string> { "a", "c", "d" });
            var sorted4 = sorted3 as string[] ?? sorted3.ToArray();
            sorted4.ShouldNumber(6);
            var slice = sorted4.Slice(0, 3);
            slice.ShouldContain("a", "c", "d");
        }
 public void Disjoint_union_should_have_sums_of_numbers_of_simplices()
 {
     var factor1 = new SimplicialComplex<string>(SimpleGraphExtensions.PathGraph(2).AddPrefix("#1"));
     var factor2 = new SimplicialComplex<string>(SimpleGraphExtensions.CompleteGraph(3).AddPrefix("#2"));
     var graph = factor1.DisjointUnion(factor2);
     graph.Order().ShouldEqual(factor1.Order() + factor2.Order());
     graph.Count.ShouldEqual(factor1.Count + factor2.Count); // i.e. (since it is a graph) the number of edges are the same
 }