on master help sign in
Add a test for encodeUtf8 and decodeUtf8.
commit7b216d8a67ada921facf00b756227e99f5f3cb7f authorPranay Sashank <pranaysashank@gmail.com> dateTue 4 Jun 2019, 16:54 (7 years ago) parenta3196b3
2 files changed+70
streamly.cabal+29 test/String.hs+41
streamly.cabal+29
@@ -421,6 +421,35 @@ test-suite array-test
421421 transformers >= 0.4 && < 0.6
422422 default-language: Haskell2010
423423
424+test-suite string-test
425+ type: exitcode-stdio-1.0
426+ main-is: String.hs
427+ js-sources: jsbits/clock.js
428+ hs-source-dirs: test
429+ ghc-options: -fno-ignore-asserts -Wall -O0 -threaded -with-rtsopts=-N
430+ if flag(dev)
431+ cpp-options: -DDEVBUILD
432+ ghc-options: -Wmissed-specialisations
433+ -Wall-missed-specialisations
434+ if impl(ghc >= 8.0)
435+ ghc-options: -Wcompat
436+ -Wunrecognised-warning-flags
437+ -Widentities
438+ -Wincomplete-record-updates
439+ -Wincomplete-uni-patterns
440+ -Wredundant-constraints
441+ -Wnoncanonical-monad-instances
442+ -Wnoncanonical-monadfail-instances
443+ build-depends:
444+ streamly
445+ , base >= 4.8 && < 5
446+ , QuickCheck >= 2.10 && < 2.14
447+ , hspec >= 2.0 && < 3
448+ if impl(ghc < 8.0)
449+ build-depends:
450+ transformers >= 0.4 && < 0.6
451+ default-language: Haskell2010
452+
424453test-suite maxrate
425454 type: exitcode-stdio-1.0
426455 default-language: Haskell2010
test/String.hsnew file+41
@@ -0,0 +1,41 @@
1+{-# LANGUAGE CPP #-}
2+{-# LANGUAGE FlexibleContexts #-}
3+
4+module Main (main) where
5+
6+import Test.Hspec.QuickCheck
7+import Test.QuickCheck (Property, forAll, Gen, listOf, arbitraryUnicodeChar)
8+import Test.QuickCheck.Monadic (monadicIO, assert)
9+
10+import Test.Hspec as H
11+
12+import qualified Streamly.String as SS
13+import qualified Streamly.Prelude as S
14+
15+-- Coverage build takes too long with default number of tests
16+maxTestCount :: Int
17+#ifdef DEVBUILD
18+maxTestCount = 100
19+#else
20+maxTestCount = 10
21+#endif
22+
23+-- Use quickcheck-unicode instead?
24+genUnicode :: Gen String
25+genUnicode = listOf arbitraryUnicodeChar
26+
27+propDecodeEncodeId :: Property
28+propDecodeEncodeId =
29+ forAll genUnicode $ \list ->
30+ monadicIO $ do
31+ let wrds = SS.encodeUtf8 $ S.fromList list
32+ chrs <- S.toList $ SS.decodeUtf8 wrds
33+ assert (chrs == list)
34+
35+main :: IO ()
36+main = hspec
37+ $ H.parallel
38+ $ modifyMaxSuccess (const maxTestCount)
39+ $ do
40+ describe "UTF8 - Encoding / Decoding" $ do
41+ prop "decodeUtf8 . encodeUtf8 == id" $ propDecodeEncodeId