public IEnumerator TestEvaluateLevel_InputIsNeg1_OutputNOTKNOWN()
            {
                yield return(null);

                Assert.AreNotEqual(AbilityLevel.NOT_KNOWN, AbilityManagement.EvaluateLevel(0));
                Assert.AreEqual(AbilityLevel.NOT_KNOWN, AbilityManagement.EvaluateLevel(-1));
            }
            public IEnumerator TestEvaluateLevelFunction_InputIsOver90_OutputEXCELLENT()
            {
                yield return(null);

                // Test the input has to be strict greater than 90, to get EXCELLENT
                Assert.AreEqual(AbilityLevel.EXCELLENT, AbilityManagement.EvaluateLevel(100));
                Assert.AreEqual(AbilityLevel.EXCELLENT, AbilityManagement.EvaluateLevel(95));

                // Edge case tests for 90: pick 89, 90, 91 as input
                Assert.AreEqual(AbilityLevel.EXCELLENT, AbilityManagement.EvaluateLevel(91));
                Assert.AreNotEqual(AbilityLevel.EXCELLENT, AbilityManagement.EvaluateLevel(90));
                Assert.AreNotEqual(AbilityLevel.EXCELLENT, AbilityManagement.EvaluateLevel(89));
            }
            public IEnumerator TestEvaluateLevel_InputIsBetween0And25_OutputVERYPOOR()
            {
                yield return(null);

                // Test the input has to be greater than or equal to 0 and less than or equal to 25, to get VERY POOR
                // Edge case tests for 25: pick 26, 25, 24 as input
                Assert.AreNotEqual(AbilityLevel.VERY_POOR, AbilityManagement.EvaluateLevel(26));
                Assert.AreEqual(AbilityLevel.VERY_POOR, AbilityManagement.EvaluateLevel(25));
                Assert.AreEqual(AbilityLevel.VERY_POOR, AbilityManagement.EvaluateLevel(24));

                Assert.AreEqual(AbilityLevel.VERY_POOR, AbilityManagement.EvaluateLevel(12));

                // Edge case tests for 0: 1, 0, -1 as input
                Assert.AreEqual(AbilityLevel.VERY_POOR, AbilityManagement.EvaluateLevel(1));
                Assert.AreEqual(AbilityLevel.VERY_POOR, AbilityManagement.EvaluateLevel(0));
                Assert.AreNotEqual(AbilityLevel.VERY_POOR, AbilityManagement.EvaluateLevel(-1));
            }
            public IEnumerator TestEvaluateLevel_InputIsBetween25And50_OutputPOOR()
            {
                yield return(null);

                // Test the input has to be strict greater than 25 and less than or equal to 50, to get POOR
                // Edge case tests for 50: pick 51, 50, 49 as input
                Assert.AreNotEqual(AbilityLevel.POOR, AbilityManagement.EvaluateLevel(51));
                Assert.AreEqual(AbilityLevel.POOR, AbilityManagement.EvaluateLevel(50));
                Assert.AreEqual(AbilityLevel.POOR, AbilityManagement.EvaluateLevel(49));

                Assert.AreEqual(AbilityLevel.POOR, AbilityManagement.EvaluateLevel(42));

                // Edge case tests for 25: pick 26, 25, 24 as input
                Assert.AreEqual(AbilityLevel.POOR, AbilityManagement.EvaluateLevel(26));
                Assert.AreNotEqual(AbilityLevel.POOR, AbilityManagement.EvaluateLevel(25));
                Assert.AreNotEqual(AbilityLevel.POOR, AbilityManagement.EvaluateLevel(24));
            }
            public IEnumerator TestEvaluateLevel_InputIsBetween50And75_OutputOK()
            {
                yield return(null);

                // Test the input has to be strict greater than 50 and less than or equal to 75, to get OK
                // Edge case tests for 75: pick 76, 75, 74 as input
                Assert.AreNotEqual(AbilityLevel.OK, AbilityManagement.EvaluateLevel(76));
                Assert.AreEqual(AbilityLevel.OK, AbilityManagement.EvaluateLevel(75));
                Assert.AreEqual(AbilityLevel.OK, AbilityManagement.EvaluateLevel(74));

                Assert.AreEqual(AbilityLevel.OK, AbilityManagement.EvaluateLevel(55));

                // Edge case tests for 50: pick 51, 50, 49 as input
                Assert.AreEqual(AbilityLevel.OK, AbilityManagement.EvaluateLevel(51));
                Assert.AreNotEqual(AbilityLevel.OK, AbilityManagement.EvaluateLevel(50));
                Assert.AreNotEqual(AbilityLevel.OK, AbilityManagement.EvaluateLevel(49));
            }
            public IEnumerator TestEvaluateLevel_InputIsBetween75And90_OutputGOOD()
            {
                yield return(null);

                // Test the input has to be strict greater than 75 and less than or equal to 90, to get GOOD
                // Edge case tests for 90: pick 89, 90, 91 as input
                Assert.AreNotEqual(AbilityLevel.GOOD, AbilityManagement.EvaluateLevel(91));
                Assert.AreEqual(AbilityLevel.GOOD, AbilityManagement.EvaluateLevel(90));
                Assert.AreEqual(AbilityLevel.GOOD, AbilityManagement.EvaluateLevel(89));

                Assert.AreEqual(AbilityLevel.GOOD, AbilityManagement.EvaluateLevel(80));

                // Edge case tests for 75: pick 76, 75, 74 as input
                Assert.AreEqual(AbilityLevel.GOOD, AbilityManagement.EvaluateLevel(76));
                Assert.AreNotEqual(AbilityLevel.GOOD, AbilityManagement.EvaluateLevel(75));
                Assert.AreNotEqual(AbilityLevel.GOOD, AbilityManagement.EvaluateLevel(74));
            }
            public IEnumerator WHEN_CalculateOverallScoreSeqFunctionCalled_THEN_OverallScoreSeqUpdated()
            {
                // Add example SubScoreStorage objects to subScoreSeq
                AbilityManagement.subScoreSeq.Add(inhibition_ctf);
                AbilityManagement.subScoreSeq.Add(inhibition_balloons);
                AbilityManagement.subScoreSeq.Add(pointing_balloons);

                // Call tested function
                AbilityManagement.CalculateOverallScoreSeq();

                // Expected overall score and level
                int          expectedOverallScore_Inhition = (int)Math.Ceiling((double)(89 * 2 + 65 * 1) / (2 + 1));
                int          expectedOverallScore_Pointing = (int)Math.Ceiling((double)(71 * 2) / (2));
                AbilityLevel expectedOverallLevel_Inhition = AbilityManagement.EvaluateLevel(expectedOverallScore_Inhition);
                AbilityLevel expectedOverallLevel_Pointing = AbilityManagement.EvaluateLevel(expectedOverallScore_Pointing);

                List <OverallScoreStorage> actualOverallScoreSeq = AbilityManagement.overallScoreSeq;

                yield return(null);

                // Test the actualOverallScoreSeq is as expected
                foreach (OverallScoreStorage overallScore in actualOverallScoreSeq)
                {
                    if (overallScore.AbilityName == AbilityName.INHIBITION)
                    {
                        Assert.AreEqual(expectedOverallScore_Inhition, overallScore.Score);
                        Assert.AreEqual(expectedOverallLevel_Inhition, overallScore.Level);
                    }
                    else if (overallScore.AbilityName == AbilityName.POINTING)
                    {
                        Assert.AreEqual(expectedOverallScore_Pointing, overallScore.Score);
                        Assert.AreEqual(expectedOverallLevel_Pointing, overallScore.Level);
                    }
                    else
                    {
                        Assert.AreEqual(-1, overallScore.Score);
                        Assert.AreEqual(AbilityLevel.NOT_KNOWN, overallScore.Level);
                    }
                }
            }
 public IEnumerator WHEN_EvaluateLevelFunctionCalled_THEN_LevelDerived()
 {
     Assert.AreEqual(typeof(AbilityLevel), AbilityManagement.EvaluateLevel(10).GetType());
     yield return(null);
 }