/// <summary>
/// Scores the test.
/// </summary>
/// <param name="selectedResponseIDs">a List of ResponseIDs to be scored.</param>
/// <returns>a struct TestResults object with final scores.</returns>
static public AssessmentResults Score(List <string> selectedResponseIDs)
{
List <DiscService.ResponseItem> responseList = DiscService.GetResponses();
// Holds the most and least totals for each Letter attribute
Dictionary <string, int[]> results = new Dictionary <string, int[]>();
results["S"] = new int[] { 0, 0 };
results["C"] = new int[] { 0, 0 };
results["I"] = new int[] { 0, 0 };
results["N"] = new int[] { 0, 0 }; // This is intentionally not used after most/least totalling (foreach loop below). Placebo questions?
results["D"] = new int[] { 0, 0 };
foreach (string selectedResponseID in selectedResponseIDs)
{
string responseID = selectedResponseID.Substring(0, 3);
string MorL = selectedResponseID.Substring(3, 1);
DiscService.ResponseItem selectedResponse = responseList.Find(
delegate(DiscService.ResponseItem responseItem)
{
return(responseItem.ResponseID == responseID);
}
);
if (MorL == "m")
{
results[selectedResponse.MostScore][0]++;
}
else
{
results[selectedResponse.LeastScore][1]++;
}
}
int nbS = 27 - results["S"][1];
int nbC = 26 - results["C"][1];
int nbI = 26 - results["I"][1];
int nbD = 27 - results["D"][1];
decimal decX = results["S"][0] + results["C"][0] + results["I"][0] + results["D"][0];
decimal decY = nbS + nbC + nbI + nbD;
AssessmentResults testResults = new AssessmentResults();
if (decX > 0 && decY > 0)
{
testResults.AdaptiveBehaviorS = Convert.ToInt32((results["S"][0] / decX * 100));
testResults.AdaptiveBehaviorC = Convert.ToInt32((results["C"][0] / decX * 100));
testResults.AdaptiveBehaviorI = Convert.ToInt32((results["I"][0] / decX * 100));
testResults.AdaptiveBehaviorD = Convert.ToInt32((results["D"][0] / decX * 100));
testResults.NaturalBehaviorS = Convert.ToInt32((nbS / decY * 100));
testResults.NaturalBehaviorC = Convert.ToInt32((nbC / decY * 100));
testResults.NaturalBehaviorI = Convert.ToInt32((nbI / decY * 100));
testResults.NaturalBehaviorD = Convert.ToInt32((nbD / decY * 100));
}
return(testResults);
}