From 0b232f11d50f7c93bb77f4df77b904721ed0d384 Mon Sep 17 00:00:00 2001 From: Regis Blanc <regwblanc@gmail.com> Date: Fri, 17 Jul 2015 17:37:54 +0200 Subject: [PATCH] check for division by zero of real numbers --- src/main/scala/leon/verification/InjectAsserts.scala | 6 ++++++ .../purescala/invalid/RealDivisionByZero.scala | 11 +++++++++++ .../purescala/valid/RealDivisionByZero.scala | 11 +++++++++++ 3 files changed, 28 insertions(+) create mode 100644 src/test/resources/regression/verification/purescala/invalid/RealDivisionByZero.scala create mode 100644 src/test/resources/regression/verification/purescala/valid/RealDivisionByZero.scala diff --git a/src/main/scala/leon/verification/InjectAsserts.scala b/src/main/scala/leon/verification/InjectAsserts.scala index fae6329c8..2710b3994 100644 --- a/src/main/scala/leon/verification/InjectAsserts.scala +++ b/src/main/scala/leon/verification/InjectAsserts.scala @@ -62,6 +62,12 @@ object InjectAsserts extends LeonPhase[Program, Program] { e ).setPos(e)) + case e @ RealDivision(_, d) => + Some(Assert(Not(Equals(d, RealLiteral(0))), + Some("Division by zero"), + e + ).setPos(e)) + case _ => None }) diff --git a/src/test/resources/regression/verification/purescala/invalid/RealDivisionByZero.scala b/src/test/resources/regression/verification/purescala/invalid/RealDivisionByZero.scala new file mode 100644 index 000000000..418fbb9e8 --- /dev/null +++ b/src/test/resources/regression/verification/purescala/invalid/RealDivisionByZero.scala @@ -0,0 +1,11 @@ +import leon.lang._ +import leon.collection._ +import leon._ + +object RealDivisionByZero { + + def divByZero(x: Real): Boolean = { + (x / Real(0) == Real(10)) + } + +} diff --git a/src/test/resources/regression/verification/purescala/valid/RealDivisionByZero.scala b/src/test/resources/regression/verification/purescala/valid/RealDivisionByZero.scala new file mode 100644 index 000000000..3d8dcf5b2 --- /dev/null +++ b/src/test/resources/regression/verification/purescala/valid/RealDivisionByZero.scala @@ -0,0 +1,11 @@ +import leon.lang._ +import leon.collection._ +import leon._ + +object RealDivisionByZero { + + def noDivByZero(x: Real): Boolean = { + (x / Real(10) == Real(10)) + } + +} -- GitLab