on master help sign in
Add test cases in Unicode.Stream module
75deef1Ranjeet Ranjan
test/Streamly/Test/Unicode/Stream.hs+66−14
@@ -2,19 +2,29 @@ module Streamly.Test.Unicode.Stream (main) where
2
2
3import Data.Char (ord, chr)
3import Data.Char (ord, chr)
4import Data.Word (Word8)
4import Data.Word (Word8)
5−import Test.Hspec.QuickCheck
6import Test.QuickCheck
5import Test.QuickCheck
6+ ( Property
7+ , forAll
8+ , Gen
9+ , listOf
10+ , arbitraryASCIIChar
7− (Property, forAll, Gen, listOf, arbitraryUnicodeChar, arbitrary)
11+ , arbitraryUnicodeChar
12+ , arbitrary
13+ , expectFailure
14+ , vectorOf
15+ , choose
16+ )
8import Test.QuickCheck.Monadic (run, monadicIO, assert)
17import Test.QuickCheck.Monadic (run, monadicIO, assert)
9
18
10−import Test.Hspec as H
11−
12import qualified Streamly.Data.Array.Storable.Foreign as A
19import qualified Streamly.Data.Array.Storable.Foreign as A
13import qualified Streamly.Internal.Memory.ArrayStream as AS
20import qualified Streamly.Internal.Memory.ArrayStream as AS
14import qualified Streamly.Prelude as S
21import qualified Streamly.Prelude as S
15import qualified Streamly.Unicode.Stream as SS
22import qualified Streamly.Unicode.Stream as SS
16import qualified Streamly.Internal.Unicode.Stream as IUS
23import qualified Streamly.Internal.Unicode.Stream as IUS
17import qualified Streamly.Internal.Unicode.Array.Char as IUA
24import qualified Streamly.Internal.Unicode.Array.Char as IUA
25+import qualified Test.Hspec as H
26+
27+import Test.Hspec.QuickCheck
18
28
19-- Coverage build takes too long with default number of tests
29-- Coverage build takes too long with default number of tests
20{-
30{-
@@ -59,6 +69,41 @@ propDecodeEncodeIdArrays =
59 (S.fold A.write wrds)
69 (S.fold A.write wrds)
60 assert (chrs == list)
70 assert (chrs == list)
61
71
72+unicodeTestData :: [Char]
73+unicodeTestData = "z\72150\83468;L$Wz| ?_i/J ."
74+
75+latin1TestData :: [Char]
76+latin1TestData = "z\214\f;L$Wz| ?_i/J ."
77+
78+propASCIIToLatin1 :: Property
79+propASCIIToLatin1 =
80+ forAll (choose (1, 1000)) $ \len ->
81+ forAll (vectorOf len arbitraryASCIIChar) $ \list ->
82+ monadicIO $ do
83+ let wrds = SS.decodeLatin1 $ SS.encodeLatin1 $ S.fromList list
84+ lst <- run $ S.toList wrds
85+ assert (list == lst)
86+
87+propUnicodeToLatin1 :: Property
88+propUnicodeToLatin1 =
89+ monadicIO $ do
90+ let wrds =
91+ SS.decodeLatin1
92+ $ SS.encodeLatin1
93+ $ S.fromList unicodeTestData
94+ lst <- run $ S.toList wrds
95+ assert (latin1TestData == lst)
96+
97+propUnicodeToLatin1' :: Property
98+propUnicodeToLatin1' =
99+ monadicIO $ do
100+ let wrds =
101+ SS.decodeLatin1
102+ $ SS.encodeLatin1'
103+ $ S.fromList unicodeTestData
104+ lst <- run $ S.toList wrds
105+ assert (latin1TestData == lst)
106+
62testLines :: Property
107testLines :: Property
63testLines =
108testLines =
64 forAll genUnicode $ \list ->
109 forAll genUnicode $ \list ->
@@ -112,21 +157,28 @@ testUnwords =
112 assert (xs == unwords (words list))
157 assert (xs == unwords (words list))
113
158
114main :: IO ()
159main :: IO ()
115−main = hspec
160+main = H.hspec
116 $ H.parallel
161 $ H.parallel
117 $ modifyMaxSuccess (const 1000)
162 $ modifyMaxSuccess (const 1000)
118 $ do
163 $ do
119− describe "UTF8 - Encoding / Decoding" $ do
164+ H.describe "UTF8 - Encoding / Decoding" $ do
120− prop "decodeUtf8' . encodeUtf8' == id" $ propDecodeEncodeId'
165+ prop "decodeUtf8' . encodeUtf8' == id" propDecodeEncodeId'
121− prop "decodeUtf8 . encodeUtf8' == id" $ propDecodeEncodeId
166+ prop "decodeUtf8 . encodeUtf8' == id" propDecodeEncodeId
122 prop "decodeUtf8Arrays . encodeUtf8' == id"
167 prop "decodeUtf8Arrays . encodeUtf8' == id"
123− $ propDecodeEncodeIdArrays
168+ propDecodeEncodeIdArrays
124− prop "Streamly.Data.String.lines == Prelude.lines" $ testLines
169+ prop "Streamly.Data.String.lines == Prelude.lines" testLines
125− prop "Arrays Streamly.Data.String.lines == Prelude.lines" $ testLinesArray
170+ prop "Arrays Streamly.Data.String.lines == Prelude.lines"
171+ testLinesArray
126− prop "Streamly.Data.String.words == Prelude.words" $ testWords
172+ prop "Streamly.Data.String.words == Prelude.words" testWords
127 prop
173 prop
128 "Streamly.Data.String.unlines . Streamly.Data.String.lines == unlines . lines"
174 "Streamly.Data.String.unlines . Streamly.Data.String.lines == unlines . lines"
129− $ testUnlines
175+ testUnlines
130 prop
176 prop
131 "Streamly.Data.String.unwords . Streamly.Data.String.words == unwords . words"
177 "Streamly.Data.String.unwords . Streamly.Data.String.words == unwords . words"
132− $ testUnwords
178+ testUnwords
179+
180+ H.describe "Latin1 - Encoding / Decoding" $ do
181+ prop "ASCII to Latin1" propASCIIToLatin1
182+ prop "Unicode to Latin1" propUnicodeToLatin1
183+ prop "Unicode to Latin1'" $ expectFailure propUnicodeToLatin1'
184+