Skip to content

Commit

Permalink
refactor, Move the logic that runs the "symflower fix" into a helper,…
Browse files Browse the repository at this point in the history
… so it can be reused in other tasks

Part of #201
  • Loading branch information
ruiAzevedo19 committed Jul 12, 2024
1 parent 8b6d0fc commit 3d04b47
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 24 deletions.
28 changes: 28 additions & 0 deletions evaluate/task/symflower-fix.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@ import (
"time"

pkgerrors "github.com/pkg/errors"
"github.com/symflower/eval-dev-quality/evaluate/metrics"
"github.com/symflower/eval-dev-quality/language"
"github.com/symflower/eval-dev-quality/log"
evaltask "github.com/symflower/eval-dev-quality/task"
"github.com/symflower/eval-dev-quality/tools"
"github.com/symflower/eval-dev-quality/util"
)
Expand All @@ -29,3 +31,29 @@ func symflowerFix(logger *log.Logger, repositoryPath string, language language.L

return uint64(time.Since(start).Milliseconds()), nil
}

// ExecuteWithSymflowerFix runs the "symflower fix" command and calculates the new assessments.
func ExecuteWithSymflowerFix(ctx evaltask.Context, logger *log.Logger, packagePath string) (assessments metrics.Assessments, problems []error, err error) {
// Run "symflower fix" if the model response fails to execute.
logger.Print("model response alone failed execution, attempting to fix with \"symflower fix \"")

duration, err := symflowerFix(logger, packagePath, ctx.Language)
if err != nil {
return nil, problems, pkgerrors.WithStack(err)
}

coverage, ps, err := ctx.Language.Execute(logger, packagePath)
problems = append(problems, ps...)
if err != nil {
return nil, problems, pkgerrors.WithMessage(err, "symflower fix")
}
logger.Printf("with symflower repair: Executes tests with %d coverage objects", coverage)

// Symflower was able to fix a failure so now update the assessment with the improved results.
assessments = metrics.NewAssessments()
assessments[metrics.AssessmentKeyProcessingTime] = duration
assessments.Award(metrics.AssessmentKeyFilesExecuted)
assessments.AwardPoints(metrics.AssessmentKeyCoverage, coverage)

return assessments, problems, nil
}
29 changes: 5 additions & 24 deletions evaluate/task/task-write-test.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,39 +91,20 @@ func (t *TaskWriteTests) Run(ctx evaltask.Context) (repositoryAssessment map[eva
continue
}

// Run "symflower fix" if the model response fails to execute.
// Run "symflower fix" if the model response fails to execute.
if ctx.Language.ID() == "golang" { // Currently we only support Go for "symflower fix".
taskLogger.Print("model response alone failed execution, attempting to fix with \"symflower fix \"")

duration, err := symflowerFix(taskLogger.Logger, dataPath, ctx.Language)
if err != nil {
problems = append(problems, err)

modelAssessment.Add(modelAssessmentForFile)
withSymflowerAssessment.Add(withSymflowerAssessmentForFile)

continue
}

coverage, ps, err := ctx.Language.Execute(taskLogger.Logger, dataPath)
withSymflowerFixAssessments, ps, err := ExecuteWithSymflowerFix(ctx, taskLogger.Logger, ctx.Repository.DataPath())
problems = append(problems, ps...)
if err != nil {
problems = append(problems, pkgerrors.WithMessage(err, "symflower fix"))
problems = append(problems, err)

modelAssessment.Add(modelAssessmentForFile)
withSymflowerAssessment.Add(withSymflowerAssessmentForFile)

continue
} else {
withSymflowerAssessmentForFile = metrics.CombineWithSymflowerFixAssessments(modelAssessmentForFile, withSymflowerFixAssessments)
}
taskLogger.Printf("with symflower repair: Executes tests with %d coverage objects", coverage)

// Symflower was able to fix a failure so now update the assessment with the improved results.
withSymflowerAssessmentForFile = metrics.NewAssessments()
withSymflowerAssessmentForFile[metrics.AssessmentKeyProcessingTime] = duration
withSymflowerAssessmentForFile.Award(metrics.AssessmentKeyFilesExecuted)
withSymflowerAssessmentForFile.AwardPoints(metrics.AssessmentKeyCoverage, coverage)

withSymflowerAssessmentForFile = metrics.CombineWithSymflowerFixAssessments(modelAssessmentForFile, withSymflowerAssessmentForFile)
}
} else {
taskLogger.Printf("Executes tests with %d coverage objects", coverage)
Expand Down

0 comments on commit 3d04b47

Please sign in to comment.