<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!--Rendered using the Haskell Html Library v0.2--> <HTML ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE >Test.HUnit.Base</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ><SCRIPT SRC="haddock-util.js" TYPE="text/javascript" ></SCRIPT ><SCRIPT TYPE="text/javascript" >window.onload = function () {setSynopsis("mini_Test-HUnit-Base.html")};</SCRIPT ></HEAD ><BODY ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="topbar" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title" >HUnit-1.2.2.1: A unit testing framework for Haskell</TD ><TD CLASS="topbut" ><A HREF="src/Test-HUnit-Base.html" >Source code</A ></TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A ></TD ><TD CLASS="topbut" ><A HREF="doc-index.html" >Index</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="modulebar" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD ><FONT SIZE="6" >Test.HUnit.Base</FONT ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="section4" ><B >Contents</B ></TD ></TR ><TR ><TD ><DL ><DT ><A HREF="#1" >Declaring tests </A ></DT ><DT ><A HREF="#2" >Making assertions </A ></DT ><DT ><A HREF="#3" >Extending the assertion functionality </A ></DT ><DT ><A HREF="#4" >Test execution </A ></DT ></DL ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" >Description</TD ></TR ><TR ><TD CLASS="doc" ><P >Basic definitions for the HUnit library. </P ><P >This module contains what you need to create assertions and test cases and combine them into test suites. </P ><P >This module also provides infrastructure for implementing test controllers (which are used to execute tests). See <A HREF="Test-HUnit-Text.html" >Test.HUnit.Text</A > for a great example of how to implement a test controller. </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" >Synopsis</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A HREF="#t%3ATest" >Test</A > </TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" >= <A HREF="#v%3ATestCase" >TestCase</A > <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3ATestList" >TestList</A > [<A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A >]</TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3ATestLabel" >TestLabel</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A > <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3A~%3D%3F" >(~=?)</A > :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq" >Eq</A > a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow" >Show</A > a) => a -> a -> <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3A~%3F%3D" >(~?=)</A > :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq" >Eq</A > a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow" >Show</A > a) => a -> a -> <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3A~%3A" >(~:)</A > :: <A HREF="Test-HUnit-Base.html#t%3ATestable" >Testable</A > t => <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> t -> <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3A~%3F" >(~?)</A > :: <A HREF="Test-HUnit-Base.html#t%3AAssertionPredicable" >AssertionPredicable</A > t => t -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AassertFailure" >assertFailure</A > :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AassertBool" >assertBool</A > :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A > -> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AassertEqual" >assertEqual</A > :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq" >Eq</A > a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow" >Show</A > a) => <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> a -> a -> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AassertString" >assertString</A > :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3AAssertion" >Assertion</A > = <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29" >()</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3A%40%3D%3F" >(@=?)</A > :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq" >Eq</A > a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow" >Show</A > a) => a -> a -> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3A%40%3F%3D" >(@?=)</A > :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq" >Eq</A > a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow" >Show</A > a) => a -> a -> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3A%40%3F" >(@?)</A > :: <A HREF="Test-HUnit-Base.html#t%3AAssertionPredicable" >AssertionPredicable</A > t => t -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >class</SPAN > <A HREF="#t%3AAssertable" >Assertable</A > t <SPAN CLASS="keyword" >where</SPAN ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="#v%3Aassert" >assert</A > :: t -> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >class</SPAN > <A HREF="#t%3AListAssertable" >ListAssertable</A > t <SPAN CLASS="keyword" >where</SPAN ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="#v%3AlistAssert" >listAssert</A > :: [t] -> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3AAssertionPredicate" >AssertionPredicate</A > = <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >class</SPAN > <A HREF="#t%3AAssertionPredicable" >AssertionPredicable</A > t <SPAN CLASS="keyword" >where</SPAN ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="#v%3AassertionPredicate" >assertionPredicate</A > :: t -> <A HREF="Test-HUnit-Base.html#t%3AAssertionPredicate" >AssertionPredicate</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >class</SPAN > <A HREF="#t%3ATestable" >Testable</A > t <SPAN CLASS="keyword" >where</SPAN ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="#v%3Atest" >test</A > :: t -> <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A HREF="#t%3AState" >State</A > = <A HREF="#v%3AState" >State</A > {<TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="recfield" ><A HREF="#v%3Apath" >path</A > :: <A HREF="Test-HUnit-Base.html#t%3APath" >Path</A ></TD ></TR ><TR ><TD CLASS="recfield" ><A HREF="#v%3Acounts" >counts</A > :: <A HREF="Test-HUnit-Base.html#t%3ACounts" >Counts</A ></TD ></TR ></TABLE >}</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A HREF="#t%3ACounts" >Counts</A > = <A HREF="#v%3ACounts" >Counts</A > {<TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="recfield" ><A HREF="#v%3Acases" >cases</A > :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A ></TD ></TR ><TR ><TD CLASS="recfield" ><A HREF="#v%3Atried" >tried</A > :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A ></TD ></TR ><TR ><TD CLASS="recfield" ><A HREF="#v%3Aerrors" >errors</A > :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A ></TD ></TR ><TR ><TD CLASS="recfield" ><A HREF="#v%3Afailures" >failures</A > :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A ></TD ></TR ></TABLE >}</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3APath" >Path</A > = [<A HREF="Test-HUnit-Base.html#t%3ANode" >Node</A >]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A HREF="#t%3ANode" >Node</A > </TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" >= <A HREF="#v%3AListItem" >ListItem</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A ></TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3ALabel" >Label</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A ></TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtestCasePaths" >testCasePaths</A > :: <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A > -> [<A HREF="Test-HUnit-Base.html#t%3APath" >Path</A >]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtestCaseCount" >testCaseCount</A > :: <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A > -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3AReportStart" >ReportStart</A > us = <A HREF="Test-HUnit-Base.html#t%3AState" >State</A > -> us -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > us</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3AReportProblem" >ReportProblem</A > us = <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> <A HREF="Test-HUnit-Base.html#t%3AState" >State</A > -> us -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > us</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AperformTest" >performTest</A > :: <A HREF="Test-HUnit-Base.html#t%3AReportStart" >ReportStart</A > us -> <A HREF="Test-HUnit-Base.html#t%3AReportProblem" >ReportProblem</A > us -> <A HREF="Test-HUnit-Base.html#t%3AReportProblem" >ReportProblem</A > us -> us -> <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A > -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > (<A HREF="Test-HUnit-Base.html#t%3ACounts" >Counts</A >, us)</TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="1" ><A NAME="1" >Declaring tests </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><SPAN CLASS="keyword" >data</SPAN > <A NAME="t:Test" ><A NAME="t%3ATest" ></A ></A ><B >Test</B > </TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#Test" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" >The basic structure used to create an annotated tree of test cases. </TD ></TR ><TR ><TD CLASS="section4" >Constructors</TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="arg" ><A NAME="v:TestCase" ><A NAME="v%3ATestCase" ></A ></A ><B >TestCase</B > <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ><TD CLASS="rdoc" >A single, independent test case composed. </TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:TestList" ><A NAME="v%3ATestList" ></A ></A ><B >TestList</B > [<A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A >]</TD ><TD CLASS="rdoc" >A set of <TT >Test</TT >s sharing the same level in the hierarchy. </TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:TestLabel" ><A NAME="v%3ATestLabel" ></A ></A ><B >TestLabel</B > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A > <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TD ><TD CLASS="rdoc" >A name or description for a subtree of the <TT >Test</TT >s. </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Test')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:Test" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow" >Show</A > <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Test-HUnit-Base.html#t%3ATestable" >Testable</A > <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:~=?" ><A NAME="v%3A~%3D%3F" ></A ></A ><B >(~=?)</B ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#~%3D%3F" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq" >Eq</A > a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow" >Show</A > a)</TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" >=> a</TD ><TD CLASS="rdoc" >The expected value </TD ></TR ><TR ><TD CLASS="arg" >-> a</TD ><TD CLASS="rdoc" >The actual value </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" >Shorthand for a test case that asserts equality (with the expected value on the left-hand side, and the actual value on the right-hand side). </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:~?=" ><A NAME="v%3A~%3F%3D" ></A ></A ><B >(~?=)</B ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#~%3F%3D" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq" >Eq</A > a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow" >Show</A > a)</TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" >=> a</TD ><TD CLASS="rdoc" >The actual value </TD ></TR ><TR ><TD CLASS="arg" >-> a</TD ><TD CLASS="rdoc" >The expected value </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" >Shorthand for a test case that asserts equality (with the actual value on the left-hand side, and the expected value on the right-hand side). </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:~:" ><A NAME="v%3A~%3A" ></A ></A ><B >(~:)</B > :: <A HREF="Test-HUnit-Base.html#t%3ATestable" >Testable</A > t => <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> t -> <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#~%3A" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" ><P >Creates a test from the specified <TT ><A HREF="Test-HUnit-Base.html#t%3ATestable" >Testable</A ></TT >, with the specified label attached to it. </P ><P >Since <TT ><A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TT > is <TT >Testable</TT >, this can be used as a shorthand way of attaching a <TT ><A HREF="Test-HUnit-Base.html#v%3ATestLabel" >TestLabel</A ></TT > to one or more tests. </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:~?" ><A NAME="v%3A~%3F" ></A ></A ><B >(~?)</B ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#~%3F" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: <A HREF="Test-HUnit-Base.html#t%3AAssertionPredicable" >AssertionPredicable</A > t</TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" >=> t</TD ><TD CLASS="rdoc" >A value of which the asserted condition is predicated </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A ></TD ><TD CLASS="rdoc" >A message that is displayed on test failure </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" >Creates a test case resulting from asserting the condition obtained from the specified <TT ><A HREF="Test-HUnit-Base.html#t%3AAssertionPredicable" >AssertionPredicable</A ></TT >. </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="2" ><A NAME="2" >Making assertions </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:assertFailure" ><A NAME="v%3AassertFailure" ></A ></A ><B >assertFailure</B ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Lang.html#assertFailure" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A ></TD ><TD CLASS="rdoc" >A message that is displayed with the assertion failure </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" ><P >Unconditionally signals that a failure has occured. All other assertions can be expressed with the form: </P ><PRE > if conditionIsMet then IO () else assertFailure msg </PRE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:assertBool" ><A NAME="v%3AassertBool" ></A ></A ><B >assertBool</B ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#assertBool" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A ></TD ><TD CLASS="rdoc" >The message that is displayed if the assertion fails </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ><TD CLASS="rdoc" >The condition </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" >Asserts that the specified condition holds. </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:assertEqual" ><A NAME="v%3AassertEqual" ></A ></A ><B >assertEqual</B ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#assertEqual" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq" >Eq</A > a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow" >Show</A > a)</TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" >=> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A ></TD ><TD CLASS="rdoc" >The message prefix </TD ></TR ><TR ><TD CLASS="arg" >-> a</TD ><TD CLASS="rdoc" >The expected value </TD ></TR ><TR ><TD CLASS="arg" >-> a</TD ><TD CLASS="rdoc" >The actual value </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" ><P >Asserts that the specified actual value is equal to the expected value. The output message will contain the prefix, the expected value, and the actual value. </P ><P >If the prefix is the empty string (i.e., <TT >""</TT >), then the prefix is omitted and only the expected and actual values are output. </P ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:assertString" ><A NAME="v%3AassertString" ></A ></A ><B >assertString</B ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#assertString" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A ></TD ><TD CLASS="rdoc" >The message that is displayed with the assertion failure </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" >Signals an assertion failure if a non-empty message (i.e., a message other than <TT >""</TT >) is passed. </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:Assertion" ><A NAME="t%3AAssertion" ></A ></A ><B >Assertion</B > = <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > <A HREF="/usr/share/doc/ghc/html/libraries/ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29" >()</A ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Lang.html#Assertion" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" ><P >When an assertion is evaluated, it will output a message if and only if the assertion fails. </P ><P >Test cases are composed of a sequence of one or more assertions. </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:@=?" ><A NAME="v%3A%40%3D%3F" ></A ></A ><B >(@=?)</B ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#%40%3D%3F" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq" >Eq</A > a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow" >Show</A > a)</TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" >=> a</TD ><TD CLASS="rdoc" >The expected value </TD ></TR ><TR ><TD CLASS="arg" >-> a</TD ><TD CLASS="rdoc" >The actual value </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" >Asserts that the specified actual value is equal to the expected value (with the expected value on the left-hand side). </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:@?=" ><A NAME="v%3A%40%3F%3D" ></A ></A ><B >(@?=)</B ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#%40%3F%3D" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq" >Eq</A > a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow" >Show</A > a)</TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" >=> a</TD ><TD CLASS="rdoc" >The actual value </TD ></TR ><TR ><TD CLASS="arg" >-> a</TD ><TD CLASS="rdoc" >The expected value </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" >Asserts that the specified actual value is equal to the expected value (with the actual value on the left-hand side). </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:@?" ><A NAME="v%3A%40%3F" ></A ></A ><B >(@?)</B ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#%40%3F" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: <A HREF="Test-HUnit-Base.html#t%3AAssertionPredicable" >AssertionPredicable</A > t</TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" >=> t</TD ><TD CLASS="rdoc" >A value of which the asserted condition is predicated </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A ></TD ><TD CLASS="rdoc" >A message that is displayed if the assertion fails </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" >Asserts that the condition obtained from the specified <TT ><A HREF="Test-HUnit-Base.html#t%3AAssertionPredicable" >AssertionPredicable</A ></TT > holds. </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="3" ><A NAME="3" >Extending the assertion functionality </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><SPAN CLASS="keyword" >class</SPAN > <A NAME="t:Assertable" ><A NAME="t%3AAssertable" ></A ></A ><B >Assertable</B > t <SPAN CLASS="keyword" >where</SPAN ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#Assertable" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" ><P >Allows the extension of the assertion mechanism. </P ><P >Since an <TT ><A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TT > can be a sequence of <TT >Assertion</TT >s and <TT >IO</TT > actions, there is a fair amount of flexibility of what can be achieved. As a rule, the resulting <TT >Assertion</TT > should be the body of a <TT ><A HREF="Test-HUnit-Base.html#v%3ATestCase" >TestCase</A ></TT > or part of a <TT >TestCase</TT >; it should not be used to assert multiple, independent conditions. </P ><P >If more complex arrangements of assertions are needed, <TT ><A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TT >s and <TT ><A HREF="Test-HUnit-Base.html#t%3ATestable" >Testable</A ></TT > should be used. </P ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="section4" >Methods</TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:assert" ><A NAME="v%3Aassert" ></A ></A ><B >assert</B > :: t -> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#assert" >Source</A ></TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Assertable')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:Assertable" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="Test-HUnit-Base.html#t%3AAssertable" >Assertable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Test-HUnit-Base.html#t%3AAssertable" >Assertable</A > ()</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Test-HUnit-Base.html#t%3AListAssertable" >ListAssertable</A > t => <A HREF="Test-HUnit-Base.html#t%3AAssertable" >Assertable</A > [t]</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Test-HUnit-Base.html#t%3AAssertable" >Assertable</A > t => <A HREF="Test-HUnit-Base.html#t%3AAssertable" >Assertable</A > (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > t)</TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><SPAN CLASS="keyword" >class</SPAN > <A NAME="t:ListAssertable" ><A NAME="t%3AListAssertable" ></A ></A ><B >ListAssertable</B > t <SPAN CLASS="keyword" >where</SPAN ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#ListAssertable" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" >A specialized form of <TT ><A HREF="Test-HUnit-Base.html#t%3AAssertable" >Assertable</A ></TT > to handle lists. </TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="section4" >Methods</TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:listAssert" ><A NAME="v%3AlistAssert" ></A ></A ><B >listAssert</B > :: [t] -> <A HREF="Test-HUnit-Base.html#t%3AAssertion" >Assertion</A ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#listAssert" >Source</A ></TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:ListAssertable')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:ListAssertable" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="Test-HUnit-Base.html#t%3AListAssertable" >ListAssertable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AChar" >Char</A ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:AssertionPredicate" ><A NAME="t%3AAssertionPredicate" ></A ></A ><B >AssertionPredicate</B > = <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#AssertionPredicate" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" ><P >The result of an assertion that hasn't been evaluated yet. </P ><P >Most test cases follow the following steps: </P ><P >1. Do some processing or an action. </P ><P >2. Assert certain conditions. </P ><P >However, this flow is not always suitable. <TT >AssertionPredicate</TT > allows for additional steps to be inserted without the initial action to be affected by side effects. Additionally, clean-up can be done before the test case has a chance to end. A potential work flow is: </P ><P >1. Write data to a file. </P ><P >2. Read data from a file, evaluate conditions. </P ><P >3. Clean up the file. </P ><P >4. Assert that the side effects of the read operation meet certain conditions. </P ><P >5. Assert that the conditions evaluated in step 2 are met. </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><SPAN CLASS="keyword" >class</SPAN > <A NAME="t:AssertionPredicable" ><A NAME="t%3AAssertionPredicable" ></A ></A ><B >AssertionPredicable</B > t <SPAN CLASS="keyword" >where</SPAN ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#AssertionPredicable" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" >Used to signify that a data type can be converted to an assertion predicate. </TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="section4" >Methods</TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:assertionPredicate" ><A NAME="v%3AassertionPredicate" ></A ></A ><B >assertionPredicate</B > :: t -> <A HREF="Test-HUnit-Base.html#t%3AAssertionPredicate" >AssertionPredicate</A ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#assertionPredicate" >Source</A ></TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:AssertionPredicable')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:AssertionPredicable" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="Test-HUnit-Base.html#t%3AAssertionPredicable" >AssertionPredicable</A > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Test-HUnit-Base.html#t%3AAssertionPredicable" >AssertionPredicable</A > t => <A HREF="Test-HUnit-Base.html#t%3AAssertionPredicable" >AssertionPredicable</A > (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > t)</TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><SPAN CLASS="keyword" >class</SPAN > <A NAME="t:Testable" ><A NAME="t%3ATestable" ></A ></A ><B >Testable</B > t <SPAN CLASS="keyword" >where</SPAN ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#Testable" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" >Provides a way to convert data into a <TT >Test</TT > or set of <TT >Test</TT >. </TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="section4" >Methods</TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:test" ><A NAME="v%3Atest" ></A ></A ><B >test</B > :: t -> <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#test" >Source</A ></TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Testable')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:Testable" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="Test-HUnit-Base.html#t%3ATestable" >Testable</A > <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Test-HUnit-Base.html#t%3ATestable" >Testable</A > t => <A HREF="Test-HUnit-Base.html#t%3ATestable" >Testable</A > [t]</TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Test-HUnit-Base.html#t%3AAssertable" >Assertable</A > t => <A HREF="Test-HUnit-Base.html#t%3ATestable" >Testable</A > (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > t)</TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="4" ><A NAME="4" >Test execution </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="doc" >Note: the rest of the functionality in this module is intended for implementors of test controllers. If you just want to run your tests cases, simply use a test controller, such as the text-based controller in <A HREF="Test-HUnit-Text.html" >Test.HUnit.Text</A >. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><SPAN CLASS="keyword" >data</SPAN > <A NAME="t:State" ><A NAME="t%3AState" ></A ></A ><B >State</B > </TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#State" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" >Keeps track of the remaining tests and the results of the performed tests. As each test is performed, the path is removed and the counts are updated as appropriate. </TD ></TR ><TR ><TD CLASS="section4" >Constructors</TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="5" CELLPADDING="0" ><TR ><TD CLASS="arg" ><A NAME="v:State" ><A NAME="v%3AState" ></A ></A ><B >State</B ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="body" COLSPAN="2" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="arg" ><A NAME="v:path" ><A NAME="v%3Apath" ></A ></A ><B >path</B > :: <A HREF="Test-HUnit-Base.html#t%3APath" >Path</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:counts" ><A NAME="v%3Acounts" ></A ></A ><B >counts</B > :: <A HREF="Test-HUnit-Base.html#t%3ACounts" >Counts</A ></TD ><TD CLASS="rdoc" ></TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:State')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:State" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq" >Eq</A > <A HREF="Test-HUnit-Base.html#t%3AState" >State</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Read.html#t%3ARead" >Read</A > <A HREF="Test-HUnit-Base.html#t%3AState" >State</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow" >Show</A > <A HREF="Test-HUnit-Base.html#t%3AState" >State</A ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><SPAN CLASS="keyword" >data</SPAN > <A NAME="t:Counts" ><A NAME="t%3ACounts" ></A ></A ><B >Counts</B > </TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#Counts" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" >A data structure that hold the results of tests that have been performed up until this point. </TD ></TR ><TR ><TD CLASS="section4" >Constructors</TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="5" CELLPADDING="0" ><TR ><TD CLASS="arg" ><A NAME="v:Counts" ><A NAME="v%3ACounts" ></A ></A ><B >Counts</B ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="body" COLSPAN="2" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="arg" ><A NAME="v:cases" ><A NAME="v%3Acases" ></A ></A ><B >cases</B > :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:tried" ><A NAME="v%3Atried" ></A ></A ><B >tried</B > :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:errors" ><A NAME="v%3Aerrors" ></A ></A ><B >errors</B > :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:failures" ><A NAME="v%3Afailures" ></A ></A ><B >failures</B > :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A ></TD ><TD CLASS="rdoc" ></TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Counts')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:Counts" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq" >Eq</A > <A HREF="Test-HUnit-Base.html#t%3ACounts" >Counts</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Read.html#t%3ARead" >Read</A > <A HREF="Test-HUnit-Base.html#t%3ACounts" >Counts</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow" >Show</A > <A HREF="Test-HUnit-Base.html#t%3ACounts" >Counts</A ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:Path" ><A NAME="t%3APath" ></A ></A ><B >Path</B > = [<A HREF="Test-HUnit-Base.html#t%3ANode" >Node</A >]</TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#Path" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Uniquely describes the location of a test within a test hierarchy. Node order is from test case to root. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><SPAN CLASS="keyword" >data</SPAN > <A NAME="t:Node" ><A NAME="t%3ANode" ></A ></A ><B >Node</B > </TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#Node" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" >Composed into <TT ><A HREF="Test-HUnit-Base.html#t%3APath" >Path</A ></TT >s. </TD ></TR ><TR ><TD CLASS="section4" >Constructors</TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="arg" ><A NAME="v:ListItem" ><A NAME="v%3AListItem" ></A ></A ><B >ListItem</B > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:Label" ><A NAME="v%3ALabel" ></A ></A ><B >Label</B > <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A ></TD ><TD CLASS="rdoc" ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Node')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:Node" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq" >Eq</A > <A HREF="Test-HUnit-Base.html#t%3ANode" >Node</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Read.html#t%3ARead" >Read</A > <A HREF="Test-HUnit-Base.html#t%3ANode" >Node</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow" >Show</A > <A HREF="Test-HUnit-Base.html#t%3ANode" >Node</A ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:testCasePaths" ><A NAME="v%3AtestCasePaths" ></A ></A ><B >testCasePaths</B > :: <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A > -> [<A HREF="Test-HUnit-Base.html#t%3APath" >Path</A >]</TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#testCasePaths" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Determines the paths for all <TT ><A HREF="Test-HUnit-Base.html#v%3ATestCase" >TestCase</A ></TT >s in a tree of <TT >Test</TT >s. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:testCaseCount" ><A NAME="v%3AtestCaseCount" ></A ></A ><B >testCaseCount</B > :: <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A > -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#testCaseCount" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Counts the number of <TT ><A HREF="Test-HUnit-Base.html#v%3ATestCase" >TestCase</A ></TT >s in a tree of <TT >Test</TT >s. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:ReportStart" ><A NAME="t%3AReportStart" ></A ></A ><B >ReportStart</B > us = <A HREF="Test-HUnit-Base.html#t%3AState" >State</A > -> us -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > us</TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#ReportStart" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Report generator for reporting the start of a test run. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:ReportProblem" ><A NAME="t%3AReportProblem" ></A ></A ><B >ReportProblem</B > us = <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> <A HREF="Test-HUnit-Base.html#t%3AState" >State</A > -> us -> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > us</TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#ReportProblem" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Report generator for reporting problems that have occurred during a test run. Problems may be errors or assertion failures. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:performTest" ><A NAME="v%3AperformTest" ></A ></A ><B >performTest</B ></TD ><TD CLASS="declbut" ><A HREF="src/Test-HUnit-Base.html#performTest" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: <A HREF="Test-HUnit-Base.html#t%3AReportStart" >ReportStart</A > us</TD ><TD CLASS="rdoc" >report generator for the test run start </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Test-HUnit-Base.html#t%3AReportProblem" >ReportProblem</A > us</TD ><TD CLASS="rdoc" >report generator for errors during the test run </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Test-HUnit-Base.html#t%3AReportProblem" >ReportProblem</A > us</TD ><TD CLASS="rdoc" >report generator for assertion failures during the test run </TD ></TR ><TR ><TD CLASS="arg" >-> us</TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Test-HUnit-Base.html#t%3ATest" >Test</A ></TD ><TD CLASS="rdoc" >the test to be executed </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/System-IO.html#t%3AIO" >IO</A > (<A HREF="Test-HUnit-Base.html#t%3ACounts" >Counts</A >, us)</TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" ><P >Performs a test run with the specified report generators. </P ><P >This handles the actual running of the tests. Most developers will want to use <TT >HUnit.Text.runTestTT</TT > instead. A developer could use this function to execute tests via another IO system, such as a GUI, or to output the results in a different manner (e.g., upload XML-formatted results to a webservice). </P ><P >Note that the counts in a start report do not include the test case being started, whereas the counts in a problem report do include the test case just finished. The principle is that the counts are sampled only between test case executions. As a result, the number of test case successes always equals the difference of test cases tried and the sum of test case errors and failures. </P ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="botbar" >Produced by <A HREF="http://www.haskell.org/haddock/" >Haddock</A > version 2.6.1</TD ></TR ></TABLE ></BODY ></HTML >