@@ -20,6 +20,9 @@ import Path.IO (listDir)
20
20
import System.FilePath (dropExtensions , takeFileName )
21
21
22
22
import Gauge.Main (Benchmark , bench , bgroup , defaultMain , env , nf )
23
+ #ifdef USE_TASTY
24
+ import Test.Tasty.Bench (bcompare )
25
+ #endif
23
26
24
27
import qualified Data.Text as T
25
28
import qualified Data.Text.Normalize as UTText
@@ -44,6 +47,14 @@ unicodeTransformTextFuncs =
44
47
, (" NFKC" , UTText. normalize UTText. NFKC )
45
48
]
46
49
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
+
47
58
dataDir :: Path Rel Dir
48
59
dataDir = $ (mkRelDir " benchmark" ) </> $ (mkRelDir " data" )
49
60
@@ -53,9 +64,25 @@ dataDir = $(mkRelDir "benchmark") </> $(mkRelDir "data")
53
64
dataSetSize :: Int
54
65
dataSetSize = 1000000
55
66
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
59
86
60
87
strInput :: FilePath -> (String , IO String )
61
88
strInput file = (dataName file,
@@ -73,10 +100,13 @@ main = do
73
100
[
74
101
#ifdef BENCH_ICU
75
102
bgroup " text-icu"
76
- $ makeBench <$> textICUFuncs <*> (map txtInput dataFiles)
103
+ $ makeBenchComp <$> textICUFuncs <*> (map txtInput dataFiles)
77
104
,
78
105
#endif
79
106
bgroup " unicode-transforms-text"
80
- $ makeBench <$> unicodeTransformTextFuncs
107
+ $ makeBenchRef <$> unicodeTransformTextFuncs
108
+ <*> (map txtInput dataFiles)
109
+ , bgroup " unicode-transforms-text (QC)"
110
+ $ makeBenchComp <$> unicodeTransformTextFuncsQuickCheck
81
111
<*> (map txtInput dataFiles)
82
112
]
0 commit comments