-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathLCABench.hs
29 lines (21 loc) · 839 Bytes
/
LCABench.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
module LCABench where
import Data.List
import Criterion
import LCA ( buildLCA, queryLCA )
import Util ( evalR, randIntPairsR, randTree, sizedBench )
benchmark :: Benchmark
benchmark = bgroup "LCA"
[ -- Build the LCA structure for a tree of size n
bgroup "buildLCA" $ map benchBuildLCA sizes
-- n LCA queries on a tree of size n
, bgroup "queryLCA" $ map benchQueryLCA sizes
]
sizes :: [Int]
sizes = [100, 10000, 500000]
benchBuildLCA :: Int -> Benchmark
benchBuildLCA n = sizedBench n gen $ nf $ buildLCA (1, n) where
gen = evalR $ randTree n
benchQueryLCA :: Int -> Benchmark
benchQueryLCA n = sizedBench n gen $ \(lca, uvs) -> whnf (go lca) uvs where
gen = evalR $ (,) <$> (buildLCA (1, n) <$> randTree n) <*> randIntPairsR (1, n) n
go lca = foldl' (\_ (u, v) -> queryLCA u v lca `seq` ()) ()