Esempio n. 1
0
        public void TestSatisfiableRange()
        {
            using (var ctx = new Context())
            {
                IPAddress low   = IPAddress.Parse("127.0.0.1");
                IPAddress high  = IPAddress.Parse("127.0.0.10");
                var       range = new AddressRange
                {
                    Low  = low,
                    High = high
                };

                string     variableName = "address";
                BitVecExpr variable     = ctx.MkConst(variableName, ctx.MkBitVecSort(32)) as BitVecExpr;
                Assert.IsNotNull(variable);
                Solver s = ctx.MkSolver();
                s.Assert(range.Contains(ctx, variable));
                Status result = s.Check();
                Assert.AreEqual(Status.SATISFIABLE, result);
                IPAddress binding;
                Assert.IsTrue(RetrieveModelValue.TryRetrieveAddress(variableName, s.Model, out binding));
                Assert.IsTrue(AddressRangeTest.CompareAddresses(low, binding) >= 0);
                Assert.IsTrue(AddressRangeTest.CompareAddresses(high, binding) <= 0);
            }
        }
        public void TestMatchesUnsatisfiable()
        {
            using (var ctx = new Context())
            {
                int protocolNumber  = 6;
                var networkProtocol = new NetworkProtocol
                {
                    Any            = false,
                    ProtocolNumber = protocolNumber
                };

                string     protocolVariableName = "protocol";
                BitVecExpr protocolVariable     = ctx.MkConst(protocolVariableName, ctx.MkBitVecSort(8)) as BitVecExpr;
                Solver     s = ctx.MkSolver();
                s.Assert(ctx.MkNot(networkProtocol.Matches(ctx, protocolVariable)));
                Status result = s.Check();
                Assert.AreEqual(Status.SATISFIABLE, result);
                int binding;
                Assert.IsTrue(RetrieveModelValue.TryRetrieveInteger(protocolVariableName, s.Model, out binding));
                Assert.AreNotEqual(protocolNumber, binding);
            }
        }
Esempio n. 3
0
        public void TestSingle()
        {
            using (var ctx = new Context())
            {
                IPAddress single = IPAddress.Parse("192.168.0.1");
                var       range  = new AddressRange
                {
                    Low  = single,
                    High = single
                };

                string     variableName = "address";
                BitVecExpr variable     = ctx.MkConst(variableName, ctx.MkBitVecSort(32)) as BitVecExpr;
                Solver     s            = ctx.MkSolver();
                s.Assert(range.Contains(ctx, variable));
                Status result = s.Check();
                Assert.AreEqual(Status.SATISFIABLE, result);
                IPAddress binding;
                Assert.IsTrue(RetrieveModelValue.TryRetrieveAddress(variableName, s.Model, out binding));
                Assert.AreEqual(single, binding);
            }
        }
Esempio n. 4
0
        public void TestSingle()
        {
            using (var ctx = new Context())
            {
                int single = 64;
                var range  = new PortRange
                {
                    Low  = single,
                    High = single
                };

                string     portVariableName = "port";
                BitVecExpr variable         = ctx.MkConst(portVariableName, ctx.MkBitVecSort(16)) as BitVecExpr;
                Solver     s = ctx.MkSolver();
                s.Assert(range.Contains(ctx, variable));
                Status result = s.Check();
                Assert.AreEqual(Status.SATISFIABLE, result);
                int binding;
                Assert.IsTrue(RetrieveModelValue.TryRetrieveInteger(portVariableName, s.Model, out binding));
                Assert.AreEqual(single, binding);
            }
        }