From fbc59990c6bb07c0472112e4563dc59d1cb0c90c Mon Sep 17 00:00:00 2001 From: Etienne Kneuss <ekneuss@gmail.com> Date: Thu, 6 Aug 2015 15:05:54 +0200 Subject: [PATCH] Add unit-test for solver pools --- .../leon/test/solvers/SolverPoolSuite.scala | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/test/scala/leon/test/solvers/SolverPoolSuite.scala diff --git a/src/test/scala/leon/test/solvers/SolverPoolSuite.scala b/src/test/scala/leon/test/solvers/SolverPoolSuite.scala new file mode 100644 index 000000000..04d4d7723 --- /dev/null +++ b/src/test/scala/leon/test/solvers/SolverPoolSuite.scala @@ -0,0 +1,76 @@ +/* Copyright 2009-2015 EPFL, Lausanne */ + +package leon.test.solvers + +import leon._ +import leon.test._ +import leon.solvers._ +import leon.solvers.combinators._ + +import leon.purescala.Definitions._ +import leon.purescala.Expressions._ + +class SolverPoolSuite extends LeonTestSuite { + + private class DummySolver(val context : LeonContext, val program: Program) extends Solver { + val name = "Dummy" + val description = "dummy" + + def check: Option[Boolean] = None + def assertCnstr(e: Expr) = {} + def free() {} + def reset() {} + def getModel = ??? + } + + def sfactory(implicit ctx: LeonContext): SolverFactory[Solver] = { + SolverFactory(() => new DummySolver(ctx, Program.empty)) + } + + val poolSize = 5; + + test(s"SolverPool has at least $poolSize solvers") { implicit ctx => + + val sp = new SolverPoolFactory(ctx, sfactory) + + var solvers = Set[Solver]() + + for (i <- 1 to poolSize) { + solvers += sp.getNewSolver() + } + + solvers.size === poolSize + } + + test("SolverPool reuses solvers") { implicit ctx => + + val sp = new SolverPoolFactory(ctx, sfactory) + + var solvers = Set[Solver]() + + for (i <- 1 to poolSize) { + val s = sp.getNewSolver() + solvers += s + sp.reclaim(s) + } + + for (i <- 1 to poolSize) { + val s = sp.getNewSolver() + assert(solvers contains s, "Solver not reused?") + sp.reclaim(s) + } + } + + test(s"SolverPool can grow") { implicit ctx => + + val sp = new SolverPoolFactory(ctx, sfactory) + + var solvers = Set[Solver]() + + for (i <- 1 to poolSize+3) { + solvers += sp.getNewSolver() + } + + solvers.size === poolSize+3 + } +} -- GitLab