コード例 #1
0
        public OutputVerificationResult Verify(OutputVerificationInfo info)
        {
            StringBuilder argBuilder = new StringBuilder();

            foreach (VerifierArgumentType arg in Arguments)
            {
                argBuilder.Append($" \"{GetVerifierArgument(info, arg)}\"");
            }

            ProcessRunResult checkerRun = ConsoleApplicationRunner.Instance.Run(
                ConsoleApplication,
                TimeSpan.FromSeconds(60),
                GetVerifierArgument(info, Stdin),
                argBuilder.ToString().TrimEnd()
                );

            ;
            if (checkerRun.ExitType == ProcessExitType.Crashed)
            {
                return(new OutputVerificationResult(
                           OutputVerificationResultType.CheckerCrashed,
                           0
                           ));
            }

            OutputVerificationResult result = null;

            foreach (IVerifierResultBinder binding in Bindings)
            {
                if (binding.TryBind(checkerRun, out result))
                {
                    break;
                }
            }

            if (result == null)
            {
                result = new OutputVerificationResult(
                    OutputVerificationResultType.CouldNotBind,
                    0
                    );
            }

            return(result);
        }
コード例 #2
0
        public OutputVerificationResult Verify(OutputVerificationInfo info)
        {
            IEnumerable <string> output   = Normalize(info.StandardOutput.StringValue);
            IEnumerable <string> solution = Normalize(info.ExpectedOutput.StringValue);

            if (Enumerable.SequenceEqual(output, solution))
            {
                return(new OutputVerificationResult(
                           OutputVerificationResultType.CorrectAnswer,
                           scoreMultiplier: 1
                           ));
            }
            else
            {
                return(new OutputVerificationResult(
                           OutputVerificationResultType.WrongAnswer,
                           0
                           ));
            }
        }
コード例 #3
0
        private StringOrFile GetVerifierArgument(OutputVerificationInfo info, VerifierArgumentType thing)
        {
            switch (thing)
            {
            case VerifierArgumentType.ExitCode:
                return(StringOrFile.FromText(info.ExitCode.ToString()));

            case VerifierArgumentType.FileSolution:
                return(StringOrFile.FromText(info.ExpectedOutput.FilePath));

            case VerifierArgumentType.FileStderr:
                return(StringOrFile.FromText(info.StandardError.FilePath));

            case VerifierArgumentType.FileStdin:
                return(StringOrFile.FromText(info.StandardInput.FilePath));

            case VerifierArgumentType.FileStdout:
                return(StringOrFile.FromText(info.StandardOutput.FilePath));

            case VerifierArgumentType.Solution:
                return(info.ExpectedOutput);

            case VerifierArgumentType.Stderr:
                return(info.StandardError);

            case VerifierArgumentType.Stdin:
                return(info.StandardInput);

            case VerifierArgumentType.Stdout:
                return(info.StandardOutput);

            default:
            case VerifierArgumentType.None:
                return(StringOrFile.FromText(string.Empty));
            }
        }