From 12032a9a858de434fe3917654b3b4e5e555136e2 Mon Sep 17 00:00:00 2001
From: Regis Blanc <regwblanc@gmail.com>
Date: Tue, 10 Feb 2015 13:17:02 +0100
Subject: [PATCH] Unit test for default evaluator

---
 .../evaluators/DefaultEvaluatorTests.scala    | 106 ++++++++++++++++++
 1 file changed, 106 insertions(+)
 create mode 100644 src/test/scala/leon/test/evaluators/DefaultEvaluatorTests.scala

diff --git a/src/test/scala/leon/test/evaluators/DefaultEvaluatorTests.scala b/src/test/scala/leon/test/evaluators/DefaultEvaluatorTests.scala
new file mode 100644
index 000000000..8b0946d8b
--- /dev/null
+++ b/src/test/scala/leon/test/evaluators/DefaultEvaluatorTests.scala
@@ -0,0 +1,106 @@
+/* Copyright 2009-2014 EPFL, Lausanne */
+
+package leon.test.evaluators
+
+import leon._
+import leon.evaluators._ 
+
+import leon.utils.{TemporaryInputPhase, PreprocessingPhase}
+import leon.frontends.scalac.ExtractionPhase
+
+import leon.purescala.Common._
+import leon.purescala.Definitions._
+import leon.purescala.Trees._
+import leon.purescala.DefOps._
+import leon.purescala.TypeTrees._
+
+
+class DefaultEvaluatorTests extends leon.test.LeonTestSuite {
+  private implicit lazy val leonContext: LeonContext = createLeonContext()
+  private val emptyProgram = Program.empty
+
+  private val defaultEvaluator = new DefaultEvaluator(leonContext, emptyProgram)
+
+  def expectSuccessful(res: EvaluationResults.Result, expected: Expr): Unit = {
+    res match {
+      case EvaluationResults.Successful(value) => assert(value === expected)
+      case _ => assert(false)
+    }
+  }
+
+  test("eval correctly evaluates literals") {
+    expectSuccessful(defaultEvaluator.eval(BooleanLiteral(true)), BooleanLiteral(true))
+    expectSuccessful(defaultEvaluator.eval(BooleanLiteral(false)), BooleanLiteral(false))
+    expectSuccessful(defaultEvaluator.eval(IntLiteral(0)), IntLiteral(0))
+    expectSuccessful(defaultEvaluator.eval(IntLiteral(42)), IntLiteral(42))
+    expectSuccessful(defaultEvaluator.eval(UnitLiteral()), UnitLiteral())
+  }
+
+  test("eval of simple arithmetic expressions") {
+    expectSuccessful(
+      defaultEvaluator.eval(Plus(IntLiteral(3), IntLiteral(5))), IntLiteral(8))
+    expectSuccessful(
+      defaultEvaluator.eval(Minus(IntLiteral(7), IntLiteral(2))), IntLiteral(5))
+    expectSuccessful(
+      defaultEvaluator.eval(UMinus(IntLiteral(7))), IntLiteral(-7))
+    expectSuccessful(
+      defaultEvaluator.eval(Times(IntLiteral(2), IntLiteral(3))), IntLiteral(6)) 
+    expectSuccessful(
+      defaultEvaluator.eval(Modulo(IntLiteral(10), IntLiteral(3))), IntLiteral(1))
+  }
+
+  test("Eval of simple boolean operations") {
+    expectSuccessful(
+      defaultEvaluator.eval(And(BooleanLiteral(true), BooleanLiteral(true))),
+      BooleanLiteral(true))
+    expectSuccessful(
+      defaultEvaluator.eval(And(BooleanLiteral(true), BooleanLiteral(false))),
+      BooleanLiteral(false))
+    expectSuccessful(
+      defaultEvaluator.eval(And(BooleanLiteral(false), BooleanLiteral(false))),
+      BooleanLiteral(false))
+    expectSuccessful(
+      defaultEvaluator.eval(And(BooleanLiteral(false), BooleanLiteral(true))),
+      BooleanLiteral(false))
+    expectSuccessful(
+      defaultEvaluator.eval(Or(BooleanLiteral(true), BooleanLiteral(true))),
+      BooleanLiteral(true))
+    expectSuccessful(
+      defaultEvaluator.eval(Or(BooleanLiteral(true), BooleanLiteral(false))),
+      BooleanLiteral(true))
+    expectSuccessful(
+      defaultEvaluator.eval(Or(BooleanLiteral(false), BooleanLiteral(false))),
+      BooleanLiteral(false))
+    expectSuccessful(
+      defaultEvaluator.eval(Or(BooleanLiteral(false), BooleanLiteral(true))),
+      BooleanLiteral(true))
+    expectSuccessful(
+      defaultEvaluator.eval(Not(BooleanLiteral(false))),
+      BooleanLiteral(true))
+    expectSuccessful(
+      defaultEvaluator.eval(Not(BooleanLiteral(true))),
+      BooleanLiteral(false))
+  }
+
+
+  test("eval simple variable") {
+    val id = FreshIdentifier("id").setType(Int32Type)
+    expectSuccessful(
+      defaultEvaluator.eval(Variable(id), Map(id -> IntLiteral(23))),
+      IntLiteral(23))
+  }
+
+  test("eval with unbound variable should return EvaluatorError") {
+    val id = FreshIdentifier("id").setType(Int32Type)
+    val foo = FreshIdentifier("foo").setType(Int32Type)
+    val res = defaultEvaluator.eval(Variable(id), Map(foo -> IntLiteral(23)))
+    assert(res.isInstanceOf[EvaluationResults.EvaluatorError])
+  }
+
+  test("eval let expression") {
+    val id = FreshIdentifier("id")
+    expectSuccessful(
+      defaultEvaluator.eval(Let(id, IntLiteral(42), Variable(id))),
+      IntLiteral(42))
+  }
+}
-- 
GitLab