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); }
/// <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)); }