Add comment to ByteString module and add an exhaustive toString . fromString test
authorEric Mertens <emertens@galois.com>
Thu, 28 Feb 2008 21:05:22 +0000 (13:05 -0800)
committerEric Mertens <emertens@galois.com>
Thu, 28 Feb 2008 21:05:22 +0000 (13:05 -0800)
darcs-hash:20080228210522-b49f3-72cf63a873b40d22aac2460d1d9839d760b68a33.gz

Data/ByteString/UTF8.hs
tests/BenchBytestring.hs

index 2cb66c6..e674115 100644 (file)
@@ -1,3 +1,7 @@
+-- | This module provides fast, validated encoding and decoding functions
+--   between 'ByteString's and 'String's. It does not exactly match the
+--   output of the Codec.Binary.UTF8.String output for invalid encodings
+--   as the number of replacement characters is sometimes longer.
 module Data.ByteString.UTF8
   ( B.ByteString
   , decode
index 9cb9b60..5882e17 100644 (file)
@@ -3,7 +3,7 @@ import qualified Data.ByteString.Char8 as Char8
 import qualified Data.ByteString.UTF8 as UTF8
 import qualified Codec.Binary.UTF8.String as List
 
-main = main1
+main = main3
 
 main1 = do txt <- BS.readFile "test"
            print (UTF8.length txt)
@@ -11,3 +11,13 @@ main1 = do txt <- BS.readFile "test"
 main2 = do txt <- readFile "test"
            print (length $ List.decodeString txt)
 
+main3 = print encodeDecodeTest
+
+encodeDecodeTest :: (String,String)
+encodeDecodeTest = (filter (\x -> [x] /= f x) legal_codepoints,
+                   filter (\x -> ['\xfffd'] /= f x) illegal_codepoints)
+  where
+    legal_codepoints = ['\0'..'\xd7ff'] ++ ['\xe000'..'\xfffd'] ++ ['\x10000'..'\x10ffff']
+    illegal_codepoints = '\xffff' : '\xfffe' : ['\xd800'..'\xdfff']
+
+    f x = UTF8.toString (UTF8.fromString [x])