Esempio n. 1
0
        public void TestBVAlgebraCharOperations()
        {
            var css          = new CharSetSolver();
            var regex        = new Regex("(?i:abc[^a-z])");
            var sr           = css.RegexConverter.ConvertToSymbolicRegex(regex, true);
            var mintermsList = new List <BDD>(sr.ComputeMinterms());
            var minterms     = mintermsList.ToArray();
            var all          = css.MkOr(minterms);

            Assert.IsTrue(all.IsFull);
            Assert.AreEqual(5, minterms.Length);
            var bva = BVAlgebra.Create(css, minterms);
            var bv1 = bva.MkBV(1, 2);
            var bv2 = bva.MkBV(2, 3, 4);
            var a   = bva.MkCharConstraint('A');
            var b   = bva.MkCharConstraint('b');
            var c   = bva.MkCharConstraint('C');
            var d   = bva.MkCharConstraint('6');
            var x   = bva.MkCharConstraint('x');

            Assert.AreEqual <ulong>(bva.atoms[bva.dtree.GetId('a')].first, a.first);
            Assert.AreEqual <ulong>(bva.atoms[bva.dtree.GetId('B')].first, b.first);
            Assert.AreEqual <ulong>(bva.atoms[bva.dtree.GetId('C')].first, c.first);
            Assert.AreEqual <ulong>(bva.atoms[bva.dtree.GetId('7')].first, d.first);
            Assert.AreEqual <ulong>(bva.atoms[bva.dtree.GetId('z')].first, x.first);
        }
Esempio n. 2
0
 public void TestSerialization_SymbolicRegex()
 {
     var css       = new CharSetSolver();
     var regex     = new Regex(@"\d");
     var regex_bdd = regex.ConvertToSymbolicRegexBDD(css);
     var minterms  = regex_bdd.ComputeMinterms();
     var bva       = BVAlgebra.Create(css, minterms);
 }
Esempio n. 3
0
        public void TestBVAlgebraMintermization()
        {
            var css      = new CharSetSolver();
            var regex    = new Regex(@"^\w\d$");
            var minterms = css.RegexConverter.ConvertToSymbolicRegex(regex).ComputeMinterms();

            Assert.IsTrue(minterms.Length == 3);
            BVAlgebra bva = BVAlgebra.Create(css, minterms);
            var       relativeminterms = new List <Tuple <bool[], BV> >(bva.GenerateMinterms(bva.atoms));

            Assert.AreEqual <int>(3, relativeminterms.Count);
        }
Esempio n. 4
0
        public void TestBVAlgebraDeterminization()
        {
            var css    = new CharSetSolver();
            var regex1 = new Regex("afaXbccde$");
            var autom1 = css.Convert(regex1.ToString());
            //dfa1.ShowGraph("dfa1");
            var       minterms1 = css.RegexConverter.ConvertToSymbolicRegex(regex1).ComputeMinterms();
            BVAlgebra bva       = BVAlgebra.Create(css, minterms1);
            var       autom1_bv = autom1.ReplaceAlgebra(bdd => bva.MapPredToBV(bdd, minterms1), bva);
            //autom1_bv.ShowGraph("autom1_bv");
            var dfa1_bv = autom1_bv.Determinize();
            var dfa1    = autom1.Determinize();

            Assert.AreEqual <int>(dfa1_bv.StateCount, dfa1.StateCount);
        }
Esempio n. 5
0
        public void TestSerialization_BVAlgebra()
        {
            var css       = new CharSetSolver();
            var regex     = new Regex(@"[0-9]");
            var regex_bdd = regex.ConvertToSymbolicRegexBDD(css);
            var minterms  = regex_bdd.ComputeMinterms();
            var bva       = BVAlgebra.Create(css, minterms);

            SerializeObjectToFile_bin("bva.bin", bva);
            var bva_ = (BVAlgebra)DeserializeObjectFromFile_bin("bva.bin");

            Assert.AreEqual <int>(bva.atoms.Length, bva_.nrOfBits);
            Assert.AreEqual <string>(bva.dtree.ToString(), bva_.dtree.ToString());
            Assert.AreEqual <Sequence <BV> >(new Sequence <BV>(bva.atoms), new Sequence <BV>(bva_.atoms));
        }
Esempio n. 6
0
        public void TestBVAlgebraBooleanOperations()
        {
            var css      = new CharSetSolver();
            var regex    = new Regex(@"^\w\d$");
            var minterms = css.RegexConverter.ConvertToSymbolicRegex(regex).ComputeMinterms();

            Assert.IsTrue(minterms.Length == 3);
            BVAlgebra bva = BVAlgebra.Create(css, minterms);
            var       phi = bva.atoms[0] & bva.atoms[1];

            Assert.IsFalse(bva.IsSatisfiable(phi));
            var psi = bva.atoms[0] & ~bva.atoms[1];

            Assert.IsTrue(bva.IsSatisfiable(psi));
            Assert.IsTrue(bva.AreEquivalent(bva.atoms[0], psi));
            var psi2 = bva.atoms[0] | bva.atoms[1];

            Assert.IsTrue(bva.AreEquivalent(bva.atoms[0] | bva.atoms[1], ~bva.atoms[2]));
        }
Esempio n. 7
0
        public void TestBVAlgebraBasicOperations()
        {
            var css          = new CharSetSolver();
            var regexa       = new Regex("(?i:a)");
            var aut          = css.Convert("(?i:a)");
            var aut_minterms = css.RegexConverter.ConvertToSymbolicRegex(regexa, true).ComputeMinterms();
            var aut_bva      = BVAlgebra.Create(css, aut_minterms);
            var aut_BV       = aut.ReplaceAlgebra <BV>(bdd => aut_bva.MapPredToBV(bdd, aut_minterms), aut_bva);
            //aut_BV.ShowGraph("aut_BV");
            var aut_BV_det = aut_BV.Determinize().Minimize();

            //aut_BV_det.ShowGraph("aut_BV_det");
            Assert.AreEqual <int>(2, aut_BV_det.StateCount);
            Assert.AreEqual <int>(3, aut_BV_det.MoveCount);
            var a_bv = aut_bva.MkCharConstraint('a');
            var a_id = aut_bva.GetIdOfChar('a');
            var A_id = aut_bva.GetIdOfChar('A');

            Assert.AreEqual <int>(a_id, A_id);
            Assert.AreEqual <BV>(a_bv, aut_bva.atoms[a_id]);
            Assert.AreEqual <int>(3, aut_BV_det.MoveCount);
            Assert.AreEqual <int>(2, aut_bva.atoms.Length);
        }