úÎ!:Ò6@D      !"#$%&'()*+,-./0123456789:;<=>?@ABCNone $;<=>?VqeasytestTests 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. easytestStatus of a testeasytest%Record a failure at the current scopeeasytestHLabel a test. Can be nested. A "." is placed between nested scopes, so scope "foo" . scope "bar" is equivalent to scope "foo.bar"Keasytest.Prepend the current scope to a logging messageeasytest Log a messageLeasytestThe current scopeMeasytest3Catch all exceptions that could occur in the given    NoneQV(ŒeasytestGenerate a random valueeasytest9Generate a bounded random value. Inclusive on both sides."easytestGenerate a random N#easytestGenerate a random O$easytestGenerate a random P%easytestGenerate a random Q&easytestGenerate a random O in the given range Note: int' 0 5 includes both 0 and 5'easytestGenerate a random N in the given range Note: char' a z includes both a and z.(easytestGenerate a random P in the given range Note:  double' 0 1 includes both 0 and 1.)easytestGenerate a random P in the given range Note:  word' 0 10 includes both 0 and 10.*easytestGenerate a random P in the given range Note:  word8' 0 10 includes both 0 and 10.+easytest5Sample uniformly from the given list of possibilities,easytest Alias for I-easytest;Generate a list of lists of the given sizes, an alias for sizes `forM` \n -> listOf n gen.easytest Alias for  liftA2 (,)./easytest Generate a  Data.Map k v of the given size.0easytest Generate a [Data.Map k v] of the given sizes. !"#$%&'()*+,-./0None<3y 1easytestConvenient alias for D9easytestRun a list of testsThis specializes H, , and R.:easytest A test with a setup and teardown;easytest6Run all tests whose scope starts with the given prefix<easytestPRerun all tests with the given seed and whose scope starts with the given prefix=easytest Run all tests>easytest#Rerun all tests with the given seed?easytestLog a showable value@easytest-Record a successful test at the current scopeAeasytestExplicitly skip this testBeasytest=Run a test in a separate thread, not blocking for its result.Ceasytest[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 provisionalNone4ì* !"#$%&'()*+,-./0123456789:;<=>?@ABC*23456789:;<=>?@ABC1 !"#$%&'()*+,-./0S !  "#$%&'()*+,-./0123456789: ;<=>?@ABCDEF GHIJKLJMNJMOJMPJQJRSJTU VWXYZXY[XY\XY]J^_%easytest-0.2.1-2KXSIMiGrFK9noqDjFRrTAEasyTest.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_