-
Notifications
You must be signed in to change notification settings - Fork 41
/
Copy pathBenchUtils.hs
38 lines (32 loc) · 1.1 KB
/
BenchUtils.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
module BenchUtils where
import Criterion.Main
import Data.ByteString.Lazy (ByteString)
import Test.Tasty
import Test.Tasty.Golden
import Test.Tasty.HUnit
data BenchTest = BenchTest {
getTest :: TestTree
, getBench :: Benchmark
}
-- Gipeda can't deal with double-quotes in names of benchmarks.
-- We replace them with single-quotes.
replaceDoubleQuotes :: String -> String
replaceDoubleQuotes = map ifDoubleThenSingle
where ifDoubleThenSingle :: Char -> Char
ifDoubleThenSingle '"' = '\''
ifDoubleThenSingle c = c
benchTestCase :: String -> IO () -> BenchTest
benchTestCase name act = BenchTest {
getTest = testCase name act
, getBench = bench (replaceDoubleQuotes name) $ nfIO act
}
benchGoldenVsString :: String -> FilePath -> IO ByteString -> BenchTest
benchGoldenVsString name path act = BenchTest {
getTest = goldenVsString name path act
, getBench = bench (replaceDoubleQuotes name) $ nfIO act
}
benchTestGroup :: String -> [BenchTest] -> BenchTest
benchTestGroup name bts = BenchTest {
getTest = testGroup name $ map getTest bts
, getBench = bgroup name $ map getBench bts
}