コード例 #1
0
        public void TestStateDistinguisher_EnumerateAllDistinguishingSequences()
        {
            var solver = ContextFreeGrammar.GetContext();
            var regex  = "^([0-9]{4,}|[3-9][0-9]{2}|2[5-9][0-9])$";

            string[] regexes           = File.ReadAllLines(regexesFile);
            var      nfa               = solver.Convert(regex).RemoveEpsilons();
            var      dfa               = nfa.Determinize();//.MakeTotal();
            var      mfa               = dfa.Minimize();
            var      dist              = new StateDistinguisher <BDD>(dfa, x => (char)x.GetMin(), false);
            int      minimalStateCount = mfa.StateCount;
            var      distinguishers    = new Dictionary <Tuple <int, int>, List <ConsList <BDD> > >();

            foreach (int p in mfa.GetStates())
            {
                foreach (int q in mfa.GetStates())
                {
                    if (p != q)
                    {
                        var pq = (p < q ? new Tuple <int, int>(p, q) : new Tuple <int, int>(q, p));
                        if (!distinguishers.ContainsKey(pq))
                        {
                            distinguishers[pq] = new List <ConsList <BDD> >(dist.EnumerateAllDistinguishingSequences(p, q));
                        }
                    }
                }
            }
            Assert.AreEqual <int>((mfa.StateCount * (mfa.StateCount - 1)) / 2, distinguishers.Count);
        }
コード例 #2
0
        public void TestStateDistinguisher_BugRepo2()
        {
            var solver  = new CharSetSolver();
            var regex   = @"(^(?:\w\:)?(?:/|\\\\){1}[^/|\\]*(?:/|\\){1})";
            var A       = solver.Convert(regex).Determinize();
            var states  = new List <int>(A.GetStates());
            var dist    = new StateDistinguisher <BDD>(A);
            var distmap = new List <Tuple <Tuple <int, int>, List <ConsList <BDD> > > >(dist.EnumerateAllDistinguishingSequences());
            var AMin    = A.Minimize();

            ValidateDistinguishers(A, AMin, dist, 0, regex);
        }