1{-# OPTIONS_GHC -Wno-deprecations #-}
3module Streamly.Test.Unicode.Stream (main) where
5import Data.Char (ord, chr)
6import Data.Word (Word8)
13 , arbitraryUnicodeChar
19import Test.QuickCheck.Monadic (run, monadicIO, assert)
21import qualified Streamly.Data.Array as A
22import qualified Streamly.Data.Stream as Stream
23import qualified Streamly.Internal.Data.Stream.Chunked as AS
24import qualified Streamly.Internal.Data.Stream as Stream
25import qualified Streamly.Unicode.Stream as SS
26import qualified Streamly.Internal.Unicode.Stream as IUS
27import qualified Streamly.Internal.Unicode.Array as IUA
28import qualified Test.Hspec as H
30import Test.Hspec.QuickCheck
32-- Coverage build takes too long with default number of tests
42-- Use quickcheck-unicode instead?
43genUnicode :: Gen String
44genUnicode = listOf arbitraryUnicodeChar
46genWord8 :: Gen [Word8]
47genWord8 = listOf arbitrary
49propDecodeEncodeId' :: Property
51 forAll genUnicode $ \list ->
53 let wrds = SS.encodeUtf8' $ Stream.fromList list
54 chrs <- run $ Stream.toList $ SS.decodeUtf8' wrds
57-- XXX need to use invalid characters
58propDecodeEncodeId :: Property
60 forAll genUnicode $ \list ->
62 let wrds = SS.encodeUtf8 $ Stream.fromList list
63 chrs <- Stream.toList $ SS.decodeUtf8 wrds
66propDecodeEncodeIdArrays :: Property
67propDecodeEncodeIdArrays =
68 forAll genUnicode $ \list ->
70 let wrds = Stream.chunksOf 8 $ SS.encodeUtf8' $ Stream.fromList list
71 chrs <- Stream.toList $ IUS.decodeUtf8Chunks wrds
74unicodeTestData :: [Char]
75unicodeTestData = "z\72150\83468;L$Wz| ?_i/J ."
77latin1TestData :: [Char]
78latin1TestData = "z\214\f;L$Wz| ?_i/J ."
80propASCIIToLatin1 :: Property
82 forAll (choose (1, 1000)) $ \len ->
83 forAll (vectorOf len arbitraryASCIIChar) $ \list ->
85 let wrds = SS.decodeLatin1
87 $ Stream.fromList list
88 lst <- run $ Stream.toList wrds
91propUnicodeToLatin1 :: Property
97 $ Stream.fromList unicodeTestData
98 lst <- run $ Stream.toList wrds
99 assert (latin1TestData == lst)
101propUnicodeToLatin1' :: Property
102propUnicodeToLatin1' =
107 $ Stream.fromList unicodeTestData
108 lst <- run $ Stream.toList wrds
109 assert (latin1TestData == lst)
113 forAll genUnicode $ \list ->
118 $ Stream.fromList list
119 assert (xs == lines list)
121testLinesArray :: Property
123 forAll genWord8 $ \list ->
127 $ AS.splitOnSuffix 10
128 $ Stream.fromPure (A.fromList list)
129 assert (xs == map (map (fromIntegral . ord))
130 (lines (map (chr . fromIntegral) list)))
134 forAll genUnicode $ \list ->
137 $ Stream.map A.toList
139 $ Stream.fromList list
140 assert (xs == words list)
142testUnlines :: Property
144 forAll genUnicode $ \list ->
149 $ Stream.fromList list
150 assert (xs == unlines (lines list))
152testUnwords :: Property
154 forAll genUnicode $ \list ->
160 $ Stream.fromList list
161 assert (xs == unwords (words list))
164moduleName = "Unicode.Stream"
169 $ modifyMaxSuccess (const 1000)
170 $ H.describe moduleName $ do
171 H.describe "UTF8 - Encoding / Decoding" $ do
172 prop "decodeUtf8' . encodeUtf8' == id" propDecodeEncodeId'
173 prop "decodeUtf8 . encodeUtf8' == id" propDecodeEncodeId
174 prop "decodeUtf8Arrays . encodeUtf8' == id"
175 propDecodeEncodeIdArrays
176 prop "Streamly.Data.String.lines == Prelude.lines" testLines
177 prop "Arrays Streamly.Data.String.lines == Prelude.lines"
179 prop "Streamly.Data.String.words == Prelude.words" testWords
181 "Streamly.Data.String.unlines . Streamly.Data.String.lines == unlines . lines"
184 "Streamly.Data.String.unwords . Streamly.Data.String.words == unwords . words"
187 H.describe "Latin1 - Encoding / Decoding" $ do
188 prop "ASCII to Latin1" propASCIIToLatin1
189 prop "Unicode to Latin1" propUnicodeToLatin1
190 prop "Unicode to Latin1'" $ expectFailure propUnicodeToLatin1'
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list