úÎ6'1•D      !"#$%&'()*+,-./0123456789:;<=>?@ABCNone $;<=>?VaTests are values of type Test a, and  forms a monad with access to:repeatable randomness (the  and F functions for random and bounded random values, or handy specialized , , , , etc) I/O (via D or  , which is an alias for D) failure (via !, which yields a stack trace, or E, which does not) logging (via  ,  , or  ),hierarchically-named subcomputations (under  ') which can be switched on and off via parallelism (via )conjunction of tests via F (the Gd operation runs both tests, even if the first test fails, and the tests function used above is just H).5Using any or all of these capabilities, you assemble * values into a "test suite" (just another s value) using ordinary Haskell code, not framework magic. Notice that to generate a list of random values, we just I and J as usual. Status of a test%Record a failure at the current scopeHLabel a test. Can be nested. A "." is placed between nested scopes, so scope "foo" . scope "bar" is equivalent to scope "foo.bar"K.Prepend the current scope to a logging message Log a messageLThe current scopeM3Catch all exceptions that could occur in the given      NoneQV%sGenerate a random value9Generate a bounded random value. Inclusive on both sides."Generate a random N#Generate a random O$Generate a random P%Generate a random Q&Generate a random O in the given range Note: int' 0 5 includes both 0 and 5'Generate a random N in the given range Note: char' a z includes both a and z.(Generate a random P in the given range Note:  double' 0 1 includes both 0 and 1.)Generate a random P in the given range Note:  word' 0 10 includes both 0 and 10.*Generate a random P in the given range Note:  word8' 0 10 includes both 0 and 10.+5Sample uniformly from the given list of possibilities, Alias for I-;Generate a list of lists of the given sizes, an alias for sizes `forM` \n -> listOf n gen. Alias for  liftA2 (,)./ Generate a  Data.Map k v of the given size.0 Generate a [Data.Map k v] of the given sizes. !"#$%&'()*+,-./0None<.Ê 1Convenient alias for D9Run a list of testsThis specializes H, , and R.: A test with a setup and teardown;6Run all tests whose scope starts with the given prefix<PRerun all tests with the given seed and whose scope starts with the given prefix= Run all tests>#Rerun all tests with the given seed?Log a showable value@-Record a successful test at the current scopeAExplicitly skip this testB=Run a test in a separate thread, not blocking for its result.C[Run a test in a separate thread, return a future which can be used to block on its result.123456789:;<=>?@ABC(c) Joel Burget, 2018MITjoelburget@gmail.com provisionalNone0?* !"#$%&'()*+,-./0123456789:;<=>?@ABC*23456789:;<=>?@ABC1 !"#$%&'()*+,-./0S !  "#$%&'()*+,-./0123456789: ;<=>?@ABCDEF GHIJKLJMNJMOJMPJQJRSJTU VWXYZXY[XY\XY]J^_#easytest-0.2-1wc69dKbxqd95jWXpkG9yhEasyTest.InternalEasyTestrandomrandom'intint'doubledouble'ionote noteScopednote'scoperunOnlyforkEasyTest.GeneratorsEasyTest.Porcelain Data.FoldableasumTestEnvenvRng envMessages envResultsenvNoteenvAllowStatusFailedPassedSkipped combineStatuscrash putResultrunWrap actionAllowed$fMonoidStatus$fSemigroupStatus$fIsString(->)$fMonadPlusTest$fAlternativeTest $fMonadIOTest$fApplicativeTest $fFunctorTest $fMonadTest$fMonadReaderEnvTestboolword8charwordchar'word'word8'picklistOflistsOfpairmapOfmapsOfexpect expectJust expectRightexpectRightNoShow expectLeftexpectLeftNoShowexpectEqtestsusing rerunOnlyrunrerunokskipfork'baseControl.Monad.IO.ClassliftIOGHC.Basefail MonadPlus<|>msum Control.Monad replicateMData.TraversableforM currentScopewrapghc-prim GHC.TypesCharIntDoubleWord sequence_