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

            var rex     = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV16);
            var sfa     = rex.CreateFromRegexes(r1, r2, r3, r4, r5, r6);
            var sfa_min = rex.Minimize(sfa);

            string dag      = rex.SerializeDAG(sfa_min);
            var    sfa_min1 = rex.DeserializeDAG(dag);

            bool equiv = rex.AreEquivalent(sfa_min, sfa_min1);

            Assert.IsTrue(equiv);

            string dag2 = rex.SerializeDAG(sfa_min1);

            Assert.AreEqual <string>(dag, dag2);

            Console.WriteLine(rex.GenerateMemberUniformly(sfa_min1));
            Console.WriteLine(rex.GenerateMemberUniformly(sfa_min1));
            Console.WriteLine(rex.GenerateMemberUniformly(sfa_min1));

            //rex.Solver.ShowGraph(sfa_min1, "test");
        }
Esempio n. 2
0
        public void TestUniformMemberGeneration2()
        {
            var r1 = @"^(\d{3}|12b)$"; //three digits or 12bc
            var r2 = "^[0-2a-z]*$";    //only digits 0 1 2 or lower case letters are allowed

            var rex     = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV7);
            var sfa     = rex.CreateFromRegexes(RegexOptions.None, r1, r2);
            var sfa_min = sfa.Determinize().MinimizeHopcroft();

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

            var frequency = new Dictionary <string, int>();

            for (int i = 0; i < 100000; i++)
            {
                var sample = rex.GenerateMemberUniformly(sfa_min);
                if (frequency.ContainsKey(sample))
                {
                    frequency[sample] += 1;
                }
                else
                {
                    frequency[sample] = 1;
                }
            }

            foreach (var kv in frequency)
            {
                Assert.IsTrue(kv.Value > 3000);
            }
        }
Esempio n. 3
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));
            }
        }
Esempio n. 4
0
        public void TestPasswordRegex()
        {
            var r1 = @"^[\x21-\x7E]{8}$";
            var r2 = @"[A-Z].*[A-Z]";
            var r3 = "^.+[a-z].*[a-z]";
            var r4 = "^(...[@#$%&]|....[@#$%&]|.....[@#$%&])";
            var r5 = @"^[\D]";
            var r6 = "^[^AbkG]*$";

            var rex     = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV7);
            var sfa     = rex.CreateFromRegexes(r1, r2, r3, r4, r5, r6);
            var sfa_min = rex.Minimize(sfa);

            var time = System.Environment.TickCount;

            List <string> samples = new List <string>();

            for (int i = 0; i < 1000; i++)
            {
                samples.Add(rex.GenerateMemberUniformly(sfa_min));
            }

            time = System.Environment.TickCount - time;
            Console.WriteLine("nr of SFA states: {1}, time to generate 1000 samples: {0}ms", time, sfa_min.StateCount);
        }
Esempio n. 5
0
        public void TestDAGserializationSimple2()
        {
            var r1 = @"^([\d]{1,3})$"; //sequences of 1 up to 3 digits

            var rex          = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV7);
            var sfa          = rex.CreateFromRegexes(r1);
            var sfa_min_orig = rex.Minimize(sfa);

            var sfa_min = rex.DeserializeDAG(rex.SerializeDAG(sfa_min_orig));

            // rex.Solver.ShowDAG(sfa_min, "test");

            var frequency = new Dictionary <string, int>();

            for (int i = 0; i < 10; i++)
            {
                frequency[i.ToString()] = 0;
            }

            for (int i = 0; i < 10; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    frequency[i.ToString() + j.ToString()] = 0;
                }
            }

            for (int i = 0; i < 10; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    for (int k = 0; k < 10; k++)
                    {
                        frequency[i.ToString() + j.ToString() + k.ToString()] = 0;
                    }
                }
            }

            int time = System.Environment.TickCount;

            for (int i = 0; i < 1000000; i++)
            {
                var sample = rex.GenerateMemberUniformly(sfa_min);
                frequency[sample] += 1;
            }
            time = System.Environment.TickCount - time;

            int total    = 10 + 100 + 1000;
            int avg      = 1000000 / total;
            int avg_low  = (avg * 80) / 100;
            int avg_high = (avg * 120) / 100;

            foreach (var kv in frequency)
            {
                Assert.IsTrue(kv.Value > avg_low);
                Assert.IsTrue(kv.Value < avg_high);
            }
        }
Esempio n. 6
0
        public void TestUniformMemberGeneration()
        {
            var r1 = @"^(a|ab|abc|abcd|abcde)$";

            //var randomseed = 123;

            var rex     = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV7);
            var sfa     = rex.CreateFromRegexes(RegexOptions.None, r1);
            var sfa_min = sfa.Determinize().MinimizeHopcroft();

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

            var time = System.Environment.TickCount;

            var frequency = new Dictionary <string, int>();

            frequency["a"]     = 0;
            frequency["ab"]    = 0;
            frequency["abc"]   = 0;
            frequency["abcd"]  = 0;
            frequency["abcde"] = 0;
            for (int i = 0; i < 100000; i++)
            {
                var sample = rex.GenerateMemberUniformly(sfa_min);
                frequency[sample] += 1;
            }

            foreach (var kv in frequency)
            {
                Assert.IsTrue(kv.Value > 19500); //roughly, each one should be equally likely
            }

            var m1 = sfa_min.GetMoveFrom(sfa_min.InitialState);

            Assert.AreEqual <double>(1.0, sfa_min.GetProbability(m1));
            Assert.AreEqual <double>(0.2, sfa_min.GetProbability(m1.TargetState));
            var m2 = sfa_min.GetMoveFrom(m1.TargetState);

            Assert.AreEqual <double>(0.8, sfa_min.GetProbability(m2));
            Assert.AreEqual <double>(0.25, sfa_min.GetProbability(m2.TargetState));
            var m3 = sfa_min.GetMoveFrom(m2.TargetState);

            Assert.AreEqual <double>(0.75, sfa_min.GetProbability(m3));
            Assert.AreEqual <double>(Math.Round(((double)1.0) / 3.0, 10), sfa_min.GetProbability(m3.TargetState));
            var m4 = sfa_min.GetMoveFrom(m3.TargetState);

            Assert.AreEqual <double>(Math.Round(((double)2.0) / 3.0, 10), sfa_min.GetProbability(m4));
            Assert.AreEqual <double>(0.5, sfa_min.GetProbability(m4.TargetState));
            var m5 = sfa_min.GetMoveFrom(m4.TargetState);

            Assert.AreEqual <double>(0.5, sfa_min.GetProbability(m5));
            Assert.AreEqual <double>(1.0, sfa_min.GetProbability(m5.TargetState));

            //Assert.AreEqual<System.Numerics.BigInteger>(new System.Numerics.BigInteger(5), sfa_min.DomainSize);
        }
Esempio n. 7
0
        public void TestDAGserializationSimple()
        {
            var r1 = @"^(a|ab|abc|abcd|abcde)$";

            var rex          = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV7);
            var sfa          = rex.CreateFromRegexes(r1);
            var sfa_min_orig = rex.Minimize(sfa);

            string dag     = rex.SerializeDAG(sfa_min_orig);
            var    sfa_min = rex.DeserializeDAG(dag);

            //rex.Solver.ShowDAG(sfa_min, "test");

            var frequency = new Dictionary <string, int>();

            frequency["a"]     = 0;
            frequency["ab"]    = 0;
            frequency["abc"]   = 0;
            frequency["abcd"]  = 0;
            frequency["abcde"] = 0;
            for (int i = 0; i < 100000; i++)
            {
                var sample = rex.GenerateMemberUniformly(sfa_min);
                frequency[sample] += 1;
            }

            foreach (var kv in frequency)
            {
                Assert.IsTrue(kv.Value > 19500); //roughly, each one should be equally likely
            }

            var m1 = sfa_min.GetMoveFrom(sfa_min.InitialState);

            Assert.AreEqual <double>(1.0, sfa_min.GetProbability(m1));
            Assert.AreEqual <double>(0.2, sfa_min.GetProbability(m1.TargetState));
            var m2 = sfa_min.GetMoveFrom(m1.TargetState);

            Assert.AreEqual <double>(0.8, sfa_min.GetProbability(m2));
            Assert.AreEqual <double>(0.25, sfa_min.GetProbability(m2.TargetState));
            var m3 = sfa_min.GetMoveFrom(m2.TargetState);

            Assert.AreEqual <double>(0.75, sfa_min.GetProbability(m3));
            Assert.AreEqual <double>(Math.Round(((double)1.0) / 3.0, 10), sfa_min.GetProbability(m3.TargetState));
            var m4 = sfa_min.GetMoveFrom(m3.TargetState);

            Assert.AreEqual <double>(Math.Round(((double)2.0) / 3.0, 10), sfa_min.GetProbability(m4));
            Assert.AreEqual <double>(0.5, sfa_min.GetProbability(m4.TargetState));
            var m5 = sfa_min.GetMoveFrom(m4.TargetState);

            Assert.AreEqual <double>(0.5, sfa_min.GetProbability(m5));
            Assert.AreEqual <double>(1.0, sfa_min.GetProbability(m5.TargetState));
        }
Esempio n. 8
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);
            }
        }
Esempio n. 9
0
        public void TestUniformMemberGeneration2()
        {
            var r1 = @"^(\d{3}|12b)$"; //three digits or 12bc
            var r2 = "^[0-2a-z]*$"; //only digits 0 1 2 or lower case letters are allowed

            var rex = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV7);
            var sfa = rex.CreateFromRegexes(RegexOptions.None, r1, r2);
            var sfa_min = sfa.Determinize().MinimizeHopcroft();

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

            var frequency = new Dictionary<string, int>();
            for (int i = 0; i < 100000; i++)
            {
                var sample = rex.GenerateMemberUniformly(sfa_min);
                if (frequency.ContainsKey(sample))
                    frequency[sample] += 1;
                else
                    frequency[sample] = 1;
            }

            foreach (var kv in frequency)
            {
                Assert.IsTrue(kv.Value > 3000);
            }
        }
Esempio n. 10
0
        public void TestPasswordRegex()
        {
            var r1 = @"^[\x21-\x7E]{8}$";
            var r2 = @"[A-Z].*[A-Z]";
            var r3 = "^.+[a-z].*[a-z]";
            var r4 = "^(...[@#$%&]|....[@#$%&]|.....[@#$%&])";
            var r5 = @"^[\D]";
            var r6 = "^[^AbkG]*$";

            var rex = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV7);
            var sfa = rex.CreateFromRegexes(r1, r2, r3, r4, r5, r6);
            var sfa_min = rex.Minimize(sfa);

            var time = System.Environment.TickCount;

            List<string> samples = new List<string>();
            for (int i = 0; i < 1000; i++)
                samples.Add(rex.GenerateMemberUniformly(sfa_min));

            time = System.Environment.TickCount - time;
            Console.WriteLine("nr of SFA states: {1}, time to generate 1000 samples: {0}ms", time, sfa_min.StateCount);
        }
Esempio n. 11
0
        public void TestUniformMemberGeneration()
        {
            var r1 = @"^(a|ab|abc|abcd|abcde)$";

            var randomseed = 123;

            var rex = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV7);
            var sfa = rex.CreateFromRegexes(RegexOptions.None, r1);
            var sfa_min = sfa.Determinize().MinimizeHopcroft();

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

            var time = System.Environment.TickCount;

            var frequency = new Dictionary<string, int>();
            frequency["a"]=0;
            frequency["ab"]=0;
            frequency["abc"]=0;
            frequency["abcd"]=0;
            frequency["abcde"]=0;
            for (int i = 0; i < 100000; i++)
            {
                var sample = rex.GenerateMemberUniformly(sfa_min);
                frequency[sample] += 1;
            }

            foreach (var kv in frequency)
            {
                Assert.IsTrue(kv.Value > 19500); //roughly, each one should be equally likely
            }

            var m1 = sfa_min.GetMoveFrom(sfa_min.InitialState);
            Assert.AreEqual<double>(1.0, sfa_min.GetProbability(m1));
            Assert.AreEqual<double>(0.2, sfa_min.GetProbability(m1.TargetState));
            var m2 = sfa_min.GetMoveFrom(m1.TargetState);
            Assert.AreEqual<double>(0.8, sfa_min.GetProbability(m2));
            Assert.AreEqual<double>(0.25, sfa_min.GetProbability(m2.TargetState));
            var m3 = sfa_min.GetMoveFrom(m2.TargetState);
            Assert.AreEqual<double>(0.75, sfa_min.GetProbability(m3));
            Assert.AreEqual<double>(Math.Round(((double)1.0)/3.0, 10), sfa_min.GetProbability(m3.TargetState));
            var m4 = sfa_min.GetMoveFrom(m3.TargetState);
            Assert.AreEqual<double>(Math.Round(((double)2.0) / 3.0, 10), sfa_min.GetProbability(m4));
            Assert.AreEqual<double>(0.5, sfa_min.GetProbability(m4.TargetState));
            var m5 = sfa_min.GetMoveFrom(m4.TargetState);
            Assert.AreEqual<double>(0.5, sfa_min.GetProbability(m5));
            Assert.AreEqual<double>(1.0, sfa_min.GetProbability(m5.TargetState));

            //Assert.AreEqual<System.Numerics.BigInteger>(new System.Numerics.BigInteger(5), sfa_min.DomainSize);
        }
Esempio n. 12
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));
            }
        }
Esempio n. 13
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);
            }
        }
Esempio n. 14
0
        public void TestDAGserializationSimple2()
        {
            var r1 = @"^([\d]{1,3})$"; //sequences of 1 up to 3 digits

            var rex = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV7);
            var sfa = rex.CreateFromRegexes(r1);
            var sfa_min_orig = rex.Minimize(sfa);

            var sfa_min = rex.DeserializeDAG(rex.SerializeDAG(sfa_min_orig));

               // rex.Solver.ShowDAG(sfa_min, "test");

            var frequency = new Dictionary<string, int>();

            for (int i = 0; i < 10; i++)
                    frequency[i.ToString()] = 0;

            for (int i = 0; i < 10; i++)
                for (int j = 0; j < 10; j++)
                        frequency[i.ToString() + j.ToString()] = 0;

            for (int i = 0; i < 10; i++)
                for (int j = 0; j < 10; j++)
                    for (int k = 0; k < 10; k++)
                        frequency[i.ToString() + j.ToString() + k.ToString()] = 0;

            int time = System.Environment.TickCount;
            for (int i = 0; i < 1000000; i++)
            {
                var sample = rex.GenerateMemberUniformly(sfa_min);
                frequency[sample] += 1;
            }
            time = System.Environment.TickCount - time;

            int total = 10 + 100 + 1000;
            int avg = 1000000 / total;
            int avg_low = (avg * 80) / 100;
            int avg_high = (avg * 120) / 100;

            foreach (var kv in frequency)
            {
                Assert.IsTrue(kv.Value > avg_low);
                Assert.IsTrue(kv.Value < avg_high);
            }
        }
Esempio n. 15
0
        public void TestDAGserializationSimple()
        {
            var r1 = @"^(a|ab|abc|abcd|abcde)$";

            var rex = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV7);
            var sfa = rex.CreateFromRegexes(r1);
            var sfa_min_orig = rex.Minimize(sfa);

            string dag = rex.SerializeDAG(sfa_min_orig);
            var sfa_min = rex.DeserializeDAG(dag);

            //rex.Solver.ShowDAG(sfa_min, "test");

            var frequency = new Dictionary<string, int>();
            frequency["a"] = 0;
            frequency["ab"] = 0;
            frequency["abc"] = 0;
            frequency["abcd"] = 0;
            frequency["abcde"] = 0;
            for (int i = 0; i < 100000; i++)
            {
                var sample = rex.GenerateMemberUniformly(sfa_min);
                frequency[sample] += 1;
            }

            foreach (var kv in frequency)
            {
                Assert.IsTrue(kv.Value > 19500); //roughly, each one should be equally likely
            }

            var m1 = sfa_min.GetMoveFrom(sfa_min.InitialState);
            Assert.AreEqual<double>(1.0, sfa_min.GetProbability(m1));
            Assert.AreEqual<double>(0.2, sfa_min.GetProbability(m1.TargetState));
            var m2 = sfa_min.GetMoveFrom(m1.TargetState);
            Assert.AreEqual<double>(0.8, sfa_min.GetProbability(m2));
            Assert.AreEqual<double>(0.25, sfa_min.GetProbability(m2.TargetState));
            var m3 = sfa_min.GetMoveFrom(m2.TargetState);
            Assert.AreEqual<double>(0.75, sfa_min.GetProbability(m3));
            Assert.AreEqual<double>(Math.Round(((double)1.0) / 3.0, 10), sfa_min.GetProbability(m3.TargetState));
            var m4 = sfa_min.GetMoveFrom(m3.TargetState);
            Assert.AreEqual<double>(Math.Round(((double)2.0) / 3.0, 10), sfa_min.GetProbability(m4));
            Assert.AreEqual<double>(0.5, sfa_min.GetProbability(m4.TargetState));
            var m5 = sfa_min.GetMoveFrom(m4.TargetState);
            Assert.AreEqual<double>(0.5, sfa_min.GetProbability(m5));
            Assert.AreEqual<double>(1.0, sfa_min.GetProbability(m5.TargetState));
        }
Esempio n. 16
0
        public void TestDAGserialization()
        {
            var r1 = @"^[\x21-\x7E]{8}$";
            var r2 = @"[A-Z].*[A-Z]";
            var r3 = "^.+[a-z].*[a-z]";
            var r4 = "^(...[@#$%&]|....[@#$%&]|.....[@#$%&])";
            var r5 = @"^[\D]";
            var r6 = "^[^AbkG]*$";

            var rex = new Microsoft.Automata.Rex.RexEngine(BitWidth.BV16);
            var sfa = rex.CreateFromRegexes(r1, r2, r3, r4, r5, r6);
            var sfa_min = rex.Minimize(sfa);

            string dag = rex.SerializeDAG(sfa_min);
            var sfa_min1 = rex.DeserializeDAG(dag);

            bool equiv = rex.AreEquivalent(sfa_min, sfa_min1);

            Assert.IsTrue(equiv);

            string dag2 = rex.SerializeDAG(sfa_min1);

            Assert.AreEqual<string>(dag, dag2);

            Console.WriteLine(rex.GenerateMemberUniformly(sfa_min1));
            Console.WriteLine(rex.GenerateMemberUniformly(sfa_min1));
            Console.WriteLine(rex.GenerateMemberUniformly(sfa_min1));

            //rex.Solver.ShowGraph(sfa_min1, "test");
        }