From 50edd0cb276b7463c608ac9d28f60d0b450853f9 Mon Sep 17 00:00:00 2001 From: Regis Blanc <regwblanc@gmail.com> Date: Wed, 6 Apr 2016 18:58:38 +0200 Subject: [PATCH] testing higher order function with mutable parameters --- .../HigherOrderFunctionsMutableParams1.scala | 24 +++++++++++++++++ .../HigherOrderFunctionsMutableParams2.scala | 22 ++++++++++++++++ .../HigherOrderFunctionsMutableParams3.scala | 26 +++++++++++++++++++ .../HigherOrderFunctionsMutableParams4.scala | 25 ++++++++++++++++++ 4 files changed, 97 insertions(+) create mode 100644 src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams1.scala create mode 100644 src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams2.scala create mode 100644 src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams3.scala create mode 100644 src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams4.scala diff --git a/src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams1.scala b/src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams1.scala new file mode 100644 index 000000000..4ea4032fb --- /dev/null +++ b/src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams1.scala @@ -0,0 +1,24 @@ +object HigherOrderFunctionsMutableParams1 { + + case class A(var x: BigInt) + + def app(f: (A) => Unit, a: A): Unit = { + f(a) + } + + def fImpl(a: A): Unit = { + a.x += 1 + } + + + def test(): BigInt = { + val a = A(0) + app(fImpl, a) + assert(a.x == 1) + app(fImpl, a) + assert(a.x == 2) + app(fImpl, a) + a.x + } ensuring(_ == 3) + +} diff --git a/src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams2.scala b/src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams2.scala new file mode 100644 index 000000000..dbf341385 --- /dev/null +++ b/src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams2.scala @@ -0,0 +1,22 @@ +object HigherOrderFunctionsMutableParams2 { + + case class A(var x: BigInt) + + def app(f: (A) => BigInt, a: A): BigInt = { + f(a) + } + + def fImpl(a: A): BigInt = { + a.x += 1 + a.x + } + + + def test(): BigInt = { + val a = A(0) + app(fImpl, a) + app(fImpl, a) + app(fImpl, a) + } ensuring(_ == 3) + +} diff --git a/src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams3.scala b/src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams3.scala new file mode 100644 index 000000000..c8dfc83bb --- /dev/null +++ b/src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams3.scala @@ -0,0 +1,26 @@ +object HigherOrderFunctionsMutableParams3 { + + case class A(var x: BigInt) + + def app(f: (A) => BigInt, a: A): BigInt = { + f(a) + } + + def fImpl1(a: A): BigInt = { + a.x += 1 + a.x + } + def fImpl2(a: A): BigInt = { + a.x += 10 + a.x + } + + + def test(): BigInt = { + val a = A(0) + app(fImpl1, a) + app(fImpl2, a) + app(fImpl1, a) + } ensuring(_ == 12) + +} diff --git a/src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams4.scala b/src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams4.scala new file mode 100644 index 000000000..e379dfef4 --- /dev/null +++ b/src/test/resources/regression/verification/xlang/valid/HigherOrderFunctionsMutableParams4.scala @@ -0,0 +1,25 @@ +object HigherOrderFunctionsMutableParams4 { + + case class A(var x: BigInt) + + def app(f: (A) => BigInt, a: A): BigInt = { + f(a) + } + + def test(): BigInt = { + val a = A(0) + app((a2: A) => { + a2.x += 1 + a2.x + }, a) + app((a2: A) => { + a2.x += 10 + a2.x + }, a) + app((a2: A) => { + a2.x += 1 + a2.x + }, a) + } ensuring(_ == 12) + +} -- GitLab