packages feed

lazyset-0.1.0.0: Benchmark.hs

{-# LANGUAGE BangPatterns #-}

import Prelude hiding (lookup)
import System.Exit
import Data.Set.Lazy
import System.TimeIt

expensive n = let x = sum [1..4*10^5+n] in x-x+n


                     
main = do
    let evenList = filter even [1..]
    let r1 = member (2*10^6) $ fromList evenList
    timeIt $ putStrLn $ "finding one in a million." ++ show r1
    let set = fromList evenList
    let r2 = and $ map (\i-> member i set) (take 1000 [2*10^6..])
    timeIt $ putStrLn $ "finding a thousand in a million " ++ show r2
    let expensiveSet = fromList $ map expensive [1..]
    putStrLn "Going through a lazy set one by one. Watch the times to see when a new batch is loaded."
    sequence $ map (timeIt . print . (`lookup` expensiveSet) ) [1..20]
    let flatSet = growFromAscList 1.3 $ map expensive [1..]
    putStrLn "This time the set if flatter."
    sequence $ map (timeIt . print . (`lookup` flatSet) ) [1..20]    
    return ()