Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ case class DecreasesTuple(tupleExpressions: Seq[Exp] = Nil, override val conditi

override lazy val prettyPrint: PrettyPrintPrimitives#Cont = {
text("decreases") <>
(if (tupleExpressions.nonEmpty) space <> ssep(tupleExpressions map (toParenDoc(_)), char(',') <> space) else nil)
(if (tupleExpressions.nonEmpty) space <> ssep(tupleExpressions map (toParenDoc(_)), char(',') <> space) else nil) <>
Comment thread
jcp19 marked this conversation as resolved.
(if (condition.nonEmpty) space <> "if" <+> toParenDoc(condition.get) else nil)
}

override val extensionSubnodes: Seq[Node] = tupleExpressions ++ condition
Expand All @@ -76,7 +77,10 @@ case class DecreasesWildcard(override val condition: Option[Exp] = None)

override val typ: Type = Bool

override lazy val prettyPrint: PrettyPrintPrimitives#Cont = text("decreases _")
override lazy val prettyPrint: PrettyPrintPrimitives#Cont = {
text("decreases _") <>
(if (condition.nonEmpty) space <> "if" <+> toParenDoc(condition.get) else nil)
}

override val extensionSubnodes: Seq[Node] = condition.toSeq

Expand Down
40 changes: 40 additions & 0 deletions src/test/scala/PrettyPrinterTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -118,5 +118,45 @@ class PrettyPrinterTest extends AnyFunSuite with Matchers {
assert(origString == resString)
}

test("Test pretty printing conditional wildcard termination measures") {
import viper.silver.plugin.standard.termination.DecreasesWildcard

val m = Method(
name = "f",
formalArgs = Seq.empty,
formalReturns = Seq.empty,
pres = Seq(DecreasesWildcard(Some(TrueLit()()))()),
posts = Seq.empty,
body = None
)()
val actual = m.toString().trim
val expected =
"""
|method f()
| decreases _ if true
|""".stripMargin.trim
assert(actual == expected)
}

test("Test pretty printing conditional tuple termination measures") {
import viper.silver.plugin.standard.termination.DecreasesTuple

val m = Method(
name = "f",
formalArgs = Seq.empty,
formalReturns = Seq.empty,
pres = Seq(DecreasesTuple(Seq(IntLit(1)()), Some(TrueLit()()))()),
posts = Seq.empty,
body = None
)()
val actual = m.toString().trim
val expected =
"""
|method f()
| decreases 1 if true
|""".stripMargin.trim
assert(actual == expected)
}


}