public void TestSum()
        {
            string checker = Path.GetFullPath("checker_sum.exe".GetLocalFilePath());
            IExecutableOutputVerifier verifier = new ExecutableOutputVerifierMutable {
                ConsoleApplication = new FileSystemConsoleApplication(checker, CheckerCore.CrashReporting.CrashReportFinder.Instance),
                Bindings           = new IVerifierResultBinder[] {
                    new StdOutContainsBinder("1", new OutputVerificationResult(
                                                 OutputVerificationResultType.CorrectAnswer,
                                                 1
                                                 )),
                    new StdOutContainsBinder("0", new OutputVerificationResult(
                                                 OutputVerificationResultType.WrongAnswer,
                                                 0
                                                 ))
                },
                Arguments = new VerifierArgumentType[] {
                    VerifierArgumentType.Solution,    //number A
                    VerifierArgumentType.Stdout       //number B
                },
                Stdin = VerifierArgumentType.ExitCode //number C
            };
            OutputVerificationInfo info = new OutputVerificationInfo(
                5,//C
                null,
                null,
                StringOrFile.FromText("2"), //B
                StringOrFile.FromText("3")  //A
                );
            OutputVerificationResult result = verifier.Verify(info);

            Assert.AreEqual(result.Type, OutputVerificationResultType.CorrectAnswer);
            ;
        }
        public void TestCmpfiles(bool okay)
        {
            string checker = Path.GetFullPath("checker_cmpfiles.exe".GetLocalFilePath());
            Random r       = new Random(1337);

            string file1 = Path.GetTempFileName();
            string file2 = Path.GetTempFileName();

            File.WriteAllText(file1, "The quick brown fox jumps over the lazy dog");
            if (okay)
            {
                File.WriteAllText(file2, "The quick brown fox jumps over the lazy dog");
            }
            else
            {
                File.WriteAllText(file2, "The quick brown fox jumps over the lazy dog.");
            }

            IOutputVerifier verifier = new ExecutableOutputVerifierMutable {
                ConsoleApplication = new FileSystemConsoleApplication(checker, CheckerCore.CrashReporting.CrashReportFinder.Instance),
                Arguments          = new VerifierArgumentType[] {
                    VerifierArgumentType.FileStdout,
                    VerifierArgumentType.FileSolution
                },
                Bindings = new IVerifierResultBinder[] {
                    new StdOutContainsBinder("OK", new OutputVerificationResult(
                                                 OutputVerificationResultType.CorrectAnswer,
                                                 1
                                                 )),
                    new StdOutContainsBinder("NO", new OutputVerificationResult(
                                                 OutputVerificationResultType.WrongAnswer,
                                                 0
                                                 ))
                },
                Stdin = VerifierArgumentType.None
            };
            OutputVerificationInfo info = new OutputVerificationInfo(
                0,
                null,
                null,
                StringOrFile.FromFile(file1),
                StringOrFile.FromFile(file2)
                );
            OutputVerificationResult result = verifier.Verify(info);

            if (okay)
            {
                Assert.AreEqual(result.ScoreMultiplier, 1);
                Assert.AreEqual(result.Type, OutputVerificationResultType.CorrectAnswer);
            }
            else
            {
                Assert.AreEqual(result.ScoreMultiplier, 0);
                Assert.AreEqual(result.Type, OutputVerificationResultType.WrongAnswer);
            }
        }
 public bool TryBind(ProcessRunResult checkerRun, out OutputVerificationResult result)
 {
     if (checkerRun.Output.StringValue.Contains(SearchText))
     {
         result = ResultOnBind;
         return(true);
     }
     else
     {
         result = null;
         return(false);
     }
 }
Example #4
0
 public bool TryBind(ProcessRunResult checkerRun, out OutputVerificationResult result)
 {
     if (checkerRun.ExitCode == DesiredExitCode)
     {
         result = ResultOnBind;
         return(true);
     }
     else
     {
         result = null;
         return(false);
     }
 }
Example #5
0
        private SolutionEvaluationTestResult RunTest(int testIndex)
        {
            SolutionTest test = mTests[testIndex];

            ProcessRunResult runResult = ConsoleApplicationRunner.Instance.Run(
                application: mApplication,
                stdIn: test.Input,
                maxRuntime: test.TimeLimit,
                processArguments: test.ProcessArguments,
                allowCrashReports: true
                );

            if (TryTranslateUngracefulExit(runResult.ExitType, out SolutionEvaluationTestResultType testResultType))
            {
                return(new SolutionEvaluationTestResult {
                    ExpectedOutput = test.ExpectedOutput,
                    RunResult = runResult,
                    Score = 0,
                    Type = testResultType,
                    TestGroup = test.TestGroup
                });
            }

            if (runResult.ExitType != ProcessExitType.Graceful)
            {
                throw new NotImplementedException();
            }

            OutputVerificationResult verificationResult = test.OutputVerifier.Verify(new OutputVerificationInfo(
                                                                                         exitCode: runResult.ExitCode,
                                                                                         standardInput: test.Input,
                                                                                         standardError: runResult.StandardError,
                                                                                         standardOutput: runResult.Output,
                                                                                         expectedOutput: test.ExpectedOutput
                                                                                         ));

            return(CreateTestResult(test, runResult, verificationResult));
        }
        public void TestIsOdd()
        {
            string checker = Path.GetFullPath("checker_isodd.exe".GetLocalFilePath());
            Random r       = new Random(1337);

            for (int i = 0; i < 12; i++)
            {
                int number = r.Next();

                IOutputVerifier verifier = new ExecutableOutputVerifierMutable {
                    ConsoleApplication = new FileSystemConsoleApplication(checker, CheckerCore.CrashReporting.CrashReportFinder.Instance),
                    Stdin    = VerifierArgumentType.Stdout,//number
                    Bindings = new IVerifierResultBinder[] {
                        new ExitCodeBinder(1, new OutputVerificationResult(
                                               OutputVerificationResultType.CorrectAnswer,
                                               1
                                               )),
                        new ExitCodeBinder(0, new OutputVerificationResult(
                                               OutputVerificationResultType.CorrectAnswer,
                                               0
                                               ))
                    }
                };
                OutputVerificationInfo info = new OutputVerificationInfo(
                    0,
                    null,
                    null,
                    StringOrFile.FromText(number.ToString()),
                    null
                    );

                OutputVerificationResult result = verifier.Verify(info);
                Assert.AreEqual(result.Type, OutputVerificationResultType.CorrectAnswer);
                Assert.AreEqual(result.ScoreMultiplier, number % 2);
            }
        }
Example #7
0
 private SolutionEvaluationTestResult CreateTestResult(SolutionTest test, ProcessRunResult runResult, OutputVerificationResult verificationResult)
 {
     return(new SolutionEvaluationTestResult()
     {
         ExpectedOutput = test.ExpectedOutput,
         RunResult = runResult,
         Score = verificationResult.ScoreMultiplier * test.MaxScore,
         Type = TranslateVerificationResultType(verificationResult.Type),
         TestGroup = test.TestGroup
     });
 }
 public StdOutContainsBinder(string searchText, OutputVerificationResult result)
 {
     this.SearchText   = searchText;
     this.ResultOnBind = result;
 }
Example #9
0
 public ExitCodeBinder(int desiredExitCode, OutputVerificationResult resultOnBind)
 {
     this.DesiredExitCode = desiredExitCode;
     this.ResultOnBind    = resultOnBind;
 }