From 1dd91cc0775b58ef1a3d6d72eed92070c0a3c029 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ali=20Sinan=20K=C3=B6ksal?= <alisinan@gmail.com> Date: Wed, 19 Jan 2011 16:25:06 +0000 Subject: [PATCH] Test integer lower and upper bounds specified as command-line option. --- src/funcheck/FunCheckPlugin.scala | 2 ++ src/purescala/Settings.scala | 1 + src/purescala/Z3Solver.scala | 4 ++-- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/funcheck/FunCheckPlugin.scala b/src/funcheck/FunCheckPlugin.scala index 89af09e58..9337fb700 100644 --- a/src/funcheck/FunCheckPlugin.scala +++ b/src/funcheck/FunCheckPlugin.scala @@ -29,6 +29,7 @@ class FunCheckPlugin(val global: Global) extends Plugin { " -P:funcheck:nobapa Disable BAPA Z3 extension" + "\n" + " -P:funcheck:impure Generate testcases only for impure functions" + "\n" + " -P:funcheck:testcases=[1,2] Number of testcases to generate per function" + "\n" + + " -P:funcheck:testbounds=l:u Lower and upper bounds for integers in recursive datatypes" + "\n" + " -P:funcheck:quiet No info and warning messages from the extensions" + "\n" + " -P:funcheck:XP Enable weird transformations and other bug-producing features" + "\n" + " -P:funcheck:PLDI PLDI 2011 settings. Now frozen. Not completely functional. See CAV." + "\n" + @@ -56,6 +57,7 @@ class FunCheckPlugin(val global: Global) extends Plugin { case s if s.startsWith("unrolling=") => purescala.Settings.unrollingLevel = try { s.substring("unrolling=".length, s.length).toInt } catch { case _ => 0 } case s if s.startsWith("functions=") => purescala.Settings.functionsToAnalyse = Set(splitList(s.substring("functions=".length, s.length)): _*) case s if s.startsWith("extensions=") => purescala.Settings.extensionNames = splitList(s.substring("extensions=".length, s.length)) + case s if s.startsWith("testbounds=") => purescala.Settings.testBounds = try { val l = splitList(s.substring("testBounds=".length, s.length)).map(_.toInt); if (l.size != 2) (0, 3) else (l(0), l(1)) } catch { case _ => (0, 3) } case s if s.startsWith("testcases=") => purescala.Settings.nbTestcases = try { s.substring("testcases=".length, s.length).toInt } catch { case _ => 1 } case _ => error("Invalid option: " + option) } diff --git a/src/purescala/Settings.scala b/src/purescala/Settings.scala index 720b3ea58..c1e378783 100644 --- a/src/purescala/Settings.scala +++ b/src/purescala/Settings.scala @@ -16,6 +16,7 @@ object Settings { var useBAPA: Boolean = true var impureTestcases: Boolean = false var nbTestcases: Int = 1 + var testBounds: (Int, Int) = (0, 3) var useInstantiator: Boolean = false var useFairInstantiator: Boolean = false def useAnyInstantiator : Boolean = useInstantiator || useFairInstantiator diff --git a/src/purescala/Z3Solver.scala b/src/purescala/Z3Solver.scala index aad4a92a0..30585f288 100644 --- a/src/purescala/Z3Solver.scala +++ b/src/purescala/Z3Solver.scala @@ -176,8 +176,8 @@ class Z3Solver(val reporter: Reporter) extends Solver(reporter) with AbstractZ3S } private def boundValues : Unit = { - val upperBound: Z3AST = z3.mkInt(3, z3.mkIntSort) - val lowerBound: Z3AST = z3.mkInt(0, z3.mkIntSort) + val lowerBound: Z3AST = z3.mkInt(Settings.testBounds._1, z3.mkIntSort) + val upperBound: Z3AST = z3.mkInt(Settings.testBounds._2, z3.mkIntSort) def isUnbounded(field: VarDecl) : Boolean = field.getType match { case Int32Type => true -- GitLab