From 7d2f55ce07c251a7a58b52d6f8bd1d280b345437 Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Mon, 3 Dec 2012 15:36:47 -0800 Subject: [PATCH] add a tool for generating regression tests before you start hacking on the implementation of an encoding Ignore-this: d1f08ea3737455b87aa9828b88763d1f darcs-hash:20121203233647-76d51-a289254906f15e21b147294bfa0d5b37efde2854 --- tests/GenerateRegressionTests.hs | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 tests/GenerateRegressionTests.hs diff --git a/tests/GenerateRegressionTests.hs b/tests/GenerateRegressionTests.hs new file mode 100644 index 0000000..80c35ba --- /dev/null +++ b/tests/GenerateRegressionTests.hs @@ -0,0 +1,40 @@ +{-# LANGUAGE NoMonomorphismRestriction #-} +import Control.Monad +import Data.ByteString (pack) +import Data.Encoding +import System.Random + +-- for example: +import Data.Encoding.ISO2022JP +main = generate ISO2022JP +-- end example + +randomRepeat f max = randomRIO (0, max) >>= flip replicateM f +randomString = randomRepeat randomIO +randomGoodString = randomRepeat . randomGoodChar +randomGoodChar f = let + good = filter f [minBound..maxBound] + n = length good + in do + i <- randomRIO (0, n-1) + return (good !! i) + +generate enc = do + let filename = show enc ++ ".regression" + randomGood = randomGoodString (encodeable enc) + shortMixedEnc <- replicateM 300 (randomString 10) + shortGoodEnc <- replicateM 30 (randomGood 10) + longMixedEnc <- replicateM 300 (randomString 1000) + longGoodEnc <- replicateM 3000 (randomGood 1000) + shortDec <- replicateM 300 (randomString 10) + longDec <- replicateM 3000 (randomString 1000) + writeFile filename (show + [ (s, encodeStrictByteStringExplicit enc s) + | ss <- [shortMixedEnc, shortGoodEnc, longMixedEnc, longGoodEnc] + , s <- ss + ] ++ "\n") + appendFile filename (show + [ (bs, decodeStrictByteStringExplicit enc (pack bs)) + | bss <- [shortDec, longDec] + , bs <- bss + ] ++ "\n")