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); } }
public bool TryBind(ProcessRunResult checkerRun, out OutputVerificationResult result) { if (checkerRun.ExitCode == DesiredExitCode) { result = ResultOnBind; return(true); } else { result = null; return(false); } }
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); } }
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; }
public ExitCodeBinder(int desiredExitCode, OutputVerificationResult resultOnBind) { this.DesiredExitCode = desiredExitCode; this.ResultOnBind = resultOnBind; }