예제 #1
0
    /**
     * Calculate the toll for a single pass
     *
     * @param vehicle - the vehicle
     * @param date   - date and time of the pass
     * @return - the fee to be paid.
     */
    public int GetSingleTollFee(IVehicle vehicle, DateTime date)
    {
        if (PublicHolidays.IsTollFreeDate(date) || vehicle.GetExemptionStatus() == true)
        {
            return(0);
        }

        TimeSpan tollTime = date.TimeOfDay;

        if ((tollTime >= new TimeSpan(6, 0, 0) && tollTime <= new TimeSpan(6, 29, 0)) ||
            (tollTime >= new TimeSpan(8, 30, 0) && tollTime <= new TimeSpan(14, 59, 0)) ||
            (tollTime >= new TimeSpan(18, 0, 0) && tollTime <= new TimeSpan(18, 29, 0)))
        {
            return(8);
        }

        if ((tollTime >= new TimeSpan(6, 30, 0) && tollTime <= new TimeSpan(6, 59, 0)) ||
            (tollTime >= new TimeSpan(8, 0, 0) && tollTime <= new TimeSpan(8, 29, 0)) ||
            (tollTime >= new TimeSpan(15, 0, 0) && tollTime <= new TimeSpan(15, 29, 0)) ||
            (tollTime >= new TimeSpan(17, 0, 0) && tollTime <= new TimeSpan(17, 59, 0)))
        {
            return(13);
        }

        if ((tollTime >= new TimeSpan(7, 0, 0) && tollTime <= new TimeSpan(7, 59, 0)) ||
            (tollTime >= new TimeSpan(15, 30, 0) && tollTime <= new TimeSpan(16, 59, 0)))
        {
            return(18);
        }

        return(0);
    }
예제 #2
0
        static void Main(string[] args)
        {
            Console.WriteLine("Starting tests for TollFreeCalculator.");
            var totalTests      = 0;
            var successfulTests = 0;

            Dictionary <string, DateTime> times = new Dictionary <string, DateTime>
            {
                { "06:40", new DateTime(2020, 4, 29, 6, 40, 52) },
                { "06:55", new DateTime(2020, 4, 29, 6, 55, 52) },
                { "07:10", new DateTime(2020, 4, 29, 7, 10, 52) },
                { "07:41", new DateTime(2020, 4, 29, 7, 41, 52) },
                { "09:10", new DateTime(2020, 4, 29, 9, 10, 52) },
                { "08:22", new DateTime(2020, 4, 29, 8, 22, 52) },
                { "10:18", new DateTime(2020, 4, 29, 10, 18, 52) },
                { "10:30", new DateTime(2020, 4, 29, 10, 30, 52) },
                { "16:59", new DateTime(2020, 4, 29, 16, 59, 00) },
                { "17:59", new DateTime(2020, 4, 29, 17, 59, 00) },
                { "18:10", new DateTime(2020, 4, 29, 18, 10, 52) },
                { "19:22", new DateTime(2020, 4, 29, 19, 22, 00) }
            };

            Dictionary <string, DateTime> dates = new Dictionary <string, DateTime>
            {
                { "03-01", new DateTime(2020, 3, 1, 17, 59, 00) },
                { "03-02", new DateTime(2020, 3, 2, 17, 59, 00) },
                { "04-26", new DateTime(2020, 4, 26, 17, 59, 00) },
                { "04-27", new DateTime(2020, 4, 27, 17, 59, 00) },
                { "05-01", new DateTime(2020, 5, 1, 17, 59, 00) },
                { "12-24", new DateTime(2020, 12, 24, 17, 59, 00) },
                { "01-15", new DateTime(2020, 1, 15, 17, 59, 00) }
            };

            // Setting up vehicles
            var regularCar = new TollFeeCalculator.Car();
            var diplomat   = new TollFeeCalculator.Car {
                IsDiplomat = true
            };
            var emergencyVehicle = new TollFeeCalculator.Car {
                IsEmergency = true
            };
            var militaryCar = new TollFeeCalculator.Car {
                IsMilitary = true
            };
            var bike    = new TollFeeCalculator.Motorbike();
            var tractor = new TollFeeCalculator.Tractor();


            // Setup Toll Calculator
            var tollCalc = new TollCalculator();

            /*
             * Testing Vehice Exemption status
             */
            totalTests += 6;
            if (regularCar.GetExemptionStatus() == false)
            {
                successfulTests++;
            }
            if (diplomat.GetExemptionStatus() == true)
            {
                successfulTests++;
            }
            if (emergencyVehicle.GetExemptionStatus() == true)
            {
                successfulTests++;
            }
            if (militaryCar.GetExemptionStatus() == true)
            {
                successfulTests++;
            }
            if (bike.GetExemptionStatus() == true)
            {
                successfulTests++;
            }
            if (tractor.GetExemptionStatus() == true)
            {
                successfulTests++;
            }


            /*
             * Single Passes
             */
            totalTests += 3;
            if (tollCalc.GetSingleTollFee(regularCar, times["09:10"]) == 8)
            {
                successfulTests++;
            }
            if (tollCalc.GetSingleTollFee(regularCar, times["17:59"]) == 13)
            {
                successfulTests++;
            }
            if (tollCalc.GetSingleTollFee(bike, times["17:59"]) == 0)
            {
                successfulTests++;
            }

            /*
             * Multiple passes
             */
            totalTests += 2;
            DateTime[] passes = { times["09:10"], times["17:59"] };
            if (tollCalc.GetTollFee(regularCar, passes) == 21)
            {
                successfulTests++;
            }

            DateTime[] max =
            {
                times["07:10"],
                times["08:22"],
                times["10:18"],
                times["16:59"],
                times["18:10"],
            };
            if (tollCalc.GetTollFee(regularCar, max) == 60)
            {
                successfulTests++;
            }

            /*
             * Multiple passes with multi pass discount
             */
            totalTests += 3;
            DateTime[] higher = { times["06:40"], times["06:55"], times["07:10"] };
            if (tollCalc.GetTollFee(regularCar, higher) == 18)
            {
                successfulTests++;
            }

            // One at the start of the day, and then multi pass at the end
            DateTime[] separate = { times["06:55"], times["10:18"], times["10:30"] };
            if (tollCalc.GetTollFee(regularCar, separate) == 21)
            {
                successfulTests++;
            }

            // One just outside the 60 min window
            DateTime[] sixty = { times["06:40"], times["06:55"], times["07:10"], times["07:41"] };
            if (tollCalc.GetTollFee(regularCar, sixty) == 36)
            {
                successfulTests++;
            }

            /*
             * Multiple days (should fail)
             */
            totalTests += 1;
            DateTime[] dayPasses = { dates["04-26"], dates["04-27"] };
            try
            {
                tollCalc.GetTollFee(regularCar, dayPasses);
            }
            catch (System.ArgumentException)
            {
                successfulTests++;
            }

            /*
             * Test public holidays
             */
            totalTests += 5;
            if (PublicHolidays.IsTollFreeDate(dates["05-01"]) == true)
            {
                successfulTests++;
            }
            ;
            if (PublicHolidays.IsTollFreeDate(dates["03-01"]) == true)
            {
                successfulTests++;
            }
            ;
            if (PublicHolidays.IsTollFreeDate(dates["03-02"]) == false)
            {
                successfulTests++;
            }
            ;
            if (PublicHolidays.IsTollFreeDate(dates["12-24"]) == true)
            {
                successfulTests++;
            }
            ;
            if (PublicHolidays.IsTollFreeDate(dates["01-15"]) == false)
            {
                successfulTests++;
            }
            ;

            Console.WriteLine("Tests completed. Result: " + successfulTests.ToString() + "/" + totalTests.ToString());;
        }