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); }
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++; } }
/// <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; }
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); }
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); }