public void ExecutarContagemDeNos()
        {
            var helper = new JavascriptHelper(Path.Combine(Environment.CurrentDirectory, "Require"), true, false);
            var scriptCode = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, "Require", "underscore.js"));
            helper.ConfigurarGeracao();

            var ast = helper.GerarAst(scriptCode);

            var total = helper.ContarNos(ast);

            Assert.AreNotEqual(0, total);
            Assert.AreEqual(6549, total);
        }
        public void ContarNosCalleeTest()
        {
            const string diretorioExecucao = "Require";
            var helper = new JavascriptHelper(Path.Combine(Environment.CurrentDirectory, diretorioExecucao), false, false);
            helper.ConfigurarGeracao();

            var scriptCode = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, diretorioExecucao, "global.js"));
            var astMoment = helper.GerarAst(scriptCode);

            File.WriteAllText("astMoment.txt", helper.FormatarStringJson(astMoment));

            var nos = helper.ContarNosCallee(astMoment);

            Assert.AreEqual(592, nos.Count);
        }
        public void ExecutarCrossOver()
        {
            var sw = new Stopwatch();
            sw.Start();

            var helper = new JavascriptHelper(Path.Combine(Environment.CurrentDirectory, "Require"), true, false);
            var scriptCode = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, "Require", "global.js"));
            helper.ConfigurarGeracao();

            var ast = helper.GerarAst(scriptCode);

            int no = new Random().Next(0, helper.ContarNos(ast));

            var astNova = helper.ExecutarMutacaoExclusao(ast, no);

            sw.Stop();
            Console.WriteLine("ExecutarMutacaoExclusao {0}", sw.Elapsed.ToString(@"hh\:mm\:ss\.ffff"));

            Assert.AreNotEqual(ast, astNova);

            sw.Reset();
            sw.Start();

            string astFilho1, astFilho2;

            helper.ExecutarCrossOver(ast, astNova, 348, 456, out astFilho1, out astFilho2);

            sw.Stop();
            Console.WriteLine("ExecutarCrossOver {0}", sw.Elapsed.ToString(@"hh\:mm\:ss\.ffff"));

            var codigo = helper.GerarCodigo(astFilho1);
            var codigoNovo = helper.GerarCodigo(astFilho2);

            Assert.AreNotEqual(codigo, codigoNovo);

            File.WriteAllText("codigo.txt", codigo);
            File.WriteAllText("codigoNovo.txt", codigoNovo);
        }
        public void GerarCodigo()
        {
            const string diretorioExecucao = "Require";
            //var scriptCode = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, diretorioExecucao, "global.js")).Replace("\n\n", "").Replace("\n", "").Replace(" ", "");
            var astMoment = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, diretorioExecucao, "astUnderscore.txt"));

            var helper = new JavascriptHelper(Path.Combine(Environment.CurrentDirectory, diretorioExecucao), false, false);
            helper.ConfigurarGeracao();
            var codigo = helper.GerarCodigo(astMoment); //.Replace("\n\n", "").Replace("\n", "").Replace(" ", "");

            //Assert.AreEqual(scriptCode, codigo, "Código Inválido");
            Assert.AreEqual(codigo, helper.Codigo, "Código Inválido");
        }
        public void GerarCodigoDoMoment()
        {
            const string diretorioExecucao = "Require";
            var helper = new JavascriptHelper(Path.Combine(Environment.CurrentDirectory, diretorioExecucao), false, false);
            helper.ConfigurarGeracao();

            var scriptCode = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, diretorioExecucao, "global.js"));
            var astMoment = helper.GerarAst(scriptCode);

            File.WriteAllText("astMoment.txt", helper.FormatarStringJson(astMoment));

            var codigo = helper.GerarCodigo(astMoment);

            File.WriteAllText("codigo.txt", scriptCode);
            File.WriteAllText("codigoNovo.txt", codigo);

            Assert.AreEqual(scriptCode, helper.Codigo, "Código Inválido");
        }
        public void ExecutarTestesDounderscore()
        {
            var helper = new JavascriptHelper(Path.Combine(Environment.CurrentDirectory, "underscore"), true, true);

            helper.ExecutarTestes("underscore.js", "underscoreTests.js");

            helper.FalhasDosTestes.ForEach(Console.WriteLine);

            Assert.AreEqual(0, helper.TestesComFalha, "Não deveria ter falhado nenhum dos testes");
            Assert.Greater(helper.TestesComSucesso, 1);
        }
        public void GerarAst()
        {
            const string diretorioExecucao = "Require";
            var scriptCode = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, diretorioExecucao, "underscore.js"));
            var astUnderscore = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, diretorioExecucao, "astUnderscore.txt"));

            var helper = new JavascriptHelper(Path.Combine(Environment.CurrentDirectory, diretorioExecucao), true, false);
            helper.ConfigurarGeracao();
            var ast = helper.GerarAst(scriptCode);

            File.WriteAllText("astUnderscoreNovo.txt", helper.FormatarStringJson(ast));

            Assert.AreEqual(astUnderscore, helper.FormatarStringJson(helper.JsonAst), "AST Inválida");
            Assert.AreEqual(ast, helper.JsonAst, "AST Inválida");
        }
        public void ExecutarTestesDoMoment()
        {
            var sw = new Stopwatch();
            var helper = new JavascriptHelper(Path.Combine(Environment.CurrentDirectory, "Moment"));
            sw.Start();
            helper.ExecutarTestes("global.js", "core-test.js");
            sw.Stop();
            Console.WriteLine(sw.Elapsed.ToString(@"hh\:mm\:ss\,ffff"));
            helper.FalhasDosTestes.ForEach(Console.WriteLine);

            Assert.AreEqual(0, helper.TestesComFalha, "Não deveria ter falhado nenhum dos testes");
            Assert.AreEqual(helper.TestesComSucesso, 57982);
        }
Example #9
0
        private void CriarIndividuoOriginal(string caminhoBibliotecaJs)
        {
            var caminho = string.Format("{0}\\{1}", _diretorioFontes, caminhoBibliotecaJs);
            var caminhoDestino = string.Format("{0}\\{1}", _diretorioExecucao, caminhoBibliotecaJs);

            _original = new Individuo
            {
                Arquivo = caminho,
            };

            int contador = 0;

            while (_original.Fitness == Int64.MaxValue & contador < 50)
            {

                Console.WriteLine("      Criando e V8engine - Tentativa {0}", contador);

                try
                {

                    var codigo = File.ReadAllText(caminho);
                    var ast = _javascriptHelper.GerarAst(codigo);

                    _original.Ast = ast;

                    _original.Codigo = _javascriptHelper.GerarCodigo(_original.Ast);
                    File.WriteAllText(caminhoDestino, _original.Codigo);

                    _total = _javascriptHelper.ContarNos(_original.Ast);

                    var sw = new Stopwatch();
                    sw.Start();
                    _original.Fitness = _javascriptHelper.ExecutarTestes(caminhoDestino, _caminhoScriptTestes);
                    sw.Stop();
                    _original.TempoExecucao = sw.Elapsed.ToString(@"hh\:mm\:ss\,ffff");
                    _original.TestesComSucesso = _javascriptHelper.TestesComSucesso;

                    _fitnessMin = _original.Fitness;

                    MelhorIndividuo = _original;

                    break;
                }
                catch (Exception ex)
                {
                    //Console.WriteLine(ex);
                    //Console.WriteLine("Erro na criação do original");

                    //Dorme um minuto e tenta de novo
                    Thread.Sleep(60000);
                    Console.WriteLine(" Falhou ao criar individuo. Tentando novamente.");

                    _javascriptHelper.Dispose();
                    _javascriptHelper = new JavascriptHelper(_diretorioFontes, _usarSetTimeout, false);
                    _javascriptHelper.ConfigurarGeracao();

                }

                contador++;
            }
        }
Example #10
0
        /// <summary>
        /// Executa a Otimização.
        /// </summary>
        /// <param name="caminhoBibliotecaJs"></param>
        /// <param name="caminhoTestesJs"></param>
        /// <returns>
        /// Verdadeiro se encontrar melhoria
        /// </returns>
        public bool Otimizar(string caminhoBibliotecaJs, string caminhoTestesJs)
        {
            bool otimizou = false;

            _caminhoScriptTestes = caminhoTestesJs;
            _caminhoBiblioteca = caminhoBibliotecaJs;

            Console.WriteLine(string.Format("Iniciando Otimização do {0}", caminhoBibliotecaJs));
            Console.WriteLine(string.Format("    SetTimeout {0}", _usarSetTimeout));
            Console.WriteLine(string.Format("    Heuristica {0}", Heuristica));

            _javascriptHelper = new JavascriptHelper(_diretorioFontes, _usarSetTimeout, false);
            _javascriptHelper.ConfigurarGeracao();

            var sw = new Stopwatch();
            sw.Start();
            if(Heuristica == "GA")
                otimizou = OtimizarUsandoGa();
            else if(Heuristica == "RD")
                otimizou = OtimizarUsandoRd();
            else if (Heuristica == "HC")
                otimizou = OtimizarUsandoHc();
            else if (Heuristica == "HCF")
                otimizou = OtimizarUsandoHcPorFuncao();
            else
                throw new ApplicationException(string.Format("Heurística ainda não definida. {0}", Heuristica));

            #region Gera o CSV da rodada

            var myExport = new CsvExport();

            myExport.AddRow();
            myExport["Rodada"] = RodadaGlobalExterna;
            myExport["Individuo"] = MelhorIndividuo.Arquivo;
            myExport["Operacao"] = MelhorIndividuo.CriadoPor;
            myExport["Fitness"] = MelhorIndividuo.Fitness;
            myExport["Tempo"] = MelhorIndividuo.TempoExecucao;
            myExport["Testes"] = MelhorIndividuo.TestesComSucesso;

            myExport.ExportToFile("rodadas.csv");

            #endregion

            #region limpa o diretório de execução.

            var files = new DirectoryInfo(_diretorioExecucao).EnumerateFiles("*.js").ToList();

            files.ForEach(f => f.Delete());

            #endregion

            sw.Stop();
            Console.WriteLine("  Tempo total: {0}", sw.Elapsed.ToString(@"hh\:mm\:ss\,ffff"));

            return otimizou;
        }
Example #11
0
        public void ExecutarTestesUnderscoreMutanteComFalha()
        {
            var diretorioFontes = Path.Combine(Environment.CurrentDirectory, "Require");
            var jhelper = new JavascriptHelper(diretorioFontes, true, true);
            jhelper.ConfigurarGeracao();

            var caminhoJs = string.Format("{0}\\{1}", diretorioFontes, "underscore.js");
            var caminhoTestes = string.Format("{0}\\{1}", diretorioFontes, "underscoreTests.js");

            var codigo = File.ReadAllText(caminhoJs);
            var ast = jhelper.GerarAst(codigo);

            var fit = jhelper.ExecutarTestes(caminhoJs, caminhoTestes);
            jhelper.ConfigurarMelhorFit(fit);

            jhelper.ReiniciarEngine();

            var novaAst = jhelper.ExecutarMutacaoExclusao(ast, 1190); //continua válido mas falha nos testes [ 4 testes com falha]

            var novoCodigo = jhelper.GerarCodigo(novaAst);
            var caminhoNovoJs = string.Format("{0}\\{1}", diretorioFontes, "Novo.js");
            File.WriteAllText(caminhoNovoJs, novoCodigo);

            var novaFit = jhelper.ExecutarTestes(caminhoNovoJs, caminhoTestes);

            Assert.IsNotEmpty(novoCodigo);
            Assert.AreNotEqual(fit, novaFit);
            Assert.Greater(jhelper.TestesComFalha, 0);
        }
Example #12
0
        public void ExecutarTestesUnderscoreMutanteComSucesso()
        {
            var diretorioFontes = Path.Combine(Environment.CurrentDirectory, "Require");
            var jhelper = new JavascriptHelper(diretorioFontes, true, true);
            jhelper.ConfigurarGeracao();

            var caminhoJs = string.Format("{0}\\{1}", diretorioFontes, "underscore.js");
            var caminhoTestes = string.Format("{0}\\{1}", diretorioFontes, "underscoreTests.js");

            var codigo = File.ReadAllText(caminhoJs);
            var ast = jhelper.GerarAst(codigo);

            var fit = jhelper.ExecutarTestes(caminhoJs, caminhoTestes);
            jhelper.ConfigurarMelhorFit(fit);

            jhelper.ReiniciarEngine();

            var caminhoNovoJs = string.Format("{0}\\{1}", diretorioFontes, "UnderscoreMutanteBom.js");

            var novaFit = jhelper.ExecutarTestes(caminhoNovoJs, caminhoTestes);

            Assert.Greater(fit, novaFit);
            Assert.AreEqual(0, jhelper.TestesComFalha);

            Console.WriteLine("Antigo: {0} | Novo: {1}", fit, novaFit);
        }