public virtual FitnessResult Evaluate(Individual individual, Problem problem) { TestSuite testSuite = problem.TestSuite; CompilationUnitSyntax compilationUnit = CreateCompilationUnit(individual, testSuite.TestCases.First(), problem.CodeTemplate); Logger.WriteLine(4, "Run test method:"); Logger.WriteLine(4, compilationUnit.NormalizeWhitespace().ToString()); AppDomain appDomain = AppDomain.CreateDomain("AppDomain"); var testable = GetTestableObject(appDomain, compilationUnit); PrepareTestRuns(individual, testSuite); int testCaseCount = testSuite.TestCases.Count; var results = new object[testSuite.TestCases.Count]; for (int i = 0; i < testCaseCount; i++) { TestCase test = testSuite.TestCases[i]; try { results[i] = RunTestCase(testable, test); } catch (Exception /*exception*/) { //Logger.WriteLine(4, "Exception: " + ex.GetType().Name); // Code does not run properly, e.g. DivideByZeroException // Count as negative run } OnTestRunFinished(individual, test, results[i]); } AppDomain.Unload(appDomain); FitnessResult fitness = FitnessCalculator.CalculateFitness(individual, testSuite, results); OnIndividualEvaluationFinished(individual, fitness, results); return(fitness); }
protected virtual void OnIndividualEvaluationFinished(Individual individual, FitnessResult fitness, object [] results) { }