コード例 #1
0
        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);
                }
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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");
        }
コード例 #4
0
        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]));
        }
コード例 #5
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]));
        }
コード例 #6
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));
        }
コード例 #7
0
        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));
        }