packages feed

containers-benchmark-1.0: src/Benchmark/Set-like.inc.hs

create list = C.fromList list
benchs = [ ("insert", bench_insert)
         , ("member0", bench_member0)
         , ("member50", bench_member50)
         , ("member100", bench_member100)
         , ("delete", bench_delete)
         , ("union", bench_union)
         , ("difference", bench_difference)
         , ("intersection", bench_intersection)
         , ("fold-list", bench_foldlist)
#ifdef FOLD_SUM
         , ("fold-sum", bench_foldsum)
#endif
         ]

bench_insert (list, _, _, _) = go C.empty list
  where go !c [] = ()
        go !c (x:xs) = go (C.insert x c) xs

bench_member100 (list, c, _, _) = go c list
  where go c [] = ()
        go c (x:xs) = C.member x c `seq` go c xs

bench_member50 (list, _, _, c_odd) = go c_odd list
  where go c [] = ()
        go c (x:xs) = C.member x c `seq` go c xs

bench_member0 (list, _, _, c_odd) = go c_odd list
  where go c [] = ()
        go c [_] = ()
        go c (_:x:xs) = C.member x c `seq` go c xs

bench_delete (list, c, _, _) = go c list
  where go !c [] = ()
        go !c (x:xs) = go (C.delete x c) xs

bench_union (_, _, c_even, c_odd) = C.union c_even c_odd `seq` ()

bench_difference (_, c, c_even, _) = C.difference c c_even `seq` ()

bench_intersection (_, c, c_even, _) = C.intersection c c_even `seq` ()

bench_foldlist (_, c, _, _) = force $ C.fold (:) [] c
  where force list = length list `seq` ()

#ifdef FOLD_SUM
bench_foldsum (_, c, _, _) = C.fold (+) 0 c `seq` ()
#endif