public void NullParameterTest()
 {
     var hierarchy = new Hierarchy(null);
     Assert.IsNotNull(hierarchy);
     Assert.AreEqual(1, hierarchy.GetChildren(1).Single());
     Assert.AreEqual(1, hierarchy.GetParents(1).Single());
 }
        public void SingleElement_GetParents()
        {
            short id1 = 1;
            short id2 = 2;

            var items = new List<Relation>();
            items.Add(new Relation { Child = id1, Parent = id2 });

            var result = new Hierarchy(items);

            var parents = result.GetParents(id1);
            Assert.AreEqual(2, parents.Count());
            Assert.IsTrue(parents.Contains(id1));
            Assert.IsTrue(parents.Contains(id2));

            var parents0 = result.GetParents(id2);
            Assert.AreEqual(1, parents0.Count());
            Assert.IsTrue(parents0.Contains(id2));
        }
        public void AllItemsPoshortDown_GetParents()
        {
            var items = new List<Relation>();
            items.Add(new Relation { Child = i1, Parent = i3 });
            items.Add(new Relation { Child = i1, Parent = i4 });
            items.Add(new Relation { Child = i2, Parent = i3 });
            items.Add(new Relation { Child = i2, Parent = i4 });
            items.Add(new Relation { Child = i1, Parent = i5 });
            items.Add(new Relation { Child = i2, Parent = i5 });
            items.Add(new Relation { Child = i3, Parent = i5 });
            items.Add(new Relation { Child = i4, Parent = i5 });

            var result = new Hierarchy(items);

            this.AssertHelper(new List<short> { i1, i3, i4, i5 }, result.GetParents(i1));
            this.AssertHelper(new List<short> { i2, i3, i4, i5 }, result.GetParents(i2));
            this.AssertHelper(new List<short> { i3, i5 }, result.GetParents(i3));
            this.AssertHelper(new List<short> { i4, i5 }, result.GetParents(i4));
            this.AssertHelper(new List<short> { i5 }, result.GetParents(i5));
        }
        public void ComplexHierarchy_TwoLevelTree()
        {
            var items = new List<Relation>();
            items.Add(new Relation{ Child = i2, Parent = i1});
            items.Add(new Relation{ Child = i3, Parent = i2});
            items.Add(new Relation{ Child = i4, Parent = i2});
            items.Add(new Relation{ Child = i5, Parent = i1});
            items.Add(new Relation{ Child = i6, Parent = i5});
            items.Add(new Relation{ Child = i7, Parent = i5});
            var result = new Hierarchy(items);

            this.AssertHelper(new List<short> { i1 }, result.GetParents(i1));
            this.AssertHelper(new List<short> { i1, i2, i3, i4, i5, i6, i7 }, result.GetChildren(i1));

            this.AssertHelper(new List<short> { i1, i2 }, result.GetParents(i2));
            this.AssertHelper(new List<short> { i2, i3, i4 }, result.GetChildren(i2));

            this.AssertHelper(new List<short> { i1, i2, i3 }, result.GetParents(i3));
            this.AssertHelper(new List<short> { i3 }, result.GetChildren(i3));
        }
        public void TwoElementHierarchy_GetParents()
        {
            short id1 = 1;
            short id2 = 2;
            short id3 = 3;

            var items = new List<Relation>();
            items.Add(new Relation { Child = id1, Parent = id2 });
            items.Add(new Relation { Child = id2, Parent = id3 });

            var result = new Hierarchy(items);

            var parents1 = result.GetParents(id1);
            Assert.AreEqual(3, parents1.Count());
            Assert.IsTrue(parents1.Contains(id1));
            Assert.IsTrue(parents1.Contains(id2));
            Assert.IsTrue(parents1.Contains(id3));

            var parents2 = result.GetParents(id2);
            Assert.AreEqual(2, parents2.Count());
            Assert.IsTrue(parents2.Contains(id2));
            Assert.IsTrue(parents2.Contains(id3));

            var parents3 = result.GetParents(id3);
            Assert.AreEqual(1, parents3.Count());
            Assert.IsTrue(parents3.Contains(id3));
        }