Exemplo n.º 1
0
        public TestResult TestFiles(string[] sources, ProblemSpecification problem, Compiler compiler)
        {
            TestResult r1          = new TestResult();
            string     exefileName = Path.Combine(Path.GetTempPath(), problem.Name + ".exe");

            r1.CompilerOutput = compiler.Compile(sources, exefileName);
            if (r1.CompilerOutput != null)
            {
                r1.Result = TestResultType.CTE;
                return(r1);
            }
            List <string> outputs = new List <string>();
            int           i       = 0;

            foreach (var input in problem.TestInput)
            {
                string             output;
                TestResourceResult r2 = TestRun(exefileName, input, out output);
                r2             = compiler.ReletiveUsage(r2);
                r2.MemoryUsage = Math.Max(r2.MemoryUsage, r1.ResourceUsage.MemoryUsage);
                if (Double.IsNaN(r2.TimeUsage))
                {
                    r1.Result = TestResultType.RTE;
                    r1.Output = outputs.ToArray();
                    return(r1);
                }
                r2.TimeUsage     = Math.Max(r2.TimeUsage, r1.ResourceUsage.TimeUsage);
                r1.ResourceUsage = r2;
                if (r2.TimeUsage > problem.TimeLimit)
                {
                    r1.Result = TestResultType.TLE;
                    r1.Output = outputs.ToArray();
                    return(r1);
                }
                if (r2.MemoryUsage > problem.MemoryLimit)
                {
                    r1.Result = TestResultType.MLE;
                    r1.Output = outputs.ToArray();
                    return(r1);
                }
                if (!problem.IsCorrect(output, i))
                {
                    r1.Result = TestResultType.WA;
                    r1.Output = outputs.ToArray();
                    return(r1);
                }
                outputs.Add(output);
                i++;
            }
            r1.Output = outputs.ToArray();
            return(r1);
        }
Exemplo n.º 2
0
        private static void CreateTest(ListOfTestResource aTestList, string aTitle, TestResourceResult aResult, string aResultDescription, DateTime aStartTime, DateTime aEndTime, string aContent)
        {
            TestResource test = new TestResource
            {
                Title             = aTitle,
                Result            = aResult,
                ResultDescription = aResultDescription,
                Content           = new XmlDocument().CreateCDataSection(aContent),
                StartedUtc        = aStartTime,
                FinishedUtc       = aEndTime
            };

            Assert.Check(test.Valid());

            aTestList.Tests.Add(test);
        }
Exemplo n.º 3
0
        public TestResourceResult TestRun(string exeFile, string input, out string output)
        {
            int tryNumber = 0;

            CleanUp(exeFile);
            do
            {
                try
                {
                    TestResourceResult r = new TestResourceResult();
                    Process            p = new Process();
                    p.StartInfo.FileName               = exeFile;
                    p.StartInfo.UseShellExecute        = false;
                    p.StartInfo.RedirectStandardError  = true;
                    p.StartInfo.CreateNoWindow         = true;
                    p.StartInfo.RedirectStandardInput  = true;
                    p.StartInfo.RedirectStandardOutput = true;
                    p.Start();
                    p.PriorityClass = ProcessPriorityClass.AboveNormal;
                    p.Refresh();
                    r.MemoryUsage = p.PeakWorkingSet64;
                    p.WaitForExit(1);
                    p.Refresh();
                    r.MemoryUsage = p.PeakWorkingSet64;
                    p.StandardInput.WriteLine(input);
                    p.StandardInput.Close();
                    do
                    {
                        if (!p.HasExited)
                        {
                            p.Refresh();
                            r.MemoryUsage = Math.Max(r.MemoryUsage, p.PeakWorkingSet64);
                            if (r.MemoryUsage > MaxMemoryLimit)
                            {
                                break;
                            }
                        }
                    } while ((DateTime.Now - p.StartTime).TotalMilliseconds < MaxTimeLimit && !p.WaitForExit(10));
                    if (p.HasExited)
                    {
                        output = p.StandardOutput.ReadToEnd();
                        if (p.ExitCode == 0)
                        {
                            r.TimeUsage = (p.ExitTime - p.StartTime).Milliseconds;
                        }
                        else
                        {
                            r.TimeUsage = double.NaN;
                        }
                    }
                    else
                    {
                        p.Kill();
                        output      = "";
                        r.TimeUsage = double.PositiveInfinity;
                    }
                    return(r);
                }
                catch
                {
                }
                tryNumber++;
                CleanUp(exeFile);
            } while (tryNumber < TryCount);
            TestResourceResult r2 = new TestResourceResult();

            r2.MemoryUsage = 0;
            r2.TimeUsage   = double.NaN;
            output         = "";
            return(r2);
        }
Exemplo n.º 4
0
 public override TestResourceResult ReletiveUsage(TestResourceResult usage)
 {
     usage.MemoryUsage = (long)(usage.MemoryUsage * dummyMemory / (double)(dummyResource.MemoryUsage));
     usage.TimeUsage  *= dummyTime / dummyResource.TimeUsage;
     return(usage);
 }
Exemplo n.º 5
0
 public abstract TestResourceResult ReletiveUsage(TestResourceResult usage);