public void Eval(String start, String expect)
        {
            EncogProgramContext context = new EncogProgramContext();

            StandardExtensions.CreateNumericOperators(context);
            PrgPopulation   pop   = new PrgPopulation(context, 1);
            ICalculateScore score = new ZeroEvalScoreFunction();

            TrainEA genetic = new TrainEA(pop, score);

            genetic.ValidationMode = true;
            genetic.CODEC          = new PrgCODEC();
            genetic.AddOperation(0.95, new SubtreeCrossover());
            genetic.AddOperation(0.05, new SubtreeMutation(context, 4));
            genetic.AddScoreAdjuster(new ComplexityAdjustedScore());
            genetic.Rules.AddRewriteRule(new RewriteConstants());
            genetic.Rules.AddRewriteRule(new RewriteAlgebraic());

            EncogProgram expression = new EncogProgram(context);

            expression.CompileExpression(start);
            RenderCommonExpression render = new RenderCommonExpression();

            genetic.Rules.Rewrite(expression);
            Assert.AreEqual(expect, render.Render(expression));
        }
        /// <summary>
        ///     Construct the generator.
        /// </summary>
        /// <param name="theContext">The context that is to be used for generation.</param>
        /// <param name="theMaxDepth">The maximum depth to generate to.</param>
        protected AbstractPrgGenerator(EncogProgramContext theContext,
                                       int theMaxDepth)
        {
            if (theContext.Functions.Count == 0)
            {
                throw new EncogError("There are no opcodes defined");
            }

            _context            = theContext;
            _maxDepth           = theMaxDepth;
            _hasEnum            = _context.HasEnum;
            Score               = new ZeroEvalScoreFunction();
            MinConst            = -10;
            MaxConst            = 10;
            RandomFactory       = EncogFramework.Instance.RandomFactory.FactorFactory();
            MaxGenerationErrors = 500;
        }