1module Streamly.Test.Unicode.Stream (main) where
3import Data.Char (ord, chr)
4import Data.Word (Word8)
11 , arbitraryUnicodeChar
17import Test.QuickCheck.Monadic (run, monadicIO, assert)
19import qualified Streamly.Data.Array.Storable.Foreign as A
20import qualified Streamly.Internal.Memory.ArrayStream as AS
21import qualified Streamly.Prelude as S
22import qualified Streamly.Unicode.Stream as SS
23import qualified Streamly.Internal.Unicode.Stream as IUS
24import qualified Streamly.Internal.Unicode.Array.Char as IUA
25import qualified Test.Hspec as H
27import Test.Hspec.QuickCheck
29-- Coverage build takes too long with default number of tests
39-- Use quickcheck-unicode instead?
40genUnicode :: Gen String
41genUnicode = listOf arbitraryUnicodeChar
43genWord8 :: Gen [Word8]
44genWord8 = listOf arbitrary
46propDecodeEncodeId' :: Property
48 forAll genUnicode $ \list ->
50 let wrds = SS.encodeUtf8' $ S.fromList list
51 chrs <- S.toList $ SS.decodeUtf8' wrds
54-- XXX need to use invalid characters
55propDecodeEncodeId :: Property
57 forAll genUnicode $ \list ->
59 let wrds = SS.encodeUtf8 $ S.fromList list
60 chrs <- S.toList $ SS.decodeUtf8 wrds
63propDecodeEncodeIdArrays :: Property
64propDecodeEncodeIdArrays =
65 forAll genUnicode $ \list ->
67 let wrds = SS.encodeUtf8' $ S.fromList list
68 chrs <- S.toList $ IUS.decodeUtf8Arrays
72unicodeTestData :: [Char]
73unicodeTestData = "z\72150\83468;L$Wz| ?_i/J ."
75latin1TestData :: [Char]
76latin1TestData = "z\214\f;L$Wz| ?_i/J ."
78propASCIIToLatin1 :: Property
80 forAll (choose (1, 1000)) $ \len ->
81 forAll (vectorOf len arbitraryASCIIChar) $ \list ->
83 let wrds = SS.decodeLatin1 $ SS.encodeLatin1 $ S.fromList list
84 lst <- run $ S.toList wrds
87propUnicodeToLatin1 :: Property
93 $ S.fromList unicodeTestData
94 lst <- run $ S.toList wrds
95 assert (latin1TestData == lst)
97propUnicodeToLatin1' :: Property
103 $ S.fromList unicodeTestData
104 lst <- run $ S.toList wrds
105 assert (latin1TestData == lst)
109 forAll genUnicode $ \list ->
115 assert (xs == lines list)
117testLinesArray :: Property
119 forAll genWord8 $ \list ->
123 $ AS.splitOnSuffix 10
124 $ S.yield (A.fromList list)
125 assert (xs == map (map (fromIntegral . ord))
126 (lines (map (chr . fromIntegral) list)))
130 forAll genUnicode $ \list ->
136 assert (xs == words list)
138testUnlines :: Property
140 forAll genUnicode $ \list ->
146 assert (xs == unlines (lines list))
148testUnwords :: Property
150 forAll genUnicode $ \list ->
157 assert (xs == unwords (words list))
162 $ modifyMaxSuccess (const 1000)
164 H.describe "UTF8 - Encoding / Decoding" $ do
165 prop "decodeUtf8' . encodeUtf8' == id" propDecodeEncodeId'
166 prop "decodeUtf8 . encodeUtf8' == id" propDecodeEncodeId
167 prop "decodeUtf8Arrays . encodeUtf8' == id"
168 propDecodeEncodeIdArrays
169 prop "Streamly.Data.String.lines == Prelude.lines" testLines
170 prop "Arrays Streamly.Data.String.lines == Prelude.lines"
172 prop "Streamly.Data.String.words == Prelude.words" testWords
174 "Streamly.Data.String.unlines . Streamly.Data.String.lines == unlines . lines"
177 "Streamly.Data.String.unwords . Streamly.Data.String.words == unwords . words"
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'
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