private byte GetFinalScore(CodeTestingResult testingResult, Language codeLanguage) { int finalScore = 0; LanguagePenalty languagePenalty = _codeQualityRaterConfiguration.CodePenalties .FirstOrDefault(penalty => penalty.Language == codeLanguage); int warningsCount = testingResult.CodeAnalysisResult.AnalysisResults .Count(result => result.Level == Level.Warning); byte warningPenalty = languagePenalty?.WarningPenalty ?? 0; finalScore -= warningsCount * warningPenalty; int completedTestsPercentage = GetCompletedTestsPercentage(testingResult.CodeExecutionResult); finalScore += completedTestsPercentage; var minimumSuccessfulExecutionScore = _codeQualityRaterConfiguration.MinimumSuccessfulExecutionScore; if (testingResult.CodeExecutionResult.WasSuccessful && finalScore < minimumSuccessfulExecutionScore) { return(minimumSuccessfulExecutionScore); } return(finalScore > 0 ? (byte)finalScore : default);
public async Task <CodeTestingResult> TestCode(TestingCode code) { var result = new CodeTestingResult { CodeAnalysisResult = await _codeAnalysisApi.AnalyzeCodeAsync(code), Score = (byte)Random.Next(1, 100 + 1) }; if (result.CodeAnalysisResult.IsSuccessful) { result.CodeExecutionResult = await _codeExecutionApi.ExecuteCodeAsync(code); } return(result); }
public async Task <CodeTestingResult> GetCodeQuality(TestingCode code) { var codeAnalyzer = _codeAnalyzerFactory.GetCodeAnalyzer(code); var codeAnalysisResult = await codeAnalyzer.Analyse(code); var codeTestingResult = new CodeTestingResult { CodeAnalysisResult = codeAnalysisResult }; if (!codeAnalysisResult.IsSuccessful) { return(codeTestingResult); } var executableCode = _executableCodeFactory.GetExecutableCode(code); codeTestingResult.CodeExecutionResult = await _codeExecutor.ExecuteAsync(executableCode); codeTestingResult.Score = GetFinalScore(codeTestingResult, code.Language); return(codeTestingResult); }