public IEnumerable <IFilter> LearnJava(string fileName) { var profile = LanguageSupports.GetCoverageModeByClassName("Java"); var inPath = Path.Combine(Fixture.GetCoverageInputPath(), fileName); var codeFile = new FileInfo(inPath); var ast = profile.CodeToXml.GenerateFromFile(codeFile.FullName); var accepted = profile.AstAnalyzer.FindStatements(ast).ToList(); var rules = RuleLearner.Learn(new[] { new LearningRecord(ast, accepted) }); return(rules); }
public void LearnC(string fileName) { var profile = LanguageSupports.GetCoverageModeByClassName("C"); var inPath = Path.Combine(Fixture.GetCoverageInputPath(), fileName); var codeFile = new FileInfo(inPath); var ast = profile.CodeToXml.GenerateFromFile(codeFile.FullName); var statements = profile.AstAnalyzer.FindStatements(ast).ToList(); RuleLearner.Learn(new[] { new LearningRecord(ast, statements) }); //var statements2 = rule.Find(ast).ToList(); //Assert.That(statements2.Count, Is.EqualTo(statements.Count)); //Assert.That(statements2, Is.SubsetOf(statements)); }
private void btnInfer_Click(object sender, EventArgs e) { NormalizeAllRange2Element(); // To infer good rules var learningRecrods = FreezedFiles .Concat(Enumerable.Repeat(_activeFile, 1)) .Select(f => new LearningRecord(f.Ast, f.Range2Elements.Values)) .ToList(); var filters = RuleLearner.Learn(learningRecrods).ToList(); var newModifiableItems = new List <RuleListViewItem>(); _eventEnabled = false; foreach (var filter in filters) { var freezedRuleItem = lvFreezedRule.Items.Cast <RuleListViewItem>() .FirstOrDefault(i => i.Filter.TryUpdateProperties(filter)); if (freezedRuleItem != null) { freezedRuleItem.Update(Files); continue; } var modifiableRuleItem = lvModifiableRule.Items.Cast <RuleListViewItem>() .FirstOrDefault(i => i.Filter.TryUpdateProperties(filter)); if (modifiableRuleItem != null) { modifiableRuleItem.Update(Files); newModifiableItems.Add(modifiableRuleItem); continue; } var item = new RuleListViewItem(filter, Files); if (filter is NopFilter) { item.Checked = true; //TODO: should use "filter is NopFilter;" ? } newModifiableItems.Add(item); } lvModifiableRule.Items.Clear(); var sortedModifiableItems = newModifiableItems .OrderByDescending(i => i.ExactMatch) .ThenByDescending(i => i.Filter.LivingTime); foreach (var item in sortedModifiableItems) { lvModifiableRule.Items.Add(item); } _eventEnabled = true; lvRule_ItemChecked(null, null); }