on 2255dac help sign in
streamly/test/String.hs
91 lines 2.5 kB history raw
1{-# LANGUAGE CPP #-}
2{-# LANGUAGE FlexibleContexts #-}
4module Main (main) where
6import Test.Hspec.QuickCheck
7import Test.QuickCheck (Property, forAll, Gen, listOf, arbitraryUnicodeChar)
8import Test.QuickCheck.Monadic (run, monadicIO, assert)
10import Test.Hspec as H
12import qualified Streamly.Mem.Array as A
13import qualified Streamly.Prelude as S
14import qualified Streamly.String as SS
16-- Coverage build takes too long with default number of tests
17maxTestCount :: Int
18#ifdef DEVBUILD
19maxTestCount = 100
20#else
21maxTestCount = 10
22#endif
24-- Use quickcheck-unicode instead?
25genUnicode :: Gen String
26genUnicode = listOf arbitraryUnicodeChar
28propDecodeEncodeId :: Property
29propDecodeEncodeId =
30 forAll genUnicode $ \list ->
31 monadicIO $ do
32 let wrds = SS.encodeUtf8 $ S.fromList list
33 chrs <- S.toList $ SS.decodeUtf8 wrds
34 assert (chrs == list)
36testLines :: Property
37testLines =
38 forAll genUnicode $ \list ->
39 monadicIO $ do
40 xs <- S.toList
41 $ S.map A.toList
42 $ SS.lines
43 $ S.fromList list
44 assert (xs == lines list)
46testWords :: Property
47testWords =
48 forAll genUnicode $ \list ->
49 monadicIO $ do
50 xs <- S.toList
51 $ S.map A.toList
52 $ SS.words
53 $ S.fromList list
54 assert (xs == words list)
56testUnlines :: Property
57testUnlines =
58 forAll genUnicode $ \list ->
59 monadicIO $ do
60 xs <- S.toList
61 $ SS.unlines
62 $ SS.lines
63 $ S.fromList list
64 assert (xs == unlines (lines list))
66testUnwords :: Property
67testUnwords =
68 forAll genUnicode $ \list ->
69 monadicIO $ do
70 xs <- run
71 $ S.toList
72 $ SS.unwords
73 $ SS.words
74 $ S.fromList list
75 assert (xs == unwords (words list))
77main :: IO ()
78main = hspec
79 $ H.parallel
80 $ modifyMaxSuccess (const 1000)
81 $ do
82 describe "UTF8 - Encoding / Decoding" $ do
83 prop "decodeUtf8 . encodeUtf8 == id" $ propDecodeEncodeId
84 prop "Streamly.String.lines == Prelude.lines" $ testLines
85 prop "Streamly.String.words == Prelude.words" $ testWords
86 prop
87 "Streamly.String.unlines . Streamly.String.lines == unlines . lines"
88 $ testUnlines
89 prop
90 "Streamly.String.unwords . Streamly.String.words == unwords . words"
91 $ testUnwords