コード例 #1
0
        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);
        }
コード例 #2
0
 protected virtual void OnIndividualEvaluationFinished(Individual individual, FitnessResult fitness, object [] results)
 {
 }