From 7a27d85a5ad53a8a919a9d0922103b5d7169a069 Mon Sep 17 00:00:00 2001
From: Regis Blanc <regwblanc@gmail.com>
Date: Wed, 6 Apr 2016 19:44:18 +0200
Subject: [PATCH] shift a list using map with state

---
 .../HigherOrderFunctionsMutableParams6.scala  | 31 +++++++++++++++++++
 1 file changed, 31 insertions(+)
 create mode 100644 src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams6.scala

diff --git a/src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams6.scala b/src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams6.scala
new file mode 100644
index 000000000..fcdc822b1
--- /dev/null
+++ b/src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams6.scala
@@ -0,0 +1,31 @@
+object HigherOrderFunctionsMutableParams6 {
+
+  abstract class List
+  case class Cons(head: BigInt, tail: List) extends List
+  case class Nil() extends List
+
+  case class A(var x: BigInt)
+
+  def map(ls: List, f: (BigInt, A) => BigInt, a: A): List = ls match {
+    case Cons(head, tail) => 
+      Cons(f(head, a), map(tail, f, a))
+
+    case Nil() => Nil()
+  }
+
+  def fImpl(el: BigInt, a: A): BigInt = {
+    val last = a.x
+    a.x = el
+    last
+  }
+  
+  def shift(ls: List): List = {
+    val a = A(0)
+    map(ls, fImpl, a)
+  }
+
+  def test(): List = {
+    val l = Cons(2, Cons(4, Cons(6, Nil())))
+    shift(l)
+  } ensuring(res => res == Cons(0, Cons(2, Cons(4, Nil()))))
+}
-- 
GitLab