private static IEnumerator GradeSubmission(string studentName, string generator, string assignmentPath, TextWriter results, Spreadsheet grades, string studentId, string scoreColumnName) { var count = 0; var passed = 0; var errors = new StringBuilder(); var ontology = new Ontology(studentName, generator); try { var testLoadErrors = ontology.Parser.LoadDefinitions(Combine(assignmentPath, "tests.gen"), false); count = testLoadErrors.Count; foreach (var e in testLoadErrors) { errors.Append($"{e.Message}; "); } } catch (Exception e) { results.WriteLine($"{studentName},0,\"{e.Message.Replace("\"","\"\"")}\""); } // ReSharper disable once UnusedVariable foreach (var(test, success, example) in ontology.TestResults()) { if (success) { passed++; } else { errors.Append(test.FailMessage); errors.Append("; "); } count++; Driver.SetOutputWindow($"{studentName}: {count} tests, {passed} passed; {100*passed/count}%"); yield return(null); } var score = (count > 0)?(100 * passed) / count : 0; results.WriteLine($"{studentName},{score},{errors}"); if (!grades.ContainsKey(studentId)) { Debug.Log($"Student does not appear in spreadsheet: {studentName} {studentId}"); } else { grades[studentId, scoreColumnName] = score; } Debug.Log($"{studentName}: {score}% passed"); Driver.SetOutputWindow($"{studentName}: {score}% passed"); }