SpecWithExtern.scala [raw]
import stainless.annotation._
object SpecWithExtern {
//random between returns any value between l and h.
//For execution via scalac, we pick one valid implementation, but
//we would like the program to be verified versus any possible
//implementation, which should happen thanks to @extern
@extern
def randomBetween(l: Int, h: Int): Int = {
require(l <= h)
l
} ensuring(res => (res >= l && res <= h))
//postcondition is wrong, but if stainless considers
//actual body of randomBetween it would be correct
def wrongProp(): Int = {
randomBetween(0, 10)
} ensuring(res => res >= 0 && res < 10)
// Counterexample for postcondition violation in `wrongProp`:
// empty counter example
}
back