コード例 #1
0
        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
                );
        }
コード例 #2
0
 public BatchEvaluationSolutionGraderTask(
     Action <Delegate, object[]> eventDispatcher,
     CancellationToken cancellationToken,
     BatchEvaluationCompetitor competitor,
     BatchEvaluationProblem problem,
     IReadOnlyList <SolutionEvaluationTestResult> testResults
     ) : base(eventDispatcher, cancellationToken)
 {
     mTestResults = testResults;
     mCompetitor  = competitor;
     mProblem     = problem;
 }
コード例 #3
0
        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();
        }
コード例 #4
0
        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);
        }