Пример #1
0
        public void TestPasswAutGenPerf()
        {
            var rex = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV7); //rex for ascii range

            for (int passwlength = 10; passwlength <= 500; passwlength += 10)
            {
                var r1 = @"^[\x21-\x7E]{" + passwlength + "}$";
                var r2 = "[A-Z]";
                var r3 = "[a-z]";
                var r4 = "[0-9]";
                var r5 = @"[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]";

                var time2 = System.Environment.TickCount;
                var a1    = rex.Minimize(rex.CreateFromRegexes(r1));
                var a2    = rex.Minimize(rex.CreateFromRegexes(r2, r3, r4, r5));
                var sfa2  = rex.Intersect(a1, a2); //no need to minimize
                time2 = System.Environment.TickCount - time2;

                Console.WriteLine("passwlength:{0} sfasize:{1} time:{2}ms", passwlength, sfa2.StateCount, time2);
                var s = rex.GenerateMemberUniformly(sfa2);
                Assert.IsTrue(Regex.IsMatch(s, r1));
                Assert.IsTrue(Regex.IsMatch(s, r2));
                Assert.IsTrue(Regex.IsMatch(s, r3));
                Assert.IsTrue(Regex.IsMatch(s, r4));
                Assert.IsTrue(Regex.IsMatch(s, r5));
            }
        }
Пример #2
0
        public void TestMinimization()
        {
            var rex = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV7); //rex for ascii range

            int passwlength = 10;

            var r1 = @"^[\x21-\x7E]{" + passwlength + "}$";
            var r2 = "[A-Z].*[A-Z]";
            var r3 = "[A-Z][A-Z][A-Z]";
            var r4 = "[0-9].*[0-9]";
            var r5 = @"[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]";

            var time = System.Environment.TickCount;
            var a1   = rex.Minimize(rex.CreateFromRegexes(r1));
            var a2   = rex.Minimize(rex.CreateFromRegexes(r2));
            var a3   = rex.Minimize(rex.CreateFromRegexes(r3));
            var a4   = rex.Minimize(rex.CreateFromRegexes(r4));
            var a5   = rex.Minimize(rex.CreateFromRegexes(r5));
            var sfa2 = rex.Intersect(a1, a2, a3, a4, a5);

            time = System.Environment.TickCount - time;

            string dag  = rex.SerializeDAG(sfa2);
            var    sfa3 = rex.DeserializeDAG(dag);
            //rex.Solver.ShowGraph(sfa3, "sfa");

            var timeToMin = System.Environment.TickCount;
            var sfa_min   = sfa2.MinimizeMoore();

            timeToMin = System.Environment.TickCount - timeToMin;


            var timeToMinB = System.Environment.TickCount;
            var sfa_minB   = sfa3.MinimizeHopcroft();

            timeToMinB = System.Environment.TickCount - timeToMinB;


            System.IO.File.WriteAllText("dag.txt", dag);

            //Assert.IsTrue(rex.AreEquivalent(sfa3, sfa_min));

            //rex.Solver.ShowGraph(sfa_min, "sfa_min");
            //rex.Solver.ShowGraph(sfa_minB, "sfa_minB");

            Assert.IsTrue(rex.AreEquivalent(sfa_minB, sfa_min));

            Assert.AreEqual(sfa_min.StateCount, sfa_minB.StateCount);

            Assert.IsTrue(rex.AreEquivalent(sfa3, sfa_minB));

            //rex.Solver.ShowGraph(sfa_min,"TestMinimization");

            Console.WriteLine("time:{0} size:{1} | timeToMin:{2} sizeMin:{3} | timeToMin:{4} sizeMin:{5}", time, sfa2.StateCount, timeToMin, sfa_min.StateCount, timeToMinB, sfa_minB.StateCount);
        }
Пример #3
0
        public void TestPasswSample()
        {
            for (int passwl = 4; passwl <= 10; passwl += 5)
            {
                int time = System.Environment.TickCount;

                var rex = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV16);

                var r1 = @"^[\x21-\x7E]{" + passwl + "}$";
                var r2 = @"[a-zA-Z].*[a-zA-Z]";
                var r4 = @"\d";
                var r5 = @"\W";

                var sfa1 = rex.CreateFromRegexes(r1);
                var sfa2 = rex.CreateFromRegexes(r2);
                //var sfa3 = rex.CreateFromRegexes(r3);
                var sfa4 = rex.CreateFromRegexes(r4);
                var sfa5 = rex.CreateFromRegexes(r5);
                var sfa  = rex.Intersect(sfa1, sfa2, sfa4, sfa5).Determinize();

                //rex.Solver.ShowGraph(sfa, "sfa");

                time = System.Environment.TickCount - time;

                int timeH = System.Environment.TickCount;
                var sfaH  = sfa.MinimizeHopcroft();
                timeH = System.Environment.TickCount - timeH;

                //rex.Solver.ShowGraph(sfaH, "sfaH");

                int timeM = System.Environment.TickCount;
                var sfaM  = sfa.MinimizeMoore();
                timeM = System.Environment.TickCount - timeM;

                Console.WriteLine("length:{0}  creation time:{1} size:{2}  min(H):{3} min(M):{4} minsize:{5}", passwl, time, sfa.StateCount, timeH, timeM, sfaH.StateCount);
            }
        }
Пример #4
0
        public void TestOrigPasswRegex()
        {
            for (int passwl = 5; passwl <= 200; passwl += 10)
            {
                int time = System.Environment.TickCount;

                var rex = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV7);

                var r1 = @"^[\x21-\x7E]{" + passwl + "}$";
                var r2 = @"[A-Z].*[A-Z]";
                var r3 = "^.+[a-z].*[a-z]";
                var r4 = "^(...[@#$%&]|....[@#$%&]|.....[@#$%&])";
                var r5 = @"^[\D]";
                var r6 = "^[^AbkG]*$";

                var sfa1 = rex.Minimize(rex.CreateFromRegexes(r1));
                var sfa2 = rex.Minimize(rex.CreateFromRegexes(r2));
                var sfa3 = rex.Minimize(rex.CreateFromRegexes(r3));
                var sfa4 = rex.Minimize(rex.CreateFromRegexes(r4));
                var sfa5 = rex.Minimize(rex.CreateFromRegexes(r5));
                var sfa6 = rex.Minimize(rex.CreateFromRegexes(r6));
                var sfa  = rex.Intersect(sfa1, sfa2, sfa3, sfa4, sfa5, sfa6);

                var s = rex.GenerateMemberUniformly(sfa);
                Assert.IsTrue(Regex.IsMatch(s, r1));
                Assert.IsTrue(Regex.IsMatch(s, r2));
                Assert.IsTrue(Regex.IsMatch(s, r3));
                Assert.IsTrue(Regex.IsMatch(s, r4));
                Assert.IsTrue(Regex.IsMatch(s, r5));
                Assert.IsTrue(Regex.IsMatch(s, r6));

                time = System.Environment.TickCount - time;

                Console.WriteLine("length:{0}  time:{1}  size:{2}", passwl, time, sfa.StateCount);
            }
        }
Пример #5
0
        public void TestPasswSample()
        {
            for (int passwl = 4; passwl <= 10; passwl += 5)
            {
                int time = System.Environment.TickCount;

                var rex = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV16);

                var r1 = @"^[\x21-\x7E]{" + passwl + "}$";
                var r2 = @"[a-zA-Z].*[a-zA-Z]";
                var r4 = @"\d";
                var r5 = @"\W";

                var sfa1 = rex.CreateFromRegexes(r1);
                var sfa2 = rex.CreateFromRegexes(r2);
                //var sfa3 = rex.CreateFromRegexes(r3);
                var sfa4 = rex.CreateFromRegexes(r4);
                var sfa5 = rex.CreateFromRegexes(r5);
                var sfa = rex.Intersect(sfa1, sfa2, sfa4, sfa5).Determinize();

                //rex.Solver.ShowGraph(sfa, "sfa");

                time = System.Environment.TickCount - time;

                int timeH = System.Environment.TickCount;
                var sfaH = sfa.MinimizeHopcroft();
                timeH = System.Environment.TickCount - timeH;

                //rex.Solver.ShowGraph(sfaH, "sfaH");

                int timeM = System.Environment.TickCount;
                var sfaM = sfa.MinimizeMoore();
                timeM = System.Environment.TickCount - timeM;

                Console.WriteLine("length:{0}  creation time:{1} size:{2}  min(H):{3} min(M):{4} minsize:{5}", passwl, time, sfa.StateCount, timeH, timeM, sfaH.StateCount );

            }
        }
Пример #6
0
        public void TestPasswAutGenPerf()
        {
            var rex = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV7); //rex for ascii range

            for (int passwlength = 10; passwlength <= 500; passwlength += 10)
            {

                var r1 = @"^[\x21-\x7E]{" + passwlength + "}$";
                var r2 = "[A-Z]";
                var r3 = "[a-z]";
                var r4 = "[0-9]";
                var r5 = @"[\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\x7E]";

                var time2 = System.Environment.TickCount;
                var a1 = rex.Minimize(rex.CreateFromRegexes(r1));
                var a2 = rex.Minimize(rex.CreateFromRegexes(r2,r3,r4,r5));
                var sfa2 = rex.Intersect(a1, a2); //no need to minimize
                time2 = System.Environment.TickCount - time2;

                Console.WriteLine("passwlength:{0} sfasize:{1} time:{2}ms", passwlength, sfa2.StateCount, time2);
                var s = rex.GenerateMemberUniformly(sfa2);
                Assert.IsTrue(Regex.IsMatch(s, r1));
                Assert.IsTrue(Regex.IsMatch(s, r2));
                Assert.IsTrue(Regex.IsMatch(s, r3));
                Assert.IsTrue(Regex.IsMatch(s, r4));
                Assert.IsTrue(Regex.IsMatch(s, r5));
            }
        }
Пример #7
0
        public void TestOrigPasswRegex()
        {
            for (int passwl = 5; passwl <= 200; passwl += 10)
            {
                int time = System.Environment.TickCount;

                var rex = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV7);

                var r1 = @"^[\x21-\x7E]{" + passwl + "}$";
                var r2 = @"[A-Z].*[A-Z]";
                var r3 = "^.+[a-z].*[a-z]";
                var r4 = "^(...[@#$%&]|....[@#$%&]|.....[@#$%&])";
                var r5 = @"^[\D]";
                var r6 = "^[^AbkG]*$";

                var sfa1 = rex.Minimize(rex.CreateFromRegexes(r1));
                var sfa2 = rex.Minimize(rex.CreateFromRegexes(r2));
                var sfa3 = rex.Minimize(rex.CreateFromRegexes(r3));
                var sfa4 = rex.Minimize(rex.CreateFromRegexes(r4));
                var sfa5 = rex.Minimize(rex.CreateFromRegexes(r5));
                var sfa6 = rex.Minimize(rex.CreateFromRegexes(r6));
                var sfa = rex.Intersect(sfa1, sfa2, sfa3, sfa4, sfa5, sfa6);

                var s = rex.GenerateMemberUniformly(sfa);
                Assert.IsTrue(Regex.IsMatch(s, r1));
                Assert.IsTrue(Regex.IsMatch(s, r2));
                Assert.IsTrue(Regex.IsMatch(s, r3));
                Assert.IsTrue(Regex.IsMatch(s, r4));
                Assert.IsTrue(Regex.IsMatch(s, r5));
                Assert.IsTrue(Regex.IsMatch(s, r6));

                time = System.Environment.TickCount - time;

                Console.WriteLine("length:{0}  time:{1}  size:{2}", passwl, time, sfa.StateCount);
            }
        }