public void RandomSortNTP_Sort_PilotsAndSuggestedPilotsPerRoundOutOfSyncCreateNewGroup()
        {
            var pilots                  = GeneratePilotsList(19);
            var sortAlgo                = new RandomSortNoTeamProtection();
            var numberOfRounds          = 1;
            var suggestedPilotsPerGroup = 5;

            var sorted = sortAlgo.GenerateInitialMatrix(pilots, numberOfRounds, suggestedPilotsPerGroup);

            // One Round
            Assert.AreEqual(1, sorted.Matrix.Count);
            // 19 Pilots
            Assert.AreEqual(19, sorted.Matrix[0].PilotSlots.Count);

            var pilotsInFirstGroup  = sorted.Matrix[0].PilotSlots.Count(p => p.FlightGroup == FlightGroup.A);
            var pilotsInSecondGroup = sorted.Matrix[0].PilotSlots.Count(p => p.FlightGroup == FlightGroup.B);
            var pilotsInThirdGroup  = sorted.Matrix[0].PilotSlots.Count(p => p.FlightGroup == FlightGroup.C);
            var pilotsInFourthGroup = sorted.Matrix[0].PilotSlots.Count(p => p.FlightGroup == FlightGroup.D);

            // There should be four flight groups, 5 in 3 (15 pilots) and the remaining 4 in a final group (19 total).
            // The first should have the suggested number of pilots.
            Assert.AreEqual(suggestedPilotsPerGroup, pilotsInFirstGroup);
            Assert.AreEqual(suggestedPilotsPerGroup, pilotsInSecondGroup);
            Assert.AreEqual(suggestedPilotsPerGroup, pilotsInThirdGroup);
            // Since there are 19, the remainder should be added to a new group and not included in the previous.
            Assert.AreEqual(suggestedPilotsPerGroup - 1, pilotsInFourthGroup);
        }
        public void RandomSortNTP_Sort_PilotsAndSuggestedPilotsPerRoundOutOfSync()
        {
            var pilots                  = GeneratePilotsList(7);
            var sortAlgo                = new RandomSortNoTeamProtection();
            var numberOfRounds          = 1;
            var suggestedPilotsPerGroup = 3;

            var sorted = sortAlgo.GenerateInitialMatrix(pilots, numberOfRounds, suggestedPilotsPerGroup);

            Assert.AreEqual(1, sorted.Matrix.Count);
            Assert.AreEqual(7, sorted.Matrix[0].PilotSlots.Count);

            var pilotsInFirstGroup  = sorted.Matrix[0].PilotSlots.Count(p => p.FlightGroup == FlightGroup.A);
            var pilotsInSecondGroup = sorted.Matrix[0].PilotSlots.Count(p => p.FlightGroup == FlightGroup.B);

            // There should be two flight groups.
            // The first should have the suggested number of pilots.
            Assert.AreEqual(suggestedPilotsPerGroup, pilotsInFirstGroup);

            // Since there are seven pilots, there is 1 remaining pilot.  The rule for this
            // sorting algo states that when generating a matrix, if the remainder is less than
            // half of the number of pilots suggested per group, they should be added to the
            // final group and a new group should not be created.
            Assert.AreEqual(suggestedPilotsPerGroup + 1, pilotsInSecondGroup);
        }
        public void RandomSortNTP_Sort_HappyPath()
        {
            var pilots   = GeneratePilotsList(10);
            var sortAlgo = new RandomSortNoTeamProtection();
            var sorted   = sortAlgo.GenerateInitialMatrix(pilots, 10, 10);

            Assert.AreEqual(10, sorted.Matrix.Count);
            Assert.AreEqual(10, sorted.Matrix[0].PilotSlots.Count);
        }
        public void RandomSortNTP_Sort_NegativeSuggestedPilotsPerRoundParameter()
        {
            var randSort = new RandomSortNoTeamProtection();

            randSort.GenerateInitialMatrix(GeneratePilotsList(1), 10, -1);
        }
        public void RandomSortNTP_Sort_NegativeRoundsParameter()
        {
            var randSort = new RandomSortNoTeamProtection();

            randSort.GenerateInitialMatrix(GeneratePilotsList(1), -1, 5);
        }
        public void RandomSortNTP_Sort_BadPilotRegistrationParameter()
        {
            var randSort = new RandomSortNoTeamProtection();

            randSort.GenerateInitialMatrix(new List <PilotRegistration>(), 0, 5);
        }
        public void RandomSortNTP_Sort_NullPilotListParameter()
        {
            var randSort = new RandomSortNoTeamProtection();

            randSort.GenerateInitialMatrix(null, 10, 5);
        }