packages feed

utf8-string-0.1: tests/Tests.hs

import Codec.Binary.UTF8.String

main = let v = encodeDecodeTest
       in putStrLn $ case v of
            [] -> "Ok. All passed."
            s  -> "Encode/decode failures: " ++ show s

--
-- test decode . encode == id for the class of chars we know that to be true of
--
encodeDecodeTest :: [Char]
encodeDecodeTest = filter (\x -> [x] /= decode (encode [x])) legal_codepoints ++
                   filter (\x -> ['\xfffd'] /= decode (encode [x])) illegal_codepoints
  where
    legal_codepoints = ['\0'..'\xd7ff'] ++ ['\xe000'..'\xfffd'] ++ ['\x10000'..'\x10ffff']
    illegal_codepoints = '\xffff' : '\xfffe' : ['\xd800'..'\xdfff']