private void RunProblem(BatchEvaluationProblem problem) { mCancellationToken.ThrowIfCancellationRequested(); IReadOnlyList <SolutionEvaluationTestResult> testResults = new SolutionEvaluationTestResult[0]; if (TryGetConsoleApplication(problem, out IConsoleApplication application)) { var solutionTask = new SolutionEvaluationTask( null, mCancellationToken, application, problem.Problem.Tests ); solutionTask.TestEvaluated += (x, e) => Notify( TestEvaluated, new TestEvaluatedEventArgs { TestResult = e, Competitor = mCompetitor, Problem = problem } ); solutionTask.Start(); solutionTask.ExecutingTask.Wait(); testResults = solutionTask.FinishedTests; } GradeProblem( problem, testResults ); }
public BatchEvaluationSolutionGraderTask( Action <Delegate, object[]> eventDispatcher, CancellationToken cancellationToken, BatchEvaluationCompetitor competitor, BatchEvaluationProblem problem, IReadOnlyList <SolutionEvaluationTestResult> testResults ) : base(eventDispatcher, cancellationToken) { mTestResults = testResults; mCompetitor = competitor; mProblem = problem; }
private void GradeProblem(BatchEvaluationProblem problem, IReadOnlyList <SolutionEvaluationTestResult> testResults) { mCancellationToken.ThrowIfCancellationRequested(); var graderTask = new BatchEvaluationSolutionGraderTask( null, mCancellationToken, mCompetitor, problem, testResults ); graderTask.SolutionGraded += (x, e) => Notify(SolutionGraded, e); graderTask.Start(); graderTask.ExecutingTask.Wait(); }
bool TryGetConsoleApplication(BatchEvaluationProblem problem, out IConsoleApplication application) { mCancellationToken.ThrowIfCancellationRequested(); string path = Path.Combine( mCompetitor.Directory, problem.Identifier + ".exe" ); if (!File.Exists(path)) { application = null; return(false); } application = new FileSystemConsoleApplication(path, CheckerCore.CrashReporting.CrashReportFinder.Instance); return(true); }