[Haskell-cafe] ANN: rematch, an library for composable assertions with human readable failure messages

Petr Pudlák petr.mvd at gmail.com
Tue Apr 16 18:37:46 CEST 2013


Hi tom,

I had problems installing version 0.1.2.1 on GHC  7.4.1:

Resolving dependencies...
>
Downloading rematch-0.1.2.1...
>
Configuring rematch-0.1.2.1...
>
Building rematch-0.1.2.1...
>
Preprocessing library rematch-0.1.2.1...
>
[1 of 4] Compiling Control.Rematch.Formatting (
> Control/Rematch/Formatting.hs, dist/build/Control/Rematch/Formatting.o )
>
[2 of 4] Compiling Control.Rematch.Run ( Control/Rematch/Run.hs,
> dist/build/Control/Rematch/Run.o )
>
[3 of 4] Compiling Control.Rematch  ( Control/Rematch.hs,
> dist/build/Control/Rematch.o )
>
[4 of 4] Compiling Control.Rematch.QuickCheck (
> Control/Rematch/QuickCheck.hs, dist/build/Control/Rematch/QuickCheck.o )
>

> Control/Rematch/QuickCheck.hs:19:3:
>
    `exhaustive' is not a (visible) method of class `Testable'
>
Failed to install rematch-0.1.2.1
>
cabal: Error: some packages failed to install:
>
rematch-0.1.2.1 failed during the building phase. The exception was:
>
ExitFailure 1
>

I installed v 0.1.2.0 without problems.

  Best regards,
  Petr


2013/4/16 Tom Crayford <tcrayford at gmail.com>

> I kept on running into this thing where I was calling error in quickcheck
> to get good error messages about the things I was comparing. In Java land,
> this stuff is handled by Hamcrest: a library for composable assertions with
> good error messages. This library is basically a port of hamcrest's core
> api, but I've been very pleased with how it turned out.
>
> I've been using this in tests for production code for a month or so now,
> and I'm very pleased with it.
>
> Running a matcher (in this example in an hunit test) looks like this:
>
> expect [1] (is [1])
>
>  The core API is very simple:
>
>  data Matcher a = Matcher {
>     match :: a -> Bool
>   -- ^ A function that returns True if the matcher should pass, False if
> it should fail
>   , description :: String
>   -- ^ A description of the matcher (usually of its success conditions)
>   , describeMismatch :: a -> String
>   -- ^ A description to be shown if the match fails.
>   }
>
> This means you can add/write your own matchers happily, which occasionally
> means you can write *very* nice test code (here's an example of using a
> custom matcher for checking the state of an "issue" in a hypothetical issue
> tracking app):
>
> expect latestIssue (hasState Resolved)
>
> -- I removed the supporting code to make this assertion actually run,
> -- this email is already pretty long.
>
> There are numerous matchers (and functions for creating matchers) in the
> rematch library, including some composition functions that provide good
> failure messages.
>
> There are some shims to hook rematch into the common haskell test
> frameworks (specifically hunit and quickcheck).
>
> The two libraries are up on hackage:
> http://hackage.haskell.org/package/rematch
> http://hackage.haskell.org/package/rematch-text
>
> The code is all up on github:
>
> http://github.com/tcrayford/rematch
>
> I get rather frustrated when my tests give bad failure explanations, and
> using rematch goes a long way to fix that.
>
> Lastly, rematch is pretty isolated from test frameworks/etc, with a very
> small and easy to understand surface api. Hopefully it'll help with the
> thing I've seen in other languages (cough ruby cough) with every test
> framework reinventing this idea, and not all frameworks having all the
> matchers I want to use.
>
> Let me know if you have any feedback/thoughts
>
> Tom
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130416/289eddc9/attachment-0001.htm>


More information about the Haskell-Cafe mailing list