Ejemplo n.º 1
0
        public void TestSampleSymbolicRegexesMiscOptions()
        {
            CharSetSolver css = new CharSetSolver(BitWidth.BV16);
            //--- ignore case
            var r0 = css.RegexConverter.ConvertToSymbolicRegex("^foo$", RegexOptions.IgnoreCase);

            Assert.IsTrue(r0.ToString().Equals("[Ff][Oo][Oo]"));
            //--- ignore case locally
            var r0b = css.RegexConverter.ConvertToSymbolicRegex("^f(?i:o)o$");

            Assert.IsTrue(r0b.ToString().Equals("f[Oo]o"));
            //--- multiline option
            var r1 = css.RegexConverter.ConvertToSymbolicRegex(@"^foo\Z", RegexOptions.Multiline);

            //var a1 = css.RegexConverter.Convert(@"^foo\Z", RegexOptions.Multiline);
            //a1.ShowGraph("a1");
            Assert.IsTrue(r1.ToString().Equals(@"(.*\n)?foo"));
            //--------
            var r2 = css.RegexConverter.ConvertToSymbolicRegex(@"^", RegexOptions.Multiline);

            //var a2 = css.RegexConverter.Convert(@"^", RegexOptions.Multiline);
            Assert.IsTrue(r2.ToString().Equals(@".*"));
            //a2.ShowGraph("a2");
            //--------
            var r3 = css.RegexConverter.ConvertToSymbolicRegex(@"$", RegexOptions.Multiline);

            //var a3 = css.RegexConverter.Convert(@"$", RegexOptions.Multiline);
            //a3.ShowGraph("a3");
            Assert.IsTrue(r3.ToString().Equals(@".*"));
            //--------
            var r4      = css.RegexConverter.ConvertToSymbolicRegex(@"^$", RegexOptions.Multiline);
            var a4      = css.RegexConverter.Convert(@"^$", RegexOptions.Multiline);
            var regex4  = new Regex(@"^$", RegexOptions.Multiline);
            var regex4b = new Regex(@"^(.*\n)?(\n.*)?$", RegexOptions.Singleline);
            var r4b     = css.RegexConverter.ConvertToSymbolicRegex(@"^(.*\n)?(\n.*)?$", RegexOptions.Singleline);
            //a4.ShowGraph("a4");
            var a4min = a4.Determinize().Minimize();

            //a4min.ShowGraph("a4min");
            Assert.IsTrue(css.Accepts(a4min, ""));
            Assert.IsTrue(regex4.IsMatch(""));
            Assert.IsTrue(regex4b.IsMatch(""));
            Assert.IsTrue(css.Accepts(a4min, "\n"));
            Assert.IsTrue(regex4.IsMatch("\n"));
            Assert.IsTrue(regex4b.IsMatch("\n"));
            Assert.IsTrue(css.Accepts(a4min, "a\n"));
            Assert.IsTrue(regex4.IsMatch("a\n"));
            Assert.IsTrue(regex4b.IsMatch("a\n"));
            Assert.IsTrue(css.Accepts(a4min, "a\n\nbcd"));
            Assert.IsTrue(regex4.IsMatch("a\n\nbcd"));
            Assert.IsTrue(regex4b.IsMatch("a\n\nbcd"));
            //some negative cases
            Assert.IsFalse(css.Accepts(a4min, "a\nbcd"));
            Assert.IsFalse(regex4.IsMatch("a\nbcd"));
            Assert.IsFalse(regex4.IsMatch("a\nbcd"));

            Assert.IsTrue(r4b.ToString().Equals(@"(.*\n)?(\n.*)?"));
            Assert.IsTrue(r4.ToString().Equals(@"(.*\n)?(\n.*)?"));
        }
 public void TestLoopThatStartsWith0()
 {
     string regex = @"(w(a|bc){0,2})";
     CharSetSolver css = new CharSetSolver(BitWidth.BV7);
     var aut = css.Convert(regex,RegexOptions.Singleline,true);
     //css.ShowGraph(aut, "CornerCase");
     var str = "w.-J_";
     var actual = css.Accepts(aut, str);
     var expected = Regex.IsMatch(str, regex);
     Assert.AreEqual(expected, actual);
 }
Ejemplo n.º 3
0
        public void TestLoopThatStartsWith0()
        {
            string        regex = @"(w(a|bc){0,2})";
            CharSetSolver css   = new CharSetSolver(BitWidth.BV7);
            var           aut   = css.Convert(regex, RegexOptions.Singleline, true);
            //css.ShowGraph(aut, "CornerCase");
            var str      = "w.-J_";
            var actual   = css.Accepts(aut, str);
            var expected = Regex.IsMatch(str, regex);

            Assert.AreEqual(expected, actual);
        }
Ejemplo n.º 4
0
        public void TestWordBoundary()
        {
            CharSetSolver css   = new CharSetSolver(BitWidth.BV7);
            var           regex = @"\b(@|A)B\b";

            Assert.IsTrue(Regex.IsMatch("AB", regex));
            Assert.IsTrue(Regex.IsMatch("A@B", regex));
            Assert.IsTrue(Regex.IsMatch("A@B&", regex));
            Assert.IsTrue(Regex.IsMatch("+AB+", regex));
            Assert.IsFalse(Regex.IsMatch("@B", regex));
            Assert.IsFalse(Regex.IsMatch("A@B_", regex));

            var aut = css.Convert(regex);//.RemoveEpsilons(css.MkOr).Determinize(css).Minimize(css);

            //css.ShowGraph(aut, "aut");

            Assert.IsTrue(css.Accepts(aut, "AB"));
            Assert.IsTrue(css.Accepts(aut, "A@B"));
            Assert.IsTrue(css.Accepts(aut, "A@B&"));
            Assert.IsTrue(css.Accepts(aut, "+AB+"));
            Assert.IsFalse(css.Accepts(aut, "@B"));
            Assert.IsFalse(css.Accepts(aut, "A@B_"));

            CheckValidity(css, aut, new Regex(regex, RegexOptions.Singleline));
        }
Ejemplo n.º 5
0
        public void TestWordBoundaryCase()
        {
            string        s   = "abc";
            string        r   = @"\b";
            CharSetSolver css = new CharSetSolver(BitWidth.BV7);
            var           aut = css.Convert(r, RegexOptions.Singleline, true);

            //css.ShowGraph(aut, "test1");
            css.RegexConverter.EliminateBoundaryStates(aut);
            //css.ShowGraph(aut,"test2");
            Assert.IsTrue(css.Accepts(aut, s));
            Assert.IsTrue(Regex.IsMatch(s, r, RegexOptions.Singleline));
        }
        //returns true iff dfa accepts str
        private static bool Accepts(Automaton <BDD> dfa1, string str, HashSet <char> al, CharSetSolver solver)
        {
            return(solver.Accepts(dfa1, str));

            //int currState = dfa1.InitialState;
            //for (int i = 0; i < str.Length; i++)
            //{
            //    currState = GetNextState(currState, str[i], dfa1, solver);
            //    if (currState < 0)
            //        return false;
            //}
            //return dfa1.GetFinalStates().ToList().Contains(currState);
        }
Ejemplo n.º 7
0
        public void TestTrivialWordBoundary4()
        {
            Regex         r   = new Regex(@"^\b[A@]\b$", RegexOptions.None);
            CharSetSolver css = new CharSetSolver(BitWidth.BV16);
            var           aut = css.Convert(r.ToString(), RegexOptions.Singleline, true);

            //css.ShowGraph(aut, "TrivialWordBoundary4_with_b");
            css.RegexConverter.EliminateBoundaryStates(aut);
            var aut1 = aut.RemoveEpsilons().Determinize().Minimize();
            //css.ShowGraph(aut, "TrivialWordBoundary4");

            string s = "@";
            bool   ismatchExpected = r.IsMatch(s);
            bool   ismatchActual   = css.Accepts(aut1, s);

            CheckValidity(css, aut, r);
        }
Ejemplo n.º 8
0
        /*
         * IsYieldTypeSafe :
         * 2.1 Input parameters :
         * 2.1.1 Automaton<BvSet> implTypeCheckAutomaton : This input Automaton is generated for a phase of YTS checking of an impl.
         * 2.2 Return value : returns true if input automaton is subset of YTS property autoamaton.
         * 2.3 Action : Subset checking for a phase of an implementation. f L(YTSI) is subset of L(YTSP) {TRUE} else {FALSE}
         */
        public static bool IsYieldTypeSafe(Automaton <BvSet> implTypeCheckAutomaton, Implementation impl, MoverTypeChecker moverTypeChecker, int phaseNum)
        {
            List <BvSet> witnessSet;

            var isNonEmpty = Automaton <BvSet> .CheckDifference(
                implTypeCheckAutomaton,
                yieldTypeCheckerAutomaton,
                0,
                yieldTypeCheckerAutomatonSolver,
                out witnessSet);

#if DEBUG && !DEBUG_DETAIL
            var    diffAutomaton          = implTypeCheckAutomaton.Minus(yieldTypeCheckerAutomaton, yieldTypeCheckerAutomatonSolver);
            string diffAutomatonGraphName = "diffAutomaton" + impl.Proc.Name + phaseNum.ToString();
            yieldTypeCheckerAutomatonSolver.ShowGraph(diffAutomaton, diffAutomatonGraphName + ".dgml");
#endif

#if DEBUG && !DEBUG_DETAIL
            string s = yieldTypeCheckerAutomatonSolver.GenerateMember(implTypeCheckAutomaton);
            Console.WriteLine("\n member " + s + " \n");
            if (!yieldTypeCheckerAutomatonSolver.Accepts(yieldTypeCheckerAutomaton, s))
            {
                Console.WriteLine("Property Automaton accepts a random member of impl_automaton " + s);
            }
            else
            {
                Console.WriteLine("Property Automaton does not accept a random member of impl_automaton " + s);
            }
#endif
            if (isNonEmpty)
            {
                var witness = new String(Array.ConvertAll(witnessSet.ToArray(), bvset => (char)yieldTypeCheckerAutomatonSolver.Choose(bvset)));
                moverTypeChecker.Error(impl, "\n Body of " + impl.Proc.Name + " has invalid trace of actions " + witness + "\n");
                return(false);
            }

            return(true);
        }
 public void TestWordBoundaryCase()
 {
     string s = "abc";
     string r = @"\b";
     CharSetSolver css = new CharSetSolver(BitWidth.BV7);
     var aut = css.Convert(r,RegexOptions.Singleline,true);
     //css.ShowGraph(aut, "test1");
     css.RegexConverter.EliminateBoundaryStates(aut);
     //css.ShowGraph(aut,"test2");
     Assert.IsTrue(css.Accepts(aut, s));
     Assert.IsTrue(Regex.IsMatch(s, r, RegexOptions.Singleline));
 }
        public void TestWordBoundary()
        {
            CharSetSolver css = new CharSetSolver(BitWidth.BV7);
            var regex = @"\b(@|A)B\b";

            Assert.IsTrue(Regex.IsMatch("AB", regex));
            Assert.IsTrue(Regex.IsMatch("A@B", regex));
            Assert.IsTrue(Regex.IsMatch("A@B&", regex));
            Assert.IsTrue(Regex.IsMatch("+AB+", regex));
            Assert.IsFalse(Regex.IsMatch("@B", regex));
            Assert.IsFalse(Regex.IsMatch("A@B_", regex));

            var aut = css.Convert(regex);//.RemoveEpsilons(css.MkOr).Determinize(css).Minimize(css);
            //css.ShowGraph(aut, "aut");

            Assert.IsTrue(css.Accepts(aut, "AB"));
            Assert.IsTrue(css.Accepts(aut, "A@B"));
            Assert.IsTrue(css.Accepts(aut, "A@B&"));
            Assert.IsTrue(css.Accepts(aut, "+AB+"));
            Assert.IsFalse(css.Accepts(aut, "@B"));
            Assert.IsFalse(css.Accepts(aut, "A@B_"));

            CheckValidity(css, aut, new Regex(regex, RegexOptions.Singleline));
        }
        public void TestTrivialWordBoundary4()
        {
            Regex r = new Regex(@"^\b[A@]\b$",RegexOptions.None);
            CharSetSolver css = new CharSetSolver(BitWidth.BV16);
            var aut = css.Convert(r.ToString(), RegexOptions.Singleline, true);
            //css.ShowGraph(aut, "TrivialWordBoundary4_with_b");
            css.RegexConverter.EliminateBoundaryStates(aut);
            var aut1 = aut.RemoveEpsilons().Determinize().Minimize();
            //css.ShowGraph(aut, "TrivialWordBoundary4");

            string s = "@";
            bool ismatchExpected = r.IsMatch(s);
            bool ismatchActual = css.Accepts(aut1, s);

            CheckValidity(css, aut, r);
        }
        //returns true iff dfa accepts str
        private static bool Accepts(Automaton<BDD> dfa1,  string str, HashSet<char> al, CharSetSolver solver)
        {
            return solver.Accepts(dfa1, str);

            //int currState = dfa1.InitialState;
            //for (int i = 0; i < str.Length; i++)
            //{
            //    currState = GetNextState(currState, str[i], dfa1, solver);
            //    if (currState < 0)
            //        return false;
            //}
            //return dfa1.GetFinalStates().ToList().Contains(currState);
        }