예제 #1
0
        public void ParkVehicle_Test1()
        {
            var id         = Guid.NewGuid().ToString();
            var car        = new Car(4, id);
            var parkingLot = new ParkingLot.ParkingLot(10);
            var result     = parkingLot.ParkVehicle(car, DateTime.Today + new TimeSpan(8, 0, 0), DateTime.Today + new TimeSpan(10, 0, 0), 50);

            Assert.Equal(ErrorCodes.Success, result);
        }
예제 #2
0
        public void ParkVehicle_Test3()
        {
            var id         = Guid.NewGuid().ToString();
            var car        = new Car(4, id);
            var parkingLot = new ParkingLot.ParkingLot(26);
            var result     = parkingLot.ParkVehicle(car, DateTime.Today + new TimeSpan(8, 0, 0), DateTime.Today + new TimeSpan(10, 0, 0), 50);

            Assert.Equal(22, parkingLot.GetFreeParkingSpots());
        }
예제 #3
0
        public void UnParkVehicle_Test2()
        {
            var id         = Guid.NewGuid().ToString();
            var car        = new Car(4, id);
            var parkingLot = new ParkingLot.ParkingLot(26);
            var result     = parkingLot.ParkVehicle(car, DateTime.Today + new TimeSpan(8, 0, 0), DateTime.Today + new TimeSpan(10, 0, 0), 50);
            var result1    = parkingLot.UnParkVehicle(car);

            Assert.Equal(100.0, result1.parkingCost);
        }
예제 #4
0
        private void InitializeParkingLot(int size)
        {
            lot = new ParkingLot.ParkingLot(size);
            Adapter obj = new Adapter();

            obj.parkingLot = lot;
            obj.CommandCall("Park A driver_age 10");
            obj.CommandCall("Park B driver_age 20");
            obj.CommandCall("Park C driver_age 30");
            obj.CommandCall("Park D driver_age 40");
            obj.CommandCall("Park E driver_age 40");
        }
        public void Manager_Should_Add_ParkingBoy_Successfully()
        {
            //given
            var parkingLot   = new ParkingLot.ParkingLot("parkingLot_1");
            var parkingBoy_1 = new ParkingBoy("parkingBoy_1", parkingLot);
            var manager      = new ParkingLotServiceManager("manager_1", parkingLot, new List <ParkingBoy>(new ParkingBoy[] { parkingBoy_1 }));
            //when
            var parkingBoy_2 = new ParkingBoy("parkingBoy_2", parkingLot);

            manager.AddParkingBoy(parkingBoy_2);
            //then
            Assert.True(manager.ManageParkingBoy(parkingBoy_2));
        }
예제 #6
0
        public void ParkVehicle_CapacityTest_Test4()
        {
            var id         = Guid.NewGuid().ToString();
            var car        = new Car(4, id);
            var bike       = new Bike(2, Guid.NewGuid().ToString());
            var parkingLot = new ParkingLot.ParkingLot(26);

            parkingLot.ParkVehicle(bike);
            var result = parkingLot.ParkVehicle(car, DateTime.Today + new TimeSpan(8, 0, 0), DateTime.Today + new TimeSpan(10, 0, 0), 50);

            parkingLot.UnParkVehicle(car);
            Assert.Equal(24, parkingLot.GetFreeParkingSpots());
        }
예제 #7
0
        public void Clever_ParkingBoy_Should_Add_Error_Message_Given_No_Ticket()
        {
            //given
            var parkingLot = new ParkingLot.ParkingLot("parkingLot_1", 3);
            var parkingBoy = new CleverParkingBoy("parkingBoy_1", parkingLot);

            //when
            parkingBoy.FetchCar(null, out var errorMessage);
            var expectedMessage = "Please provide your parking ticket.";

            //then
            Assert.Equal(expectedMessage, errorMessage);
        }
        public void Manager_Should_Add_Error_Message_Given_No_Ticket()
        {
            //given
            var parkingLot = new ParkingLot.ParkingLot("parkingLot_1", 3);
            var parkingBoy = new ParkingBoy("parkingBoy_1", parkingLot);
            var manager    = new ParkingLotServiceManager("manager_1", parkingLot, new List <ParkingBoy>(new[] { parkingBoy }));

            //when
            manager.FetchCarByParkingBoy(null, parkingBoy, out var errorMessage);
            var expectedMessage = "Please provide your parking ticket.";

            //then
            Assert.Equal(expectedMessage, errorMessage);
        }
        public virtual ParkingLot FindAvaibleParkingLot()
        {
            ParkingLot availableLot = null;
            bool       canContinue  = true;

            foreach (ParkingLot parkingLot in boysParkingLots)
            {
                if (parkingLot.LeftPosition > 0 && canContinue)
                {
                    canContinue  = false;
                    availableLot = parkingLot;
                }
            }

            return(availableLot);
        }
예제 #10
0
        public void Clever_ParkingBoy_Should_Add_Error_Message_Given_Wrong_Ticket()
        {
            //given
            var car         = new Car("car_1");
            var newCustomer = new Customer("customer_1", car);
            var parkingLot  = new ParkingLot.ParkingLot("parkingLot_1", 3);
            var parkingBoy  = new CleverParkingBoy("parkingBoy_1", parkingLot);

            //when
            newCustomer.PassCarToParkingBoy(parkingBoy);
            var resultOfWrongTicket = parkingBoy.FetchCar(new ParkingTicket("another_parkingBoy", "new_Car", "new_Customer", "another_ParkingLot"), out var errorMessage);
            var expectedMessage     = "Unrecognized parking ticket.";

            //then
            Assert.Equal(expectedMessage, errorMessage);
        }
        public Ticket ParkCarBoy(Car car, string customerId)
        {
            Ticket newTicket = null;

            if (car != null && car.IsParked == false)
            {
                ParkingLot parkingLot    = FindAvaibleParkingLot();
                bool       isParkSuccess = parkingLot.ParkCarLot(car);
                if (isParkSuccess)
                {
                    newTicket    = new Ticket(parkingLot.Id, this.Id, car.Id, customerId);
                    car.IsParked = true;
                }
            }

            return(newTicket);
        }
        public override ParkingLot FindAvaibleParkingLot()
        {
            ParkingLot availableLot    = null;
            int        maxLeftPosition = 0;

            foreach (ParkingLot parkingLot in BoysParkingLots)
            {
                if (parkingLot.LeftPosition > maxLeftPosition)
                {
                    maxLeftPosition = parkingLot.LeftPosition;
                }
            }

            availableLot = BoysParkingLots.Find(parkingLot => parkingLot.LeftPosition == maxLeftPosition);
            //availableLot = boysParkingLots[1];
            return(availableLot);
        }
        public void Manager_Should_Park_And_Fetch_Car_Correctly()
        {
            //given
            var car         = new Car("car_1");
            var newCustomer = new Customer("customer_1", car);
            var parkingLot  = new ParkingLot.ParkingLot("parkingLot_1", 3);
            var parkingBoy  = new ParkingBoy("parkingBoy_1", parkingLot);
            var manager     = new ParkingLotServiceManager("manager_1", parkingLot, new List <ParkingBoy>(new[] { parkingBoy }));

            //when
            newCustomer.PassCarToParkingBoy(manager);

            //then
            Assert.True(parkingLot.ContainCar(car));
            var carReturned = newCustomer.FetchCarFromParkingBoy(manager, newCustomer.GetTicket(0));

            Assert.Equal(car, carReturned);
        }
예제 #14
0
        public new ParkingLot FindAvaibleParkingLot()
        {
            ParkingLot availableLot         = null;
            double     maxLeftPositionRatio = 0;

            foreach (ParkingLot parkingLot in boysParkingLots)
            {
                double leftPositionRatio = parkingLot.LeftPosition / parkingLot.Capacity;
                if (leftPositionRatio > maxLeftPositionRatio)
                {
                    maxLeftPositionRatio = parkingLot.LeftPosition;
                }
            }

            availableLot = boysParkingLots.Find(parkingLot => parkingLot.LeftPosition == maxLeftPositionRatio);

            return(availableLot);
        }
        public void Should_Return_ticket_Smart_Parking_Boy()
        {
            //given
            var parkingLot1    = new ParkingLot.ParkingLot(1, 3);
            var parkingLot2    = new ParkingLot.ParkingLot(2, 4);
            var parkingLotList = new List <ParkingLot.ParkingLot>
            {
                parkingLot1,
                parkingLot2
            };
            //when
            var parkingBoy     = new SmartParkingBoy(parkingLotList);
            var ticket         = parkingBoy.ParkACarAndGetTicket("abc123");
            var expectedTicket = new Ticket("abc123", 2);

            //then
            Assert.Equal(expectedTicket.GetParkingLotNumber(), ticket.GetParkingLotNumber());
        }
예제 #16
0
        public void Clever_ParkingBoy_Should_Add_Error_Message_Given_Outof_Capacity()
        {
            //given
            var parkingLot = new ParkingLot.ParkingLot("parkingLot_1", 2);
            var parkingBoy = new CleverParkingBoy("parkingBoy_1", parkingLot);
            var car_1      = new Car("car_1");
            var car_2      = new Car("car_2");
            var car_3      = new Car("car_3");

            //when
            parkingBoy.ParkCar(car_1, out _);
            parkingBoy.ParkCar(car_2, out _);
            parkingBoy.ParkCar(car_3, out var errorMessage);
            var expectedMessage = "Not enough position.";

            //then
            Assert.Equal(expectedMessage, errorMessage);
        }
예제 #17
0
        public void Clever_ParkingBoy_Should_Add_Error_Message_Given_Parked_Ticket()
        {
            //given
            var car         = new Car("car_1");
            var newCustomer = new Customer("customer_1", car);
            var parkingLot  = new ParkingLot.ParkingLot("parkingLot_1", 3);
            var parkingBoy  = new CleverParkingBoy("parkingBoy_1", parkingLot);

            //when
            var parkedTicket = parkingBoy.ParkCar(car, out _);

            parkingBoy.FetchCar(parkedTicket, out _);
            parkingBoy.FetchCar(parkedTicket, out var errorMessage);
            var expectedMessage = "Unrecognized parking ticket.";

            //then
            Assert.Equal(expectedMessage, errorMessage);
        }
예제 #18
0
        public static void ParkingSpaceQuestion()
        {
            ParkingLot alpha = new ParkingLot(5, 5, 5);
            bool       loop  = false;

            while (loop == false)

            {
                Console.WriteLine("What type of car are you trying to park: ");
                string _answer = Console.ReadLine();
                string answer  = _answer.ToLower();
                if (answer == "large" || answer == "medium" || answer == "small")
                {
                    alpha.AddCar(answer);
                    //Console.WriteLine("Anymore cars (yes or no)? ");
                    // string _answer2 = Console.ReadLine();
                    // string answer2 = _answer2.ToLower();
                    // if (answer2 == "yes")
                    // {
                    //     ParkingSpaceQuestion();
                    //     alpha.AddCar(answer);
                    // }
                    // else
                    // {
                    //     loop = true;
                    // }
                    loop = true;
                }
                else
                {
                    Console.WriteLine("You did not enter: Large, Medium, or Small \n Please try again");
                    loop = false;
                }
            }
            double largeParking;
            double mediumParking;
            double smallParking;

            largeParking  = alpha.GetLargeSpace();
            mediumParking = alpha.GetMediumSpace();
            smallParking  = alpha.GetSmallSpace();

            Console.WriteLine($"There are {largeParking} large parking spaces left.\n\t There are {mediumParking} medium parking spaces left.\n\t\t There are {smallParking} small parking spaces left.");
        }
        public void Manger_Should_Appoint_ParkingBoy_To_Park_And_Fetch()
        {
            //given
            var car         = new Car("car_1");
            var newCustomer = new Customer("customer_1", car);
            var parkingLot  = new ParkingLot.ParkingLot("parkingLot_1", 3);
            var parkingBoy  = new ParkingBoy("parkingBoy_1", parkingLot);
            var manager     = new ParkingLotServiceManager("manager_1", parkingLot, new List <ParkingBoy>(new[] { parkingBoy }));

            //when
            var parkingResult = manager.ParkCarByParkingBoy(car, parkingBoy, out var parkErrorMessage);

            Assert.Equal("parkingLot_1", parkingResult.ParkingLotId);
            Assert.Equal("car_1", parkingResult.CarId);

            var carResult = manager.FetchCarByParkingBoy(parkingResult, parkingBoy, out var fetchErrorMessage);

            Assert.Equal(car, carResult);
        }
예제 #20
0
        static void Main(string[] args)
        {
            ParkingLot parkingLot = new ParkingLot();

            List <Car> cars = parkingLot.GenerateCars();

            parkingLot.CountByType(cars);
            Console.WriteLine();
            parkingLot.CountByTypeWithLambda(cars);
            Console.WriteLine();
            parkingLot.CountByColor(cars);
            Console.WriteLine();
            parkingLot.CountByColorWithLambda(cars);
            Console.WriteLine();
            parkingLot.MostFrequently(cars);
            Console.WriteLine();
            parkingLot.MostFrequentlyWtihLambda(cars);
            Console.ReadKey();
        }
        public void Manager_Should_Add_Error_Message_Given_Outof_Capacity()
        {
            //given
            var parkingLot = new ParkingLot.ParkingLot("parkingLot_1", 2);
            var parkingBoy = new ParkingBoy("parkingBoy_1", parkingLot);
            var car_1      = new Car("car_1");
            var car_2      = new Car("car_2");
            var car_3      = new Car("car_3");
            var manager    = new ParkingLotServiceManager("manager_1", parkingLot, new List <ParkingBoy>(new[] { parkingBoy }));

            //when
            manager.ParkCarByParkingBoy(car_1, parkingBoy, out _);
            manager.ParkCarByParkingBoy(car_2, parkingBoy, out _);
            manager.ParkCarByParkingBoy(car_3, parkingBoy, out var errorMessage);
            var expectedMessage = "Not enough position.";

            //then
            Assert.Equal(expectedMessage, errorMessage);
        }
        public void Manager_Should_Add_Error_Message_Given_Parked_Ticket()
        {
            //given
            var car         = new Car("car_1");
            var newCustomer = new Customer("customer_1", car);
            var parkingLot  = new ParkingLot.ParkingLot("parkingLot_1", 3);
            var parkingBoy  = new ParkingBoy("parkingBoy_1", parkingLot);
            var manager     = new ParkingLotServiceManager("manager_1", parkingLot, new List <ParkingBoy>(new[] { parkingBoy }));

            //when
            var parkedTicket = manager.ParkCarByParkingBoy(car, parkingBoy, out _);

            manager.FetchCarByParkingBoy(parkedTicket, parkingBoy, out _);
            manager.FetchCarByParkingBoy(parkedTicket, parkingBoy, out var errorMessage);
            var expectedMessage = "Unrecognized parking ticket.";

            //then
            Assert.Equal(expectedMessage, errorMessage);
        }
예제 #23
0
        public void CommandCall_Handles_InvalidCommand()
        {
            // Arrange
            lot = new ParkingLot.ParkingLot(10);
            var mock = new Mock <Adapter>()
            {
                CallBase = true
            };

            mock.Object.parkingLot = lot;

            //Act
            mock.Setup(x => x.CommandCall(It.IsAny <string>()));
            string command = "Arrest_driver_of_age 17";
            var    result  = mock.Object.CommandCall(command);

            //Assert
            Assert.AreEqual(result, "Invalid command");
        }
예제 #24
0
        static void Main(string[] args)
        {
            var vacantParkingSpaces = BuilSpots();

            var parkingLot = new ParkingLot(vacantParkingSpaces.ToList());

            var totalVehicleCounter = 0;

            var stopWatch = new Stopwatch();

            stopWatch.Start();

            while (true)
            {
                var vehicle = CreateRandomVehicle();

                Thread removeVehicleThread = new Thread(() => RemoveVehicle(stopWatch, parkingLot));
                removeVehicleThread.Start();

                WriteMessage($"{vehicle.License} - {vehicle.CarSize} wanting to get in and park", ConsoleColor.Green);

                if (parkingLot.Insert(vehicle) == false)
                {
                    WriteMessage($"{ vehicle.License} - { vehicle.CarSize} Cant find a spot! going somewhere else!", ConsoleColor.Gray);
                }
                else
                {
                    lock (_vehiclesLock)
                    {
                        _vehiclesIn.Add(vehicle);
                    }
                    totalVehicleCounter++;
                }

                WriteMessage($"Total vehicles so far: { totalVehicleCounter}", ConsoleColor.White);
                WriteMessage(parkingLot.TotalVehiclesString, ConsoleColor.White);
            }

            Console.ReadLine();
        }
        public Ticket[] ParkCars(string[] plateNumbers, ParkingLot parkingLot, bool queryErrorMessage)
        {
            var hasPositions = plateNumbers.Length <= ParkingLot.PositionMaxNumber - parkingLot.CarList.Count;

            if (!hasPositions)
            {
                SendErrorMessage(queryErrorMessage, "noPosition");
                return(null);
            }

            Ticket[] tickets = plateNumbers.Where(number => number != null)
                               .Select(it => new Ticket {
                TicketMarker = it, IsUsed = false
            })
                               .ToArray();
            foreach (var plateNumber in plateNumbers)
            {
                parkingLot.CarList.Add(plateNumber);
            }

            return(tickets);
        }
예제 #26
0
        public void Should_Return_ticket_Parking_Manager()
        {
            //given
            var parkingLot1    = new ParkingLot.ParkingLot(1, 3);
            var parkingLot2    = new ParkingLot.ParkingLot(2, 4);
            var parkingLotList = new List <ParkingLot.ParkingLot>
            {
                parkingLot1,
                parkingLot2,
            };
            //when
            var parkingManager = new ParkingManager(parkingLotList);

            parkingManager.AddParkingBoy(new NormalParkingBoy(parkingLotList));
            var ticket0        = parkingManager.ParkACarAndGetTicket("abc123");
            var ticket1        = parkingManager.ParkACarAndGetTicket("abc123");
            var ticket2        = parkingManager.ParkACarAndGetTicket("abc124");
            var expectedTicket = new Ticket("abc124", 1);

            //then
            Assert.Equal(expectedTicket.GetParkingLotNumber(), ticket2.GetParkingLotNumber());
        }
예제 #27
0
        public ParkingTicket ParkingCar(Car car, out string errorMessage)
        {
            if (car == null)
            {
                errorMessage = "Input car is null.";
            }

            if (leftPosition <= 0)
            {
                errorMessage = "Not enough position.";
                return(null);
            }

            ParkingLot parkingLot = new ParkingLot("A");

            errorMessage = string.Empty;
            ParkingTicket parkingTicket = new ParkingTicket(car.CarId, parkingLot);

            parkedCars.Add(car, parkingLot);
            leftPosition--;
            return(parkingTicket);
        }
예제 #28
0
 public NormalParkingBoy(string id, ParkingLot parkingLot) : base(id, parkingLot)
 {
 }
 public ParkingBoy(string inputName, ParkingLot parkingLot1, ParkingLot parkingLot2)
 {
     this.name = inputName;
     ManagedParkingLots.Add(parkingLot1);
     ManagedParkingLots.Add(parkingLot2);
 }
 public ParkingLotServiceManager(string inputName, ParkingLot parkingLot1, ParkingLot parkingLot2) : base(inputName, parkingLot1, parkingLot2)
 {
 }