Esempio n. 1
0
    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");
    }