mirror of
https://github.com/Z3Prover/z3
synced 2025-04-06 17:44:08 +00:00
Extended FPA dotnet example
Signed-off-by: Christoph M. Wintersteiger <cwinter@microsoft.com>
This commit is contained in:
parent
165da842b7
commit
8e497fbbaf
|
@ -2029,8 +2029,46 @@ namespace test_mapi
|
||||||
FPSort s = ctx.MkFPSort(11, 53);
|
FPSort s = ctx.MkFPSort(11, 53);
|
||||||
Console.WriteLine("Sort: {0}", s);
|
Console.WriteLine("Sort: {0}", s);
|
||||||
|
|
||||||
FPNum n = (FPNum) ctx.MkNumeral("0.125", s);
|
FPNum x = (FPNum)ctx.MkNumeral("-1e1", s);
|
||||||
Console.WriteLine("Numeral: {0}", n.ToString());
|
Console.WriteLine("Numeral: {0}", x.ToString());
|
||||||
|
|
||||||
|
FPNum y = (FPNum)ctx.MkNumeral("-10", s);
|
||||||
|
Console.WriteLine("Numeral: {0}", y.ToString());
|
||||||
|
|
||||||
|
FPNum z = (FPNum)ctx.MkNumeral("-1.25p3", s);
|
||||||
|
Console.WriteLine("Numeral: {0}", z.ToString());
|
||||||
|
|
||||||
|
BoolExpr a = ctx.MkAnd(ctx.MkFPEq(x, y), ctx.MkFPEq(y, z));
|
||||||
|
|
||||||
|
Check(ctx, ctx.MkNot(a), Status.UNSATISFIABLE);
|
||||||
|
|
||||||
|
x = ctx.MkFPNaN(s);
|
||||||
|
FPExpr c = (FPExpr)ctx.MkConst("y", s);
|
||||||
|
|
||||||
|
// Note: We need to use a special solver for QF_FPA here; the
|
||||||
|
// general solver does not support FPA yet.
|
||||||
|
|
||||||
|
Solver slvr = ctx.MkSolver("QF_FPA");
|
||||||
|
slvr.Add(ctx.MkFPEq(x, c));
|
||||||
|
if (slvr.Check() != Status.UNSATISFIABLE) // nothing is equal to NaN according to floating-point equality.
|
||||||
|
throw new TestFailedException();
|
||||||
|
|
||||||
|
slvr = ctx.MkSolver("QF_FPA");
|
||||||
|
slvr.Add(ctx.MkEq(x, c)); // NaN is equal to NaN according to normal equality.
|
||||||
|
if (slvr.Check() != Status.SATISFIABLE)
|
||||||
|
throw new TestFailedException();
|
||||||
|
|
||||||
|
|
||||||
|
x = (FPNum)ctx.MkNumeral("-1e1", s);
|
||||||
|
y = (FPNum)ctx.MkNumeral("-10", s);
|
||||||
|
FPExpr q = (FPExpr)ctx.MkConst("q", s);
|
||||||
|
FPNum mh = (FPNum)ctx.MkNumeral("100", s);
|
||||||
|
slvr = ctx.MkSolver("QF_FPA");
|
||||||
|
// Let's prove -1e1 * -10 == +100
|
||||||
|
slvr.Add(ctx.MkEq(ctx.MkFPMul(ctx.MkFPRMNearestTiesToAway(), x, y), q));
|
||||||
|
slvr.Add(ctx.MkNot(ctx.MkFPEq(q, mh)));
|
||||||
|
if (slvr.Check() != Status.UNSATISFIABLE)
|
||||||
|
throw new TestFailedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Main(string[] args)
|
static void Main(string[] args)
|
||||||
|
@ -2050,30 +2088,30 @@ namespace test_mapi
|
||||||
// These examples need model generation turned on.
|
// These examples need model generation turned on.
|
||||||
using (Context ctx = new Context(new Dictionary<string, string>() { { "model", "true" } }))
|
using (Context ctx = new Context(new Dictionary<string, string>() { { "model", "true" } }))
|
||||||
{
|
{
|
||||||
BasicTests(ctx);
|
//BasicTests(ctx);
|
||||||
CastingTest(ctx);
|
//CastingTest(ctx);
|
||||||
SudokuExample(ctx);
|
//SudokuExample(ctx);
|
||||||
QuantifierExample1(ctx);
|
//QuantifierExample1(ctx);
|
||||||
QuantifierExample2(ctx);
|
//QuantifierExample2(ctx);
|
||||||
LogicExample(ctx);
|
//LogicExample(ctx);
|
||||||
ParOrExample(ctx);
|
//ParOrExample(ctx);
|
||||||
FindModelExample1(ctx);
|
//FindModelExample1(ctx);
|
||||||
FindModelExample2(ctx);
|
//FindModelExample2(ctx);
|
||||||
PushPopExample1(ctx);
|
//PushPopExample1(ctx);
|
||||||
ArrayExample1(ctx);
|
//ArrayExample1(ctx);
|
||||||
ArrayExample3(ctx);
|
//ArrayExample3(ctx);
|
||||||
BitvectorExample1(ctx);
|
//BitvectorExample1(ctx);
|
||||||
BitvectorExample2(ctx);
|
//BitvectorExample2(ctx);
|
||||||
ParserExample1(ctx);
|
//ParserExample1(ctx);
|
||||||
ParserExample2(ctx);
|
//ParserExample2(ctx);
|
||||||
ParserExample4(ctx);
|
//ParserExample4(ctx);
|
||||||
ParserExample5(ctx);
|
//ParserExample5(ctx);
|
||||||
ITEExample(ctx);
|
//ITEExample(ctx);
|
||||||
EvalExample1(ctx);
|
//EvalExample1(ctx);
|
||||||
EvalExample2(ctx);
|
//EvalExample2(ctx);
|
||||||
FindSmallModelExample(ctx);
|
//FindSmallModelExample(ctx);
|
||||||
SimplifierExample(ctx);
|
//SimplifierExample(ctx);
|
||||||
FiniteDomainExample(ctx);
|
//FiniteDomainExample(ctx);
|
||||||
FloatingPointExample(ctx);
|
FloatingPointExample(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2099,7 +2137,7 @@ namespace test_mapi
|
||||||
{
|
{
|
||||||
QuantifierExample3(ctx);
|
QuantifierExample3(ctx);
|
||||||
QuantifierExample4(ctx);
|
QuantifierExample4(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
Log.Close();
|
Log.Close();
|
||||||
if (Log.isOpen())
|
if (Log.isOpen())
|
||||||
|
|
Loading…
Reference in a new issue