<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p>Test.GenCheck is a Haskell library for <em>generalized
        proposition-based testing</em>.
      It simultaneously generalizes <strong>QuickCheck</strong> and <strong>SmallCheck</strong>.</p>
    <p>Its main novel features are:</p>
    <ul>
      <li>introduces a number of <em>testing strategies</em> and <em>strategy
          combinators</em>
      </li>
      <li>introduces a variety of test execution methods</li>
      <li>guarantees uniform sampling (at each rank) for the random
        strategy</li>
      <li>guarantees both uniqueness and coverage of all structures for
        the exhaustive strategy</li>
      <li>introduces an <em>extreme</em> strategy for testing
        unbalanced structures</li>
      <li>also introduces a <em>uniform</em> strategy which does
        uniform sampling along
        an enumeration</li>
      <li>allows different strategies to be mixed; for example one can
        exhaustively
        test all binary trees up to a certain size, filled with random
        integers.</li>
      <li>complete separation between properties, generators, testing
        strategies and test execution methods</li>
    </ul>
    <p>The package is based on a lot of previous research in
      combinatorics (combinatorial enumeration of structures and the
      theory of Species),
      as well as a number of established concepts in testing (from a
      software
      engineering perspective). In other words, further to the features
      already
      implemented in this first release, the package contains an
      extensible,
      general framework for generators, test case generation and
      management. It can
      also be very easily generalized to cover many more combinatorial
      structures
      unavailable as Haskell types.</p>
    <p>The package also provides interfaces for different levels of
      usage. In other
      words, there is a 'simple' interface for dealing with
      straightforward testing,
      a 'medium' interface for those who want to explore different
      testing strategies,
      and an 'advanced' interface for access to the full power of
      GenCheck.<br>
    </p>
    <p>See <a class="moz-txt-link-freetext" href="http://hackage.haskell.org/package/gencheck">http://hackage.haskell.org/package/gencheck</a> for further
      details.<br>
    </p>
    <p>In the source repository
      (<a class="moz-txt-link-freetext" href="https://github.com/JacquesCarette/GenCheck">https://github.com/JacquesCarette/GenCheck</a>), the file
      tutorial/reverse/TestReverseList.lhs shows the simplest kinds of
      tests
      (standard and deep for structures, or base for unstructured types)
      and
      reporting (checking, testing and full report) for the classical
      list reverse
      function. The files in tutorial/list_zipper show what can be done
      with
      the medium level interface (this tutorial is currently
      incomplete). The brave
      user can read the source code of the package for the advanced
      usage -- but
      we'll write a tutorial for this too, later.<br>
    </p>
    <p>User beware: this is gencheck-0.1, there are still a few rough
      edges.&nbsp; We plan to add a Template Haskell feature to this which
      should make deriving enumerators automatic for version 0.2.<br>
    </p>
    <p>Jacques and Gordon<br>
    </p>
  </body>
</html>