public void TestSymbolicRegex_Reverse() { CharSetSolver css = new CharSetSolver(); //----- var R1 = new Regex(@"abc"); var sr1 = css.RegexConverter.ConvertToSymbolicRegex(R1, true); var rev1 = sr1.Reverse(); var matcher1 = new SymbolicRegex <BDD>(rev1, css, rev1.ComputeMinterms()); Assert.IsTrue(matcher1.IsMatch("cba")); //----- var R2 = new Regex(@"^(foo|ab+d)+$"); var sr2 = css.RegexConverter.ConvertToSymbolicRegex(R2, true); var rev2 = sr2.Reverse(); var matcher2 = new SymbolicRegex <BDD>(rev2, css, rev2.ComputeMinterms()); Assert.IsTrue(sr2.Equals(rev2.Reverse())); Assert.IsTrue(matcher2.IsMatch("oof")); Assert.IsTrue(matcher2.IsMatch("oofdbbaoofoofdbbadba")); var sampler = new SymbolicRegexSampler <BDD>(css.RegexConverter.srBuilder, rev2, 10); var samples = sampler.GetPositiveDataset(100); foreach (var sample in samples) { Assert.IsTrue(matcher2.IsMatch(sample)); } }
public void TestSymbolicRegexSampler_KleeneStar() { CharSetSolver solver = new CharSetSolver(BitWidth.BV7); string regex = @"^(a(b*)c)*$"; var sr = solver.RegexConverter.ConvertToSymbolicRegex(regex); var sampler = new SymbolicRegexSampler <BDD>(solver.RegexConverter.srBuilder, sr, 15); Assert.IsTrue(sampler.GetPositiveDataset(1000).Count > 100, "Incomplete Dataset"); }
public void TestSymbolicRegexSampler_Anchors() { CharSetSolver solver = new CharSetSolver(BitWidth.BV7); string regex = @"^bcd$"; var sr = solver.RegexConverter.ConvertToSymbolicRegex(regex); var sampler = new SymbolicRegexSampler <BDD>(solver.RegexConverter.srBuilder, sr, 15); Assert.IsTrue(sampler.GetPositiveDataset(100).Count == 1, "Too large Dataset"); }
public void TestSymbolicRegexSampler_Completeness() { CharSetSolver solver = new CharSetSolver(BitWidth.BV7); string regex = @"^(a|b)cccc(d|e)kkkk(f|l)$"; var sr = solver.RegexConverter.ConvertToSymbolicRegex(regex); var sampler = new SymbolicRegexSampler <BDD>(solver.RegexConverter.srBuilder, sr, 10); Assert.IsTrue(sampler.GetPositiveDataset(1000).Count == 8, "Incomplete Dataset"); }