@@ -20,6 +20,9 @@ import Path.IO (listDir)
2020import System.FilePath (dropExtensions , takeFileName )
2121
2222import Gauge.Main (Benchmark , bench , bgroup , defaultMain , env , nf )
23+ #ifdef USE_TASTY
24+ import Gauge.Main (bcompare )
25+ #endif
2326
2427import qualified Data.Text as T
2528import qualified Data.Text.Normalize as UTText
@@ -44,6 +47,14 @@ unicodeTransformTextFuncs =
4447 , (" NFKC" , UTText. normalize UTText. NFKC )
4548 ]
4649
50+ unicodeTransformTextFuncsQuickCheck :: [(String , Text -> Text )]
51+ unicodeTransformTextFuncsQuickCheck =
52+ [ (" NFD" , UTText. normalizeQC UTText. NFD )
53+ , (" NFKD" , UTText. normalizeQC UTText. NFKD )
54+ , (" NFC" , UTText. normalizeQC UTText. NFC )
55+ , (" NFKC" , UTText. normalizeQC UTText. NFKC )
56+ ]
57+
4758dataDir :: Path Rel Dir
4859dataDir = $ (mkRelDir " benchmark" ) </> $ (mkRelDir " data" )
4960
@@ -53,9 +64,25 @@ dataDir = $(mkRelDir "benchmark") </> $(mkRelDir "data")
5364dataSetSize :: Int
5465dataSetSize = 1000000
5566
56- makeBench :: (NFData a , NFData b ) => (String , a -> b ) -> (String , IO a ) -> Benchmark
57- makeBench (implName, func) (dataName, setup) =
58- env setup (\ txt -> bench (implName ++ " /" ++ dataName) (nf func txt))
67+ makeBench :: (NFData a , NFData b ) => (String , a -> b ) -> String -> a -> Benchmark
68+ makeBench (implName, func) dataName =
69+ \ txt -> bench (makeTestName implName dataName) (nf func txt)
70+
71+ makeTestName :: String -> String -> String
72+ makeTestName implName dataName = implName ++ " /" ++ dataName
73+
74+ makeBenchRef :: (NFData a , NFData b ) => (String , a -> b ) -> (String , IO a ) -> Benchmark
75+ makeBenchRef impl (dataName, setup) = env setup (makeBench impl dataName)
76+
77+ makeBenchComp :: (NFData a , NFData b ) => (String , a -> b ) -> (String , IO a ) -> Benchmark
78+ #ifdef USE_TASTY
79+ makeBenchComp impl (dataName, setup) = env setup
80+ ( bcompare (" $NF == \" " <> (makeTestName (fst impl) dataName)
81+ <> " \" && $(NF-1) == \" unicode-transforms-text\" " )
82+ . makeBench impl dataName)
83+ #else
84+ makeBenchComp = makeBenchRef
85+ #endif
5986
6087strInput :: FilePath -> (String , IO String )
6188strInput file = (dataName file,
@@ -73,10 +100,13 @@ main = do
73100 [
74101#ifdef BENCH_ICU
75102 bgroup " text-icu"
76- $ makeBench <$> textICUFuncs <*> (map txtInput dataFiles)
103+ $ makeBenchComp <$> textICUFuncs <*> (map txtInput dataFiles)
77104 ,
78105#endif
79106 bgroup " unicode-transforms-text"
80- $ makeBench <$> unicodeTransformTextFuncs
107+ $ makeBenchRef <$> unicodeTransformTextFuncs
108+ <*> (map txtInput dataFiles)
109+ , bgroup " unicode-transforms-text (QC)"
110+ $ makeBenchComp <$> unicodeTransformTextFuncsQuickCheck
81111 <*> (map txtInput dataFiles)
82112 ]
0 commit comments