public void CheckSolution() { List <double> allCpuTime = new List <double>(); List <double> allMemUsage = new List <double>(); Tasks task = _tournamentManager.Tasks .Where(x => x.Id == taskId) .FirstOrDefault(); List <TasksTestData> testData = _tournamentManager.TasksTestData .Where(x => x.TaskId == taskId) .ToList(); //Przygotowanie program managera to działania _programManager.Program = program; _programManager.Language = compilerType; _programManager.InputDataType = (InputDataType)task.InputDataTypeId; _programManager.MaxTime = task.MaxExecuteTime; _programManager.MaxMemory = task.MaxExecuteMemory; _programManager.JavaMainClass = JavaMainClass; //Działanie program managera try { //Kompilacja _programManager.Compile(); if (_programManager.HasError) //w przypadku erroru - koniec działania { _userManager.AddSolution(task.Id, task.TournamentId, task.PhaseId, userId, (int)compilerType, 0, program, task.MaxExecuteMemory, task.MaxExecuteTime, _programManager.ErrorInfo); return; } foreach (var item in testData) // uruchamiamy i testujemy program { _programManager.InputData = item.InputData; _programManager.Execute(); if (!_programManager.HasError) { string output = BlankChars.Remove(_programManager.OutputData); if (output == item.OutputData) { allCpuTime.Add(_programManager.ExecutedTime * 0.001); //zamieniamy ms na s allMemUsage.Add(_programManager.MemoryUsed); } else { _userManager.AddSolution(task.Id, task.TournamentId, task.PhaseId, userId, (int)compilerType, 0, program, task.MaxExecuteMemory, task.MaxExecuteTime, _programManager.ErrorInfo); return; } } else { _userManager.AddSolution(task.Id, task.TournamentId, task.PhaseId, userId, (int)compilerType, 0, program, task.MaxExecuteMemory, task.MaxExecuteTime, _programManager.ErrorInfo); return; } } double avgCpuTime = 0.0; double avgMemUsage = 0.0; allCpuTime.ForEach(x => avgCpuTime += x); allMemUsage.ForEach(x => avgMemUsage += x); avgCpuTime = avgCpuTime / allCpuTime.Count; avgMemUsage = avgMemUsage / allMemUsage.Count; _userManager.AddSolution(task.Id, task.TournamentId, task.PhaseId, userId, (int)compilerType, 5, program, avgMemUsage, avgCpuTime, _programManager.ErrorInfo); } catch { _userManager.AddSolution(task.Id, task.TournamentId, task.PhaseId, userId, (int)compilerType, 0, program, task.MaxExecuteMemory, task.MaxExecuteTime, _programManager.ErrorInfo); } this.Dispose(); }