import org.specs._ import org.scalacheck._ class MySpec extends Specification with ScalaCheck { override val defaultPrettyParams = Pretty.Params(2) "your scalachecky specs here" should { //... } }The magical '2' in Pretty.Params(2) tells Scalacheck to spit out the full stack trace instead of just the error message from the exception.
noodling towards a functional brain
Wednesday, August 17, 2011
The magical Specs/ScalaCheck defaultPrettyParams configuration implicit
When using Specs with ScalaCheck, I have occasionally found myself annoyed that, when a function under test threw an exception, ScalaCheck didn't show me enough of a stack trace to actually figure out what was going on. There is a means to configure this, but to the best of my knowledge it's essentially not documented anywhere. In any case, to get full stack traces in your spec, all that you need is this:
Sunday, February 27, 2011
Code Retreat Boulder: Conway's Life
I had a ton of fun yesterday at Code Retreat Boulder, even though I ended up as the Scala guy and thus didn't get to play in other languages as much as I would have liked.
Anyway, this morning I decided to recreate my favorite of the solutions. Small, simple, pure, and relatively flexible:
import scala.annotation.tailrec trait Life { type Entity type Population = Set[Entity] def generation(pop: Population) = pop.flatMap(neighborhood).filter { entity => willLive(pop.contains(entity), neighbors(entity).count(pop.contains)) } def neighbors(entity: Entity): Seq[Entity] def neighborhood(entity: Entity) = neighbors(entity) :+ entity def willLive(now: Boolean, n: Int): Boolean def render(pop: Population): Unit = println(pop) @tailrec final def run(pop: Population): Unit = { render(pop) if (!pop.isEmpty) run(generation(pop)) } } class Life2D extends Life { type Entity = (Int, Int) override def willLive(now: Boolean, n: Int) = ((now && n == 2) || n == 3) override def neighbors(entity: Entity) = entity match { case (x, y) => for (i <- x-1 to x+1; j <- y-1 to y+1 if !(i == x && j == y)) yield (i, j) } } object Blinker extends Life2D { def main(argv: Array[String]) = run(Set((1, 0), (1, 1), (1, 2))) }
Subscribe to:
Posts (Atom)