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); }
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)); }
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); }
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()); }
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()); }
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()); }
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()); }