예제 #1
0
        public string Compile(string source, string language, string[] input, string[] output, int timelimit, int memorylimit)
        {
            source = HttpUtility.UrlDecode(source);

            var settings = new Settings
            {
                TestingDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()),
                Compilers = new List<Compiler>
                                                       {
                                                           Compiler.VC8Compiler,
                                                           Compiler.DotNet3Compiler,
                                                           Compiler.Delphi7Compiler,
                                                           Compiler.Java6Compiler
                                                       }
            };

            var p = new Program {Source = source, MemoryLimit = memorylimit, TimeLimit = timelimit};
            var tester = new CompilationTester(settings);
            Result testResult;

            switch (language)
            {
                case "CPP": p.Language = Language.VC8; break;
                case "CS": p.Language = Language.CSharp3; break;
                case "Delphi": p.Language = Language.Delphi7; break;
                case "Java": p.Language = Language.Java6; break;
                default: return "Unsupported language";
            }

            var compileResult = tester.Compile(p.Source, p.Language);

            if (!compileResult.Compiled)
            {
                testResult = new Result
                {
                    ProgramStatus = Status.CompilationError,
                    Output = compileResult.StandartOutput
                };

                return Enum.GetName(typeof(Status), testResult.ProgramStatus).Trim();
            }

            for (var i = 0; i < input.Length; i++)
            {
                p.InputTest = input[i];
                p.OutputTest = output[i];

                var result = tester.TestProgram(p);

                if (result.ProgramStatus != Status.Accepted)
                {
                    return (Enum.GetName(typeof(Status), result.ProgramStatus) + " Test: " + i).Trim();
                }
            }

            return "Accepted";
        }
예제 #2
0
 public static Settings CreateDefaultSetting()
 {
     var settings = new Settings
                        {
                            TestingDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()),
                            Compilers = new List<Compiler>
                                            {
                                                Compiler.VC8Compiler,
                                                Compiler.DotNet3Compiler,
                                                Compiler.Delphi7Compiler,
                                                Compiler.Java6Compiler
                                            }
                        };
     return settings;
 }
예제 #3
0
        /// <summary>
        /// Creates new instance of <see cref="Tester"/> class.
        /// </summary>
        /// 
        /// <param name="settings">
        /// Settings of this component.
        /// </param>
        public CompilationTester(Settings settings)
        {
            ProjectHelper.ValidateNotNull(settings, "settings");

            Settings = settings;
        }
예제 #4
0
        public void CompilationTesterConstructorTest()
        {
            Settings settings = new Settings()
                                    {
                                        TestingDirectory = "Some path",
                                        Compilers = new List<Compiler>()
                                    };

            CompilationTester tester = new CompilationTester(settings);
            Assert.AreEqual(settings, tester.Settings);

            try
            {
                settings = null;
                tester = new CompilationTester(settings);
                Assert.AreEqual(false, true);
            }
            catch (Exception)
            {
                Assert.AreEqual(true,true);
            }
        }
예제 #5
0
 public static CompilationTester CreateCompilationTester(Settings settings)
 {
     var tester = new CompilationTester(settings);
     return tester;
 }