public void CollectsTwoSeparateStacks()
        {
            var baseGrid = MockGrid("Base");
            var topGrid  = MockGrid("Top");
            var pistons  = MockPistonsBetween(baseGrid, topGrid, 10)
                           .Concat(MockPistonsBetween(baseGrid, topGrid, 8))
                           .ToList();
            var stacks = new PistonTopology().GetPistonStacks(pistons);

            Assert.That(stacks, Has.Length.EqualTo(2));
            Assert.That(stacks.Select(s => s.Total), Is.EquivalentTo(new [] { 10, 8 }));
        }
        public void CollectsSingleStack()
        {
            var baseGrid = MockGrid("Base");
            var topGrid  = MockGrid("Top");
            var pistons  = MockPistonsBetween(baseGrid, topGrid, 10).ToList();
            var stacks   = new PistonTopology().GetPistonStacks(pistons);

            Assert.That(stacks, Has.Length.EqualTo(1));
            var stack = stacks.Single();

            Assert.That(stack.Total, Is.EqualTo(10));
            Assert.That(stack.BaseGrid, Is.EqualTo(baseGrid));
            Assert.That(stack.TopGrid, Is.EqualTo(topGrid));
        }
        public void CollectsThreeStacksSupportingSingleStack()
        {
            var baseGrid   = MockGrid("Base");
            var middleGrid = MockGrid("Middle");
            var topGrid    = MockGrid("Top");
            var pistons    = MockPistonsBetween(baseGrid, middleGrid, 10)
                             .Union(MockPistonsBetween(baseGrid, middleGrid, 10))
                             .Union(MockPistonsBetween(baseGrid, middleGrid, 10))
                             .Union(MockPistonsBetween(middleGrid, topGrid, 10))
                             .ToList();
            var stacks = new PistonTopology().GetPistonStacks(pistons);

            Assert.That(stacks, Has.Length.EqualTo(4));
            Assert.That(stacks.Select(s => s.Total), Is.EquivalentTo(new[] { 10, 10, 10, 10 }));

            Assert.That(stacks.Where(s => s.BaseGrid == baseGrid).ToArray(), Has.Length.EqualTo(3));
            Assert.That(stacks.Where(s => s.BaseGrid == middleGrid).ToArray(), Has.Length.EqualTo(1));
        }