packages feed

sydtest 0.15.1.1 → 0.15.1.2

raw patch · 49 files changed

+50/−2487 lines, 49 filesdep −sydtestPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies removed: sydtest

API changes (from Hackage documentation)

- Test.Syd: [DefAroundAllNode] :: ((outer -> IO ()) -> IO ()) -> SpecDefForest (outer : otherOuters) inner extra -> SpecDefTree otherOuters inner extra
+ Test.Syd: [DefAroundAllNode] :: ((outer -> IO ()) -> IO ()) -> SpecDefForest (outer ': otherOuters) inner extra -> SpecDefTree otherOuters inner extra
- Test.Syd: [DefAroundAllWithNode] :: ((newOuter -> IO ()) -> oldOuter -> IO ()) -> SpecDefForest (newOuter : (oldOuter : otherOuters)) inner extra -> SpecDefTree (oldOuter : otherOuters) inner extra
+ Test.Syd: [DefAroundAllWithNode] :: ((newOuter -> IO ()) -> oldOuter -> IO ()) -> SpecDefForest (newOuter ': (oldOuter ': otherOuters)) inner extra -> SpecDefTree (oldOuter ': otherOuters) inner extra
- Test.Syd: [DefBeforeAllNode] :: IO outer -> SpecDefForest (outer : otherOuters) inner extra -> SpecDefTree otherOuters inner extra
+ Test.Syd: [DefBeforeAllNode] :: IO outer -> SpecDefForest (outer ': otherOuters) inner extra -> SpecDefTree otherOuters inner extra
- Test.Syd: [DefBeforeAllWithNode] :: (oldOuter -> IO newOuter) -> SpecDefForest (newOuter : (oldOuter : otherOuters)) inner extra -> SpecDefTree (oldOuter : otherOuters) inner extra
+ Test.Syd: [DefBeforeAllWithNode] :: (oldOuter -> IO newOuter) -> SpecDefForest (newOuter ': (oldOuter ': otherOuters)) inner extra -> SpecDefTree (oldOuter ': otherOuters) inner extra
- Test.Syd: afterAll :: (outer -> IO ()) -> TestDefM (outer : otherOuters) inner result -> TestDefM (outer : otherOuters) inner result
+ Test.Syd: afterAll :: (outer -> IO ()) -> TestDefM (outer ': otherOuters) inner result -> TestDefM (outer ': otherOuters) inner result
- Test.Syd: aroundAll :: ((outer -> IO ()) -> IO ()) -> TestDefM (outer : otherOuters) inner result -> TestDefM otherOuters inner result
+ Test.Syd: aroundAll :: ((outer -> IO ()) -> IO ()) -> TestDefM (outer ': otherOuters) inner result -> TestDefM otherOuters inner result
- Test.Syd: aroundAllWith :: forall newOuter oldOuter otherOuters inner result. ((newOuter -> IO ()) -> oldOuter -> IO ()) -> TestDefM (newOuter : (oldOuter : otherOuters)) inner result -> TestDefM (oldOuter : otherOuters) inner result
+ Test.Syd: aroundAllWith :: forall newOuter oldOuter otherOuters inner result. ((newOuter -> IO ()) -> oldOuter -> IO ()) -> TestDefM (newOuter ': (oldOuter ': otherOuters)) inner result -> TestDefM (oldOuter ': otherOuters) inner result
- Test.Syd: beforeAll :: IO outer -> TestDefM (outer : otherOuters) inner result -> TestDefM otherOuters inner result
+ Test.Syd: beforeAll :: IO outer -> TestDefM (outer ': otherOuters) inner result -> TestDefM otherOuters inner result
- Test.Syd: beforeAllWith :: (previousOuter -> IO newOuter) -> TestDefM (newOuter : (previousOuter : otherOuters)) inner result -> TestDefM (previousOuter : otherOuters) inner result
+ Test.Syd: beforeAllWith :: (previousOuter -> IO newOuter) -> TestDefM (newOuter ': (previousOuter ': otherOuters)) inner result -> TestDefM (previousOuter ': otherOuters) inner result
- Test.Syd: itWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer : otherOuters) inner ()
+ Test.Syd: itWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd: itWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer : otherOuters) inner ()
+ Test.Syd: itWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd: setupAroundAllWith :: (oldOuter -> SetupFunc newOuter) -> TestDefM (newOuter : (oldOuter : outers)) inner result -> TestDefM (oldOuter : outers) inner result
+ Test.Syd: setupAroundAllWith :: (oldOuter -> SetupFunc newOuter) -> TestDefM (newOuter ': (oldOuter ': outers)) inner result -> TestDefM (oldOuter ': outers) inner result
- Test.Syd: specifyWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer : otherOuters) inner ()
+ Test.Syd: specifyWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd: specifyWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer : otherOuters) inner ()
+ Test.Syd: specifyWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd: xitWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer : otherOuters) inner ()
+ Test.Syd: xitWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd: xitWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer : otherOuters) inner ()
+ Test.Syd: xitWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd: xspecifyWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer : otherOuters) inner ()
+ Test.Syd: xspecifyWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd: xspecifyWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer : otherOuters) inner ()
+ Test.Syd: xspecifyWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.AroundAll: afterAll :: (outer -> IO ()) -> TestDefM (outer : otherOuters) inner result -> TestDefM (outer : otherOuters) inner result
+ Test.Syd.Def.AroundAll: afterAll :: (outer -> IO ()) -> TestDefM (outer ': otherOuters) inner result -> TestDefM (outer ': otherOuters) inner result
- Test.Syd.Def.AroundAll: aroundAll :: ((outer -> IO ()) -> IO ()) -> TestDefM (outer : otherOuters) inner result -> TestDefM otherOuters inner result
+ Test.Syd.Def.AroundAll: aroundAll :: ((outer -> IO ()) -> IO ()) -> TestDefM (outer ': otherOuters) inner result -> TestDefM otherOuters inner result
- Test.Syd.Def.AroundAll: aroundAllWith :: forall newOuter oldOuter otherOuters inner result. ((newOuter -> IO ()) -> oldOuter -> IO ()) -> TestDefM (newOuter : (oldOuter : otherOuters)) inner result -> TestDefM (oldOuter : otherOuters) inner result
+ Test.Syd.Def.AroundAll: aroundAllWith :: forall newOuter oldOuter otherOuters inner result. ((newOuter -> IO ()) -> oldOuter -> IO ()) -> TestDefM (newOuter ': (oldOuter ': otherOuters)) inner result -> TestDefM (oldOuter ': otherOuters) inner result
- Test.Syd.Def.AroundAll: beforeAll :: IO outer -> TestDefM (outer : otherOuters) inner result -> TestDefM otherOuters inner result
+ Test.Syd.Def.AroundAll: beforeAll :: IO outer -> TestDefM (outer ': otherOuters) inner result -> TestDefM otherOuters inner result
- Test.Syd.Def.AroundAll: beforeAllWith :: (previousOuter -> IO newOuter) -> TestDefM (newOuter : (previousOuter : otherOuters)) inner result -> TestDefM (previousOuter : otherOuters) inner result
+ Test.Syd.Def.AroundAll: beforeAllWith :: (previousOuter -> IO newOuter) -> TestDefM (newOuter ': (previousOuter ': otherOuters)) inner result -> TestDefM (previousOuter ': otherOuters) inner result
- Test.Syd.Def.SetupFunc: setupAroundAllWith :: (oldOuter -> SetupFunc newOuter) -> TestDefM (newOuter : (oldOuter : outers)) inner result -> TestDefM (oldOuter : outers) inner result
+ Test.Syd.Def.SetupFunc: setupAroundAllWith :: (oldOuter -> SetupFunc newOuter) -> TestDefM (newOuter ': (oldOuter ': outers)) inner result -> TestDefM (oldOuter ': outers) inner result
- Test.Syd.Def.Specify: itWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer : otherOuters) inner ()
+ Test.Syd.Def.Specify: itWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.Specify: itWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer : otherOuters) inner ()
+ Test.Syd.Def.Specify: itWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.Specify: specifyWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer : otherOuters) inner ()
+ Test.Syd.Def.Specify: specifyWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.Specify: specifyWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer : otherOuters) inner ()
+ Test.Syd.Def.Specify: specifyWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.Specify: xitWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer : otherOuters) inner ()
+ Test.Syd.Def.Specify: xitWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.Specify: xitWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer : otherOuters) inner ()
+ Test.Syd.Def.Specify: xitWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.Specify: xspecifyWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer : otherOuters) inner ()
+ Test.Syd.Def.Specify: xspecifyWithBoth :: (HasCallStack, IsTest test, Arg1 test ~ outer, Arg2 test ~ inner) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.Def.Specify: xspecifyWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer : otherOuters) inner ()
+ Test.Syd.Def.Specify: xspecifyWithOuter :: (HasCallStack, IsTest test, Arg1 test ~ inner, Arg2 test ~ outer) => String -> test -> TestDefM (outer ': otherOuters) inner ()
- Test.Syd.HList: [HCons] :: e -> HList l -> HList (e : l)
+ Test.Syd.HList: [HCons] :: e -> HList l -> HList (e ': l)
- Test.Syd.OptParse: manyOptional :: Mod OptionFields [Text] -> Parser [Text]
+ Test.Syd.OptParse: manyOptional :: Mod OptionFields Text -> Parser [Text]
- Test.Syd.SpecDef: [DefAroundAllNode] :: ((outer -> IO ()) -> IO ()) -> SpecDefForest (outer : otherOuters) inner extra -> SpecDefTree otherOuters inner extra
+ Test.Syd.SpecDef: [DefAroundAllNode] :: ((outer -> IO ()) -> IO ()) -> SpecDefForest (outer ': otherOuters) inner extra -> SpecDefTree otherOuters inner extra
- Test.Syd.SpecDef: [DefAroundAllWithNode] :: ((newOuter -> IO ()) -> oldOuter -> IO ()) -> SpecDefForest (newOuter : (oldOuter : otherOuters)) inner extra -> SpecDefTree (oldOuter : otherOuters) inner extra
+ Test.Syd.SpecDef: [DefAroundAllWithNode] :: ((newOuter -> IO ()) -> oldOuter -> IO ()) -> SpecDefForest (newOuter ': (oldOuter ': otherOuters)) inner extra -> SpecDefTree (oldOuter ': otherOuters) inner extra
- Test.Syd.SpecDef: [DefBeforeAllNode] :: IO outer -> SpecDefForest (outer : otherOuters) inner extra -> SpecDefTree otherOuters inner extra
+ Test.Syd.SpecDef: [DefBeforeAllNode] :: IO outer -> SpecDefForest (outer ': otherOuters) inner extra -> SpecDefTree otherOuters inner extra
- Test.Syd.SpecDef: [DefBeforeAllWithNode] :: (oldOuter -> IO newOuter) -> SpecDefForest (newOuter : (oldOuter : otherOuters)) inner extra -> SpecDefTree (oldOuter : otherOuters) inner extra
+ Test.Syd.SpecDef: [DefBeforeAllWithNode] :: (oldOuter -> IO newOuter) -> SpecDefForest (newOuter ': (oldOuter ': otherOuters)) inner extra -> SpecDefTree (oldOuter ': otherOuters) inner extra

Files

CHANGELOG.md view
@@ -1,5 +1,9 @@ # Changelog +## [0.15.1.2] - 2024-07-18++* Fix parsing filter flags so it becomes easy to select tests with spaces in their description+ ## [0.15.1.1] - 2023-10-04  * Compatibility with `optparse-applicative > 0.18`.
CONTRIBUTORS view
@@ -3,3 +3,4 @@ mrcjkb L7R7 TheOddler+Nova In Silico
LICENSE.md view
@@ -1,6 +1,6 @@ # Sydtest License -Copyright (c) 2020-2022 Tom Sydney Kerckhove+Copyright (c) 2020-2024 Tom Sydney Kerckhove  ## Anyone 
− multi-discover-test/Bar/BarSpec.hs
@@ -1,12 +0,0 @@-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE TypeOperators #-}--module Bar.BarSpec where--import Test.Syd--spec :: TestDef (String : otherOuters) ()-spec = do-  describe "can access outer resource" $-    itWithOuter "bar is bar" $-      \s -> s `shouldBe` "bar"
− multi-discover-test/Bar/Spec.hs
@@ -1,1 +0,0 @@-{-# OPTIONS_GHC -F -pgmF sydtest-discover -optF --no-main #-}
− multi-discover-test/Baz/Qux/QuxSpec.hs
@@ -1,8 +0,0 @@-module Baz.Qux.QuxSpec where--import Test.Syd--spec :: Spec-spec = do-  describe "several nesting levels" $-    it "works" True
− multi-discover-test/Baz/Qux/Spec.hs
@@ -1,1 +0,0 @@-{-# OPTIONS_GHC -F -pgmF sydtest-discover -optF --no-main #-}
− multi-discover-test/DoNotDiscover/FooSpec.hs
@@ -1,11 +0,0 @@-{-# LANGUAGE TypeApplications #-}--module DoNotDiscover.FooSpec where--import Test.Syd--spec :: Spec-spec = do-  describe "do not discover" $-    it "always fails" $-      expectationFailure @() "This test fails because sydtest-discover isn't working properly. This spec should not be discovered"
− multi-discover-test/Foo/FooSpec.hs
@@ -1,9 +0,0 @@-module Foo.FooSpec where--import Test.Syd--spec :: Spec-spec = do-  describe "plain test" $-    it "simple example" $-      2 + 3 == (5 :: Int)
− multi-discover-test/Foo/Spec.hs
@@ -1,1 +0,0 @@-{-# OPTIONS_GHC -F -pgmF sydtest-discover -optF --no-main #-}
− multi-discover-test/Main.hs
@@ -1,12 +0,0 @@-module Main where--import qualified Bar.Spec as Bar-import qualified Baz.Qux.QuxSpec as Qux-import qualified Foo.Spec as Foo-import Test.Syd--main :: IO ()-main = sydTest $ do-  Foo.spec-  beforeAll (pure "bar") Bar.spec-  Qux.spec
− output-test/Main.hs
@@ -1,58 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# OPTIONS_GHC -fno-warn-missing-fields -fno-warn-missing-methods -fno-warn-partial-fields -fno-warn-incomplete-uni-patterns -fno-warn-incomplete-record-updates #-}--module Main where--import qualified Data.Text.Encoding as TE-import qualified Data.Text.Lazy as LT-import qualified Data.Text.Lazy.Builder as TLB-import Spec (spec)-import Test.Syd-import Test.Syd.OptParse-import Text.Colour--main :: IO ()-main = do-  settings <- getSettings-  testForest <- execTestDefM settings spec--  putStrLn "Synchronous, non-interleaved"-  rf1 <- timeItT 0 $ runSpecForestSynchronously settings testForest-  printOutputSpecForest settings rf1--  putStrLn "Synchronous, interleaved"-  _ <- runSpecForestInterleavedWithOutputSynchronously settings testForest--  putStrLn "Asynchronous, non-interleaved"-  rf2 <- timeItT 0 $ runSpecForestAsynchronously settings 8 testForest-  printOutputSpecForest settings rf2--  putStrLn "Asynchronous, interleaved"-  _ <- runSpecForestInterleavedWithOutputAsynchronously settings 8 testForest--  putStrLn "Golden test of output"-  sydTest $-    describe "Golden Output" $-      it "renders output in the same way as before" $-        goldenByteStringFile "test_resources/output-test.txt" $ do-          testForestInOrder <- execTestDefM settings $ doNotRandomiseExecutionOrder spec-          rf <- timeItT 0 $ runSpecForestSynchronously settings testForestInOrder-          let eraseTimed :: Timed a -> Timed a-              eraseTimed t =-                t-                  { timedBegin = 0,-                    timedEnd = 0,-                    timedWorker = 0-                  }--              erasedTimedInResultForest :: ResultForest -> ResultForest-              erasedTimedInResultForest = fmap (fmap (fmap eraseTimed))-              eraseTiming :: Timed ResultForest -> Timed ResultForest-              eraseTiming = fmap erasedTimedInResultForest . eraseTimed-          pure-            $ TE.encodeUtf8-              . LT.toStrict-              . TLB.toLazyText-              . renderResultReport defaultSettings With24BitColours-            $ eraseTiming rf
− output-test/Spec.hs
@@ -1,350 +0,0 @@-{-# LANGUAGE NumericUnderscores #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# OPTIONS_GHC -fno-warn-missing-fields -fno-warn-missing-methods -fno-warn-partial-fields -fno-warn-incomplete-uni-patterns -fno-warn-incomplete-record-updates -fno-warn-overlapping-patterns #-}--module Spec where--import Control.Concurrent-import Control.Concurrent.STM-import Control.Exception-import Control.Monad-import Data.ByteString (ByteString)-import Data.List-import Data.Text (Text)-import qualified Data.Text.Lazy as LT-import qualified Data.Text.Lazy.Builder as TLB-import System.Exit-import System.Random (randomRIO)-import Test.QuickCheck-import Test.Syd-import Test.Syd.OptParse-import Text.Colour--data DangerousRecord = Cons1 {field :: String} | Cons2--class ToUnit a where-  toUnit :: a -> ()--instance ToUnit Int -- No implementation on purpose--spec :: Spec-spec = do-  it "Passes" (pure () :: IO ())-  describe "error" $ do-    it "Pure error" (pure (error "foobar") :: IO ())-    it "Impure error" (error "foobar" :: IO ())-  describe "undefined" $ do-    it "Pure undefined" (pure undefined :: IO ())-    it "Impure undefined" (undefined :: IO ())-  it "Exit code" $ do-    exitWith $ ExitFailure 1 :: IO ()-  describe "exceptions" $ do-    let exceptionTest :: String -> a -> Spec-        exceptionTest s a = describe s $ do-          it "fails in IO, as the result" (pure (seq a ()) :: IO ())-          it "fails in IO, as the action" (seq a (pure ()) :: IO ())-          it "fails in pure code" $ seq a True-    it "Record construction error" (throw $ RecConError "test" :: IO ())-    exceptionTest "Record construction error" $ let c = Cons1 {} in field c-    it "Record selection error" (throw $ RecSelError "test" :: IO ())-    exceptionTest "Record selection error" $ let c = Cons2 in field c-    it "Record update error" (throw $ RecUpdError "test" :: IO ())-    exceptionTest "Record update error" $ let c = Cons2 in c {field = "this will throw"}-    it "Pattern matching error" (throw $ PatternMatchFail "test" :: IO ())-    exceptionTest "Pattern matching error" $ let Cons1 s = Cons2 in s-    it "ArithException" (throw Underflow :: IO ())-    exceptionTest "Pattern matching error" $ 1 `div` (0 :: Int)-    it "NoMethodError" (throw (NoMethodError "test") :: IO ())-    exceptionTest "Pattern matching error" $ toUnit (5 :: Int)-  describe "Printing" $ do-    it "print" $ print 'a'-    it "putStrLn" $ putStrLn "hi"-  modifyMaxSuccess (`div` 10) $-    modifyMaxSize (`div` 1) $-      modifyMaxShrinks (const 1) $-        modifyMaxDiscardRatio (const 1) $-          describe "Property tests" $ do-            describe "pure" $ do-              it "reversing a list twice is the same as reversing it once" $-                property $-                  \ls -> reverse (reverse ls) == (ls :: [Int])-              it "should fail to show that sorting does nothing" $-                property $-                  \ls -> sort ls == (ls :: [Int])-              it "should work with custom generators too" $ forAll arbitrary $ \b -> b || True-            describe "impure" $ do-              it "reversing a list twice is the same as reversing it once" $-                property $-                  \ls -> reverse (reverse ls) `shouldBe` (ls :: [Int])-              it "should fail to show that sorting does nothing" $-                property $-                  \ls -> sort ls `shouldBe` (ls :: [Int])-              it "should work with custom generators too" $ forAll arbitrary $ \b -> (b || True) `shouldBe` True-  describe "Long running tests" $-    forM_ [1 :: Int .. 10] $-      \i ->-        it (concat ["takes a while (", show i, ")"]) $-          threadDelay 100_000-  describe "Diff" $ do-    it "shows nice multi-line diffs" $-      ("foo", replicate 7 "quux", "bar") `shouldBe` (("foofoo", replicate 6 "quux", "baz") :: (String, [String], String))-    it "shows nice multi-line diffs" $-      ("foo", [], "bar") `shouldBe` (("foofoo", replicate 6 "quux", "baz") :: (String, [String], String))-  describe "assertions" $ do-    it "shouldBe" $ 3 `shouldBe` (4 :: Int)-    it "shouldNotBe" $ 3 `shouldNotBe` (3 :: Int)-    it "shouldSatisfy" $ (3 :: Int) `shouldSatisfy` even-    it "shouldNotSatisfy" $ (3 :: Int) `shouldNotSatisfy` odd-    it "shouldSatisfyNamed" $ shouldSatisfyNamed (3 :: Int) "even" even-    it "shouldNotSatisfyNamed" $ shouldNotSatisfyNamed (3 :: Int) "odd" odd-  pending "pending test"-  describe "Golden" $ do-    it "does not fail the suite when an exception happens while reading" $-      GoldenTest-        { goldenTestRead = die "test",-          goldenTestProduce = pure (),-          goldenTestWrite = \() -> do-            pure (),-          goldenTestCompare = \() () -> Nothing-        }-    it "does not fail the suite when an exception happens while producing" $-      GoldenTest-        { goldenTestRead = pure Nothing,-          goldenTestProduce = die "test",-          goldenTestWrite = \() -> do-            pure (),-          goldenTestCompare = \() () -> Nothing-        }-    it "does not fail the suite when an exception happens while writing" $-      GoldenTest-        { goldenTestRead = pure Nothing,-          goldenTestProduce = pure (),-          goldenTestWrite = \() -> die "test",-          goldenTestCompare = \() () -> Nothing-        }-    it "does not fail the suite when an exception happens while checking for equality" $-      GoldenTest-        { goldenTestRead = pure (Just ()),-          goldenTestProduce = pure (),-          goldenTestWrite = \() -> pure (),-          goldenTestCompare = \actual expected -> case 1 `div` (0 :: Int) of-            1 -> Nothing-            _ ->-              if actual == expected-                then Nothing-                else Just $ NotEqualButShouldHaveBeenEqual (show actual) (show expected)-        }--    describe "outputResultForest" $ do-      it "outputs the same as last time" $ do-        pureGoldenTextFile-          "test_resources/output.golden"-          (LT.toStrict $ TLB.toLazyText $ renderResultReport defaultSettings With24BitColours (Timed {timedValue = [], timedBegin = 0, timedEnd = 0, timedWorker = 0}))--  doNotRandomiseExecutionOrder $-    describe "Around" $ do-      describe "before" $ do-        before (void (throwIO (userError "test"))) $-          it "does not kill the test suite" $ \() ->-            pure () :: IO ()--      describe "before_" $ do-        before_ (throwIO (userError "test")) $-          it "does not kill the test suite" $ \() ->-            pure () :: IO ()--      describe "after" $ do-        after (\_ -> throwIO (userError "test")) $-          it "does not kill the test suite" $ \() ->-            pure () :: IO ()--      describe "after_" $ do-        after_ (throwIO (userError "test")) $-          it "does not kill the test suite" $ \() ->-            pure () :: IO ()--      describe "around" $ do-        around (\_ -> throwIO (userError "test")) $-          it "does not kill the test suite" $ \() ->-            pure () :: IO ()--      describe "around_" $ do-        around_ (\_ -> throwIO (userError "test")) $-          it "does not kill the test suite" $ \() ->-            pure () :: IO ()--      describe "aroundWith" $ do-        aroundWith (\_ () -> throwIO (userError "test")) $-          it "does not kill the test suite" $ \() ->-            pure () :: IO ()--      describe "aroundWith'" $ do-        aroundWith' (\_ () () -> throwIO (userError "test")) $-          it "does not kill the test suite" $ \() ->-            pure () :: IO ()--  it "expectationFailure" (expectationFailure "fails" :: IO ())--  describe "String" $ do-    it "compares strings" $ ("foo\nbar\tquux " :: String) `shouldBe` "foq\nbaz\tqex"-    it "compares strings" $ ("foo\nbar\tquux " :: String) `stringShouldBe` "foq\nbaz\tqex"-    it "compares texts" $ ("foo\nbar\tquux " :: Text) `shouldBe` "foq\nbaz\tqex"-    it "compares texts" $ ("foo\nbar\tquux " :: Text) `textShouldBe` "foq\nbaz\tqex"-    it "compares bytestrings" $ ("foo\nbar\tquux " :: ByteString) `shouldBe` "foq\nbaz\tqex"--  describe "Context" $ do-    it "shows a nice context" $ context "Context" $ True `shouldBe` False-    it "shows a nice context multiple levels deep" $-      context "Context1" $-        context "Context2" $-          context "Context3" $-            True `shouldBe` False-    it "shows a context when an exception is thrown as well" $-      context "context" (undefined :: IO ())--  modifyMaxSize (`div` 10) $-    describe "Property" $ do-      describe "0 tests run" $ modifyMaxSuccess (const 0) $ it "shows a red '0 tests' when no tests are run" $ property $ \b -> b `shouldBe` False-      describe "generated values" $-        it "shows many generated values too" $-          property $ \i ->-            property $ \j ->-              property $ \k ->-                property $ \l ->-                  property $ \m ->-                    i + j + k + l + m `shouldBe` m + l + k + j + i + (1 :: Int)-      let magnitude :: Int -> Int-          magnitude = max 0 . (ceiling :: Double -> Int) . logBase 10 . fromIntegral-      describe "labels" $ do-        it "shows the labels in use on success" $-          property $ \xs ->-            label ("length of input is " ++ show (length xs)) $-              reverse (reverse xs) `shouldBe` (xs :: [Int])-        it "shows the labels in use on success" $-          property $ \xs ->-            label ("length of input is " ++ show (length xs)) $-              label ("magnitude (digits) of sum of input is " ++ show (magnitude (sum xs))) $-                reverse (reverse xs) `shouldBe` (xs :: [Int])-        it "shows the labels in use on failure" $-          property $ \xs ->-            label ("length of input is " ++ show (length xs)) $-              label ("magnitude (digits) of sum of input is " ++ show (magnitude (sum xs))) $-                reverse (reverse xs) `shouldBe` (0 : xs :: [Int])--      describe "classes" $ do-        it "shows the classes in use on success" $-          forAll (sort <$> arbitrary) $ \xs ->-            classify (length xs > 1) "non-trivial" $-              sort xs `shouldBe` (xs :: [Int])-        it "shows the classes in use on success" $-          forAll (sort <$> arbitrary) $ \xs ->-            classify (null xs) "empty" $-              classify (length xs == 1) "single element" $-                classify (length xs > 1) "non-trivial" $-                  sort xs `shouldBe` (xs :: [Int])-        it "shows the classes in use on failure" $-          forAll (sort <$> arbitrary) $ \xs ->-            classify (null xs) "empty" $-              classify (length xs == 1) "single element" $-                classify (length xs > 1) "non-trivial" $-                  sort xs `shouldBe` (0 : xs :: [Int])--      describe "tables" $ do-        it "shows the tables in use on success" $-          forAll (sort <$> arbitrary) $ \xs ->-            tabulate "List elements" (map show xs) $-              sort xs `shouldBe` (xs :: [Int])--  modifyMaxSize (const 30) $ -- Bigger than the 20 below-    modifyMaxShrinks (const 30) $ -- Definitely not zero-      describe "Shrinking" $ do-        var <- liftIO newEmptyMVar-        let withVar func = do-              putMVar var ()-              r <- func-              takeMVar var-              pure r-        around_ withVar $-          it "can grab the mvar during shrinking" $-            forAllShrink (sized $ \n -> pure n) shrink $ \i -> do-              () <- readMVar var-              i `shouldSatisfy` (< 20)--  describe "Retries" $ do-    withoutRetries $-      it "does not retry if the test is configured withoutRetries" False-    withRetries 5 $-      it "Retries this five times" False--  describe "Flakiness" $ do-    potentiallyFlaky $ do-      it "Allows flakiness on True eventhough there is none (should succeed)" True-      it "Allows flakiness on False eventhough there is none (should fail)" False-    potentiallyFlakyWith "We're on it!" $ do-      var <- liftIO $ newTVarIO (0 :: Int)-      it "allows this intentionally flaky test with the default number of retries" $ do-        atomically $ modifyTVar' var succ-        i <- readTVarIO var-        i `shouldBe` 2-    notFlaky $ do-      var <- liftIO $ newTVarIO (0 :: Int)-      it "Does not allow flakiness if flakiness is not allowed even if retries happen" $ do-        atomically $ modifyTVar' var succ-        i <- readTVarIO var-        i `shouldBe` 2-    flaky 5 $ it "Allows flakiness in this boolean five times (should fail with 5 retries)" False-    flakyWith 4 "We're on it!" $ do-      var <- liftIO $ newTVarIO (0 :: Int)-      it "allows this intentionally flaky test with up to four retries" $ do-        atomically $ modifyTVar' var succ-        i <- readTVarIO var-        i `shouldBe` 2--  describe "xdescribe" $ do-    xdescribe "two pending tests below here" $ do-      it "one" False-      it "two" True-    xdescribe "four pending tests below here" $ do-      it "one" False-      it "two" True-      describe "wat" $ do-        it "three" False-        it "four" True--  describe "callstack" $ do-    it "it" False-    specify "specify" False-    prop "prop" False-    describe "describe" $ do-      it "describe-it" False-      specify "describe-specify" False--  describe "expectations" $ do-    expectFailing $ do-      it "considered passing" False-      expectPassing $ it "considered passing" True-    expectPassing $ do-      it "considered failing" False-      expectFailing $ it "considered failing" True--  describe "combinators" $ do-    let somePropertyCombinator :: Gen Int -> (Int -> Int) -> Property-        somePropertyCombinator gen func =-          forAll gen $ \i ->-            even (func i)-    it "should fail" $ somePropertyCombinator arbitrary (* 3)-    it "should pass" $ somePropertyCombinator arbitrary (* 4)-    it "should not crash (undefined value)" $ somePropertyCombinator arbitrary undefined-    it "should not crash (undefined generator)" $ somePropertyCombinator undefined (* 2)--    let someTestSuiteCombinator i =-          it "should be even" $ even (i :: Int)-    someTestSuiteCombinator 1-    someTestSuiteCombinator 2-    someTestSuiteCombinator undefined--  describe "randomness" $-    it "always outputs the same pseudorandomness" $ do-      i <- randomRIO (1, 100)-      i `shouldBe` (2 :: Int)
src/Test/Syd/Def/Around.hs view
@@ -4,7 +4,6 @@ {-# LANGUAGE GADTs #-} {-# LANGUAGE IncoherentInstances #-} {-# LANGUAGE LambdaCase #-}-{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeFamilies #-} @@ -60,7 +59,7 @@ -- Note that this function turns off shrinking. -- See https://github.com/nick8325/quickcheck/issues/331 beforeWith' ::-  HContains outers outer =>+  (HContains outers outer) =>   (outer -> oldInner -> IO newInner) ->   TestDefM outers newInner result ->   TestDefM outers oldInner result@@ -169,7 +168,7 @@ -- See https://github.com/nick8325/quickcheck/issues/331 aroundWith' ::   forall newInner oldInner outer result (outers :: [Type]).-  HContains outers outer =>+  (HContains outers outer) =>   -- | The function that provides the new inner resource using the old resource.   -- It can also use and modify the outer resource   ((outer -> newInner -> IO ()) -> (outer -> oldInner -> IO ())) ->@@ -185,7 +184,7 @@         -- d: oldInner         let modifyVal ::               forall x.-              HContains x outer =>+              (HContains x outer) =>               (ProgressReporter -> ((HList x -> newInner -> IO ()) -> IO ()) -> IO TestRunResult) ->               ProgressReporter ->               ((HList x -> oldInner -> IO ()) -> IO ()) ->@@ -202,7 +201,7 @@              -- For this function to work recursively, the first parameter of the input and the output types must be the same             modifyTree ::-              forall x extra. HContains x outer => SpecDefTree x newInner extra -> SpecDefTree x oldInner extra+              forall x extra. (HContains x outer) => SpecDefTree x newInner extra -> SpecDefTree x oldInner extra             modifyTree = \case               DefDescribeNode t sdf -> DefDescribeNode t $ modifyForest sdf               DefPendingNode t mr -> DefPendingNode t mr@@ -221,7 +220,7 @@               DefExpectationNode f sdf -> DefExpectationNode f $ modifyForest sdf             modifyForest ::               forall x extra.-              HContains x outer =>+              (HContains x outer) =>               SpecDefForest x newInner extra ->               SpecDefForest x oldInner extra             modifyForest = map modifyTree
src/Test/Syd/Def/Golden.hs view
@@ -140,11 +140,11 @@     }  -- | Test that the show instance has not changed for the given value.-goldenShowInstance :: Show a => FilePath -> a -> GoldenTest String+goldenShowInstance :: (Show a) => FilePath -> a -> GoldenTest String goldenShowInstance fp a = pureGoldenStringFile fp (show a)  -- | Test that the show instance has not changed for the given value, via `ppShow`.-goldenPrettyShowInstance :: Show a => FilePath -> a -> GoldenTest String+goldenPrettyShowInstance :: (Show a) => FilePath -> a -> GoldenTest String goldenPrettyShowInstance fp a = pureGoldenStringFile fp (ppShow a)  -- | The golden test context for adding context to a golden test assertion:
src/Test/Syd/Def/SetupFunc.hs view
@@ -83,7 +83,7 @@  -- | Use 'aroundWith'' with a 'SetupFunc' setupAroundWith' ::-  HContains outers outer =>+  (HContains outers outer) =>   (outer -> oldInner -> SetupFunc newInner) ->   TestDefM outers newInner result ->   TestDefM outers oldInner result
src/Test/Syd/Def/Specify.hs view
@@ -134,7 +134,7 @@ -- This test sets up a temporary directory as an inner resource, and makes it available to each test in the group below. -- -- > let setUpTempDir func = withSystemTempDir $ \tempDir -> func tempDir--- > in around setUpTempDir describe "readFile and writeFile" $+-- > in around setUpTempDir $ describe "readFile and writeFile" $ -- >     it "reads back what it wrote for this example" $ \tempDir -> do -- >         let cts = "hello world" -- >         let fp = tempDir </> "test.txt"@@ -155,7 +155,7 @@ -- ===== IO property test -- -- > let setUpTempDir func = withSystemTempDir $ \tempDir -> func tempDir--- > in around setUpTempDir describe "readFile and writeFile" $+-- > in around setUpTempDir $ describe "readFile and writeFile" $ -- >     it "reads back what it wrote for this example" $ \tempDir -> -- >         property $ \cts -> do -- >             let fp = tempDir </> "test.txt"@@ -492,7 +492,7 @@ -- | Convenience function for backwards compatibility with @hspec@ -- -- > prop s p = it s $ property p-prop :: Testable prop => String -> prop -> Spec+prop :: (Testable prop) => String -> prop -> Spec prop s p = withFrozenCallStack $ it s $ property p  -- | Declare a test that has not been written yet.
src/Test/Syd/Expectation.hs view
@@ -99,14 +99,14 @@ -- -- Note that using function could mess up the colours in your terminal if the Texts contain ANSI codes. -- In that case you may want to `show` your values first or use `shouldBe` instead.-stringShouldBe :: HasCallStack => String -> String -> IO ()+stringShouldBe :: (HasCallStack) => String -> String -> IO () stringShouldBe actual expected = unless (actual == expected) $ throwIO $ stringsNotEqualButShouldHaveBeenEqual actual expected  -- | Assert that two 'Text's are equal according to `==`. -- -- Note that using function could mess up the colours in your terminal if the Texts contain ANSI codes. -- In that case you may want to `show` your values first or use `shouldBe` instead.-textShouldBe :: HasCallStack => Text -> Text -> IO ()+textShouldBe :: (HasCallStack) => Text -> Text -> IO () textShouldBe actual expected = unless (actual == expected) $ throwIO $ textsNotEqualButShouldHaveBeenEqual actual expected  -- | An assertion that says two 'String's should have been equal according to `==`.@@ -131,7 +131,7 @@ -- -- Note that this is mostly backward compatible, but it has return type 'a' instead of '()' because execution will not continue beyond this function. -- In this way it is not entirely backward compatible with hspec because now there could be an ambiguous type error.-expectationFailure :: HasCallStack => String -> IO a+expectationFailure :: (HasCallStack) => String -> IO a expectationFailure = throwIO . ExpectationFailed  -- | Annotate a given action with a context, for contextual assertions
src/Test/Syd/HList.hs view
@@ -29,5 +29,5 @@ instance HContains (a ': l) a where   getElem (HCons a _) = a -instance HContains l a => HContains (b ': l) a where+instance (HContains l a) => HContains (b ': l) a where   getElem (HCons _ hl) = getElem hl
src/Test/Syd/OptParse.hs view
@@ -11,7 +11,6 @@ import Autodocodec.Yaml import Control.Applicative import Control.Monad-import Data.Functor ((<&>)) import Data.Maybe import Data.String import Data.Text (Text)@@ -666,8 +665,8 @@     <*> doubleSwitch ["debug"] (help "Turn on debug mode. This implies --no-randomise-execution-order, --synchronous, --progress and --fail-fast.")     <*> doubleSwitch ["profile"] (help "Turn on profiling mode.") -manyOptional :: OptParse.Mod OptionFields [Text] -> OptParse.Parser [Text]-manyOptional modifier = mconcat <$> many (option (str <&> T.words) modifier)+manyOptional :: OptParse.Mod OptionFields Text -> OptParse.Parser [Text]+manyOptional modifier = many (option str modifier)  seedSettingFlags :: OptParse.Parser (Maybe SeedSetting) seedSettingFlags =
src/Test/Syd/Output.hs view
@@ -208,11 +208,11 @@       executionTimeText = T.pack (printf "%10.2f ms" t)       withTimingColour =         if-            | t < 10 -> fore green-            | t < 100 -> fore yellow-            | t < 1_000 -> fore orange-            | t < 10_000 -> fore red-            | otherwise -> fore darkRed+          | t < 10 -> fore green+          | t < 100 -> fore yellow+          | t < 1_000 -> fore orange+          | t < 10_000 -> fore red+          | otherwise -> fore darkRed    in withTimingColour $ chunk executionTimeText  retriesChunks :: TestRunReport -> [[Chunk]]
src/Test/Syd/Run.hs view
@@ -468,14 +468,14 @@ -- 'SomeException', so that we can unwrap it. -- (For some unknown reason, that doesn't work otherwise.) data Contextual-  = forall e. Exception e => Contextual !e !String+  = forall e. (Exception e) => Contextual !e !String  instance Show Contextual where   showsPrec d (Contextual e s) = showParen (d > 10) $ showString "Contextual " . showsPrec 11 (displayException e) . showString " " . showsPrec 11 s  instance Exception Contextual -addContextToException :: Exception e => e -> String -> Contextual+addContextToException :: (Exception e) => e -> String -> Contextual addContextToException e = Contextual e  data GoldenCase@@ -495,17 +495,17 @@ data Progress   = ProgressTestStarting   | ProgressExampleStarting+      -- Total examples       !Word-      -- ^ Total examples+      -- Example number       !Word-      -- ^ Example number   | ProgressExampleDone+      -- Total examples       !Word-      -- ^ Total examples+      -- Example number       !Word-      -- ^ Example number+      -- Time it took       !Word64-      -- ^ Time it took   | ProgressTestDone   deriving (Show, Eq, Generic) @@ -515,7 +515,7 @@ -- That means that any waiting, like with 'threadDelay' would not be counted. -- -- Note that this does not evaluate the result, on purpose.-timeItT :: MonadIO m => Int -> m a -> m (Timed a)+timeItT :: (MonadIO m) => Int -> m a -> m (Timed a) timeItT worker func = do   (r, (begin, end)) <- timeItBeginEnd func   pure@@ -526,12 +526,12 @@         timedEnd = end       } -timeItDuration :: MonadIO m => m a -> m (a, Word64)+timeItDuration :: (MonadIO m) => m a -> m (a, Word64) timeItDuration func = do   (r, (begin, end)) <- timeItBeginEnd func   pure (r, end - begin) -timeItBeginEnd :: MonadIO m => m a -> m (a, (Word64, Word64))+timeItBeginEnd :: (MonadIO m) => m a -> m (a, (Word64, Word64)) timeItBeginEnd func = do   begin <- liftIO getMonotonicTimeNSec   r <- func
src/Test/Syd/Runner/Wrappers.hs view
@@ -26,7 +26,7 @@     else Continue td  applySimpleWrapper ::-  MonadIO m =>+  (MonadIO m) =>   ((a -> m ()) -> (b -> m ())) ->   (a -> m r) ->   (b -> m r)@@ -41,7 +41,7 @@   liftIO $ readMVar var  applySimpleWrapper' ::-  MonadIO m =>+  (MonadIO m) =>   ((a -> m ()) -> m ()) ->   (a -> m r) ->   m r@@ -56,7 +56,7 @@   liftIO $ readMVar var  applySimpleWrapper'' ::-  MonadIO m =>+  (MonadIO m) =>   (m () -> m ()) ->   m r ->   m r@@ -69,7 +69,7 @@   liftIO $ readMVar var  applySimpleWrapper2 ::-  MonadIO m =>+  (MonadIO m) =>   ((a -> b -> m ()) -> (c -> d -> m ())) ->   (a -> b -> m r) ->   (c -> d -> m r)
src/Test/Syd/SpecDef.hs view
@@ -166,7 +166,7 @@           DefExpectationNode p sdf -> DefExpectationNode p $ goF sdf  instance Foldable (SpecDefTree a c) where-  foldMap :: forall e m. Monoid m => (e -> m) -> SpecDefTree a c e -> m+  foldMap :: forall e m. (Monoid m) => (e -> m) -> SpecDefTree a c e -> m   foldMap f =     let goF :: forall x y. SpecDefForest x y e -> m         goF = foldMap (foldMap f)@@ -188,7 +188,7 @@           DefExpectationNode _ sdf -> goF sdf  instance Traversable (SpecDefTree a c) where-  traverse :: forall u w f. Applicative f => (u -> f w) -> SpecDefTree a c u -> f (SpecDefTree a c w)+  traverse :: forall u w f. (Applicative f) => (u -> f w) -> SpecDefTree a c u -> f (SpecDefTree a c w)   traverse f =     let goF :: forall x y. SpecDefForest x y u -> f (SpecDefForest x y w)         goF = traverse (traverse f)@@ -247,12 +247,12 @@       DefFlakinessNode func sdf -> DefFlakinessNode func <$> goForest dl sdf       DefExpectationNode func sdf -> DefExpectationNode func <$> goForest dl sdf -randomiseTestForest :: MonadRandom m => SpecDefForest outers inner result -> m (SpecDefForest outers inner result)+randomiseTestForest :: (MonadRandom m) => SpecDefForest outers inner result -> m (SpecDefForest outers inner result) randomiseTestForest = goForest   where-    goForest :: MonadRandom m => SpecDefForest a b c -> m (SpecDefForest a b c)+    goForest :: (MonadRandom m) => SpecDefForest a b c -> m (SpecDefForest a b c)     goForest = traverse goTree >=> shuffleM-    goTree :: MonadRandom m => SpecDefTree a b c -> m (SpecDefTree a b c)+    goTree :: (MonadRandom m) => SpecDefTree a b c -> m (SpecDefTree a b c)     goTree = \case       DefSpecifyNode t td e -> pure $ DefSpecifyNode t td e       DefPendingNode t mr -> pure $ DefPendingNode t mr
sydtest.cabal view
@@ -1,11 +1,11 @@ cabal-version: 1.12 --- This file has been generated from package.yaml by hpack version 0.35.2.+-- This file has been generated from package.yaml by hpack version 0.36.0. -- -- see: https://github.com/sol/hpack  name:           sydtest-version:        0.15.1.1+version:        0.15.1.2 synopsis:       A modern testing framework for Haskell with good defaults and advanced testing features. description:    A modern testing framework for Haskell with good defaults and advanced testing features. Sydtest aims to make the common easy and the hard possible. See https://github.com/NorfairKing/sydtest#readme for more information. category:       Testing@@ -13,7 +13,7 @@ bug-reports:    https://github.com/NorfairKing/sydtest/issues author:         Tom Sydney Kerckhove maintainer:     syd@cs-syd.eu-copyright:      Copyright (c) 2020-2023 Tom Sydney Kerckhove+copyright:      Copyright (c) 2020-2024 Tom Sydney Kerckhove license:        OtherLicense license-file:   LICENSE.md build-type:     Simple@@ -21,14 +21,6 @@     LICENSE.md     CHANGELOG.md     CONTRIBUTORS-    test_resources/defaultSettings-show.golden-    test_resources/even/2-    test_resources/even/4-    test_resources/even/odd/3-    test_resources/odd/3-    test_resources/odd/deep/5-    test_resources/output-test.txt-    test_resources/output.golden  source-repository head   type: git@@ -100,84 +92,3 @@   else     build-depends:         safe-coloured-text-terminfo--test-suite sydtest-multi-discover-test-  type: exitcode-stdio-1.0-  main-is: Main.hs-  other-modules:-      Bar.BarSpec-      Bar.Spec-      Baz.Qux.QuxSpec-      Baz.Qux.Spec-      DoNotDiscover.FooSpec-      Foo.FooSpec-      Foo.Spec-      Paths_sydtest-  hs-source-dirs:-      multi-discover-test-  ghc-options: -threaded -rtsopts -with-rtsopts=-N-  build-tool-depends:-      sydtest-discover:sydtest-discover-  build-depends:-      base >=4.7 && <5-    , sydtest-  default-language: Haskell2010--test-suite sydtest-output-test-  type: exitcode-stdio-1.0-  main-is: Main.hs-  other-modules:-      Spec-      Paths_sydtest-  hs-source-dirs:-      output-test-  ghc-options: -threaded -rtsopts -with-rtsopts=-N-  build-depends:-      QuickCheck-    , base >=4.7 && <5-    , bytestring-    , random-    , safe-coloured-text-    , stm-    , sydtest-    , text-  default-language: Haskell2010--test-suite sydtest-test-  type: exitcode-stdio-1.0-  main-is: Spec.hs-  other-modules:-      Test.Syd.AroundAllSpec-      Test.Syd.AroundCombinationSpec-      Test.Syd.AroundSpec-      Test.Syd.DescriptionsSpec-      Test.Syd.DiffSpec-      Test.Syd.ExpectationSpec-      Test.Syd.FootgunSpec-      Test.Syd.GoldenSpec-      Test.Syd.OptParseSpec-      Test.Syd.PathSpec-      Test.Syd.ScenarioSpec-      Test.Syd.SequentialSpec-      Test.Syd.Specify.AllOuterSpec-      Test.Syd.SpecifySpec-      Test.Syd.TimingSpec-      Paths_sydtest-  hs-source-dirs:-      test-  ghc-options: -threaded -rtsopts -with-rtsopts=-N-  build-tool-depends:-      sydtest-discover:sydtest-discover-  build-depends:-      QuickCheck-    , base >=4.7 && <5-    , bytestring-    , fast-myers-diff-    , path-    , path-io-    , safe-coloured-text-    , stm-    , sydtest-    , text-    , vector-  default-language: Haskell2010
− test/Spec.hs
@@ -1,1 +0,0 @@-{-# OPTIONS_GHC -F -pgmF sydtest-discover #-}
− test/Test/Syd/AroundAllSpec.hs
@@ -1,145 +0,0 @@-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE TypeFamilies #-}--module Test.Syd.AroundAllSpec (spec) where--import Control.Concurrent.STM-import Control.Monad.IO.Class-import Test.Syd--spec :: Spec-spec = sequential $ do-  describe "beforeAll" $ do-    var <- liftIO $ newTVarIO (0 :: Int)-    let readAndIncrement :: IO Int-        readAndIncrement = atomically $ stateTVar var $ \i -> (i + 1, i + 1)-    beforeAll readAndIncrement $ do-      let t :: Int -> IO ()-          t i = i `shouldBe` 1-      itWithOuter "reads 1" t-      itWithOuter "reads 1" t--  describe "beforeAll_" $ do-    var <- liftIO $ newTVarIO (0 :: Int)-    let increment :: IO ()-        increment = atomically $ modifyTVar var (+ 1)-    beforeAll_ increment $ do-      let t :: IO ()-          t = do-            i <- readTVarIO var-            i `shouldBe` 1-      it "reads 1" t-      it "reads 1" t--  describe "beforeAllWith" $ do-    var <- liftIO $ newTVarIO (0 :: Int)-    let readAndIncrement :: IO Int-        readAndIncrement = atomically $ stateTVar var $ \i -> (i + 1, i + 1)-    let increment :: IO ()-        increment = atomically $ modifyTVar var (+ 1)-    let incrementBeforeAndAfterWith :: Int -> IO Int-        incrementBeforeAndAfterWith j = do-          i <- readAndIncrement-          increment-          pure (i + j)-    beforeAll readAndIncrement $ do-      beforeAllWith incrementBeforeAndAfterWith $ do-        let t :: Int -> IO ()-            t i = i `shouldBe` 3-        itWithOuter "reads 3" t-        itWithOuter "reads 3" t--  describe "afterAll" $ do-    var <- liftIO $ newTVarIO (0 :: Int)-    let readAndIncrement :: IO Int-        readAndIncrement = atomically $ stateTVar var $ \i -> (i + 1, i + 1)-        addExtra :: Int -> IO ()-        addExtra i = atomically $ modifyTVar var (+ i)-    beforeAll readAndIncrement $-      afterAll addExtra $ do-        let t :: Int -> IO ()-            t i = i `shouldBe` 1-        itWithOuter "reads 1" t-        itWithOuter "reads 1" t--  describe "afterAll'" $ do-    var <- liftIO $ newTVarIO (0 :: Int)-    let readAndIncrement :: IO Int-        readAndIncrement = atomically $ stateTVar var $ \i -> (i + 1, i + 1)-        addExtra :: HList '[Int] -> IO ()-        addExtra (HCons i HNil) = atomically $ modifyTVar var (+ i)-    beforeAll readAndIncrement $-      afterAll' addExtra $ do-        let t :: Int -> IO ()-            t i = i `shouldBe` 1-        itWithOuter "reads 1" t-        itWithOuter "reads 1" t--  describe "afterAll_" $ do-    var <- liftIO $ newTVarIO (0 :: Int)-    let increment :: IO ()-        increment = atomically $ modifyTVar var (+ 1)-    afterAll_ increment $ do-      let t :: IO ()-          t = do-            i <- readTVarIO var-            i `shouldBe` 0-      it "reads 0" t-      it "reads 0" t--  describe "aroundAll" $ do-    var <- liftIO $ newTVarIO (0 :: Int)-    let readAndIncrement :: IO Int-        readAndIncrement = atomically $ stateTVar var $ \i -> (i + 1, i + 1)-    let increment :: IO ()-        increment = atomically $ modifyTVar var (+ 1)-    let incrementBeforeAndAfter :: (Int -> IO ()) -> IO ()-        incrementBeforeAndAfter func = do-          i <- readAndIncrement-          func i-          increment-    aroundAll incrementBeforeAndAfter $ do-      let t :: Int -> IO ()-          t i = i `shouldBe` 1-      itWithOuter "reads 1" t-      itWithOuter "reads 1" t--  describe "aroundAll_" $ do-    var <- liftIO $ newTVarIO (0 :: Int)-    let increment :: IO ()-        increment = atomically $ modifyTVar var (+ 1)-    let incrementBeforeAndAfter :: IO () -> IO ()-        incrementBeforeAndAfter func = do-          increment-          func-          increment-    aroundAll_ incrementBeforeAndAfter $ do-      let t :: IO ()-          t = do-            i <- readTVarIO var-            i `shouldBe` 1-      it "reads 1" t-      it "reads 1" t--  describe "aroundAllWith" $ do-    var <- liftIO $ newTVarIO (0 :: Int)-    let readAndIncrement :: IO Int-        readAndIncrement = atomically $ stateTVar var $ \i -> (i + 1, i + 1)-    let increment :: IO ()-        increment = atomically $ modifyTVar var (+ 1)-    let incrementBeforeAndAfter :: (Int -> IO ()) -> IO ()-        incrementBeforeAndAfter func = do-          i <- readAndIncrement-          func i-          increment-    let incrementBeforeAndAfterWith :: (Int -> IO ()) -> Int -> IO ()-        incrementBeforeAndAfterWith func j = do-          i <- readAndIncrement-          func (i + j)-          increment-    aroundAll incrementBeforeAndAfter $-      aroundAllWith incrementBeforeAndAfterWith $ do-        let t :: Int -> IO ()-            t i = i `shouldBe` 3-        itWithOuter "reads correctly" t-        itWithOuter "reads correctly" t
− test/Test/Syd/AroundCombinationSpec.hs
@@ -1,44 +0,0 @@-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TypeFamilies #-}--module Test.Syd.AroundCombinationSpec (spec) where--import Control.Concurrent.STM-import Control.Monad.IO.Class-import Test.Syd--spec :: Spec-spec = sequential $-  doNotRandomiseExecutionOrder $ do-    describe "aroundAll + aroundAllWith + around + aroundWith'" $ do-      var <- liftIO $ newTVarIO (0 :: Int)-      let readAndIncrement :: IO Int-          readAndIncrement = atomically $ stateTVar var $ \i -> (i + 1, i + 1)-      let increment :: IO ()-          increment = atomically $ modifyTVar var (+ 1)-      let incrementAround :: (Int -> IO ()) -> IO ()-          incrementAround func = do-            i <- readAndIncrement-            func i-            increment-      let incrementAroundWith :: (Int -> IO ()) -> Int -> IO ()-          incrementAroundWith func j = do-            i <- readAndIncrement-            func (i + j)-            increment-      let incrementAroundWith2 :: (Int -> Int -> IO ()) -> Int -> Int -> IO ()-          incrementAroundWith2 func j k = do-            i <- readAndIncrement-            func (i + j) k-            increment-      aroundAll incrementAround $-        aroundAllWith incrementAroundWith $-          around incrementAround $-            aroundWith' incrementAroundWith2 $ do-              itWithBoth "reads correctly" $-                \i k ->-                  (i, k) `shouldBe` (3, 3)-              itWithBoth "reads correctly" $-                \i k ->-                  (i, k) `shouldBe` (3, 7)
− test/Test/Syd/AroundSpec.hs
@@ -1,133 +0,0 @@-module Test.Syd.AroundSpec (spec) where--import Control.Concurrent.STM-import Control.Monad.IO.Class-import Test.Syd--spec :: Spec-spec = sequential . doNotRandomiseExecutionOrder $ do-  describe "before" $ do-    var <- liftIO $ newTVarIO (1 :: Int)-    let readAndIncrement = atomically $ stateTVar var $ \i -> (i + 1, i + 1)-    before readAndIncrement $ do-      it "reads 2" $ \i ->-        i `shouldBe` 2-      it "reads 4" $ \i ->-        i `shouldBe` 3-      it "reads 6" $ \i ->-        i `shouldBe` 4--  describe "before_" $ do-    var <- liftIO $ newTVarIO (1 :: Int)-    let increment = atomically $ modifyTVar var succ-    before_ increment $ do-      it "reads 2" $ do-        i <- readTVarIO var-        i `shouldBe` 2-      it "reads 4" $ do-        i <- readTVarIO var-        i `shouldBe` 3-      it "reads 6" $ do-        i <- readTVarIO var-        i `shouldBe` 4--  describe "after" $ do-    var <- liftIO $ newTVarIO (0 :: Int)-    let increment = atomically $ modifyTVar var succ-    after (\() -> increment) $ do-      it "reads 0" $ do-        i <- readTVarIO var-        i `shouldBe` 0-      it "reads 2" $ do-        i <- readTVarIO var-        i `shouldBe` 1-      it "reads 4" $ do-        i <- readTVarIO var-        i `shouldBe` 2--  describe "after_" $ do-    var <- liftIO $ newTVarIO (0 :: Int)-    let increment = atomically $ modifyTVar var succ-    after_ increment $ do-      it "reads 0" $ do-        putStrLn "reads 0"-        i <- readTVarIO var-        i `shouldBe` 0-      it "reads 2" $ do-        putStrLn "reads 2"-        i <- readTVarIO var-        i `shouldBe` 1-      it "reads 4" $ do-        putStrLn "reads 4"-        i <- readTVarIO var-        i `shouldBe` 2--  describe "around" $ do-    var <- liftIO $ newTVarIO (1 :: Int)-    let increment = atomically $ modifyTVar var succ-        readAndIncrement = atomically $ stateTVar var $ \i -> (i + 1, i + 1)-        aroundFunc :: (Int -> IO ()) -> IO ()-        aroundFunc intFunc = do-          i <- readAndIncrement-          intFunc i-          increment-    around aroundFunc $ do-      it "reads 2" $ \i ->-        i `shouldBe` 2-      it "reads 4" $ \i ->-        i `shouldBe` 4-      it "reads 6" $ \i ->-        i `shouldBe` 6--  describe "around_" $ do-    var <- liftIO $ newTVarIO (1 :: Int)-    let increment = atomically $ modifyTVar var succ-        aroundFunc_ :: IO () -> IO ()-        aroundFunc_ func = do-          increment-          func-          increment-    around_ aroundFunc_ $ do-      it "reads 2" $ do-        i <- readTVarIO var-        i `shouldBe` 2-      it "reads 4" $ do-        i <- readTVarIO var-        i `shouldBe` 4-      it "reads 6" $ do-        i <- readTVarIO var-        i `shouldBe` 6--  describe "aroundWith" $ do-    var <- liftIO $ newTVarIO (1 :: Int)-    let increment = atomically $ modifyTVar var succ-        readAndIncrement = atomically $ stateTVar var $ \i -> (i + 1, i + 1)-        aroundWithFunc :: (Int -> IO ()) -> () -> IO ()-        aroundWithFunc intFunc () = do-          i <- readAndIncrement-          intFunc i-          increment-    aroundWith aroundWithFunc $ do-      it "reads 2" $ \i ->-        i `shouldBe` 2-      it "reads 4" $ \i ->-        i `shouldBe` 4-      it "reads 6" $ \i ->-        i `shouldBe` 6--  describe "aroundWith'" $ do-    var <- liftIO $ newTVarIO (1 :: Int)-    let increment = atomically $ modifyTVar var succ-        readAndIncrement = atomically $ stateTVar var $ \i -> (i + 1, i + 1)-        aroundWithFunc :: (() -> Int -> IO ()) -> () -> () -> IO ()-        aroundWithFunc intFunc () () = do-          i <- readAndIncrement-          intFunc () i-          increment-    aroundWith' aroundWithFunc $ do-      it "reads 2" $ \i ->-        i `shouldBe` 2-      it "reads 4" $ \i ->-        i `shouldBe` 4-      it "reads 6" $ \i ->-        i `shouldBe` 6
− test/Test/Syd/DescriptionsSpec.hs
@@ -1,14 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}--module Test.Syd.DescriptionsSpec (spec) where--import Test.Syd--spec :: Spec-spec =-  describe "foo" $-    describe "bar" $-      describe "quux" $ do-        descs <- getTestDescriptionPath-        it "gets the right descriptions" $-          descs `shouldBe` ["quux", "bar", "foo", "Test.Syd.DescriptionsSpec"]
− test/Test/Syd/DiffSpec.hs
@@ -1,290 +0,0 @@-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE LambdaCase #-}-{-# LANGUAGE OverloadedLists #-}-{-# LANGUAGE OverloadedStrings #-}-{-# OPTIONS_GHC -Wno-orphans #-}--module Test.Syd.DiffSpec (spec) where--import Control.Monad-import Data.String-import qualified Data.Text as T-import Data.Vector (Vector)-import qualified Data.Vector as V-import Myers.Diff-import Test.Syd---- Just for this test-instance IsString (Vector Char) where-  fromString = V.fromList--spec :: Spec-spec = do-  describe "getEditScript" $ do-    let exampleSpec :: Vector Char -> Vector Char -> Vector Edit -> Spec-        exampleSpec old new expected =-          it-            ( unwords-                [ "works for",-                  show old,-                  show new,-                  show expected-                ]-            )-            $ do-              let actual = getEditScript old new-              when (actual /= expected) $-                expectationFailure $-                  unlines-                    [ unwords ["actual:", show actual],-                      unwords ["expected:", show expected]-                    ]--    exampleSpec "" "" []-    exampleSpec "a" "a" []-    exampleSpec "a" "b" [Delete 0 1, Insert 1 0 1]-    exampleSpec "ab" "ac" [Delete 1 1, Insert 2 1 1]-    exampleSpec "b" "aba" [Insert 0 0 1, Insert 1 2 1]-    exampleSpec "abc" "acb" [Delete 1 1, Insert 3 2 1]-    exampleSpec "aaa" "aba" [Delete 0 1, Insert 2 1 1]-    exampleSpec "foofoo" "foo" [Delete 1 1, Delete 3 1, Delete 5 1]-    exampleSpec "foo" "foofoo" [Insert 1 1 1, Insert 2 3 1, Insert 3 5 1]--  describe "computeDiffFromEditScript" $ do-    let exampleSpec :: Vector Char -> Vector Char -> Vector Edit -> Vector (Diff Char) -> Spec-        exampleSpec old new editScript expected =-          it-            ( unwords-                [ "works for",-                  show old,-                  show new,-                  show editScript,-                  show expected-                ]-            )-            $ do-              let actual = computeDiffFromEditScript old new editScript-              when (actual /= expected) $-                expectationFailure $-                  unlines-                    [ unwords ["actual:", show actual],-                      unwords ["expected:", show expected]-                    ]--    exampleSpec "" "" [] []-    exampleSpec "a" "a" [] [Both 'a' 'a']-    exampleSpec "a" "b" [Delete 0 1, Insert 1 0 1] [First 'a', Second 'b']-    exampleSpec "ab" "ac" [Delete 1 1, Insert 2 1 1] [Both 'a' 'a', First 'b', Second 'c']-    exampleSpec "b" "aba" [Insert 0 0 1, Insert 1 2 1] [Second 'a', Both 'b' 'b', Second 'a']-    exampleSpec "abc" "acb" [Delete 1 1, Insert 3 2 1] [Both 'a' 'a', First 'b', Both 'c' 'c', Second 'b']-    exampleSpec "aaa" "aba" [Delete 0 1, Insert 2 1 1] [First 'a', Both 'a' 'a', Second 'b', Both 'a' 'a']-    exampleSpec "foofoo" "foo" [Delete 1 1, Delete 3 1, Delete 5 1] [Both 'f' 'f', First 'o', Both 'o' 'o', First 'f', Both 'o' 'o', First 'o']-    exampleSpec "foo" "foofoo" [Insert 1 1 1, Insert 2 3 1, Insert 3 5 1] [Both 'f' 'f', Second 'o', Both 'o' 'o', Second 'f', Both 'o' 'o', Second 'o']--  describe "getVectorDiff" $ do-    let exampleSpec :: Vector Char -> Vector Char -> Vector (Diff Char) -> Spec-        exampleSpec old new expected =-          it-            ( unwords-                [ "works for",-                  show old,-                  show new,-                  show expected-                ]-            )-            $ do-              let actual = getVectorDiff old new-              when (actual /= expected) $-                expectationFailure $-                  unlines-                    [ unwords ["actual:", show actual],-                      unwords ["expected:", show expected]-                    ]-    exampleSpec "" "" []-    exampleSpec "a" "a" [Both 'a' 'a']-    exampleSpec "a" "b" [First 'a', Second 'b']-    exampleSpec "ab" "ac" [Both 'a' 'a', First 'b', Second 'c']-    exampleSpec "aaa" "aba" [First 'a', Both 'a' 'a', Second 'b', Both 'a' 'a']-    exampleSpec "abgdef" "gh" [First 'a', First 'b', Both 'g' 'g', First 'd', First 'e', Second 'h', First 'f']-    exampleSpec "foofoo" "foo" [Both 'f' 'f', First 'o', Both 'o' 'o', First 'f', Both 'o' 'o', First 'o']--    prop "says that any list is entirely different from the empty list (left)" $ \ls ->-      let v = V.fromList (ls :: String)-       in getVectorDiff v "" `shouldBe` V.map First v--    prop "says that any list is entirely different from the empty list (right)" $ \ls ->-      let v = V.fromList (ls :: String)-       in getVectorDiff "" v `shouldBe` V.map Second v--    prop "does not find diffs in identical strings" $ \ls ->-      let v = V.fromList (ls :: String)-       in getVectorDiff v v `shouldBe` V.map (\a -> Both a a) v--    prop "only puts equal characters in 'Both'" $ \(ls1, ls2) ->-      let v1 = V.fromList (ls1 :: String)-          v2 = V.fromList (ls2 :: String)-          diff = getVectorDiff v1 v2-          valid = \case-            First _ -> True-            Second _ -> True-            Both a b -> a == b-       in all valid diff--    let rebuildFirst :: Vector (PolyDiff a b) -> Vector a-        rebuildFirst = V.mapMaybe $ \case-          First a -> Just a-          Second _ -> Nothing-          Both a _ -> Just a-    prop "lets you rebuild the old vector" $ \(ls1, ls2) -> do-      let v1 = V.fromList (ls1 :: String)-          v2 = V.fromList (ls2 :: String)-      rebuildFirst (getVectorDiff v1 v2) `shouldBe` v1--    let rebuildSecond :: Vector (PolyDiff a b) -> Vector b-        rebuildSecond = V.mapMaybe $ \case-          First _ -> Nothing-          Second b -> Just b-          Both _ b -> Just b-    prop "lets you rebuild the new vector" $ \(ls1, ls2) -> do-      let v1 = V.fromList (ls1 :: String)-          v2 = V.fromList (ls2 :: String)-      rebuildSecond (getVectorDiff v1 v2) `shouldBe` v2--    let unrollGroupedDiff :: Vector (PolyDiff (Vector a) (Vector b)) -> Vector (PolyDiff a b)-        unrollGroupedDiff = foldMap unrollPolyDiff--        -- Not performant, only for testing-        unrollPolyDiff :: PolyDiff (Vector a) (Vector b) -> Vector (PolyDiff a b)-        unrollPolyDiff = \case-          First va -> V.map First va-          Second vb -> V.map Second vb-          Both va vb -> V.zipWith Both va vb--    prop "is the same thing as getGroupedVectorDiff, but unrolled (unroll grouped)" $ \(ls1, ls2) ->-      let v1 = V.fromList (ls1 :: String)-          v2 = V.fromList (ls2 :: String)-          grouped = getGroupedVectorDiff v1 v2-          individual = getVectorDiff v1 v2-       in unrollGroupedDiff grouped `shouldBe` individual--  describe "getGroupedVectorDiff" $ do-    prop "says that any list is entirely different from the empty list (left)" $ \ls ->-      let v = V.fromList (ls :: String)-       in getGroupedVectorDiff v "" `shouldBe` (if V.null v then V.empty else V.singleton (First v))--    prop "says that any list is entirely different from the empty list (right)" $ \ls ->-      let v = V.fromList (ls :: String)-       in getGroupedVectorDiff "" v `shouldBe` (if V.null v then V.empty else V.singleton (Second v))--    prop "does not find diffs in identical strings" $ \ls ->-      let v = V.fromList (ls :: String)-       in getGroupedVectorDiff v v `shouldBe` (if V.null v then V.empty else V.singleton (Both v v))--    prop "only puts equal vectors in 'Both'" $ \(ls1, ls2) ->-      let v1 = V.fromList (ls1 :: String)-          v2 = V.fromList (ls2 :: String)-          diff = getGroupedVectorDiff v1 v2-          valid = \case-            First _ -> True-            Second _ -> True-            Both a b -> a == b-       in all valid diff--    let rebuildFirst :: Vector (PolyDiff (Vector a) (Vector b)) -> Vector a-        rebuildFirst =-          V.concat-            . V.toList-            . V.mapMaybe-              ( \case-                  First a -> Just a-                  Second _ -> Nothing-                  Both a _ -> Just a-              )-    prop "lets you rebuild the old vector" $ \(ls1, ls2) -> do-      let v1 = V.fromList (ls1 :: String)-          v2 = V.fromList (ls2 :: String)-      rebuildFirst (getGroupedVectorDiff v1 v2) `shouldBe` v1--    let rebuildSecond :: Vector (PolyDiff (Vector a) (Vector b)) -> Vector b-        rebuildSecond =-          V.concat-            . V.toList-            . V.mapMaybe-              ( \case-                  First _ -> Nothing-                  Second b -> Just b-                  Both _ b -> Just b-              )-    prop "lets you rebuild the new vector" $ \(ls1, ls2) -> do-      let v1 = V.fromList (ls1 :: String)-          v2 = V.fromList (ls2 :: String)-      rebuildSecond (getGroupedVectorDiff v1 v2) `shouldBe` v2--    -- Not performant, only for testing.-    let rollupUngroupedDiff :: Vector (PolyDiff a b) -> Vector (PolyDiff (Vector a) (Vector b))-        rollupUngroupedDiff = V.fromList . go . V.toList-          where-            go = \case-              [] -> []-              (d : ds) -> case d of-                First _ ->-                  let (fs, rest) = goFirsts (d : ds)-                   in First (V.fromList fs) : go rest-                Second _ ->-                  let (ss, rest) = goSeconds (d : ds)-                   in Second (V.fromList ss) : go rest-                Both _ _ ->-                  let (bs, rest) = goBoths (d : ds)-                   in Both (V.fromList (map fst bs)) (V.fromList (map snd bs)) : go rest-            goFirsts = \case-              (First a : ds) ->-                let (fs, rest) = goFirsts ds-                 in (a : fs, rest)-              rest -> ([], rest)-            goSeconds = \case-              (Second a : ds) ->-                let (fs, rest) = goSeconds ds-                 in (a : fs, rest)-              rest -> ([], rest)-            goBoths = \case-              (Both a b : ds) ->-                let (fs, rest) = goBoths ds-                 in ((a, b) : fs, rest)-              rest -> ([], rest)--    let squishGroupedDiff :: Vector (PolyDiff (Vector a) (Vector b)) -> Vector (PolyDiff (Vector a) (Vector b))-        squishGroupedDiff = V.fromList . go . V.toList-          where-            go = \case-              [] -> []-              [pd] -> [pd]-              (First a : First b : rest) -> go (First (a <> b) : rest)-              (Second a : Second b : rest) -> go (Second (a <> b) : rest)-              (Both a b : Both c d : rest) -> go (Both (a <> c) (b <> d) : rest)-              (d : rest) -> d : go rest-    prop "is the same thing as getVectorDiff, but rolled up and squished (rollup individual)" $ \(ls1, ls2) ->-      let v1 = V.fromList (ls1 :: String)-          v2 = V.fromList (ls2 :: String)-          grouped = getGroupedVectorDiff v1 v2-          individual = getVectorDiff v1 v2-       in squishGroupedDiff grouped `shouldBe` rollupUngroupedDiff individual--  describe "getStringDiff" $ do-    it "can output a large diff quickly enough if there is no diff" $-      let s = replicate 10000 'a'-       in length (getStringDiff s s) `shouldBe` 10000--    it "can output a large diff quickly enough if it's only diff" $-      length (getStringDiff (replicate 10000 'a') "b") `shouldBe` 10001--  describe "getTextDiff" $ do-    it "can output a large diff quickly enough if there is no diff" $-      let s = T.pack $ replicate 10000 'a'-       in length (getTextDiff s s) `shouldBe` 1--    it "can output a large diff quickly enough if it's only diff" $-      length (getTextDiff (T.pack (replicate 10000 'a')) "b") `shouldBe` 15--  describe "outputEqualityAssertionFailed" $ do-    it "can output a large diff quickly enough" $-      length (outputEqualityAssertionFailed (replicate 10000 'a') "b") `shouldBe` 3
− test/Test/Syd/ExpectationSpec.hs
@@ -1,13 +0,0 @@-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TypeFamilies #-}--module Test.Syd.ExpectationSpec (spec) where--import Test.Syd--spec :: Spec-spec = do-  expectFailing $ do-    it "marks this as passing, because it fails" False-    expectPassing $ it "marks this as passing" True
− test/Test/Syd/FootgunSpec.hs
@@ -1,50 +0,0 @@-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TypeFamilies #-}--module Test.Syd.FootgunSpec (spec) where--import Test.Syd--spec :: Spec-spec = do-  aroundTwice-  aroundDon't-  aroundAllTwice-  aroundAllDon't--aroundDon't :: Spec-aroundDon't = do-  -- -- This causes sydtest-test: thread blocked indefinitely in an MVar operation-  -- let don'tDo :: IO () -> IO ()-  --     don'tDo _ = pure ()-  -- around_ don'tDo $ do-  --   it "should pass" True-  pure ()--aroundTwice :: Spec-aroundTwice = do-  -- -- This causes sydtest-test: thread blocked indefinitely in an MVar operation-  -- let doTwice :: IO () -> IO ()-  --     doTwice f = f >> f-  -- around_ doTwice $ do-  --   it "should pass" True-  pure ()--aroundAllDon't :: Spec-aroundAllDon't = do-  -- -- This causes sydtest-test: thread blocked indefinitely in an MVar operation-  -- let don'tDo :: IO () -> IO ()-  --     don'tDo _ = pure ()-  -- aroundAll_ don'tDo $ do-  --   it "should pass" True-  pure ()--aroundAllTwice :: Spec-aroundAllTwice = do-  -- -- This 'just works' but takes longer.-  -- let doTwice :: IO () -> IO ()-  --     doTwice f = f >> f-  -- aroundAll_ doTwice $ do-  --   it "should pass" True-  pure ()
− test/Test/Syd/GoldenSpec.hs
@@ -1,31 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}--module Test.Syd.GoldenSpec (spec) where--import qualified Data.Text.Lazy as LT-import qualified Data.Text.Lazy.Builder as LTB-import Test.Syd-import Test.Syd.OptParse-import Text.Colour--spec :: Spec-spec = do-  describe "outputResultForest" $ do-    it "outputs the same as last time" $ do-      pureGoldenTextFile-        "test_resources/output.golden"-        ( LT.toStrict $-            LTB.toLazyText $-              renderResultReport-                defaultSettings-                With24BitColours-                ( Timed-                    { timedValue = [],-                      timedWorker = 0,-                      timedBegin = 0,-                      timedEnd = 0-                    }-                )-        )-  describe "defaultSettings" $ do-    it "is the same thing as last time" $ goldenPrettyShowInstance "test_resources/defaultSettings-show.golden" defaultSettings
− test/Test/Syd/OptParseSpec.hs
@@ -1,32 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}--module Test.Syd.OptParseSpec (spec) where--import Test.Syd-import Test.Syd.OptParse--spec :: Spec-spec = do-  describe "combineToSettings" $ do-    it "works for this default settinsg example" $-      do-        let flags = defaultFlags-            environment = defaultEnvironment-            mConf = Nothing-            settings = defaultSettings-        combineToSettings flags environment mConf `shouldReturn` settings--    it "works for this debug example" $ do-      let flags = defaultFlags {flagDebug = Just True}-          environment = defaultEnvironment-          mConf = Nothing-          settings =-            defaultSettings-              { settingThreads = Synchronous,-                settingRandomiseExecutionOrder = False,-                settingFailFast = True,-                settingReportProgress = ReportProgress,-                settingRetries = 0,-                settingDebug = True-              }-      combineToSettings flags environment mConf `shouldReturn` settings
− test/Test/Syd/PathSpec.hs
@@ -1,28 +0,0 @@-{-# LANGUAGE OverloadedStrings #-}--module Test.Syd.PathSpec (spec) where--import qualified Data.ByteString as SB-import Path-import Path.IO-import Test.Syd-import Test.Syd.Path--spec :: Spec-spec = do-  describe "tempDirSpec" $-    tempDirSpec "sydtest-path" $ do-      it "can write a file to a temporary dir and read it" $ \tdir -> do-        tempFile <- resolveFile tdir "tempfile.dat"-        SB.writeFile (fromAbsFile tempFile) "hello"-        contents <- SB.readFile (fromAbsFile tempFile)-        contents `shouldBe` "hello"-      describe "clean state" $-        doNotRandomiseExecutionOrder $ do-          it "can write a file to a temporary dir" $ \tdir -> do-            tempFile <- resolveFile tdir "tempfile.dat"-            SB.writeFile (fromAbsFile tempFile) "hello"-          it "cannot read a file that hasn't been written" $ \tdir -> do-            tempFile <- resolveFile tdir "tempfile.dat"-            contents <- forgivingAbsence $ SB.readFile (fromAbsFile tempFile)-            contents `shouldBe` Nothing
− test/Test/Syd/ScenarioSpec.hs
@@ -1,16 +0,0 @@-module Test.Syd.ScenarioSpec (spec) where--import Test.Syd--spec :: Spec-spec = do-  scenarioDir "test_resources/even" $ \rf ->-    it "contains an even number" $ do-      s <- readFile rf-      n <- readIO s-      (n :: Int) `shouldSatisfy` even-  scenarioDirRecur "test_resources/odd" $ \rf ->-    it "contains an odd number" $ do-      s <- readFile rf-      n <- readIO s-      (n :: Int) `shouldSatisfy` odd
− test/Test/Syd/SequentialSpec.hs
@@ -1,19 +0,0 @@-module Test.Syd.SequentialSpec (spec) where--import Control.Concurrent.MVar-import Control.Monad-import Control.Monad.IO.Class-import Test.Syd--spec :: Spec-spec = sequential . doNotRandomiseExecutionOrder $ do-  var <- liftIO $ newMVar ()-  let times = 10000-  let codeThatMustBeRunAlone = do-        replicateM_ times $ do-          gotIt <- tryTakeMVar var-          case gotIt of-            Nothing -> expectationFailure "Couldn't get the mvar, this means that the 'sequential' above is broken."-            Just () -> putMVar var ()-  it "does not happen at same time as the other test (A)" codeThatMustBeRunAlone-  it "does not happen at same time as the other test (B)" codeThatMustBeRunAlone
− test/Test/Syd/Specify/AllOuterSpec.hs
@@ -1,29 +0,0 @@-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE GADTs #-}-{-# LANGUAGE ScopedTypeVariables #-}--module Test.Syd.Specify.AllOuterSpec (spec) where--import Test.QuickCheck-import Test.Syd--spec :: Spec-spec = sequential $ do-  describe "boolean" $ do-    beforeAll (pure (1 :: Int)) $-      beforeAll (pure (2 :: Int)) $-        itWithAll "boolean function (all)" $-          \(HCons i (HCons j HNil) :: HList '[Int, Int]) () -> even i && odd j--  describe "IO action" $ do-    beforeAll (pure (1 :: Int)) $ do-      beforeAll (pure (2 :: Int)) $-        itWithAll "IO action function (all)" $-          \(HCons i (HCons j HNil) :: HList '[Int, Int]) () -> (i, j) `shouldBe` (2, 1)--  describe "property test" $ do-    beforeAll (pure (1 :: Int)) $ do-      beforeAll (pure (2 :: Int)) $-        itWithAll "property test function (all)" $-          \(HCons i (HCons j HNil) :: HList '[Int, Int]) () ->-            property $ \k -> i * j * k `shouldBe` 1 * 2 * k
− test/Test/Syd/SpecifySpec.hs
@@ -1,40 +0,0 @@-module Test.Syd.SpecifySpec (spec) where--import Test.QuickCheck-import Test.Syd--spec :: Spec-spec = sequential $ do-  describe "boolean" $ do-    it "boolean" True-    before (pure (2 :: Int)) $-      it "boolean function (inner)" $-        \i -> even i-    beforeAll (pure (2 :: Int)) $ do-      itWithOuter "boolean function (one outer)" $ \i -> even i-      itWithBoth "boolean function (both inner and outer)" $ \i () -> even i--  describe "IO action" $ do-    it "IO action" True-    before (pure (2 :: Int)) $-      it "IO action function (inner)" $-        \i -> i `shouldBe` 2-    beforeAll (pure (1 :: Int)) $ do-      itWithOuter "IO action function (one outer)" $ \i -> i `shouldBe` 1-      itWithBoth "IO action function (both inner and outer)" $ \i () -> i `shouldBe` 1--  describe "property test" $ do-    it "property test" $ property $ \j -> j `shouldBe` (j :: Int)-    before (pure (2 :: Int)) $-      it "property test function (inner)" $ \i ->-        property $ \j ->-          i * j `shouldBe` 2 * (j :: Int)-    beforeAll (pure (1 :: Int)) $ do-      itWithOuter "property test function (one outer)" $ \i -> property $ \j ->-        i * j `shouldBe` 1 * j-      itWithBoth "property test function (both inner and outer)" $ \i () -> property $ \j ->-        i * j `shouldBe` 1 * j--  describe "pending tests" $ do-    pending "this is a pending test"-    pendingWith "this is another pending test" "with this reason"
− test/Test/Syd/TimingSpec.hs
@@ -1,38 +0,0 @@-{-# LANGUAGE DataKinds #-}-{-# LANGUAGE NumericUnderscores #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TypeFamilies #-}--module Test.Syd.TimingSpec (spec) where--import Control.Concurrent-import System.IO.Unsafe-import Test.QuickCheck-import Test.Syd--spec :: Spec-spec = doNotRandomiseExecutionOrder $ do-  it "takes at least 10 milliseconds (pure)" $-    unsafePerformIO take10ms `seq`-      True-  it "takes at least 10 milliseconds (IO)" $ do-    threadDelay 10_000-  it "takes at least 10 milliseconds (property) " $-    property $ \() -> do-      threadDelay 100-  it "takes at least 100 milliseconds (pure)" $-    unsafePerformIO take100ms `seq`-      True-  it "takes at least 100 milliseconds (IO)" $ do-    threadDelay 100_000-  it "takes at least 100 milliseconds (property) " $-    property $ \() -> do-      threadDelay 10_000--{-# NOINLINE take10ms #-}-take10ms :: IO ()-take10ms = threadDelay 10_000--{-# NOINLINE take100ms #-}-take100ms :: IO ()-take100ms = threadDelay 100_000
− test_resources/defaultSettings-show.golden
@@ -1,20 +0,0 @@-Settings-  { settingSeed = FixedSeed 42-  , settingRandomiseExecutionOrder = True-  , settingThreads = ByCapabilities-  , settingMaxSuccess = 100-  , settingMaxSize = 100-  , settingMaxDiscard = 10-  , settingMaxShrinks = 100-  , settingGoldenStart = False-  , settingGoldenReset = False-  , settingColour = Nothing-  , settingFilters = []-  , settingFailFast = False-  , settingIterations = OneIteration-  , settingRetries = 3-  , settingFailOnFlaky = False-  , settingReportProgress = ReportNoProgress-  , settingDebug = False-  , settingProfile = False-  }
− test_resources/even/2
@@ -1,1 +0,0 @@-2
− test_resources/even/4
@@ -1,1 +0,0 @@-4
− test_resources/even/odd/3
@@ -1,1 +0,0 @@-3
− test_resources/odd/3
@@ -1,1 +0,0 @@-3
− test_resources/odd/deep/5
@@ -1,1 +0,0 @@-5
− test_resources/output-test.txt
@@ -1,930 +0,0 @@-[34mTests:[m--[32m✓ [m[32mPasses[m                                                                            [32m      0.00 ms[m-[33merror[m-  [31m✗ [m[31mPure error[m                                                                      [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mImpure error[m                                                                    [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-[33mundefined[m-  [31m✗ [m[31mPure undefined[m                                                                  [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mImpure undefined[m                                                                [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-[31m✗ [m[31mExit code[m                                                                         [32m      0.00 ms[m-  Retries: 3 (does not look flaky)-[33mexceptions[m-  [31m✗ [m[31mRecord construction error[m                                                       [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [33mRecord construction error[m-    [31m✗ [m[31mfails in IO, as the result[m                                                    [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-    [31m✗ [m[31mfails in IO, as the action[m                                                    [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-    [31m✗ [m[31mfails in pure code[m                                                            [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-  [31m✗ [m[31mRecord selection error[m                                                          [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [33mRecord selection error[m-    [31m✗ [m[31mfails in IO, as the result[m                                                    [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-    [31m✗ [m[31mfails in IO, as the action[m                                                    [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-    [31m✗ [m[31mfails in pure code[m                                                            [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-  [31m✗ [m[31mRecord update error[m                                                             [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [33mRecord update error[m-    [31m✗ [m[31mfails in IO, as the result[m                                                    [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-    [31m✗ [m[31mfails in IO, as the action[m                                                    [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-    [31m✗ [m[31mfails in pure code[m                                                            [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-  [31m✗ [m[31mPattern matching error[m                                                          [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [33mPattern matching error[m-    [31m✗ [m[31mfails in IO, as the result[m                                                    [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-    [31m✗ [m[31mfails in IO, as the action[m                                                    [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-    [31m✗ [m[31mfails in pure code[m                                                            [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-  [31m✗ [m[31mArithException[m                                                                  [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [33mPattern matching error[m-    [31m✗ [m[31mfails in IO, as the result[m                                                    [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-    [31m✗ [m[31mfails in IO, as the action[m                                                    [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-    [31m✗ [m[31mfails in pure code[m                                                            [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-  [31m✗ [m[31mNoMethodError[m                                                                   [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [33mPattern matching error[m-    [31m✗ [m[31mfails in IO, as the result[m                                                    [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-    [31m✗ [m[31mfails in IO, as the action[m                                                    [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-    [31m✗ [m[31mfails in pure code[m                                                            [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-[33mPrinting[m-  [32m✓ [m[32mprint[m                                                                           [32m      0.00 ms[m-  [32m✓ [m[32mputStrLn[m                                                                        [32m      0.00 ms[m-[33mProperty tests[m-  [33mpure[m-    [32m✓ [m[32mreversing a list twice is the same as reversing it once[m                       [32m      0.00 ms[m-      passed for all of [32m10[m inputs.-    [31m✗ [m[31mshould fail to show that sorting does nothing[m                                 [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-    [32m✓ [m[32mshould work with custom generators too[m                                        [32m      0.00 ms[m-      passed for all of [32m10[m inputs.-  [33mimpure[m-    [32m✓ [m[32mreversing a list twice is the same as reversing it once[m                       [32m      0.00 ms[m-      passed for all of [32m10[m inputs.-    [31m✗ [m[31mshould fail to show that sorting does nothing[m                                 [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-    [32m✓ [m[32mshould work with custom generators too[m                                        [32m      0.00 ms[m-      passed for all of [32m10[m inputs.-[33mLong running tests[m-  [32m✓ [m[32mtakes a while (1)[m                                                               [32m      0.00 ms[m-  [32m✓ [m[32mtakes a while (2)[m                                                               [32m      0.00 ms[m-  [32m✓ [m[32mtakes a while (3)[m                                                               [32m      0.00 ms[m-  [32m✓ [m[32mtakes a while (4)[m                                                               [32m      0.00 ms[m-  [32m✓ [m[32mtakes a while (5)[m                                                               [32m      0.00 ms[m-  [32m✓ [m[32mtakes a while (6)[m                                                               [32m      0.00 ms[m-  [32m✓ [m[32mtakes a while (7)[m                                                               [32m      0.00 ms[m-  [32m✓ [m[32mtakes a while (8)[m                                                               [32m      0.00 ms[m-  [32m✓ [m[32mtakes a while (9)[m                                                               [32m      0.00 ms[m-  [32m✓ [m[32mtakes a while (10)[m                                                              [32m      0.00 ms[m-[33mDiff[m-  [31m✗ [m[31mshows nice multi-line diffs[m                                                     [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mshows nice multi-line diffs[m                                                     [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-[33massertions[m-  [31m✗ [m[31mshouldBe[m                                                                        [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mshouldNotBe[m                                                                     [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mshouldSatisfy[m                                                                   [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mshouldNotSatisfy[m                                                                [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mshouldSatisfyNamed[m                                                              [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mshouldNotSatisfyNamed[m                                                           [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-[35mpending test[m-[33mGolden[m-  [31m✗ [m[31mdoes not fail the suite when an exception happens while reading[m                 [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mdoes not fail the suite when an exception happens while producing[m               [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-    [31mGolden output not found[m-  [31m✗ [m[31mdoes not fail the suite when an exception happens while writing[m                 [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-    [31mGolden output not found[m-  [31m✗ [m[31mdoes not fail the suite when an exception happens while checking for equality[m   [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [33moutputResultForest[m-    [32m✓ [m[32moutputs the same as last time[m                                                 [32m      0.00 ms[m-[33mAround[m-  [33mbefore[m-    [31m✗ [m[31mdoes not kill the test suite[m                                                  [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-  [33mbefore_[m-    [31m✗ [m[31mdoes not kill the test suite[m                                                  [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-  [33mafter[m-    [31m✗ [m[31mdoes not kill the test suite[m                                                  [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-  [33mafter_[m-    [31m✗ [m[31mdoes not kill the test suite[m                                                  [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-  [33maround[m-    [31m✗ [m[31mdoes not kill the test suite[m                                                  [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-  [33maround_[m-    [31m✗ [m[31mdoes not kill the test suite[m                                                  [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-  [33maroundWith[m-    [31m✗ [m[31mdoes not kill the test suite[m                                                  [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-  [33maroundWith'[m-    [31m✗ [m[31mdoes not kill the test suite[m                                                  [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-[31m✗ [m[31mexpectationFailure[m                                                                [32m      0.00 ms[m-  Retries: 3 (does not look flaky)-[33mString[m-  [31m✗ [m[31mcompares strings[m                                                                [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mcompares strings[m                                                                [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mcompares texts[m                                                                  [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mcompares texts[m                                                                  [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mcompares bytestrings[m                                                            [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-[33mContext[m-  [31m✗ [m[31mshows a nice context[m                                                            [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mshows a nice context multiple levels deep[m                                       [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mshows a context when an exception is thrown as well[m                             [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-[33mProperty[m-  [33m0 tests run[m-    [32m✓ [m[32mshows a red '0 tests' when no tests are run[m                                   [32m      0.00 ms[m-      passed for all of [31m0[m inputs.-  [33mgenerated values[m-    [31m✗ [m[31mshows many generated values too[m                                               [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-  [33mlabels[m-    [32m✓ [m[32mshows the labels in use on success[m                                            [32m      0.00 ms[m-      passed for all of [32m100[m inputs.-      Labels-        31.00% "length of input is 0"-        21.00% "length of input is 1"-        13.00% "length of input is 2"-         8.00% "length of input is 3"-         6.00% "length of input is 4"-        10.00% "length of input is 5"-         6.00% "length of input is 6"-         4.00% "length of input is 7"-         1.00% "length of input is 8"-    [32m✓ [m[32mshows the labels in use on success[m                                            [32m      0.00 ms[m-      passed for all of [32m100[m inputs.-      Labels-        31.00% "length of input is 0", "magnitude (digits) of sum of input is 0"-        13.00% "length of input is 1", "magnitude (digits) of sum of input is 0"-         8.00% "length of input is 1", "magnitude (digits) of sum of input is 1"-         5.00% "length of input is 2", "magnitude (digits) of sum of input is 0"-         7.00% "length of input is 2", "magnitude (digits) of sum of input is 1"-         1.00% "length of input is 2", "magnitude (digits) of sum of input is 2"-         4.00% "length of input is 3", "magnitude (digits) of sum of input is 0"-         3.00% "length of input is 3", "magnitude (digits) of sum of input is 1"-         1.00% "length of input is 3", "magnitude (digits) of sum of input is 2"-         5.00% "length of input is 4", "magnitude (digits) of sum of input is 0"-         1.00% "length of input is 4", "magnitude (digits) of sum of input is 2"-         7.00% "length of input is 5", "magnitude (digits) of sum of input is 0"-         3.00% "length of input is 5", "magnitude (digits) of sum of input is 2"-         5.00% "length of input is 6", "magnitude (digits) of sum of input is 0"-         1.00% "length of input is 6", "magnitude (digits) of sum of input is 2"-         2.00% "length of input is 7", "magnitude (digits) of sum of input is 0"-         2.00% "length of input is 7", "magnitude (digits) of sum of input is 1"-         1.00% "length of input is 8", "magnitude (digits) of sum of input is 0"-    [31m✗ [m[31mshows the labels in use on failure[m                                            [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-      Labels-        100.00% "length of input is 0", "magnitude (digits) of sum of input is 0"-  [33mclasses[m-    [32m✓ [m[32mshows the classes in use on success[m                                           [32m      0.00 ms[m-      passed for all of [32m100[m inputs.-      Classes-        100.00% non-trivial-    [32m✓ [m[32mshows the classes in use on success[m                                           [32m      0.00 ms[m-      passed for all of [32m100[m inputs.-      Classes-        31.00% empty-        48.00% non-trivial-        21.00% single element-    [31m✗ [m[31mshows the classes in use on failure[m                                           [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-      Classes-        100.00% empty-  [33mtables[m-    [32m✓ [m[32mshows the tables in use on success[m                                            [32m      0.00 ms[m-      passed for all of [32m100[m inputs.-       -      List elements-        10.14% -1-         6.45% -2-         7.37% -3-         7.83% -4-         5.07% -5-         4.61% -6-         5.99% -7-         1.38% -8-         0.46% -9-         7.37% 0-         6.91% 1-         6.45% 2-         6.45% 3-         6.45% 4-         4.61% 5-         4.61% 6-         4.61% 7-         1.84% 8-         1.38% 9-[33mShrinking[m-  [31m✗ [m[31mcan grab the mvar during shrinking[m                                              [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-[33mRetries[m-  [31m✗ [m[31mdoes not retry if the test is configured withoutRetries[m                         [32m      0.00 ms[m-  [31m✗ [m[31mRetries this five times[m                                                         [32m      0.00 ms[m-    Retries: 5 (does not look flaky)-[33mFlakiness[m-  [32m✓ [m[32mAllows flakiness on True eventhough there is none (should succeed)[m              [32m      0.00 ms[m-  [31m✗ [m[31mAllows flakiness on False eventhough there is none (should fail)[m                [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [32m✓ [m[32mallows this intentionally flaky test with the default number of retries[m         [32m      0.00 ms[m-    Retries: 2[31m !!! FLAKY !!![m-    [35mWe're on it![m-  [31m✗ [m[31mDoes not allow flakiness if flakiness is not allowed even if retries happen[m     [32m      0.00 ms[m-    Retries: 2[31m !!! FLAKY !!![m-  [31m✗ [m[31mAllows flakiness in this boolean five times (should fail with 5 retries)[m        [32m      0.00 ms[m-    Retries: 5 (does not look flaky)-  [32m✓ [m[32mallows this intentionally flaky test with up to four retries[m                    [32m      0.00 ms[m-    Retries: 2[31m !!! FLAKY !!![m-    [35mWe're on it![m-[33mxdescribe[m-  [33mtwo pending tests below here[m-    [35mone[m-    [35mtwo[m-  [33mfour pending tests below here[m-    [35mone[m-    [35mtwo[m-    [33mwat[m-      [35mthree[m-      [35mfour[m-[33mcallstack[m-  [31m✗ [m[31mit[m                                                                              [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mspecify[m                                                                         [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mprop[m                                                                            [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [33mdescribe[m-    [31m✗ [m[31mdescribe-it[m                                                                   [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-    [31m✗ [m[31mdescribe-specify[m                                                              [32m      0.00 ms[m-      Retries: 3 (does not look flaky)-[33mexpectations[m-  [32m✓ [m[32mconsidered passing[m                                                              [32m      0.00 ms[m-  [32m✓ [m[32mconsidered passing[m                                                              [32m      0.00 ms[m-  [31m✗ [m[31mconsidered failing[m                                                              [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mconsidered failing[m                                                              [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-[33mcombinators[m-  [31m✗ [m[31mshould fail[m                                                                     [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [32m✓ [m[32mshould pass[m                                                                     [32m      0.00 ms[m-    passed for all of [32m100[m inputs.-  [31m✗ [m[31mshould not crash (undefined value)[m                                              [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mshould not crash (undefined generator)[m                                          [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [31m✗ [m[31mshould be even[m                                                                  [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-  [32m✓ [m[32mshould be even[m                                                                  [32m      0.00 ms[m-  [31m✗ [m[31mshould be even[m                                                                  [32m      0.00 ms[m-    Retries: 3 (does not look flaky)-[33mrandomness[m-  [31m✗ [m[31malways outputs the same pseudorandomness[m                                        [32m      0.00 ms[m-    Retries: 3 (does not look flaky)---[34mFailures:[m--  [36m  output-test/Spec.hs:35[m-  [31m✗ [m[31m1 [m[31merror.Pure error[m-       Retries: 3 (does not look flaky)-       foobar-       CallStack (from HasCallStack):-         error, called at output-test/Spec.hs:35:28 in main:Spec-  -  [36m  output-test/Spec.hs:36[m-  [31m✗ [m[31m2 [m[31merror.Impure error[m-       Retries: 3 (does not look flaky)-       foobar-       CallStack (from HasCallStack):-         error, called at output-test/Spec.hs:36:24 in main:Spec-  -  [36m  output-test/Spec.hs:38[m-  [31m✗ [m[31m3 [m[31mundefined.Pure undefined[m-       Retries: 3 (does not look flaky)-       Prelude.undefined-       CallStack (from HasCallStack):-         error, called at libraries/base/GHC/Err.hs:74:14 in base:GHC.Err-         undefined, called at output-test/Spec.hs:38:31 in main:Spec-  -  [36m  output-test/Spec.hs:39[m-  [31m✗ [m[31m4 [m[31mundefined.Impure undefined[m-       Retries: 3 (does not look flaky)-       Prelude.undefined-       CallStack (from HasCallStack):-         error, called at libraries/base/GHC/Err.hs:74:14 in base:GHC.Err-         undefined, called at output-test/Spec.hs:39:28 in main:Spec-  -  [36m  output-test/Spec.hs:40[m-  [31m✗ [m[31m5 [m[31mExit code[m-       Retries: 3 (does not look flaky)-       ExitFailure 1-  -  [36m  output-test/Spec.hs:48[m-  [31m✗ [m[31m6 [m[31mexceptions.Record construction error[m-       Retries: 3 (does not look flaky)-       test-  -  [36m  output-test/Spec.hs:45[m-  [31m✗ [m[31m7 [m[31mexceptions.Record construction error.fails in IO, as the result[m-       Retries: 3 (does not look flaky)-       output-test/Spec.hs:49:57-64: Missing field in record construction field-  -  [36m  output-test/Spec.hs:46[m-  [31m✗ [m[31m8 [m[31mexceptions.Record construction error.fails in IO, as the action[m-       Retries: 3 (does not look flaky)-       output-test/Spec.hs:49:57-64: Missing field in record construction field-  -  [36m  output-test/Spec.hs:47[m-  [31m✗ [m[31m9 [m[31mexceptions.Record construction error.fails in pure code[m-       Retries: 3 (does not look flaky)-       output-test/Spec.hs:49:57-64: Missing field in record construction field-  -  [36m  output-test/Spec.hs:50[m-  [31m✗ [m[31m10 [m[31mexceptions.Record selection error[m-       Retries: 3 (does not look flaky)-       test-  -  [36m  output-test/Spec.hs:45[m-  [31m✗ [m[31m11 [m[31mexceptions.Record selection error.fails in IO, as the result[m-       Retries: 3 (does not look flaky)-       No match in record selector field-  -  [36m  output-test/Spec.hs:46[m-  [31m✗ [m[31m12 [m[31mexceptions.Record selection error.fails in IO, as the action[m-       Retries: 3 (does not look flaky)-       No match in record selector field-  -  [36m  output-test/Spec.hs:47[m-  [31m✗ [m[31m13 [m[31mexceptions.Record selection error.fails in pure code[m-       Retries: 3 (does not look flaky)-       No match in record selector field-  -  [36m  output-test/Spec.hs:52[m-  [31m✗ [m[31m14 [m[31mexceptions.Record update error[m-       Retries: 3 (does not look flaky)-       test-  -  [36m  output-test/Spec.hs:45[m-  [31m✗ [m[31m15 [m[31mexceptions.Record update error.fails in IO, as the result[m-       Retries: 3 (does not look flaky)-       output-test/Spec.hs:53:60-88: Non-exhaustive patterns in record update-  -  [36m  output-test/Spec.hs:46[m-  [31m✗ [m[31m16 [m[31mexceptions.Record update error.fails in IO, as the action[m-       Retries: 3 (does not look flaky)-       output-test/Spec.hs:53:60-88: Non-exhaustive patterns in record update-  -  [36m  output-test/Spec.hs:47[m-  [31m✗ [m[31m17 [m[31mexceptions.Record update error.fails in pure code[m-       Retries: 3 (does not look flaky)-       output-test/Spec.hs:53:60-88: Non-exhaustive patterns in record update-  -  [36m  output-test/Spec.hs:54[m-  [31m✗ [m[31m18 [m[31mexceptions.Pattern matching error[m-       Retries: 3 (does not look flaky)-       test-  -  [36m  output-test/Spec.hs:45[m-  [31m✗ [m[31m19 [m[31mexceptions.Pattern matching error.fails in IO, as the result[m-       Retries: 3 (does not look flaky)-       output-test/Spec.hs:55:50-64: Non-exhaustive patterns in Cons1 s-  -  [36m  output-test/Spec.hs:46[m-  [31m✗ [m[31m20 [m[31mexceptions.Pattern matching error.fails in IO, as the action[m-       Retries: 3 (does not look flaky)-       output-test/Spec.hs:55:50-64: Non-exhaustive patterns in Cons1 s-  -  [36m  output-test/Spec.hs:47[m-  [31m✗ [m[31m21 [m[31mexceptions.Pattern matching error.fails in pure code[m-       Retries: 3 (does not look flaky)-       output-test/Spec.hs:55:50-64: Non-exhaustive patterns in Cons1 s-  -  [36m  output-test/Spec.hs:56[m-  [31m✗ [m[31m22 [m[31mexceptions.ArithException[m-       Retries: 3 (does not look flaky)-       arithmetic underflow-  -  [36m  output-test/Spec.hs:45[m-  [31m✗ [m[31m23 [m[31mexceptions.Pattern matching error.fails in IO, as the result[m-       Retries: 3 (does not look flaky)-       divide by zero-  -  [36m  output-test/Spec.hs:46[m-  [31m✗ [m[31m24 [m[31mexceptions.Pattern matching error.fails in IO, as the action[m-       Retries: 3 (does not look flaky)-       divide by zero-  -  [36m  output-test/Spec.hs:47[m-  [31m✗ [m[31m25 [m[31mexceptions.Pattern matching error.fails in pure code[m-       Retries: 3 (does not look flaky)-       divide by zero-  -  [36m  output-test/Spec.hs:58[m-  [31m✗ [m[31m26 [m[31mexceptions.NoMethodError[m-       Retries: 3 (does not look flaky)-       test-  -  [36m  output-test/Spec.hs:45[m-  [31m✗ [m[31m27 [m[31mexceptions.Pattern matching error.fails in IO, as the result[m-       Retries: 3 (does not look flaky)-       output-test/Spec.hs:29:10-19: No instance nor default method for class operation toUnit-  -  [36m  output-test/Spec.hs:46[m-  [31m✗ [m[31m28 [m[31mexceptions.Pattern matching error.fails in IO, as the action[m-       Retries: 3 (does not look flaky)-       output-test/Spec.hs:29:10-19: No instance nor default method for class operation toUnit-  -  [36m  output-test/Spec.hs:47[m-  [31m✗ [m[31m29 [m[31mexceptions.Pattern matching error.fails in pure code[m-       Retries: 3 (does not look flaky)-       output-test/Spec.hs:29:10-19: No instance nor default method for class operation toUnit-  -  [36m  output-test/Spec.hs:72[m-  [31m✗ [m[31m30 [m[31mProperty tests.pure.should fail to show that sorting does nothing[m-       Retries: 3 (does not look flaky)-       Failed after 3 tests-       Generated: [33m[-5,3,11,-3,-13,0,19,-10,15,-13,1,-12,10,-18,-3,-2,6,-9,-6][m-  -  [36m  output-test/Spec.hs:80[m-  [31m✗ [m[31m31 [m[31mProperty tests.impure.should fail to show that sorting does nothing[m-       Retries: 3 (does not look flaky)-       Failed after 3 tests-       Generated: [33m[-5,3,11,-3,-13,0,19,-10,15,-13,1,-12,10,-18,-3,-2,6,-9,-6][m-       Expected these values to be equal:-       [34mActual:   [m-       [ -[31m1[m[31m8[m-       , [31m-[m1[31m3[m-       , -[31m1[m3-       , -1[31m2[m-       , [31m-1[m0-       , [31m-[m9-       , -[31m6[m-       , [31m-[m5-       , -3-       , [31m-[m[31m3[m-       , -2-       , 0-       , 1-       , 3-       , [31m6[m-       , [31m1[m[31m0[m-       , [31m11[m-       [31m, 1[m[31m5[m-       , [31m1[m[31m9[m-       ]-       [34mExpected: [m-       [ -[32m5[m[42m[m-       [42m[m[32m, [m[32m3[m-       , 1[32m1[m-       , -3-       , -1[32m3[m-       , 0-       , [32m1[m9-       , -[32m1[m[32m0[m-       , [32m1[m5-       , -[32m1[m3-       , [32m1[m-       , -[32m1[m2-       , [32m1[m0-       , [32m-[m1[32m8[m-       , [32m-[m3-       , [32m-[m[32m2[m-       , [32m6[m-       , [32m-[m[32m9[m-       , [32m-6[m-       ]-       [34mInline diff: [m-       [ -[32m5[m[42m[m-       [42m[m[32m, [m[31m1[m[32m3[m[31m8[m-       , [31m-[m1[32m1[m[31m3[m-       , -[31m1[m3-       , -1[32m3[m[31m2[m-       , [31m-1[m0-       , [31m-[m[32m1[m9-       , -[32m1[m[31m6[m[32m0[m-       , [32m1[m[31m-[m5-       , -[32m1[m3-       , [31m-[m[31m3[m[32m1[m-       , -[32m1[m2-       , [32m1[m0-       , [32m-[m1[32m8[m-       , [32m-[m3-       , [32m-[m[31m6[m[32m2[m-       , [31m1[m[31m0[m[32m6[m-       , [32m-[m[31m11[m-       [31m, 1[m[31m5[m[32m9[m-       , [31m1[m[32m-6[m[31m9[m-       ]-  -  [36m  output-test/Spec.hs:90[m-  [31m✗ [m[31m32 [m[31mDiff.shows nice multi-line diffs[m-       Retries: 3 (does not look flaky)-       Expected these values to be equal:-       [34mActual:   [m-       ( "foo"-       , [[41m [m[31m"qu[m[31mux[m[31m"[m [31m,[m[41m [m"quux" , "quux" , "quux" , "quux" , "quux" , "quux" ]-       , "ba[31mr[m"-       )-       [34mExpected: [m-       ( "[32mf[m[32mo[m[32mo[mfoo"-       , [ "quux" , "quux" , "quux" , "quux" , "quux" , "quux" ]-       , "ba[32mz[m"-       )-       [34mInline diff: [m-       ( "[32mf[m[32mo[m[32mo[mfoo"-       , [[41m [m[31m"qu[m[31mux[m[31m"[m [31m,[m[41m [m"quux" , "quux" , "quux" , "quux" , "quux" , "quux" ]-       , "ba[32mz[m[31mr[m"-       )-  -  [36m  output-test/Spec.hs:92[m-  [31m✗ [m[31m33 [m[31mDiff.shows nice multi-line diffs[m-       Retries: 3 (does not look flaky)-       Expected these values to be equal:-       [34mActual:   [m( "foo"[41m [m, [[31m][m , "ba[31mr[m"[41m [m)-       [34mExpected: [m-       ( "[32mf[m[32mo[m[32mo[mfoo"[42m[m-       [42m[m, [[32m "[m[32mquux" , [m[32m"quux" , "quux" [m[32m, "quux" , "quux[m[32m" , "quu[m[32mx"[m [32m][m-       [32m[m, "ba[32mz[m"[42m[m-       [42m[m)-       [34mInline diff: [m-       ( "[32mf[m[32mo[m[32mo[mfoo"[41m [m[42m[m-       [42m[m, [[31m][m[32m "[m[32mquux" , [m[32m"quux" , "quux" [m[32m, "quux" , "quux[m[32m" , "quu[m[32mx"[m [32m][m-       [32m[m, "ba[31mr[m[32mz[m"[41m [m[42m[m-       [42m[m)-  -  [36m  output-test/Spec.hs:95[m-  [31m✗ [m[31m34 [m[31massertions.shouldBe[m-       Retries: 3 (does not look flaky)-       Expected these values to be equal:-       [34mActual:   [m[31m3[m-       [34mExpected: [m[32m4[m-  -  [36m  output-test/Spec.hs:96[m-  [31m✗ [m[31m35 [m[31massertions.shouldNotBe[m-       Retries: 3 (does not look flaky)-       Did not expect equality of the values but both were:-       3-  -  [36m  output-test/Spec.hs:97[m-  [31m✗ [m[31m36 [m[31massertions.shouldSatisfy[m-       Retries: 3 (does not look flaky)-       Predicate failed, but should have succeeded, on this value:-       3-  -  [36m  output-test/Spec.hs:98[m-  [31m✗ [m[31m37 [m[31massertions.shouldNotSatisfy[m-       Retries: 3 (does not look flaky)-       Predicate succeeded, but should have failed, on this value:-       3-  -  [36m  output-test/Spec.hs:99[m-  [31m✗ [m[31m38 [m[31massertions.shouldSatisfyNamed[m-       Retries: 3 (does not look flaky)-       Predicate failed, but should have succeeded, on this value:-       3-       Predicate: even-  -  [36m  output-test/Spec.hs:100[m-  [31m✗ [m[31m39 [m[31massertions.shouldNotSatisfyNamed[m-       Retries: 3 (does not look flaky)-       Predicate succeeded, but should have failed, on this value:-       3-       Predicate: odd-  -  [36m  output-test/Spec.hs:103[m-  [31m✗ [m[31m40 [m[31mGolden.does not fail the suite when an exception happens while reading[m-       Retries: 3 (does not look flaky)-       ExitFailure 1-  -  [36m  output-test/Spec.hs:111[m-  [31m✗ [m[31m41 [m[31mGolden.does not fail the suite when an exception happens while producing[m-       Retries: 3 (does not look flaky)-       [31mGolden output not found[m-  -  [36m  output-test/Spec.hs:119[m-  [31m✗ [m[31m42 [m[31mGolden.does not fail the suite when an exception happens while writing[m-       Retries: 3 (does not look flaky)-       [31mGolden output not found[m-  -  [36m  output-test/Spec.hs:126[m-  [31m✗ [m[31m43 [m[31mGolden.does not fail the suite when an exception happens while checking for equality[m-       Retries: 3 (does not look flaky)-       divide by zero-  -  [36m  output-test/Spec.hs:149[m-  [31m✗ [m[31m44 [m[31mAround.before.does not kill the test suite[m-       Retries: 3 (does not look flaky)-       user error (test)-  -  [36m  output-test/Spec.hs:154[m-  [31m✗ [m[31m45 [m[31mAround.before_.does not kill the test suite[m-       Retries: 3 (does not look flaky)-       user error (test)-  -  [36m  output-test/Spec.hs:159[m-  [31m✗ [m[31m46 [m[31mAround.after.does not kill the test suite[m-       Retries: 3 (does not look flaky)-       user error (test)-  -  [36m  output-test/Spec.hs:164[m-  [31m✗ [m[31m47 [m[31mAround.after_.does not kill the test suite[m-       Retries: 3 (does not look flaky)-       user error (test)-  -  [36m  output-test/Spec.hs:169[m-  [31m✗ [m[31m48 [m[31mAround.around.does not kill the test suite[m-       Retries: 3 (does not look flaky)-       user error (test)-  -  [36m  output-test/Spec.hs:174[m-  [31m✗ [m[31m49 [m[31mAround.around_.does not kill the test suite[m-       Retries: 3 (does not look flaky)-       user error (test)-  -  [36m  output-test/Spec.hs:179[m-  [31m✗ [m[31m50 [m[31mAround.aroundWith.does not kill the test suite[m-       Retries: 3 (does not look flaky)-       user error (test)-  -  [36m  output-test/Spec.hs:184[m-  [31m✗ [m[31m51 [m[31mAround.aroundWith'.does not kill the test suite[m-       Retries: 3 (does not look flaky)-       user error (test)-  -  [36m  output-test/Spec.hs:187[m-  [31m✗ [m[31m52 [m[31mexpectationFailure[m-       Retries: 3 (does not look flaky)-       fails-  -  [36m  output-test/Spec.hs:190[m-  [31m✗ [m[31m53 [m[31mString.compares strings[m-       Retries: 3 (does not look flaky)-       Expected these values to be equal:-       [34mActual:   [m"f[31mo[mo\nba[31mr[m\tq[31muu[mx[41m [m"-       [34mExpected: [m"fo[32mq[m\nba[32mz[m\tq[32me[mx"-  -  [36m  output-test/Spec.hs:191[m-  [31m✗ [m[31m54 [m[31mString.compares strings[m-       Retries: 3 (does not look flaky)-       Expected these values to be equal:-       [34mActual:   [m-       f[31mo[mo-       ba[31mr[m	q[31muu[mx[41m [m-       [34mExpected: [m-       fo[32mq[m-       ba[32mz[m	q[32me[mx-       [34mInline diff: [m-       f[31mo[mo[32mq[m-       ba[31mr[m[32mz[m	q[31muu[m[32me[mx[41m [m-  -  [36m  output-test/Spec.hs:192[m-  [31m✗ [m[31m55 [m[31mString.compares texts[m-       Retries: 3 (does not look flaky)-       Expected these values to be equal:-       [34mActual:   [m"f[31mo[mo\nba[31mr[m\tq[31muu[mx[41m [m"-       [34mExpected: [m"fo[32mq[m\nba[32mz[m\tq[32me[mx"-  -  [36m  output-test/Spec.hs:193[m-  [31m✗ [m[31m56 [m[31mString.compares texts[m-       Retries: 3 (does not look flaky)-       Expected these values to be equal:-       [34mActual:   [m-       f[31mo[mo-       ba[31mr[m	q[31muu[mx[41m [m-       [34mExpected: [m-       fo[32mq[m-       ba[32mz[m	q[32me[mx-       [34mInline diff: [m-       f[31mo[mo[32mq[m-       ba[31mr[m[32mz[m	q[31muu[m[32me[mx[41m [m-  -  [36m  output-test/Spec.hs:194[m-  [31m✗ [m[31m57 [m[31mString.compares bytestrings[m-       Retries: 3 (does not look flaky)-       Expected these values to be equal:-       [34mActual:   [m"f[31mo[mo\nba[31mr[m\tq[31muu[mx[41m [m"-       [34mExpected: [m"fo[32mq[m\nba[32mz[m\tq[32me[mx"-  -  [36m  output-test/Spec.hs:197[m-  [31m✗ [m[31m58 [m[31mContext.shows a nice context[m-       Retries: 3 (does not look flaky)-       Expected these values to be equal:-       [34mActual:   [m[31mTr[m[31mu[me-       [34mExpected: [m[32mFals[me-       Context-  -  [36m  output-test/Spec.hs:198[m-  [31m✗ [m[31m59 [m[31mContext.shows a nice context multiple levels deep[m-       Retries: 3 (does not look flaky)-       Expected these values to be equal:-       [34mActual:   [m[31mTr[m[31mu[me-       [34mExpected: [m[32mFals[me-       Context3-       Context2-       Context1-  -  [36m  output-test/Spec.hs:203[m-  [31m✗ [m[31m60 [m[31mContext.shows a context when an exception is thrown as well[m-       Retries: 3 (does not look flaky)-       Prelude.undefined-       CallStack (from HasCallStack):-         error, called at libraries/base/GHC/Err.hs:74:14 in base:GHC.Err-         undefined, called at output-test/Spec.hs:204:26 in main:Spec-       context-  -  [36m  output-test/Spec.hs:210[m-  [31m✗ [m[31m61 [m[31mProperty.generated values.shows many generated values too[m-       Retries: 3 (does not look flaky)-       Failed after 1 tests-       Generated: [33m0[m-       Generated: [33m0[m-       Generated: [33m0[m-       Generated: [33m0[m-       Generated: [33m0[m-       Expected these values to be equal:-       [34mActual:   [m[31m0[m-       [34mExpected: [m[32m1[m-  -  [36m  output-test/Spec.hs:229[m-  [31m✗ [m[31m62 [m[31mProperty.labels.shows the labels in use on failure[m-       Retries: 3 (does not look flaky)-       Failed after 1 tests-       Generated: [33m[][m-       Labels: "length of input is 0", "magnitude (digits) of sum of input is 0"-       Expected these values to be equal:-       [34mActual:   [m[]-       [34mExpected: [m[[42m [m[32m0[m[42m [m]-  -  [36m  output-test/Spec.hs:246[m-  [31m✗ [m[31m63 [m[31mProperty.classes.shows the classes in use on failure[m-       Retries: 3 (does not look flaky)-       Failed after 1 tests-       Generated: [33m[][m-       Class: empty-       Expected these values to be equal:-       [34mActual:   [m[]-       [34mExpected: [m[[42m [m[32m0[m[42m [m]-  -  [36m  output-test/Spec.hs:269[m-  [31m✗ [m[31m64 [m[31mShrinking.can grab the mvar during shrinking[m-       Retries: 3 (does not look flaky)-       Failed after 21 tests-       Generated: [33m20[m-       Predicate failed, but should have succeeded, on this value:-       20-  -  [36m  output-test/Spec.hs:276[m-  [31m✗ [m[31m65 [m[31mRetries.does not retry if the test is configured withoutRetries[m-  -  [36m  output-test/Spec.hs:278[m-  [31m✗ [m[31m66 [m[31mRetries.Retries this five times[m-       Retries: 5 (does not look flaky)-  -  [36m  output-test/Spec.hs:283[m-  [31m✗ [m[31m67 [m[31mFlakiness.Allows flakiness on False eventhough there is none (should fail)[m-       Retries: 3 (does not look flaky)-  -  [36m  output-test/Spec.hs:292[m-  [31m✗ [m[31m68 [m[31mFlakiness.Does not allow flakiness if flakiness is not allowed even if retries happen[m-       Retries: 2[31m !!! FLAKY !!![m-       Expected these values to be equal:-       [34mActual:   [m[31m1[m-       [34mExpected: [m[32m2[m-  -  [36m  output-test/Spec.hs:296[m-  [31m✗ [m[31m69 [m[31mFlakiness.Allows flakiness in this boolean five times (should fail with 5 retries)[m-       Retries: 5 (does not look flaky)-  -  [36m  output-test/Spec.hs:316[m-  [31m✗ [m[31m70 [m[31mcallstack.it[m-       Retries: 3 (does not look flaky)-  -  [36m  output-test/Spec.hs:317[m-  [31m✗ [m[31m71 [m[31mcallstack.specify[m-       Retries: 3 (does not look flaky)-  -  [36m  Unknown location[m-  [31m✗ [m[31m72 [m[31mcallstack.prop[m-       Retries: 3 (does not look flaky)-       Failed after 1 tests-  -  [36m  output-test/Spec.hs:320[m-  [31m✗ [m[31m73 [m[31mcallstack.describe.describe-it[m-       Retries: 3 (does not look flaky)-  -  [36m  output-test/Spec.hs:321[m-  [31m✗ [m[31m74 [m[31mcallstack.describe.describe-specify[m-       Retries: 3 (does not look flaky)-  -  [36m  output-test/Spec.hs:328[m-  [31m✗ [m[31m75 [m[31mexpectations.considered failing[m-       Retries: 3 (does not look flaky)-  -  [36m  output-test/Spec.hs:329[m-  [31m✗ [m[31m76 [m[31mexpectations.considered failing[m-       Retries: 3 (does not look flaky)-  -  [36m  output-test/Spec.hs:336[m-  [31m✗ [m[31m77 [m[31mcombinators.should fail[m-       Retries: 3 (does not look flaky)-       Failed after 2 tests-       Generated: [33m-1[m-  -  [36m  output-test/Spec.hs:338[m-  [31m✗ [m[31m78 [m[31mcombinators.should not crash (undefined value)[m-       Retries: 3 (does not look flaky)-       Failed after 1 tests-       Generated: [33m0[m-       Prelude.undefined-       CallStack (from HasCallStack):-         error, called at libraries/base/GHC/Err.hs:74:14 in base:GHC.Err-         undefined, called at output-test/Spec.hs:338:80 in main:Spec-  -  [36m  output-test/Spec.hs:339[m-  [31m✗ [m[31m79 [m[31mcombinators.should not crash (undefined generator)[m-       Retries: 3 (does not look flaky)-       Failed after 1 tests-       Generated: [33mException thrown while showing test case:-  Prelude.undefined-  CallStack (from HasCallStack):-    error, called at libraries/base/GHC/Err.hs:74:14 in base:GHC.Err-    undefined, called at output-test/Spec.hs:339:74 in main:Spec-[m-       Prelude.undefined-       CallStack (from HasCallStack):-         error, called at libraries/base/GHC/Err.hs:74:14 in base:GHC.Err-         undefined, called at output-test/Spec.hs:339:74 in main:Spec-  -  [36m  output-test/Spec.hs:342[m-  [31m✗ [m[31m80 [m[31mcombinators.should be even[m-       Retries: 3 (does not look flaky)-  -  [36m  output-test/Spec.hs:342[m-  [31m✗ [m[31m81 [m[31mcombinators.should be even[m-       Retries: 3 (does not look flaky)-       Prelude.undefined-       CallStack (from HasCallStack):-         error, called at libraries/base/GHC/Err.hs:74:14 in base:GHC.Err-         undefined, called at output-test/Spec.hs:345:29 in main:Spec-  -  [36m  output-test/Spec.hs:348[m-  [31m✗ [m[31m82 [m[31mrandomness.always outputs the same pseudorandomness[m-       Retries: 3 (does not look flaky)-       Expected these values to be equal:-       [34mActual:   [m[31m4[m[31m9[m-       [34mExpected: [m[32m2[m-  --  Examples:                     [32m984[m-  Passed:                       [32m31[m-  Failed:                       [31m82[m-  Flaky:                        [31m3[m-  Pending:                      [35m7[m-  Sum of test runtimes:[33m         0.00 seconds[m-  Test suite took:     [33m         0.00 seconds[m-
− test_resources/output.golden
@@ -1,10 +0,0 @@-[34mTests:[m-----  Passed:                       [32m0[m-  Failed:                       [32m0[m-  Sum of test runtimes:[33m         0.00 seconds[m-  Test suite took:     [33m         0.00 seconds[m-