{-# 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 "" "" ""