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); } }
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); } }
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); } }