-- {-# LANGUAGE GHC2021 #-} module HCatSpec (spec) where import HCat.Internal (chunksOf, parseArgs) import Test.Hspec import Test.Hspec.QuickCheck (prop) import Test.QuickCheck (Positive (getPositive)) spec :: Spec spec = do describe "parseArgs" do it "returns the filename if given a single argument" do parseArgs ["foo"] `shouldBe` Right "foo" parseArgs [] `shouldBe` Left "No filename given!" parseArgs ["foo", "bar"] `shouldBe` Left "Only a single file is supported" describe "chunksOf" $ do prop "each chunk contains at most N items" $ \n xs -> let chunkLengths = length <$> chunksOf n (xs :: [Int]) in case chunkLengths of [] -> pure () ns -> maximum ns `shouldSatisfy` (<= n) prop "the sum of all lengths is equal to the length of the input" $ \n xs -> let chunkLengths = length <$> chunksOf (getPositive n) (xs :: [Int]) in sum chunkLengths `shouldBe` length xs