void TestSerialization_comprehensive_(RegexOptions options) { var regexesFile = "../../../../Automata.Tests/Samples/matcher_test_set.txt"; var regexes = Array.ConvertAll(File.ReadAllLines(regexesFile), x => new Regex(x, options)); int k = regexes.Length; for (int i = 0; i < k; i++) { var regex = regexes[i]; RegexMatcher matcher; string reasonwhyfailed; if (regex.TryCompile(out matcher, out reasonwhyfailed)) { matcher.Serialize("tmp.bin"); var matcher_ = RegexMatcher.Deserialize("tmp.bin"); var input = matcher.GenerateRandomMatch(); var matches = matcher.Matches(input); var matches_ = matcher_.Matches(input); Assert.IsTrue(matches_.Length == matches.Length); Assert.AreEqual(matches[0], matches_[0]); } else { Assert.Fail("Regex compilation failed: " + reasonwhyfailed); } } }
RegexMatcher DeserializeAndPrintStats(string info) { var t = System.Environment.TickCount; var rm = RegexMatcher.Deserialize("test.soap", new SoapFormatter()); t = System.Environment.TickCount - t; Console.WriteLine("{1} deserializaton time={0}ms", t, info); return(rm); }
public void TestSRM() { var regex = new Regex(@"a[^ab]+b"); var srm = (SymbolicRegexUInt64)regex.Compile(); var matches = srm.Matches("xaTAG1bxaTAG2bc"); Assert.IsTrue(matches.Length == 2); Assert.IsTrue(matches[0].Item1 == 1); Assert.IsTrue(matches[0].Item2 == 6); Assert.IsTrue(matches[1].Item1 == 8); Assert.IsTrue(matches[1].Item2 == 6); var s = srm.GenerateRandomMatch(); //srm.Pattern.ShowGraph(0,"tag",true); srm.Serialize("tag.bin"); var srm2 = RegexMatcher.Deserialize("tag.bin"); var matches2 = srm2.Matches("a<tag1>b<tag2>c"); }
public void TestSerialization_MatchIncorrectSurrogatePair() { var regex1 = new System.Text.RegularExpressions.Regex(@"[\uDC00-\uDFFF][\uD800-\uDBFF]" , System.Text.RegularExpressions.RegexOptions.IgnoreCase ); var matcher1 = regex1.Compile(); matcher1.Serialize("badsurrogatepair.bin"); var matcher2 = RegexMatcher.Deserialize("badsurrogatepair.bin"); string input = "_\uDD03\uD809_"; var res1 = matcher1.Matches(input); var res2 = matcher2.Matches(input); Assert.IsTrue(res1[0].Item1 == 1 && res1[0].Item2 == 2); Assert.AreEqual(res1.Length, res2.Length); Assert.IsTrue(res1[0].Equals(res2[0])); }
public void TestSerialization_IgnoreCase_BugFix() { var regex1 = new System.Text.RegularExpressions.Regex(@"[aA][bB][cC]?[dD]" , System.Text.RegularExpressions.RegexOptions.IgnoreCase ); var matcher1 = regex1.Compile(); matcher1.Serialize("test.bin"); var matcher2 = RegexMatcher.Deserialize("test.bin"); string input = @"xabdx"; var res1 = matcher1.Matches(input); var res2 = matcher2.Matches(input); Assert.IsTrue(res1[0].Item1 == 1 && res1[0].Item2 == 3); Assert.AreEqual(res1.Length, res2.Length); Assert.IsTrue(res1[0].Equals(res2[0])); }
public void TestSRM_singlePass() { var regex = new Regex(@"abcbc1|cbc2"); var srm = (SymbolicRegexUInt64)regex.Compile(); var matches = srm.Matches("xxxabcbc1yyyccbc2xxx"); Assert.IsTrue(matches.Length == 2); Assert.IsTrue(matches[0].Item1 == 3); Assert.IsTrue(matches[0].Item2 == 6); Assert.IsTrue(matches[1].Item1 == 13); Assert.IsTrue(matches[1].Item2 == 4); var s = srm.GenerateRandomMatch(); //srm.Pattern.ShowGraph(0,"abcbc",true); srm.Serialize("tag.bin"); var srm2 = RegexMatcher.Deserialize("tag.bin"); var matches2 = srm2.Matches("xxxabcbc1yyyccbc2xxx"); Assert.AreEqual(new Sequence <Tuple <int, int> >(matches), new Sequence <Tuple <int, int> >(matches2)); }
public void TestSerializeSimplified() { var regex = new Regex(@"\w\d+"); var regex_simpl = new Regex(@"[BA]A+"); var m1 = regex.Compile() as SymbolicRegexUInt64; var s1 = new FileStream("test.soap", FileMode.Create); m1.SerializeSimplified(s1, new SoapFormatter()); s1.Close(); var m2 = RegexMatcher.Deserialize("test.soap", new SoapFormatter()); var input = "zzzBBBBAAAAzzzz"; //first match var matches = m2.Matches(input); Assert.IsTrue(matches.Length == 1); var expected = regex_simpl.Matches(input); Assert.IsTrue(expected.Count == 1); Assert.IsTrue(expected[0].Value == input.Substring(matches[0].Item1, matches[0].Item2)); }