示例#1
0
        public void TestSolvePercentHsGradByStateAndRace()
        {
            //test resolves to simple natl average given no input
            var testResult = AmericanSchoolBase.SolvePercentGradByStateAndRace(null, null);

            //test resolves to natl avg's when no state
            Assert.AreEqual(89.6, testResult);
            testResult = AmericanSchoolBase.SolvePercentGradByStateAndRace(null, NorthAmericanRace.Mixed);
            Assert.AreEqual(89.6, testResult);
            testResult = AmericanSchoolBase.SolvePercentGradByStateAndRace(null, NorthAmericanRace.AmericanIndian);
            Assert.AreEqual(77.6, testResult);
            var testState     = UsState.GetStateByPostalCode("CA");
            var testStateData = UsStateData.GetStateData(testState.ToString());

            Assert.IsNotNull(testStateData);

            //percent-highschool-grad="80.6"
            //asian="89.0" natl-percent="82.0"
            // 89 - 82 = 7
            testResult = AmericanSchoolBase.SolvePercentGradByStateAndRace(testState.ToString(), NorthAmericanRace.Asian);
            Assert.AreEqual(87.6, testResult);

            //american-indian="70.0"
            // 70 - 82 = -12
            testResult = AmericanSchoolBase.SolvePercentGradByStateAndRace(testState.ToString(), NorthAmericanRace.AmericanIndian);
            Assert.AreEqual(68.6, testResult);

            testState = UsState.GetStateByPostalCode("ID");
            Assert.IsNotNull(testState);
            Assert.IsNotNull(UsStateData.GetStateData(testState.ToString()));

            testResult = AmericanSchoolBase.SolvePercentGradByStateAndRace(testState.ToString(), NorthAmericanRace.Asian, OccidentalEdu.Bachelor | OccidentalEdu.Grad);
            //percent-college-grad="23.9"
            //
            //asian="54.0" natl-percent="30.0"
            // 54.0 - 30.0 = 24, 23.9+24 = 47.9
            Assert.AreEqual(47.9, testResult);
        }
示例#2
0
        /// <summary>
        /// Difference of national avg to race average added to state average.
        /// </summary>
        /// <param name="state"></param>
        /// <param name="race"></param>
        /// <param name="edu"></param>
        /// <returns></returns>
        public static double SolvePercentGradByStateAndRace(string state, NorthAmericanRace?race,
                                                            OccidentalEdu edu = OccidentalEdu.HighSchool | OccidentalEdu.Grad)
        {
            AmericanRacePercents p;

            p = edu >= OccidentalEdu.Bachelor ? AmericanUniversity.NatlGradRate() : AmericanHighSchool.NatlGradRate();
            var stateAvg  = p.National;
            var natlAvg   = p.National;
            var stateData = UsStateData.GetStateData(state);

            if (stateData?.PercentOfGrads != null && stateData.PercentOfGrads.Count > 0)
            {
                var f = stateData.PercentOfGrads.FirstOrDefault(x => x.Item1 == edu);
                if (f != null)
                {
                    stateAvg = Math.Round(f.Item2, 1);
                }
            }

            var raceNatlAvg = new Dictionary <NorthAmericanRace, double>
            {
                { NorthAmericanRace.AmericanIndian, p.AmericanIndian - natlAvg },
                { NorthAmericanRace.Asian, p.Asian - natlAvg },
                { NorthAmericanRace.Hispanic, p.Hispanic - natlAvg },
                { NorthAmericanRace.Black, p.Black - natlAvg },
                { NorthAmericanRace.White, p.White - natlAvg },
                { NorthAmericanRace.Pacific, p.Pacific - natlAvg },
                { NorthAmericanRace.Mixed, p.Mixed - natlAvg }
            };

            if (race == null || !raceNatlAvg.ContainsKey(race.Value))
            {
                return(Math.Round(stateAvg, 1));
            }

            return(Math.Round(stateAvg + raceNatlAvg[race.Value], 1));
        }