From b0313723efbfe44b6b74072407c9d77720380603 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mika=C3=ABl=20Mayer?= <a-mikmay@microsoft.com> Date: Wed, 25 Nov 2015 17:16:36 +0100 Subject: [PATCH] Added more benchmarks for string rendering. --- testcases/stringrender/ChoiceRender.scala | 31 +++++++++++++++ testcases/stringrender/ConstantRender.scala | 43 +++++++++++++++++++++ testcases/stringrender/Example-Stack.scala | 33 ++++++++++++++++ 3 files changed, 107 insertions(+) create mode 100644 testcases/stringrender/ChoiceRender.scala create mode 100644 testcases/stringrender/ConstantRender.scala diff --git a/testcases/stringrender/ChoiceRender.scala b/testcases/stringrender/ChoiceRender.scala new file mode 100644 index 000000000..3547d6fdc --- /dev/null +++ b/testcases/stringrender/ChoiceRender.scala @@ -0,0 +1,31 @@ +/** + * Name: TupleWrapperRender.scala + * Creation: 15.10.2015 + * Author: Mikaël Mayer (mikael.mayer@epfl.ch) + * Comments: Tuple rendering specifications. + */ + +import leon.lang._ +import leon.annotation._ +import leon.collection._ +import leon.collection.ListOps._ +import leon.lang.synthesis._ + +object ChoiceRender { + sealed abstract class Thread + case class T1() extends Thread + case class T2() extends Thread + case class T3() extends Thread + + sealed abstract class Action + case class Call(t: Thread, args: Option[Int]) extends Action + + @inline def psStandard(s: Action) = (res: String) => (s, res) passes { + case Call(T1(),None()) => "T1 call" + case Call(T1(),Some(2)) => "T1 -> 2" + } + + def synthesizeStandard(s: Action): String = { + ???[String] + } ensuring psStandard(s) +} \ No newline at end of file diff --git a/testcases/stringrender/ConstantRender.scala b/testcases/stringrender/ConstantRender.scala new file mode 100644 index 000000000..f208fdb2b --- /dev/null +++ b/testcases/stringrender/ConstantRender.scala @@ -0,0 +1,43 @@ +/** + * Name: TupleWrapperRender.scala + * Creation: 15.10.2015 + * Author: Mikaël Mayer (mikael.mayer@epfl.ch) + * Comments: Tuple rendering specifications. + */ + +import leon.lang._ +import leon.annotation._ +import leon.collection._ +import leon.collection.ListOps._ +import leon.lang.synthesis._ + +object ConstantRender { + sealed abstract class Thread + case class T1() extends Thread + case class T2() extends Thread + case class T3() extends Thread + + @inline def psStandard(s: Thread) = (res: String) => (s, res) passes { + case T1() => "T1" + } + + @inline def psSuffix(s: Thread) = (res: String) => (s, res) passes { + case T1() => "T1()" + } + + @inline def psPrefix(s: Thread) = (res: String) => (s, res) passes { + case T1() => "Call: T1()" + } + + def synthesizeStandard(s: Thread): String = { + ???[String] + } ensuring psStandard(s) + + def synthesizeSuffix(s: Thread): String = { + ???[String] + } ensuring psSuffix(s) + + def synthesizePrefix(s: Thread): String = { + ???[String] + } ensuring psPrefix(s) +} \ No newline at end of file diff --git a/testcases/stringrender/Example-Stack.scala b/testcases/stringrender/Example-Stack.scala index 1f5024671..bb9f64d1f 100644 --- a/testcases/stringrender/Example-Stack.scala +++ b/testcases/stringrender/Example-Stack.scala @@ -326,6 +326,39 @@ object AtomicStack { } holds + def threadToStringSimplest(p: StackTid): String = { + ???[String] + } ensuring { + res => (p, res) passes { + case T1() + => + "T1: call Push(5)" + } + } + + def threadToStringSimple0(p: Event[StackTid,StackMethodName,Option[BigInt],Option[BigInt]]): String = { + ???[String] + } ensuring { + res => (p, res) passes { + case CallEvent(T1(), Push(), Some(BigInt(5))) + => + "T1: call Push(5)" + } + } + + def threadToStringSimple1(p: List[Event[StackTid,StackMethodName,Option[BigInt],Option[BigInt]]]): String = { + ???[String] + } ensuring { + res => (p, res) passes { + case Cons(CallEvent(T1(), Push(), Some(BigInt(5))), + Cons(InternalEvent(T1()), Nil())) + => + "T1: call Push(5)\nT1: internal" + } + } + + + /** This is THE method we want to render */ def threadToString(p: List[Event[StackTid,StackMethodName,Option[BigInt],Option[BigInt]]]): String = { ???[String] } ensuring { -- GitLab