From b19c478f6016002a96e524a2ba6afc38e9a2ffe6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mika=C3=ABl=20Mayer?= <a-mikmay@microsoft.com>
Date: Thu, 22 Oct 2015 16:43:28 +0200
Subject: [PATCH] Added minimal string value Added values for generating
 values.

---
 src/main/scala/leon/datagen/VanuatooDataGen.scala | 10 ++++++++++
 src/main/scala/leon/purescala/ExprOps.scala       |  5 +++++
 2 files changed, 15 insertions(+)

diff --git a/src/main/scala/leon/datagen/VanuatooDataGen.scala b/src/main/scala/leon/datagen/VanuatooDataGen.scala
index e68e21f01..066b411de 100644
--- a/src/main/scala/leon/datagen/VanuatooDataGen.scala
+++ b/src/main/scala/leon/datagen/VanuatooDataGen.scala
@@ -32,12 +32,19 @@ class VanuatooDataGen(ctx: LeonContext, p: Program) extends DataGenerator {
   val booleans = (for (b <- Set(true, false)) yield {
     b -> Constructor[Expr, TypeTree](List(), BooleanType, s => BooleanLiteral(b), ""+b)
   }).toMap
+  
+  val strings = (for (b <- Set("", "a", "Abcd")) yield {
+    b -> Constructor[Expr, TypeTree](List(), StringType, s => StringLiteral(b), b)
+  }).toMap
+
 
   def intConstructor(i: Int) = ints(i)
   
   def bigIntConstructor(i: Int) = bigInts(i)
 
   def boolConstructor(b: Boolean) = booleans(b)
+  
+  def stringConstructor(s: String) = strings(s)
 
   def cPattern(c: Constructor[Expr, TypeTree], args: Seq[VPattern[Expr, TypeTree]]) = {
     ConstructorPattern[Expr, TypeTree](c, args)
@@ -166,6 +173,9 @@ class VanuatooDataGen(ctx: LeonContext, p: Program) extends DataGenerator {
     case (b: java.lang.Boolean, BooleanType) =>
       (cPattern(boolConstructor(b), List()), true)
 
+    case (b: java.lang.String, StringType) =>
+      (cPattern(stringConstructor(b), List()), true)
+
     case (cc: codegen.runtime.CaseClass, ct: ClassType) =>
       val r = cc.__getRead()
 
diff --git a/src/main/scala/leon/purescala/ExprOps.scala b/src/main/scala/leon/purescala/ExprOps.scala
index c106d1393..9acca4069 100644
--- a/src/main/scala/leon/purescala/ExprOps.scala
+++ b/src/main/scala/leon/purescala/ExprOps.scala
@@ -1100,6 +1100,7 @@ object ExprOps {
 
   /** Returns simplest value of a given type */
   def simplestValue(tpe: TypeTree) : Expr = tpe match {
+    case StringType                 => StringLiteral("")
     case Int32Type                  => IntLiteral(0)
     case RealType               	  => FractionalLiteral(0, 1)
     case IntegerType                => InfiniteIntegerLiteral(0)
@@ -1735,6 +1736,10 @@ object ExprOps {
         case UnitType =>
           // Anything matches ()
           ps.nonEmpty
+        
+        case StringType =>
+          // Can't possibly pattern match against all Strings one by one
+          ps exists (_.isInstanceOf[WildcardPattern])
 
         case Int32Type =>
           // Can't possibly pattern match against all Ints one by one
-- 
GitLab