{-# LANGUAGE OverloadedStrings #-} module Spec where import Test.Hspec import Test.Hspec.QuickCheck import Data.MonoTraversable import Data.Text (Text) import qualified Data.ByteString.Lazy as L import Data.Sequences import Prelude (Bool (..), ($), IO, min, abs, Eq (..), (&&), fromIntegral, Ord (..), String, mod, Int) main :: IO () main = hspec $ do describe "cnull" $ do it "empty list" $ onull [] `shouldBe` True it "non-empty list" $ onull [()] `shouldBe` False it "empty text" $ onull ("" :: Text) `shouldBe` True it "non-empty text" $ onull ("foo" :: Text) `shouldBe` False describe "clength" $ do prop "list" $ \i' -> let x = replicate i () :: [()] i = min 500 $ abs i' in olength x == i prop "text" $ \i' -> let x = replicate i 'a' :: Text i = min 500 $ abs i' in olength x == i prop "lazy bytestring" $ \i' -> let x = replicate i 6 :: L.ByteString i = min 500 $ abs i' in olength64 x == i describe "ccompareLength" $ do prop "list" $ \i' j -> let i = min 500 $ abs i' x = replicate i () :: [()] in ocompareLength x j == compare i j describe "groupAll" $ do it "list" $ groupAll ("abcabcabc" :: String) == ["aaa", "bbb", "ccc"] it "Text" $ groupAll ("abcabcabc" :: Text) == ["aaa", "bbb", "ccc"] describe "groupAllOn" $ do it "list" $ groupAllOn (`mod` 3) ([1..9] :: [Int]) == [[1, 4, 7], [2, 5, 8], [3, 6, 9]]