public void ExecutionPlan_HasSummonAndDesitnationDescOrder_WhenSummonedFrom2FloorsToGoDownAndParkedHigherThanBothAndRequestImmediatlyFollowSummonAndFirstRequestIsFromLowerFloor()
        {
            FloorConfiguration floorConfig     = new FloorConfiguration(8, 0, 15);
            IExecutionPlan     plan            = new ExecutionPlan();
            ILift                     lift     = new Lift(floorConfig, plan);
            SummonInformation         summon1  = new SummonInformation(6, TravelDirection.Down);
            SummonInformation         request1 = new SummonInformation(1, TravelDirection.None, summon1);
            SummonInformation         summon2  = new SummonInformation(4, TravelDirection.Down);
            SummonInformation         request2 = new SummonInformation(1, TravelDirection.None, summon2);
            IList <SummonInformation> requests = new List <SummonInformation>()
            {
                summon2,
                request2,
                summon1,
                request1
            };

            var executionPlan = lift.ProcessRequests(requests);

            var planResult = executionPlan.GetFloorVisitationPlan();

            Assert.Equal(summon1.SummonFloor, planResult.ElementAt(0));
            Assert.Equal(summon2.SummonFloor, planResult.ElementAt(1));
            Assert.Equal(request1.SummonFloor, planResult.ElementAt(2));
        }
        public void Lift_CreateExecutionPlanWith6Values_WhenSummonedFrom3FloorsTo3DifferentsFloors()
        {
            FloorConfiguration floorConfig     = new FloorConfiguration(0, 0, 15);
            IExecutionPlan     plan            = new ExecutionPlan();
            ILift                     lift     = new Lift(floorConfig, plan);
            SummonInformation         summon1  = new SummonInformation(0, TravelDirection.Up);
            SummonInformation         request1 = new SummonInformation(5, TravelDirection.None, summon1);
            SummonInformation         summon2  = new SummonInformation(4, TravelDirection.Down);
            SummonInformation         summon3  = new SummonInformation(10, TravelDirection.Down);
            SummonInformation         request2 = new SummonInformation(1, TravelDirection.None, summon2);
            SummonInformation         request3 = new SummonInformation(8, TravelDirection.None, summon3);
            IList <SummonInformation> requests = new List <SummonInformation>()
            {
                summon1,
                request1,
                summon2,
                summon3,
                request2,
                request3
            };

            var executionPlan = lift.ProcessRequests(requests);

            var planResult = executionPlan.GetFloorVisitationPlan();

            Assert.Equal(6, planResult.Count());
        }
        public void ExecutionPlan_HasSummonAndDesitnationAscOrder_WhenSummonedFrom2DifferentFloorsAndFirstSummonRequestUpAndSecondSummonRequestDown()
        {
            FloorConfiguration floorConfig     = new FloorConfiguration(6, 0, 15);
            IExecutionPlan     plan            = new ExecutionPlan();
            ILift                     lift     = new Lift(floorConfig, plan);
            SummonInformation         summon1  = new SummonInformation(6, TravelDirection.Up);
            SummonInformation         request1 = new SummonInformation(13, TravelDirection.None, summon1);
            SummonInformation         summon2  = new SummonInformation(5, TravelDirection.Down);
            SummonInformation         request2 = new SummonInformation(1, TravelDirection.None, summon2);
            IList <SummonInformation> requests = new List <SummonInformation>()
            {
                summon1,
                request1,
                summon2,
                request2
            };

            var executionPlan = lift.ProcessRequests(requests);

            var planResult = executionPlan.GetFloorVisitationPlan();

            Assert.Equal(summon1.SummonFloor, planResult.ElementAt(0));
            Assert.Equal(request1.SummonFloor, planResult.ElementAt(1));
            Assert.Equal(summon2.SummonFloor, planResult.ElementAt(2));
            Assert.Equal(request2.SummonFloor, planResult.ElementAt(3));
        }
        public void ExecutionPlan_HasSummonAndDesitnationAscOrder_WhenSummonedFrom2DifferentFloorsHigherThanParkedToUpAndDifferentRequestedFloorsAndUser2RequestLowerFloorThanUser1SummoningAndParkedFloorInBetween()
        {
            FloorConfiguration floorConfig     = new FloorConfiguration(5, 0, 15);
            IExecutionPlan     plan            = new ExecutionPlan();
            ILift                     lift     = new Lift(floorConfig, plan);
            SummonInformation         summon1  = new SummonInformation(6, TravelDirection.Up);
            SummonInformation         request1 = new SummonInformation(9, TravelDirection.None, summon1);
            SummonInformation         summon2  = new SummonInformation(0, TravelDirection.Up);
            SummonInformation         request2 = new SummonInformation(3, TravelDirection.None, summon2);
            IList <SummonInformation> requests = new List <SummonInformation>()
            {
                summon1,
                request1,
                summon2,
                request2
            };

            var executionPlan = lift.ProcessRequests(requests);

            var planResult = executionPlan.GetFloorVisitationPlan();

            Assert.Equal(summon1.SummonFloor, planResult.ElementAt(0));
            Assert.Equal(request1.SummonFloor, planResult.ElementAt(1));
            Assert.Equal(summon2.SummonFloor, planResult.ElementAt(2));
            Assert.Equal(request2.SummonFloor, planResult.ElementAt(3));
        }
        public void ExecutionPlan_HasExpectedAscUpToMaxFloorThenDesc_WhenSummonedFrom3FloorsTo2DifferentsFloors()
        {
            FloorConfiguration floorConfig     = new FloorConfiguration(2, 0, 15);
            IExecutionPlan     plan            = new ExecutionPlan();
            ILift                     lift     = new Lift(floorConfig, plan);
            SummonInformation         summon1  = new SummonInformation(0, TravelDirection.Up);
            SummonInformation         request1 = new SummonInformation(5, TravelDirection.None, summon1);
            SummonInformation         summon2  = new SummonInformation(4, TravelDirection.Down);
            SummonInformation         summon3  = new SummonInformation(10, TravelDirection.Down);
            SummonInformation         request2 = new SummonInformation(0, TravelDirection.None, summon2);
            SummonInformation         request3 = new SummonInformation(0, TravelDirection.None, summon3);
            IList <SummonInformation> requests = new List <SummonInformation>()
            {
                summon1,
                request1,
                summon2,
                summon3,
                request2,
                request3
            };

            var executionPlan = lift.ProcessRequests(requests);

            var planResult = executionPlan.GetFloorVisitationPlan();

            Assert.Equal(summon1.SummonFloor, planResult.ElementAt(0));
            Assert.Equal(request1.SummonFloor, planResult.ElementAt(1));
            Assert.Equal(summon3.SummonFloor, planResult.ElementAt(2));
            Assert.Equal(summon2.SummonFloor, planResult.ElementAt(3));
            Assert.Equal(request2.SummonFloor, planResult.ElementAt(4));
        }
        public void Lift_CanaryTest()
        {
            FloorConfiguration floorConfig = new FloorConfiguration(3, 0, 15);
            IDoor door = new Door(null);

            ILift lift = new Lift(floorConfig, door);

            Assert.Equal(floorConfig.CurrentFloor, lift.CurrentFloor);
        }
Ejemplo n.º 7
0
        public void Lift_MustThrowException_WhenNoRequestIsMade()
        {
            FloorConfiguration floorConfig = new FloorConfiguration(3, 0, 15);
            IExecutionPlan     plan        = new ExecutionPlan();
            ILift lift = new Lift(floorConfig, plan);
            IList <SummonInformation> requests = new List <SummonInformation>();

            Assert.Throws <ArgumentException>(() => lift.ProcessRequests(requests));
        }
Ejemplo n.º 8
0
        public void Lift_CanaryTest()
        {
            FloorConfiguration floorConfig = new FloorConfiguration(3, 0, 15);
            IExecutionPlan     plan        = new ExecutionPlan();

            ILift lift = new Lift(floorConfig, plan);

            Assert.NotNull(lift);
            Assert.Equal(floorConfig.CurrentFloor, lift.CurrentFloor);
        }
        public void Lift_MustOpensDoor_WhenSummonedOnCurrentFloor()
        {
            FloorConfiguration floorConfig = new FloorConfiguration(3, 0, 15);
            IDoor door = new Door(new TimeConfigurationSmallDelayDummyForTest());
            ILift lift = new Lift(floorConfig, door);

            lift.SummonCall(new SummonInformation(floorConfig.CurrentFloor, TravelDirection.Up));

            Assert.True(lift.IsOpen);
        }
Ejemplo n.º 10
0
        public void Lift_MustThrowException_WhenFirstRequestNotSummonWithDirectionAndNoExecutionPlanExist()
        {
            FloorConfiguration floorConfig = new FloorConfiguration(3, 0, 15);
            ILift lift = new Lift(floorConfig, null);
            IList <SummonInformation> requests = new List <SummonInformation>()
            {
                new SummonInformation(floorConfig.CurrentFloor + 1, TravelDirection.None)
            };

            Assert.Throws <ArgumentException>(() => lift.ProcessRequests(requests));
        }
        public void FloorConfig_CanaryTest()
        {
            int currentFloor        = 3;
            int lowestFloor         = 0;
            int highestFloor        = 15;
            FloorConfiguration lift = new FloorConfiguration(currentFloor, lowestFloor, highestFloor);

            Assert.Equal(currentFloor, lift.CurrentFloor);
            Assert.Equal(lowestFloor, lift.MinFloor);
            Assert.Equal(highestFloor, lift.MaxFloor);
        }
        public async Task Lift_MustNotify_WhenReachedRequestedFloor()
        {
            FloorConfiguration floorConfig = new FloorConfiguration(3, 0, 15);
            Door door     = new Door(new TimeConfigurationNoDelayDummyForTest());
            var  fakeLift = new Mock <Lift>(floorConfig, door);

            fakeLift.Object.Initialize(floorConfig, door);

            await door.RequestClosing();

            fakeLift.Verify(lift => lift.StartTravel());
        }
        public async Task Lift_MustStartTravelUpAfterRecieveInsedRequestForHigherFloorThanCurrentFloor_WhenDoorClose()
        {
            FloorConfiguration floorConfig = new FloorConfiguration(3, 0, 15);
            Door door     = new Door(new TimeConfigurationNoDelayDummyForTest());
            var  fakeLift = new Mock <Lift>(floorConfig, door);

            fakeLift.Object.Initialize(floorConfig, door);

            await door.RequestClosing();

            fakeLift.Verify(lift => lift.StartTravel());
        }
Ejemplo n.º 14
0
        public void Lift_CreateExecutionPlanWith2Values_WhenParkedOnLowerFloorAndSummonToGoUp()
        {
            FloorConfiguration floorConfig     = new FloorConfiguration(0, 0, 15);
            IExecutionPlan     plan            = new ExecutionPlan();
            ILift                     lift     = new Lift(floorConfig, plan);
            SummonInformation         summon   = new SummonInformation(1, TravelDirection.Up);
            SummonInformation         request  = new SummonInformation(5, TravelDirection.None, summon);
            IList <SummonInformation> requests = new List <SummonInformation>()
            {
                summon,
                request
            };

            var executionPlan = lift.ProcessRequests(requests);

            var planResult = executionPlan.GetFloorVisitationPlan();

            Assert.Equal(2, planResult.Count());
        }
Ejemplo n.º 15
0
        public void ExecutionPlan_HasSummonAndDesitnationInOrder_WhenParkedOnLowerFloorAndSummonToGoUp()
        {
            FloorConfiguration floorConfig     = new FloorConfiguration(0, 0, 15);
            IExecutionPlan     plan            = new ExecutionPlan();
            ILift                     lift     = new Lift(floorConfig, plan);
            SummonInformation         summon   = new SummonInformation(1, TravelDirection.Up);
            SummonInformation         request  = new SummonInformation(5, TravelDirection.None, summon);
            IList <SummonInformation> requests = new List <SummonInformation>()
            {
                summon,
                request
            };

            var executionPlan = lift.ProcessRequests(requests);

            var planResult = executionPlan.GetFloorVisitationPlan();

            Assert.Equal(summon.SummonFloor, planResult.First());
            Assert.Equal(request.SummonFloor, planResult.Last());
        }
Ejemplo n.º 16
0
        public void Lift_CreateExecutionPlanWith2Values_WhenParkedAndSummonedOnCurrentFloorForLowerFloor()
        {
            FloorConfiguration floorConfig     = new FloorConfiguration(3, 0, 15);
            IExecutionPlan     plan            = new ExecutionPlan();
            ILift                     lift     = new Lift(floorConfig, plan);
            SummonInformation         summon   = new SummonInformation(3, TravelDirection.Down);
            SummonInformation         request  = new SummonInformation(1, TravelDirection.None, summon);
            IList <SummonInformation> requests = new List <SummonInformation>()
            {
                summon,
                request
            };

            var executionPlan = lift.ProcessRequests(requests);

            var planResult = executionPlan.GetFloorVisitationPlan();

            Assert.Equal(2, planResult.Count());
            Assert.Equal(summon.SummonFloor, planResult.First());
            Assert.Equal(request.SummonFloor, planResult.Last());
        }
        public void Lift_CreateExecutionPlanWith3Values_WhenSummonedFrom2FloorsHigherThanParkedToGoDownAndDifferentRequestedFloors()
        {
            FloorConfiguration floorConfig     = new FloorConfiguration(5, 0, 15);
            IExecutionPlan     plan            = new ExecutionPlan();
            ILift                     lift     = new Lift(floorConfig, plan);
            SummonInformation         summon1  = new SummonInformation(6, TravelDirection.Down);
            SummonInformation         request1 = new SummonInformation(1, TravelDirection.None, summon1);
            SummonInformation         summon2  = new SummonInformation(9, TravelDirection.Down);
            SummonInformation         request2 = new SummonInformation(3, TravelDirection.None, summon2);
            IList <SummonInformation> requests = new List <SummonInformation>()
            {
                summon1,
                request1,
                summon2,
                request2
            };

            var executionPlan = lift.ProcessRequests(requests);

            var planResult = executionPlan.GetFloorVisitationPlan();

            Assert.Equal(4, planResult.Count());
        }