úÎėīJ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI Safe-InferedJKLMNOPQRSTUVWXYZ[JKLMNOPQRSTUVWXYZJKLMNOPQRSTUVWXYZ[ Safe-Infered''Configuration settings for a test run. If \2, no log file is produced. Otherwise, this is the % full path to the XML log file. >Path to an XSL file. If given, the XML log file will use this B XSL as a stylesheet. This value is ignored if no XML log is  produced. If ], report test failures to ^. If _, just  report test progress to ^. If ]4, abort testing if a test fails, otherwise continue  testing. (In other words, _ causes all tests to be . run, regardless of test failures, while ] runs until a " test fails and then stops.) The test monad.  Notice the `# instance. This allows you to call a to  perform arbitrary b- actions at any point within the test monad. An executable test.  Create a  from a simple c value.  The test passes if the value is ]. The test fails if the value  is _:, or if an exception is thrown in the course of computing  the value. DThis test always succeeds, but writes a note in the log to say that  the test case was " inapplicable". @This is generally useful if you have a test generation function  which doesn'3t work for certain combinations of inputs. In that B instance, the test still passes, but there is a note in the log ! letting you know it was only a "null" test. Test for exceptions. AOrdinarily, any test which throws an exception is deemed to have  failed. However, this test passes if evaluating the argument to 2 WHNF causes an exception to be thrown. The test fails if no  exception is thrown. DThis can be useful for checking that functions reject invalid input B by throwing an exception. (Of course, you cannot check that the  correct exception is thrown!) AIf WHNF is not enough to trigger the exception, you can wrap the > expression in some suitable forcing function. (The function  d e f* can sometimes be used for this purpose.) @Note that an infinite loop is not an exception (unless the loop  exhausts some resource). @If an exception is not thrown, the actual value returned is not  recorded. See  " for a function that records this 1 information. (Note that this requires adding a g constraint.) Test for exceptions. AOrdinarily, any test which throws an exception is deemed to have  failed. However, this test passes if evaluating the argument to 2 WHNF causes an exception to be thrown. The test fails if no  exception is thrown. DThis can be useful for checking that functions reject invalid input B by throwing an exception. (Of course, you cannot check that the  correct exception is thrown!) AIf WHNF is not enough to trigger the exception, you can wrap the > expression in some suitable forcing function. (The function  d e f* can sometimes be used for this purpose.) @Note that an infinite loop is not an exception (unless the loop  exhausts some resource). BIf no exception is thrown, the actual value returned is recorded.  This requires adding a g constraint. See   for a $ function without this constraint. !Compare two values for equality. The right-hand value is the "target" value, and the left-hand  value (next to the ? sign) is the "actual" value. The test / passes if both values are equal according to h. The test fails " if any exceptions are thrown by h or f. )This operator has the same precedence as h (i.e., 4). #Compare two values for inequality. The right-hand value is the "target" value, and the left-hand  value (next to the ? sign) is the "actual" value. The test 1 passes if both values are unequal according to i. The test fails " if any exceptions are thrown by i or f. )This operator has the same precedence as i (i.e., 4). #Compare two values for inequality. The right-hand value is the "target" value, and the left-hand  value (next to the ? sign) is the "actual" value. The test E passes if the actual value is less than the target value according  to j1. The test fails if any exceptions are thrown by j or  f. )This operator has the same precedence as j (i.e., 4). #Compare two values for inequality. The right-hand value is the "target" value, and the left-hand  value (next to the ? sign) is the "actual" value. The test A passes if the actual value is less than or equal to the target  value according to k'. The test fails if any exceptions are  thrown by k or f. )This operator has the same precedence as k (i.e., 4). #Compare two values for inequality. The right-hand value is the "target" value, and the left-hand  value (next to the ? sign) is the "actual" value. The test E passes if the actual value is more than the target value according  to l1. The test fails if any exceptions are thrown by l or  f. )This operator has the same precedence as l (i.e., 4). #Compare two values for inequality. The right-hand value is the "target" value, and the left-hand  value (next to the ? sign) is the "actual" value. The test A passes if the actual value is more than or equal to the target  value according to m'. The test fails if any exceptions are  thrown by m or f. )This operator has the same precedence as m (i.e., 4). Attach a title to a test. CThis title is an arbitrary human-readable label. It is recorded in 3 relation to the test, but has no other function. Attach an argument value note. The n is the argument name, and the x is that argument's  value, which must implement f. Attach an argument value note.  The first n. is the argument name, and the second is some 2 suitable textual representation of that argument' s value. ANote down a temporary intermediate value computed in the process  of constructing a test. The n# is a name for this value, and the x is the value  itself, which must implement f. ANote down a temporary intermediate value computed in the process  of constructing a test.  The first n/ is the temporary name, and the second is some 2 suitable textual representation of the temporary' s value. $Add a textual note to the test log.  Create a  from an b action that returns a c. )The test passes if the value returned is ]. The test fails if  the value returned is _', or if an uncaught exception escapes.  Create a  from an b! action with seperate set-up and  clean-up phases. =The first argument is a set-up action. This might be used to C initialise mutable storage or create disk structures, or just to B open some handles. Its result is passed to the second argument, > which then does the actual test propper. Finally, the third C argument is run (again with the set-up result as argument) to do < any post-test clean-up operations required. Its result is  discarded. If any of these b) actions throw an exception, the test is E marked failed. Note that if the set-up action throws an exception, D the test and clean-up actions are not run. (If only the main test : action throws an exception, the clean-up is still run.) Test for exceptions in the b monad. AOrdinarily, any test which throws an exception is deemed to have  failed. However, this test passes if evaluating the action's < result to WHNF causes an exception to be thrown. The test fails  if no exception is thrown. @This can be useful for checking that a function rejects invalid 3 input by throwing an exception, or that invalid I/O operations are 2 reported. (Of course, you cannot check that the correct exception  is thrown!) Note that the b action is run and its result is reduced (to ? WHNF only). Note also that infinite loops are not exceptions , (unless the loop exhausts some resource). <If no exception is thrown, the actual value returned is not  recorded. See ' for a function which does record this ' information. (This requires adding a g constraint.) Test for exceptions in the b monad. AOrdinarily, any test which throws an exception is deemed to have  failed. However, this test passes if evaluating the action's < result to WHNF causes an exception to be thrown. The test fails  if no exception is thrown. @This can be useful for checking that a function rejects invalid 3 input by throwing an exception, or that invalid I/O operations are 2 reported. (Of course, you cannot check that the correct exception  is thrown!) Note that the b action is run and its result is reduced (to ? WHNF only). Note also that infinite loops are not exceptions , (unless the loop exhausts some resource). BIf no exception is thrown, the actual value returned is recorded.  This requires adding a g constraint; see  for a $ function without this constraint.  Create a  from a  action. The test passes if the  action returns ] . The test  fails if it returns _# or an uncaught exception escapes. Check a  action for exceptions. AOrdinarily, any test which throws an exception is deemed to have  failed. However, this test passes if evaluating the action's < result to WHNF causes an exception to be thrown. The test fails  if no exception is thrown. @This can be useful for checking that a function rejects invalid 3 input by throwing an exception, or that invalid I/O operations are 2 reported. (Of course, you cannot check that the correct exception  is thrown!) Note that the  action is run and its result is reduced (to ? WHNF only). Note also that infinite loops are not exceptions , (unless the loop exhausts some resource). <If no exception is thrown, the actual value returned is not  recorded. See , for a function that does record the value.  This requires adding a g constraint. Check a  action for exceptions. AOrdinarily, any test which throws an exception is deemed to have  failed. However, this test passes if evaluating the action's < result to WHNF causes an exception to be thrown. The test fails  if no exception is thrown. @This can be useful for checking that a function rejects invalid 3 input by throwing an exception, or that invalid I/O operations are 2 reported. (Of course, you cannot check that the correct exception  is thrown!) Note that the  action is run and its result is reduced (to ? WHNF only). Note also that infinite loops are not exceptions , (unless the loop exhausts some resource). AIf no exception is thrown, the actual value returns is recorded.  This requires adding a g constraint. See  for a $ function without this constraint. Mark the current test as " inapplicable" and return ].  (See  .) ANote down a temporary intermediate value computed in the process  of constructing a test. The n# is a name for this value, and the x is the value  itself, which must implement f. !ANote down a temporary intermediate value computed in the process  of constructing a test.  The first n. is the name, and the second is some suitable ' textual representation of the value. "$Add a textual note to the log file. #5Combine multiple tests into a single composite test. ?The composite test fails if any of its constituent tests fail. B Whether the remaining tests are run depends on the testing mode  (the  parameter in ). BEssentially, this takes the logical-AND of several tests. You can + achieve the same result using the normal o operator or the p  function, operating on plain c values rather than  3 objects. However, by turning subexpressions into  objects and  using #5, the result of each subexpression will be logged to D file in addition to the overall result. Depending on the context, = that may or may not be helpful. You decide which you want. $@Create a composite test which passes if at least one child test  passes. DAll child tests are always run, regardless of error reporting mode. ; No test failures are reported, unless all children fail. AEssentially, this takes the logical-OR of several tests. You can + achieve the same result using the normal q operator or the r  function, operating on plain c values rather than  3 objects. However, by turning subexpressions into  objects and  using $+, the result of each subexpression will be E logged to file in addition to the overall result. Depending on the F context, that may or may not be helpful. You decide which you want. %Execute a test.  Ordinarily, "the test"' will be a composite test created with  #:, and will actually contain multiple sub-tests within it. A c3 value is returned indicating whether the test was = successful or not. Test progress information is printed to  ^;. If any test fails, detailed information for that test is  printed to ^, and testing aborts. For more control, see &. &Execute a test.  Ordinarily, "the test"' will be a composite test created with  #:, and will actually contain multiple sub-tests within it. A c3 value is returned indicating whether the test was = successful or not. Test progress information is printed to  ^6. Various testing options can be configured using the  0 argument. In particular, it is possible to log 0 detailed testing data to an XML log file (the   parameter).  The related % function runs a test with the  '+ test settings, which are useful for quick 2 interactive testing during a debugging session. '+The default test configuration, as used by %.  cfg_LogFile = Nothing cfg_LogXSL = Nothing cfg_FailReport = True cfg_FailAbort = True CYou can use this as a starting point if you only want to customise > a few test settings. (More options may be added in future.) *  !"#$%&'st(  !"#$%&'(  !"#$%&'%  !"#$%&'st Safe-Infered( Check that x == x. )Check that if x == y then y == x as well. *Check that if x == y and y == z then x == z. + Check that x /= y is the same as  not (x == y). ,Given a list of distinct& values, perform all applicable tests A on all possible combinations of inputs. (If the inputs are not 1 distinct, some redundant tests are performed.) ()*+,()*+,()*+,()*+, Safe-Infered- Check that u agrees with h on equity. .%Check that swapping the arguments to u works correctly. /Check that if x < y and y < z then x < z. 0 Check that u agrees with l, j, etc. 1 Check that v works correctly. 2 Check that w works correctly. 3Given a list of distinct& values, perform all applicable tests A on all possible combinations of inputs. (If the inputs are not 1 distinct, some redundant tests are performed.) -./0123-./0123-./0123-./0123 Safe-Infered4This type is similar to 8 . However, 8 cannot be made / an instance of higher-kinded classes such as x and y. 4 This type gets around that irritating limitation. 8The Label type. A value of type Label x is really a value of type x , but with  a textual label. The g instance returns this label. 4This can be tremendously useful for allowing you to f values B which would not otherwise be printable. For example, functions. D Rather than passing a function, you can pass a labelled function. ' This allows you to know, at runtime, which function you're 8 dealing with, which is very useful for test purposes.  You can use : to extract the label text, and ; to ! extract the actual data value. The g instance uses the :, but the other instances use  only the ;, ignoring the :. (In particular, any  operations which alter the ; leave the : untouched.) 456789:;z{|}~€‚ƒ„…456789:;89:;4567456789:;z{|}~€‚ƒ„… Safe-Infered< Check that † ‡ h ‡. = Check that † (f e g) h † f e † g. >Given a list of distinct x values and functions, perform B all tests on all combinations of inputs. (If the inputs are not 5 distinct, some redundant tests will be performed.) =The argument types are somewhat constrained to keep the type  signature reasonably simple. ? Check that † (f e g) h † f e † g. @Given a list of distinct x values and functions, perform B all tests on all combinations of inputs. (If the inputs are not 5 distinct, some redundant tests will be performed.) @The argument types are somewhat constrained to keep the function's $ type signature reasonably simple. <=>?@<=>?@<=>?@<=>?@ Safe-Infered A Check that return x >>= f h f x. B Check that mx >>= return h mx. C Check that ˆ is associative. Approximately, mx >>= (f >>= g) h (mx >>= f) >>= g , but that  doesn't type-check. To be exact,  mx >>= (\ x -> f x >>= g) h (mx >>= f) >>= g. DGiven a list of distinct inputs, run all applicable y > tests on all combinations of inputs. (If the inputs are not 5 distinct, some redundant tests will be performed.) <The argument types have been constrainted a bit to keep the  function'$s type signature reasonably simple. E Check that  fmap f mx h mx >>= return . f. F Check that return x >>= f h f x. G Check that ˆ is associative. Approximately, mx >>= (f >>= g) h (mx >>= f) >>= g , but that  doesn't type-check. To be exact,  mx >>= (\ x -> f x >>= g) h (mx >>= f) >>= g. HGiven a list of distinct inputs, run all applicable y > tests on all combinations of inputs. (If the inputs are not 5 distinct, some redundant tests will be performed.) <The argument types have been constrainted a bit to keep the  function'$s type signature reasonably simple. I Check that  fmap f mx h mx >>= return . f. ABCDEFGHI ABCDEFGHI ABCDEFGHI ABCDEFGHI‰      !"#$%&'()*+,-./0123401567899:;<<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd_efbcghijhikbclbcm_no_pq_rs_rtbuvbuwbuxbuybuzbu{_p|bu}_n~bu_n€‚buƒbu„bu…_p†_p‡ˆ‰Š‹ŒŽ‘’“_p”_p•_p–—AC-MiniTest-1.1.1 Test.AC.TestTest.AC.Class.EqTest.AC.Class.Ord Test.AC.LabelTest.AC.Class.FunctorTest.AC.Class.MonadTest.AC.Private TestConfig cfg_LogFile cfg_LogXSLcfg_FailReport cfg_FailAbortTestMTesttest inapplicablethrows_throws?=?/=?<?<=?>?>=titleargument argument_ temporary temporary_notetestIOtestIO3 throws_IOthrowsIOtestMthrows_MthrowsM inapplicableM temporaryM temporaryM_noteMtests alternativesrun_test run_test_fulldefault_config p_reflexive p_symmetric p_transitive p_not_equalp_Eqp_equal p_comparep_minp_maxp_OrdLabel1label1value1Labellabelvaluep_map_id p_map_compose p_Functorp_map_compose_L p_Functor_L p_return_bind p_bind_returnp_bind_associativep_Monadp_Functor_Monadp_return_bind_Lp_bind_associative_L p_Monad_Lp_Functor_Monad_LLogMrunrun_file log_headerlog_XSL log_element log_element_log_mark print_titlesilence_failures stack_report subroutine stack_trace fail_stoplog_exceptionsrawIOforce $fMonadLogMbase Data.MaybeNothingghc-prim GHC.TypesTrueGHC.IO.Handle.FDstdoutFalsetransformers-0.2.2.0Control.Monad.IO.ClassMonadIOliftIOIOBoolGHC.ListlengthGHC.Base.GHC.ShowshowShow GHC.Classes==/=<<=>>=String&&and||or$fMonadIOTestM $fMonadTestMcompareminmaxFunctorMonad $fMonadLabel1$fFunctorLabel1 $fShowLabel1$fBoundedLabel1 $fEnumLabel1 $fOrdLabel1 $fEqLabel1 $fShowLabel$fBoundedLabel $fEnumLabel $fOrdLabel $fEqLabelfmapid>>=