{-# 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, show) 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]] describe "breakWord" $ do let test x y z = it (show (x, y, z)) $ breakWord (x :: Text) `shouldBe` (y, z) test "hello world" "hello" "world" test "hello world" "hello" "world" test "hello\r\nworld" "hello" "world" test "hello there world" "hello" "there world" test "" "" "" test "hello \n\r\t" "hello" "" describe "breakLine" $ do let test x y z = it (show (x, y, z)) $ breakLine (x :: Text) `shouldBe` (y, z) test "hello world" "hello world" "" test "hello\r\n world" "hello" " world" test "hello\n world" "hello" " world" test "hello\r world" "hello\r world" "" test "hello\r\nworld" "hello" "world" test "hello\r\nthere\nworld" "hello" "there\nworld" test "hello\n\r\nworld" "hello" "\r\nworld" test "" "" ""