Bench.hs (2322B)
1 {-# LANGUAGE BangPatterns #-} 2 module Main where 3 4 import Criterion.Main 5 import qualified Data.Map as Map 6 7 import Eval 8 import FileEval 9 import Parser 10 import Research 11 12 -- | Build an environment from a library file. 13 loadLib :: FilePath -> IO Env 14 loadLib = evaluateFile 15 16 main :: IO () 17 main = do 18 !baseLib <- loadLib "lib/base.tri" 19 !listLib <- loadLib "lib/list.tri" 20 !contractsLib <- loadLib "lib/contracts.tri" 21 !intLib <- loadLib "lib/intensionalContracts.tri" 22 !guardedLib <- loadLib "lib/guardedBase.tri" 23 let !env = Map.unions [baseLib, listLib, contractsLib, intLib, guardedLib] 24 25 defaultMain 26 [ bgroup "contracts" 27 [ bench "raw head" $ whnf 28 (result . evalTricu env . parseTricu) 29 "head [1 2 3 4 5]" 30 , bench "safeHead (checked)" $ whnf 31 (result . evalTricu env . parseTricu) 32 "safeHead [1 2 3 4 5]" 33 , bench "raw div" $ whnf 34 (result . evalTricu env . parseTricu) 35 "div 10 2" 36 , bench "safeDiv (checked)" $ whnf 37 (result . evalTricu env . parseTricu) 38 "safeDiv 10 2" 39 , bench "safeDiv failure (div by zero)" $ whnf 40 (result . evalTricu env . parseTricu) 41 "safeDiv 10 0" 42 , bench "sortedMax on sorted list" $ whnf 43 (result . evalTricu env . parseTricu) 44 "sortedMax [1 2 3 4 5]" 45 , bench "safeHalf (even check)" $ whnf 46 (result . evalTricu env . parseTricu) 47 "safeHalf 8" 48 , bench "sortedList? success" $ whnf 49 (result . evalTricu env . parseTricu) 50 "withContract (sortedList? nat?) [1 2 3 4 5] (xs : sum xs) (msg : 0)" 51 , bench "sortedList? failure" $ whnf 52 (result . evalTricu env . parseTricu) 53 "withContract (sortedList? nat?) [5 1 3] (xs : sum xs) (msg : 0)" 54 , bench "listOf nat? success" $ whnf 55 (result . evalTricu env . parseTricu) 56 "withContract (listOf nat?) [1 2 3 4 5] (xs : sum xs) (msg : 0)" 57 , bench "fn2 apply add" $ whnf 58 (result . evalTricu env . parseTricu) 59 "(fn2 nat? nat? nat? add) 3 5" 60 , bench "fnContract apply identity" $ whnf 61 (result . evalTricu env . parseTricu) 62 "(fnContract nat? nat? (x : x)) 7" 63 ] 64 ]